aboutsummaryrefslogtreecommitdiff
path: root/hw/pci.h
diff options
context:
space:
mode:
authorAvi Kivity <avi@redhat.com>2012-10-03 17:42:58 +0200
committerAvi Kivity <avi@redhat.com>2012-10-22 14:50:08 +0200
commit1c380f9460522f32c8dd2577b2a53d518ec91c6d (patch)
tree49dbad84ac83432d9f727c41647cdcd81373d3ba /hw/pci.h
parent817dcc5368988b023c5e1d3f1444fd370c77c6a9 (diff)
pci: honor PCI_COMMAND_MASTERmemory/dma
Currently we ignore PCI_COMMAND_MASTER completely: DMA succeeds even when the bit is clear. Honor PCI_COMMAND_MASTER by inserting a memory region into the device's bus master address space, and tying its enable status to PCI_COMMAND_MASTER. Tested using setpci -s 03 COMMAND=3 while a ping was running on a NIC in slot 3. The kernel (Linux) detected the stall and recovered after the command setpci -s 03 COMMAND=7 was issued. Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'hw/pci.h')
-rw-r--r--hw/pci.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/hw/pci.h b/hw/pci.h
index f9207ca06..1f902f5b5 100644
--- a/hw/pci.h
+++ b/hw/pci.h
@@ -212,6 +212,7 @@ struct PCIDevice {
char name[64];
PCIIORegion io_regions[PCI_NUM_REGIONS];
AddressSpace bus_master_as;
+ MemoryRegion bus_master_enable_region;
DMAContext *dma;
/* do not access the following fields */