From: Michael S. Tsirkin <[email protected]> This fixes segfault reported by Kevin Wolf, and simplifies the code in msix_save.
Reported-by: Kevin Wolf <[email protected]> Signed-off-by: Michael S. Tsirkin <[email protected]> Signed-off-by: Avi Kivity <[email protected]> diff --git a/hw/msix.c b/hw/msix.c index 8636f69..0d40079 100644 --- a/hw/msix.c +++ b/hw/msix.c @@ -404,15 +404,16 @@ int msix_uninit(PCIDevice *dev) void msix_save(PCIDevice *dev, QEMUFile *f) { - unsigned nentries = (pci_get_word(dev->config + PCI_MSIX_FLAGS) & - PCI_MSIX_FLAGS_QSIZE) + 1; + unsigned n = dev->msix_entries_nr; if (!msix_supported) return; - qemu_put_buffer(f, dev->msix_table_page, nentries * MSIX_ENTRY_SIZE); - qemu_put_buffer(f, dev->msix_table_page + MSIX_PAGE_PENDING, - (nentries + 7) / 8); + if (!(dev->cap_present & QEMU_PCI_CAP_MSIX)) { + return; + } + 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); } /* Should be called after restoring the config space. */ -- To unsubscribe from this list: send the line "unsubscribe kvm-commits" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
