Small fixes for rc2.
-----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQExBAABCAAbBQJYPFEQFBxwYm9uemluaUByZWRoYXQuY29tAAoJEL/70l94x66D yF4H/3oBEgzDF9HbnSklknGhkPnOvYnNVKtJbHgk4SnZ1FlPSJLohuz15mXxbr+R 0MzWyQliHiBsAX8sMdvVVHm6YVy9JSABnsefhPUgM++1gT3+EhFsToZ9cWsAYOp7 Q4/hMc66ne0N5SWKjTlCzHfBxw3sPDvOoNYSVYjJYeASTSDQuyyVxRRWMYBFSUnD p4m7dJCz+my8YXz6diTY8csxFRGmt49EtxtQBU1wBrFc+m8qn4UKaTXoqfcDEBe6 RceS9OAWrddv1Ds4OM/ZgD0BikYehYYnq9THvjWuqhTjHdKKYNeZAodqFJicEZmF aAIZmhTASQo4fHuImtUja5ggYtU= =Ht4d -----END PGP SIGNATURE----- Merge remote-tracking branch 'bonzini/tags/for-upstream' into staging Small fixes for rc2. # gpg: Signature made Mon 28 Nov 2016 03:45:20 PM GMT # gpg: using RSA key 0xBFFBD25F78C7AE83 # gpg: Good signature from "Paolo Bonzini <bonzini@gnu.org>" # gpg: aka "Paolo Bonzini <pbonzini@redhat.com>" # Primary key fingerprint: 46F5 9FBD 57D6 12E7 BFD4 E2F7 7E15 100C CD36 69B1 # Subkey fingerprint: F133 3857 4B66 2389 866C 7682 BFFB D25F 78C7 AE83 * bonzini/tags/for-upstream: rules.mak: Use -r instead of -Wl, -r to fix building when PIE is default migration/pcspk: Turn migration of pcspk off for 2.7 and older migration/pcspk: Add a property to state if pcspk is migrated pci-assign: sync MSI/MSI-X cap and table with PCIDevice megasas: clean up and fix request completion/cancellation megasas: do not call pci_dma_unmap after having freed the frame once Message-id: 1480372837-109736-1-git-send-email-pbonzini@redhat.com Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
		
						commit
						c5b95f6be7
					
				| 
						 | 
				
			
			@ -54,6 +54,7 @@ typedef struct {
 | 
			
		|||
    unsigned int play_pos;
 | 
			
		||||
    uint8_t data_on;
 | 
			
		||||
    uint8_t dummy_refresh_clock;
 | 
			
		||||
    bool migrate;
 | 
			
		||||
} PCSpkState;
 | 
			
		||||
 | 
			
		||||
static const char *s_spk = "pcspk";
 | 
			
		||||
