From patchwork Wed Dec 2 12:04:06 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [08/41] msix: Store sizes that we send/receive Date: Wed, 02 Dec 2009 02:04:06 -0000 From: Juan Quintela X-Patchwork-Id: 40013 Message-Id: <272af00c108aba556d78c7a11503324246ecc20e.1259754427.git.quintela@redhat.com> To: qemu-devel@nongnu.org Cc: mst@redhat.com VMstate send buffers in bytes ammonts, not bits or MSIX_ENTRY_SIZE multiples Signed-off-by: Juan Quintela --- hw/msix.c | 13 +++++++++---- hw/pci.h | 2 ++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/hw/msix.c b/hw/msix.c index 8dca9fd..62865d0 100644 --- a/hw/msix.c +++ b/hw/msix.c @@ -294,9 +294,11 @@ int msix_uninit(PCIDevice *dev) void msix_save(PCIDevice *dev, QEMUFile *f) { unsigned n = dev->msix_entries_nr; + dev->msix_entries_size = n * MSIX_ENTRY_SIZE; + dev->msix_pending_size = (n + 7) / 8; - qemu_put_buffer(f, dev->msix_table_page, n * MSIX_ENTRY_SIZE); - qemu_put_buffer(f, dev->msix_table_page + MSIX_PAGE_PENDING, (n + 7) / 8); + qemu_put_buffer(f, dev->msix_table_page, dev->msix_entries_size); + qemu_put_buffer(f, dev->msix_table_page + MSIX_PAGE_PENDING, dev->msix_pending_size); } /* Should be called after restoring the config space. */ @@ -304,9 +306,12 @@ void msix_load(PCIDevice *dev, QEMUFile *f) { unsigned n = dev->msix_entries_nr; + dev->msix_entries_size = n * MSIX_ENTRY_SIZE; + dev->msix_pending_size = (n + 7) / 8; + msix_free_irq_entries(dev); - qemu_get_buffer(f, dev->msix_table_page, n * MSIX_ENTRY_SIZE); - qemu_get_buffer(f, dev->msix_table_page + MSIX_PAGE_PENDING, (n + 7) / 8); + qemu_get_buffer(f, dev->msix_table_page, dev->msix_entries_size); + qemu_get_buffer(f, dev->msix_table_page + MSIX_PAGE_PENDING, dev->msix_pending_size); } /* Does device support MSI-X? */ diff --git a/hw/pci.h b/hw/pci.h index 0baf69b..c67cc70 100644 --- a/hw/pci.h +++ b/hw/pci.h @@ -241,6 +241,8 @@ struct PCIDevice { uint32_t msix_bar_size; /* Version id needed for VMState */ int32_t version_id; + int32_t msix_entries_size; + int32_t msix_pending_size; }; PCIDevice *pci_register_device(PCIBus *bus, const char *name,