ioemu: fix offset of MSI-X memory-mapped table.
authorKeir Fraser <keir.fraser@citrix.com>
Fri, 5 Sep 2008 10:18:20 +0000 (11:18 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Fri, 5 Sep 2008 10:18:20 +0000 (11:18 +0100)
Current code does not set dev->msix->table_off variable.
The offset of MSI-X memory mapped table is treated as 0.
The wrong region is unmapped from guest physical memory space.
As a result, guest device driver can't access memory mapped resource.

Signed-off-by: Yuji Shimada <shimada-yxb@necst.nec.co.jp>
tools/ioemu/hw/pt-msi.c

index 98e485e0760338b2a334f068c9ef7ca3cc053a17..9ac06149150e83b8d4c0a276270fb847e886208f 100644 (file)
@@ -313,7 +313,7 @@ int pt_msix_init(struct pt_dev *dev, int pos)
 
     table_off = pci_read_long(pd, pos + PCI_MSIX_TABLE);
     bar_index = dev->msix->bar_index = table_off & PCI_MSIX_BIR;
-    table_off &= table_off & ~PCI_MSIX_BIR;
+    table_off = dev->msix->table_off = table_off & ~PCI_MSIX_BIR;
     dev->msix->table_base = dev->pci_dev->base_addr[bar_index];
     PT_LOG("get MSI-X table bar base %llx\n",
            (unsigned long long)dev->msix->table_base);