Skip to content

Commit

Permalink
pci: Use bus master address space for delivering MSI/MSI-X messages
Browse files Browse the repository at this point in the history
The spec says (and real HW confirms this) that, if the bus master bit
is 0, the device will not generate any PCI accesses. MSI and MSI-X
messages fall among these, so we should use the corresponding address
space to deliver them. This will prevent delivery if bus master support
is disabled.

Cc: qemu-stable@nongnu.org
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
(cherry picked from commit cc943c3)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
  • Loading branch information
jan-kiszka authored and mdroth committed Dec 24, 2014
1 parent 2151206 commit 7fb768e
Show file tree
Hide file tree
Showing 2 changed files with 2 additions and 2 deletions.
2 changes: 1 addition & 1 deletion hw/pci/msi.c
Expand Up @@ -291,7 +291,7 @@ void msi_notify(PCIDevice *dev, unsigned int vector)
"notify vector 0x%x"
" address: 0x%"PRIx64" data: 0x%"PRIx32"\n",
vector, msg.address, msg.data);
stl_le_phys(&address_space_memory, msg.address, msg.data);
stl_le_phys(&dev->bus_master_as, msg.address, msg.data);
}

/* Normally called by pci_default_write_config(). */
Expand Down
2 changes: 1 addition & 1 deletion hw/pci/msix.c
Expand Up @@ -439,7 +439,7 @@ void msix_notify(PCIDevice *dev, unsigned vector)

msg = msix_get_message(dev, vector);

stl_le_phys(&address_space_memory, msg.address, msg.data);
stl_le_phys(&dev->bus_master_as, msg.address, msg.data);
}

void msix_reset(PCIDevice *dev)
Expand Down

0 comments on commit 7fb768e

Please sign in to comment.