aboutsummaryrefslogtreecommitdiff
path: root/hw/msix.c
diff options
context:
space:
mode:
authorMarcelo Tosatti <mtosatti@redhat.com>2012-08-31 12:43:17 -0300
committerMarcelo Tosatti <mtosatti@redhat.com>2012-08-31 12:43:17 -0300
commit1cc707b10567b0ebf2670e39f4a3c01da664fd6a (patch)
tree16cdc115c50e38a550915ca1ca2a014abce4d569 /hw/msix.c
parent352183cdb01761ba813576b3bc559947cbccbae8 (diff)
parent01fd4b8e9e28b92f124556a5889167820c52635f (diff)
Merge branch 'upstream-merge'qemu-kvm-1.2.0-rc2
* upstream-merge: (47 commits) w32: Fix broken build Update version for 1.2.0-rc2 scsi-disk: Fix typo (uint32 -> uint32_t) msix: make [un]use vectors on reset/load optional kvm: get/set PV EOI MSR linux-headers: update to 3.6-rc3 target-i386: disable pv eoi to fix migration across QEMU versions reset PMBA and PMREGMISC PIIX4 registers. qemu-ga: Fix null pointer passed to unlink in failure branch memory: Fix copy&paste mistake in memory_region_iorange_write ivshmem: remove redundant ioeventfd configuration hw/arm_gic.c: Define .class_size in arm_gic_info TypeInfo tcg/mips: fix broken CONFIG_TCG_PASS_AREG0 code Update OpenBIOS PPC image target-ppc: fix altivec instructions audio/winwave: previous audio buffer should be flushed iscsi: Set number of blocks to 0 for blank CDROM devices scsi: more fixes to properties for passthrough devices esp: support 24-bit DMA megasas: Add 'hba_serial' property ... Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Diffstat (limited to 'hw/msix.c')
-rw-r--r--hw/msix.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/hw/msix.c b/hw/msix.c
index aea340b7c..d81209413 100644
--- a/hw/msix.c
+++ b/hw/msix.c
@@ -336,6 +336,15 @@ static void msix_free_irq_entries(PCIDevice *dev)
}
}
+static void msix_clear_all_vectors(PCIDevice *dev)
+{
+ int vector;
+
+ for (vector = 0; vector < dev->msix_entries_nr; ++vector) {
+ msix_clr_pending(dev, vector);
+ }
+}
+
/* Clean up resources for the device. */
void msix_uninit(PCIDevice *dev, MemoryRegion *table_bar, MemoryRegion *pba_bar)
{
@@ -390,7 +399,7 @@ void msix_load(PCIDevice *dev, QEMUFile *f)
return;
}
- msix_free_irq_entries(dev);
+ msix_clear_all_vectors(dev);
qemu_get_buffer(f, dev->msix_table, n * PCI_MSIX_ENTRY_SIZE);
qemu_get_buffer(f, dev->msix_pba, (n + 7) / 8);
msix_update_function_masked(dev);
@@ -436,7 +445,7 @@ void msix_reset(PCIDevice *dev)
if (!msix_present(dev)) {
return;
}
- msix_free_irq_entries(dev);
+ msix_clear_all_vectors(dev);
dev->config[dev->msix_cap + MSIX_CONTROL_OFFSET] &=
~dev->wmask[dev->msix_cap + MSIX_CONTROL_OFFSET];
memset(dev->msix_table, 0, dev->msix_entries_nr * PCI_MSIX_ENTRY_SIZE);