| 
						 | 
				
			
			@ -187,11 +188,19 @@ static void pcspk_realizefn(DeviceState *dev, Error **errp)
 | 
			
		|||
    pcspk_state = s;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static bool migrate_needed(void *opaque)
 | 
			
		||||
{
 | 
			
		||||
    PCSpkState *s = opaque;
 | 
			
		||||
 | 
			
		||||
    return s->migrate;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const VMStateDescription vmstate_spk = {
 | 
			
		||||
    .name = "pcspk",
 | 
			
		||||
    .version_id = 1,
 | 
			
		||||
    .minimum_version_id = 1,
 | 
			
		||||
    .minimum_version_id_old = 1,
 | 
			
		||||
    .needed = migrate_needed,
 | 
			
		||||
    .fields      = (VMStateField[]) {
 | 
			
		||||
        VMSTATE_UINT8(data_on, PCSpkState),
 | 
			
		||||
        VMSTATE_UINT8(dummy_refresh_clock, PCSpkState),
 | 
			
		||||
| 
						 | 
				
			
			@ -201,6 +210,7 @@ static const VMStateDescription vmstate_spk = {
 | 
			
		|||
 | 
			
		||||
static Property pcspk_properties[] = {
 | 
			
		||||
    DEFINE_PROP_UINT32("iobase", PCSpkState, iobase,  -1),
 | 
			
		||||
    DEFINE_PROP_BOOL("migrate", PCSpkState, migrate,  true),
 | 
			
		||||
    DEFINE_PROP_END_OF_LIST(),
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1251,6 +1251,7 @@ static int assigned_device_pci_cap_init(PCIDevice *pci_dev, Error **errp)
 | 
			
		|||
            error_propagate(errp, local_err);
 | 
			
		||||
            return -ENOTSUP;
 | 
			
		||||
        }
 | 
			
		||||
        dev->dev.cap_present |= QEMU_PCI_CAP_MSI;
 | 
			
		||||
        dev->cap.available |= ASSIGNED_DEVICE_CAP_MSI;
 | 
			
		||||
        /* Only 32-bit/no-mask currently supported */
 | 
			
		||||
        ret = pci_add_capability2(pci_dev, PCI_CAP_ID_MSI, pos, 10,
 | 
			
		||||
| 
						 | 
				
			
			@ -1285,6 +1286,7 @@ static int assigned_device_pci_cap_init(PCIDevice *pci_dev, Error **errp)
 | 
			
		|||
            error_propagate(errp, local_err);
 | 
			
		||||
            return -ENOTSUP;
 | 
			
		||||
        }
 | 
			
		||||
        dev->dev.cap_present |= QEMU_PCI_CAP_MSIX;
 | 
			
		||||
        dev->cap.available |= ASSIGNED_DEVICE_CAP_MSIX;
 | 
			
		||||
        ret = pci_add_capability2(pci_dev, PCI_CAP_ID_MSIX, pos, 12,
 | 
			
		||||
                                  &local_err);
 | 
			
		||||
| 
						 | 
				
			
			@ -1648,6 +1650,7 @@ static void assigned_dev_register_msix_mmio(AssignedDevice *dev, Error **errp)
 | 
			
		|||
        dev->msix_table = NULL;
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    dev->dev.msix_table = (uint8_t *)dev->msix_table;
 | 
			
		||||
 | 
			
		||||
    assigned_dev_msix_reset(dev);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1665,6 +1668,7 @@ static void assigned_dev_unregister_msix_mmio(AssignedDevice *dev)
 | 
			
		|||
        error_report("error unmapping msix_table! %s", strerror(errno));
 | 
			
		||||
    }
 | 
			
		||||
    dev->msix_table = NULL;
 | 
			
		||||
    dev->dev.msix_table = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const VMStateDescription vmstate_assigned_device = {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -300,12 +300,6 @@ unmap:
 | 
			
		|||
    return iov_count - i;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void megasas_unmap_sgl(MegasasCmd *cmd)
 | 
			
		||||
{
 | 
			
		||||
    qemu_sglist_destroy(&cmd->qsg);
 | 
			
		||||
    cmd->iov_offset = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * passthrough sense and io sense are at the same offset
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -461,9 +455,12 @@ static void megasas_unmap_frame(MegasasState *s, MegasasCmd *cmd)
 | 
			
		|||
{
 | 
			
		||||
    PCIDevice *p = PCI_DEVICE(s);
 | 
			
		||||
 | 
			
		||||
    pci_dma_unmap(p, cmd->frame, cmd->pa_size, 0, 0);
 | 
			
		||||
    if (cmd->pa_size) {
 | 
			
		||||
        pci_dma_unmap(p, cmd->frame, cmd->pa_size, 0, 0);
 | 
			
		||||
    }
 | 
			
		||||
    cmd->frame = NULL;
 | 
			
		||||
    cmd->pa = 0;
 | 
			
		||||
    cmd->pa_size = 0;
 | 
			
		||||
    clear_bit(cmd->index, s->frame_map);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -577,6 +574,20 @@ static void megasas_complete_frame(MegasasState *s, uint64_t context)
 | 
			
		|||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void megasas_complete_command(MegasasCmd *cmd)
 | 
			
		||||
{
 | 
			
		||||
    qemu_sglist_destroy(&cmd->qsg);
 | 
			
		||||
    cmd->iov_size = 0;
 | 
			
		||||
    cmd->iov_offset = 0;
 | 
			
		||||
 | 
			
		||||
    cmd->req->hba_private = NULL;
 | 
			
		||||
    scsi_req_unref(cmd->req);
 | 
			
		||||
    cmd->req = NULL;
 | 
			
		||||
 | 
			
		||||
    megasas_unmap_frame(cmd->state, cmd);
 | 
			
		||||
    megasas_complete_frame(cmd->state, cmd->context);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void megasas_reset_frames(MegasasState *s)
 | 
			
		||||
{
 | 
			
		||||
    int i;
 | 
			
		||||
| 
						 | 
				
			
			@ -593,9 +604,9 @@ static void megasas_reset_frames(MegasasState *s)
 | 
			
		|||
 | 
			
		||||
static void megasas_abort_command(MegasasCmd *cmd)
 | 
			
		||||
{
 | 
			
		||||
    if (cmd->req) {
 | 
			
		||||
    /* Never abort internal commands.  */
 | 
			
		||||
    if (cmd->req != NULL) {
 | 
			
		||||
        scsi_req_cancel(cmd->req);
 | 
			
		||||
        cmd->req = NULL;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -686,9 +697,6 @@ static void megasas_finish_dcmd(MegasasCmd *cmd, uint32_t iov_size)
 | 
			
		|||
{
 | 
			
		||||
    trace_megasas_finish_dcmd(cmd->index, iov_size);
 | 
			
		||||
 | 
			
		||||
    if (cmd->frame->header.sge_count) {
 | 
			
		||||
        qemu_sglist_destroy(&cmd->qsg);
 | 
			
		||||
    }
 | 
			
		||||
    if (iov_size > cmd->iov_size) {
 | 
			
		||||
        if (megasas_frame_is_ieee_sgl(cmd)) {
 | 
			
		||||
            cmd->frame->dcmd.sgl.sg_skinny->len = cpu_to_le32(iov_size);
 | 
			
		||||
| 
						 | 
				
			
			@ -698,7 +706,6 @@ static void megasas_finish_dcmd(MegasasCmd *cmd, uint32_t iov_size)
 | 
			
		|||
            cmd->frame->dcmd.sgl.sg32->len = cpu_to_le32(iov_size);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    cmd->iov_size = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int megasas_ctrl_get_info(MegasasState *s, MegasasCmd *cmd)
 | 
			
		||||
| 
						 | 
				
			
			@ -1586,7 +1593,6 @@ static int megasas_finish_internal_dcmd(MegasasCmd *cmd,
 | 
			
		|||
    int lun = req->lun;
 | 
			
		||||
 | 
			
		||||
    opcode = le32_to_cpu(cmd->frame->dcmd.opcode);
 | 
			
		||||
    scsi_req_unref(req);
 | 
			
		||||
    trace_megasas_dcmd_internal_finish(cmd->index, opcode, lun);
 | 
			
		||||
    switch (opcode) {
 | 
			
		||||
    case MFI_DCMD_PD_GET_INFO:
 | 
			
		||||
| 
						 | 
				
			
			@ -1857,7 +1863,11 @@ static void megasas_command_complete(SCSIRequest *req, uint32_t status,
 | 
			
		|||
 | 
			
		||||
    trace_megasas_command_complete(cmd->index, status, resid);
 | 
			
		||||
 | 
			
		||||
    if (cmd->req != req) {
 | 
			
		||||
    if (req->io_canceled) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (cmd->req == NULL) {
 | 
			
		||||
        /*
 | 
			
		||||
         * Internal command complete
 | 
			
		||||
         */
 | 
			
		||||
| 
						 | 
				
			
			@ -1876,25 +1886,21 @@ static void megasas_command_complete(SCSIRequest *req, uint32_t status,
 | 
			
		|||
            megasas_copy_sense(cmd);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        megasas_unmap_sgl(cmd);
 | 
			
		||||
        cmd->frame->header.scsi_status = req->status;
 | 
			
		||||
        scsi_req_unref(cmd->req);
 | 
			
		||||
        cmd->req = NULL;
 | 
			
		||||
    }
 | 
			
		||||
    cmd->frame->header.cmd_status = cmd_status;
 | 
			
		||||
    megasas_unmap_frame(cmd->state, cmd);
 | 
			
		||||
    megasas_complete_frame(cmd->state, cmd->context);
 | 
			
		||||
    megasas_complete_command(cmd);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void megasas_command_cancel(SCSIRequest *req)
 | 
			
		||||
static void megasas_command_cancelled(SCSIRequest *req)
 | 
			
		||||
{
 | 
			
		||||
    MegasasCmd *cmd = req->hba_private;
 | 
			
		||||
 | 
			
		||||
    if (cmd) {
 | 
			
		||||
        megasas_abort_command(cmd);
 | 
			
		||||
    } else {
 | 
			
		||||
        scsi_req_unref(req);
 | 
			
		||||
    if (!cmd) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    cmd->frame->header.cmd_status = MFI_STAT_SCSI_IO_FAILED;
 | 
			
		||||
    megasas_complete_command(cmd);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int megasas_handle_abort(MegasasState *s, MegasasCmd *cmd)
 | 
			
		||||
| 
						 | 
				
			
			@ -2313,7 +2319,7 @@ static const struct SCSIBusInfo megasas_scsi_info = {
 | 
			
		|||
    .transfer_data = megasas_xfer_complete,
 | 
			
		||||
    .get_sg_list = megasas_get_sg_list,
 | 
			
		||||
    .complete = megasas_command_complete,
 | 
			
		||||
    .cancel = megasas_command_cancel,
 | 
			
		||||
    .cancel = megasas_command_cancelled,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static void megasas_scsi_realize(PCIDevice *dev, Error **errp)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -395,6 +395,11 @@ bool e820_get_entry(int, uint32_t, uint64_t *, uint64_t *);
 | 
			
		|||
        .driver   = "Opteron_G3" "-" TYPE_X86_CPU,\
 | 
			
		||||
        .property = "stepping",\
 | 
			
		||||
        .value    = "1",\
 | 
			
		||||
    },\
 | 
			
		||||
    {\
 | 
			
		||||
        .driver   = "isa-pcspk",\
 | 
			
		||||
        .property = "migrate",\
 | 
			
		||||
        .value    = "off",\
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
#define PC_COMPAT_2_6 \
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -93,7 +93,7 @@ module-common.o: CFLAGS += $(DSO_OBJ_CFLAGS)
 | 
			
		|||
	$(if $(findstring /,$@),$(call quiet-command,cp $@ $(subst /,-,$@),"CP","$(subst /,-,$@)"))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
LD_REL := $(CC) -nostdlib -Wl,-r $(LD_REL_FLAGS)
 | 
			
		||||
LD_REL := $(CC) -nostdlib -r $(LD_REL_FLAGS)
 | 
			
		||||
 | 
			
		||||
%.mo:
 | 
			
		||||
	$(call quiet-command,$(LD_REL) -o $@ $^,"LD","$(TARGET_DIR)$@")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue