]> xenbits.xensource.com Git - people/aperard/xen-arm.git/commitdiff
VT-d: relax source qualifier for MSI of phantom functions
authorJan Beulich <jbeulich@suse.com>
Mon, 7 Jan 2013 11:56:52 +0000 (12:56 +0100)
committerJan Beulich <jbeulich@suse.com>
Mon, 7 Jan 2013 11:56:52 +0000 (12:56 +0100)
With ordinary requests allowed to come from phantom functions, the
remapping tables ought to be set up to allow for MSI triggers to come
from other than the "real" device too.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: "Zhang, Xiantao" <xiantao.zhang@intel.com>
xen/drivers/passthrough/vtd/intremap.c

index aaf930189684af7b0c534d87861f45d1cb65b308..8b45e5ae8b1c69c6c8d6d8035c72e21e08d92b7a 100644 (file)
@@ -442,13 +442,22 @@ static void set_msi_source_id(struct pci_dev *pdev, struct iremap_entry *ire)
     devfn = pdev->devfn;
     switch ( pdev->type )
     {
+        unsigned int sq;
+
     case DEV_TYPE_PCIe_BRIDGE:
     case DEV_TYPE_PCIe2PCI_BRIDGE:
     case DEV_TYPE_LEGACY_PCI_BRIDGE:
         break;
 
     case DEV_TYPE_PCIe_ENDPOINT:
-        set_ire_sid(ire, SVT_VERIFY_SID_SQ, SQ_ALL_16, PCI_BDF2(bus, devfn));
+        switch ( pdev->phantom_stride )
+        {
+        case 1: sq = SQ_13_IGNORE_3; break;
+        case 2: sq = SQ_13_IGNORE_2; break;
+        case 4: sq = SQ_13_IGNORE_1; break;
+        default: sq = SQ_ALL_16; break;
+        }
+        set_ire_sid(ire, SVT_VERIFY_SID_SQ, sq, PCI_BDF2(bus, devfn));
         break;
 
     case DEV_TYPE_PCI: