"Michael S. Tsirkin" <m...@redhat.com> writes: > On Fri, Jun 10, 2016 at 05:54:36PM +0800, Cao jin wrote: >> Internal flag msi_used is uncesessary, msi_uninit() could be called >> directly, msi_enabled() is enough to check device msi state. >> >> cc: Paolo Bonzini <pbonz...@redhat.com> >> cc: Dmitry Fleytman <dmi...@daynix.com> >> cc: Markus Armbruster <arm...@redhat.com> >> cc: Marcel Apfelbaum <mar...@redhat.com> >> cc: Michael S. Tsirkin <m...@redhat.com> >> >> Reviewed-by: Markus Armbruster <arm...@redhat.com> >> Signed-off-by: Cao jin <caoj.f...@cn.fujitsu.com> >> --- >> hw/scsi/vmw_pvscsi.c | 12 ++---------- >> 1 file changed, 2 insertions(+), 10 deletions(-) >> >> diff --git a/hw/scsi/vmw_pvscsi.c b/hw/scsi/vmw_pvscsi.c >> index ecd6077..363a7ed 100644 >> --- a/hw/scsi/vmw_pvscsi.c >> +++ b/hw/scsi/vmw_pvscsi.c >> @@ -121,8 +121,6 @@ typedef struct { >> uint8_t msg_ring_info_valid; /* Whether message ring >> initialized */ >> uint8_t use_msg; /* Whether to use message ring >> */ >> >> - uint8_t msi_used; /* Whether MSI support was installed successfully >> */ >> - >> PVSCSIRingInfo rings; /* Data transfer rings manager >> */ >> uint32_t resetting; /* Reset in progress >> */ >> >> @@ -362,7 +360,7 @@ pvscsi_update_irq_status(PVSCSIState *s) >> trace_pvscsi_update_irq_level(should_raise, s->reg_interrupt_enabled, >> s->reg_interrupt_status); >> >> - if (s->msi_used && msi_enabled(d)) { >> + if (msi_enabled(d)) { >> if (should_raise) { >> trace_pvscsi_update_irq_msi(); >> msi_notify(d, PVSCSI_VECTOR_COMPLETION); >> @@ -1066,9 +1064,6 @@ pvscsi_init_msi(PVSCSIState *s) >> PVSCSI_USE_64BIT, PVSCSI_PER_VECTOR_MASK, NULL); >> if (res < 0) { >> trace_pvscsi_init_msi_fail(res); >> - s->msi_used = false; >> - } else { >> - s->msi_used = true; >> } >> } >> >> @@ -1077,9 +1072,7 @@ pvscsi_cleanup_msi(PVSCSIState *s) >> { >> PCIDevice *d = PCI_DEVICE(s); >> >> - if (s->msi_used) { >> - msi_uninit(d); >> - } >> + msi_uninit(d); >> } >> >> static const MemoryRegionOps pvscsi_ops = { >> @@ -1222,7 +1215,6 @@ static const VMStateDescription vmstate_pvscsi = { >> VMSTATE_STRUCT_TEST(parent_obj, PVSCSIState, >> pvscsi_vmstate_test_pci_device, 0, >> vmstate_pci_device, PCIDevice), >> - VMSTATE_UINT8(msi_used, PVSCSIState), >> VMSTATE_UINT32(resetting, PVSCSIState), >> VMSTATE_UINT64(reg_interrupt_status, PVSCSIState), >> VMSTATE_UINT64(reg_interrupt_enabled, PVSCSIState), > > > This change will break cross-version migration, we can't make it.
Oww, sorry I missed this! The value shouldn't have been put into the migration stream, but now it's there, we need to keep it there. Suggest: diff --git a/hw/scsi/vmw_pvscsi.c b/hw/scsi/vmw_pvscsi.c index ecd6077..edd91ec 100644 --- a/hw/scsi/vmw_pvscsi.c +++ b/hw/scsi/vmw_pvscsi.c @@ -121,7 +121,7 @@ typedef struct { uint8_t msg_ring_info_valid; /* Whether message ring initialized */ uint8_t use_msg; /* Whether to use message ring */ - uint8_t msi_used; /* Whether MSI support was installed successfully */ + uint8_t msi_used; /* For migration compatibility */ PVSCSIRingInfo rings; /* Data transfer rings manager */ uint32_t resetting; /* Reset in progress */ @@ -362,7 +362,7 @@ pvscsi_update_irq_status(PVSCSIState *s) trace_pvscsi_update_irq_level(should_raise, s->reg_interrupt_enabled, s->reg_interrupt_status); - if (s->msi_used && msi_enabled(d)) { + if (msi_enabled(d)) { if (should_raise) { trace_pvscsi_update_irq_msi(); msi_notify(d, PVSCSI_VECTOR_COMPLETION); @@ -1077,9 +1077,7 @@ pvscsi_cleanup_msi(PVSCSIState *s) { PCIDevice *d = PCI_DEVICE(s); - if (s->msi_used) { - msi_uninit(d); - } + msi_uninit(d); } static const MemoryRegionOps pvscsi_ops = {