fix segfault in msix_save
This fixes segfault reported by Kevin Wolf, and simplifies the code in msix_save. Reported-by: Kevin Wolf <kwolf@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
391354f126
commit
9a3e12c8a4
12
hw/msix.c
12
hw/msix.c
|
@ -284,11 +284,13 @@ int msix_uninit(PCIDevice *dev)
|
||||||
|
|
||||||
void msix_save(PCIDevice *dev, QEMUFile *f)
|
void msix_save(PCIDevice *dev, QEMUFile *f)
|
||||||
{
|
{
|
||||||
unsigned nentries = (pci_get_word(dev->config + PCI_MSIX_FLAGS) &
|
unsigned n = dev->msix_entries_nr;
|
||||||
PCI_MSIX_FLAGS_QSIZE) + 1;
|
|
||||||
qemu_put_buffer(f, dev->msix_table_page, nentries * MSIX_ENTRY_SIZE);
|
if (!dev->cap_present & QEMU_PCI_CAP_MSIX)
|
||||||
qemu_put_buffer(f, dev->msix_table_page + MSIX_PAGE_PENDING,
|
return;
|
||||||
(nentries + 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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Should be called after restoring the config space. */
|
/* Should be called after restoring the config space. */
|
||||||
|
|
Loading…
Reference in a new issue