[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v2 3/8] vpci/header: Emulate extended capability list for host


  • To: <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Jiqian Chen <Jiqian.Chen@xxxxxxx>
  • Date: Wed, 9 Apr 2025 14:45:23 +0800
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0)
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=HPNNAqo4F56g6l3e7GOZK8AQMZSOjN7zWq22SiiIG1U=; b=kNI0QXmFwmJYxnlzXjw4rtxPa1Cm0lsDEHDAuhU4YbUeTebfASPb7YjvbkcYzf9GW2OyFuRyRfs1Blm/uhei2cr3YihE5kkGcknXdzhvzpHVFNp2Puo/wKeb3ucQhiY6UKQ9E+azR97ejl6s8jjp2/L/QY0E2j1N4Csd3x7bbezXXj894BQJEdwwzzqXG7NFPdXcgAYUVlzZuAeP32JEiM8jPS0n3tMjRgARnNQ6KUeqTfSw90ULx18H/EbjzXBLsmjRGDso3c8zQ9x1rMjlSCdP2mdZSlwUuV6s5wQfuOrNWPfmlRd6JA3LaMzKc0Hv3CNNQo8oCj4fDalcax4m4Q==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=FzdD2qq+eW0lorjy44w3cQjJ9EzJuau4S4t4ixNWx5RZZS0N5/2J0VWujCSnArDDYY0RX1KCnwQkKScxxI2cW+PTJVSVNrrMFnXyysPFmfMtb5zjnZDUduSQovEIAeOjrVjx6uGj9pfGIAhQre8tMU44zgZOhZkVCBq104/8WwKuNhC+l33hVAQ+y8tA3wN7ffnyVT8Hx+NL3f+kO+1dGJ5bipkzMKjkaFgn6PSvnVA1gUx8d3kiL98hkBRqSebPppOFiDPa6d/1BtZ5PHpLCmuxhrG+IF4mbT1t5Sb3UYcVj4veLylTGm0LZTwfrVNSGxmhCxgLf8sXs8ON8D81ww==
  • Cc: Huang Rui <ray.huang@xxxxxxx>, Jiqian Chen <Jiqian.Chen@xxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>
  • Delivery-date: Wed, 09 Apr 2025 06:46:27 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

Add a new function to emulate extended capability list for host,
and call it in init_header(). So that, it will be easy to hide
a capability whose initialization fails.

As for the extended capability list of guest, keep hiding it.

Signed-off-by: Jiqian Chen <Jiqian.Chen@xxxxxxx>
---
cc: "Roger Pau Monné" <roger.pau@xxxxxxxxxx>
---
v1->v2 changes:
new patch

Best regards,
Jiqian Chen.
---
 xen/drivers/vpci/header.c | 44 ++++++++++++++++++++++++++++++++-------
 1 file changed, 36 insertions(+), 8 deletions(-)

diff --git a/xen/drivers/vpci/header.c b/xen/drivers/vpci/header.c
index 0910eb940e23..6833d456566b 100644
--- a/xen/drivers/vpci/header.c
+++ b/xen/drivers/vpci/header.c
@@ -815,6 +815,39 @@ static int vpci_init_capability_list(struct pci_dev *pdev)
     return rc;
 }
 
+static int vpci_init_ext_capability_list(struct pci_dev *pdev)
+{
+    int rc;
+    u32 header;
+    unsigned int pos = 0x100U, ttl = 480;
+
+    if ( !is_hardware_domain(pdev->domain) )
+    {
+        /* Extended capabilities read as zero, write ignore */
+        rc = vpci_add_register(pdev->vpci, vpci_read_val, NULL,
+                               pos, 4, (void *)0);
+        if ( rc )
+            return rc;
+    }
+
+    while ( pos && ttl-- )
+    {
+        header = pci_conf_read32(pdev->sbdf, pos);
+
+        rc = vpci_add_register(pdev->vpci, vpci_read_val, NULL,
+                               pos, 4, (void *)(uintptr_t)header);
+        if ( rc )
+            return rc;
+
+        if ( (header == 0) || (header == -1) )
+            return 0;
+
+        pos = PCI_EXT_CAP_NEXT(header);
+    }
+
+    return 0;
+}
+
 static int cf_check init_header(struct pci_dev *pdev)
 {
     uint16_t cmd;
@@ -867,14 +900,9 @@ static int cf_check init_header(struct pci_dev *pdev)
     if ( rc )
         return rc;
 
-    if ( !is_hwdom )
-    {
-        /* Extended capabilities read as zero, write ignore */
-        rc = vpci_add_register(pdev->vpci, vpci_read_val, NULL, 0x100, 4,
-                               (void *)0);
-        if ( rc )
-            return rc;
-    }
+    rc = vpci_init_ext_capability_list(pdev);
+    if ( rc )
+        return rc;
 
     if ( pdev->ignore_bars )
         return 0;
-- 
2.34.1




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.