diff mbox

qemu: fix pci_enable_capabilities to set the CAP feature in pci::status

Message ID 20090420152007.11870.76689.stgit@dev.haskins.net (mailing list archive)
State New, archived
Headers show

Commit Message

Gregory Haskins April 20, 2009, 3:20 p.m. UTC
(Applies to kvm-userspace.git:a1075de527f309850df278484f2ef4127827c6f4)

The PCI spec requires bit 4 of the config-space STATUS register to be set
in order to indicate that the capabilities pointer and capabilities area are
valid.  We have a pci_enable_capabilities() routine to fill out the
config-space metadata, but we leave the status bit cleared. It is not
apparent if this was intentionally omitted as part of the related
device-assignment support, or simply an oversight.  This patch completes
the function by also setting the status bit appropriately.

Signed-off-by: Gregory Haskins <ghaskins@novell.com>
CC: Sheng Yang <sheng@linux.intel.com>
---

 qemu/hw/pci.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)


--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Avi Kivity April 21, 2009, 2:53 p.m. UTC | #1
Gregory Haskins wrote:
> (Applies to kvm-userspace.git:a1075de527f309850df278484f2ef4127827c6f4)
>
> The PCI spec requires bit 4 of the config-space STATUS register to be set
> in order to indicate that the capabilities pointer and capabilities area are
> valid.  We have a pci_enable_capabilities() routine to fill out the
> config-space metadata, but we leave the status bit cleared. It is not
> apparent if this was intentionally omitted as part of the related
> device-assignment support, or simply an oversight.  This patch completes
> the function by also setting the status bit appropriately.
>   

Applied, thanks.
diff mbox

Patch

diff --git a/qemu/hw/pci.c b/qemu/hw/pci.c
index bf97c8c..5bfc4df 100644
--- a/qemu/hw/pci.c
+++ b/qemu/hw/pci.c
@@ -1009,6 +1009,8 @@  int pci_enable_capability_support(PCIDevice *pci_dev,
     if (!pci_dev)
         return -ENODEV;
 
+    pci_dev->config[0x06] |= 0x10; // status = capabilities
+
     if (config_start == 0)
 	pci_dev->cap.start = PCI_CAPABILITY_CONFIG_DEFAULT_START_ADDR;
     else if (config_start >= 0x40 && config_start < 0xff)