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

Re: [PATCH v2 04/15] pci: Parse into pci_sbdf_t directly


  • To: Teddy Astie <teddy.astie@xxxxxxxxxx>, <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Jason Andryuk <jason.andryuk@xxxxxxx>
  • Date: Mon, 22 Jun 2026 14:36:03 -0400
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=vates.tech 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=YRJ67r+uKd8g3cHtLnTWI90pwQLWaq2FeZm/u4AFxts=; b=qhPCzgSh74JigZIoiXm+6CnVQUDBpeUCz7h22g90XAZ1e8Y9k4254UtWhdIXZhovQiVjKf8aIyWxwMVqyNPnULbgrAouF+pXazQ7CxB3+o3JFCuvIe8vw3TdAVKOUuiAELpQcAdQNAJe0cRSig94WFUVBGnv+m4yiCoHdCApaRk5HBUgJcEU1YZR8fK2TKXLdoCsAcTXbCUL5sTBC1UKMymLHztK3oxhSGlNj6EhnvfEyM4VuUjwUYi9A9fkm0k/Q2tSUlE4NEpobj5eXcnY5V4qNbNwvTODMhowFLo7pmlPic9mdriaOlIaWee4sIY1eJBBK5kj8z7Nl8fZEBPnCg==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Mmfqm9/4XMVBx1qM8lpI2/9Y0lv73XygAoW1hiBaqtODivsgKSwjHjwUKdrfL+5yiiOXrptQdvgbqoMMrSj7wZET2pTk5beFNBlVYiIZX7EcNq2Y5Nsvk+z+qL45LbELO6tdYOzznNbMX6990wS23hnx11tQLX/0HfVU8qXDW3Jhtx7di/ciFIy7Zrn8aFqoUMwo7dIYe1J8EezLj2BGTAYzC2k1bhC+uEDf6TR63RBwdoCbIgaT//8Uav13C+bmspiVzdDxBI7U8g+UonZXpw65ec6oRqnA4CULDY95HIAmwWey4Cmp05ZBL+eYwx83CT307L3zQE9H7WSvSQB0Og==
  • Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=amd.com header.i="@amd.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck"
  • Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Anthony PERARD <anthony.perard@xxxxxxxxxx>, Michal Orzel <michal.orzel@xxxxxxx>, Jan Beulich <jbeulich@xxxxxxxx>, Julien Grall <julien@xxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>
  • Delivery-date: Mon, 22 Jun 2026 18:36:33 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On 2026-06-18 10:50, Teddy Astie wrote:
Use the newly introduced parse_pci_sbdf() and parse_pci_sbdf_seg() in order
to parse into a pci_sbdf_t directly instead of reconstructing it afterward.

Signed-off-by: Teddy Astie <teddy.astie@xxxxxxxxxx>
---
  xen/drivers/char/ns16550.c               | 24 +++++++++++-----------
  xen/drivers/char/xhci-dbc.c              |  6 +++---
  xen/drivers/passthrough/amd/iommu_acpi.c | 26 ++++++++++++------------
  xen/drivers/passthrough/vtd/dmar.c       |  7 +++----
  4 files changed, 31 insertions(+), 32 deletions(-)

diff --git a/xen/drivers/char/ns16550.c b/xen/drivers/char/ns16550.c
index 878da27f2e..fa2d0e5991 100644
--- a/xen/drivers/char/ns16550.c
+++ b/xen/drivers/char/ns16550.c
@@ -1572,22 +1572,22 @@ static bool __init parse_positional(struct ns16550 
*uart, char **str)
  #ifdef CONFIG_HAS_PCI
      if ( *conf == ',' && *++conf != ',' )
      {
-        unsigned int b, d, f;
+        pci_sbdf_t sbdf;
- conf = parse_pci(conf, NULL, &b, &d, &f);
+        conf = parse_pci_sbdf(conf, &sbdf);
          if ( !conf )
              PARSE_ERR_RET("Bad port PCI coordinates");
-        uart->pci_device = PCI_SBDF(0, b, d, f);
+        uart->pci_device = sbdf;

You could parse directly into uart->pci_device (for example)

    conf = parse_pci_sbdf(conf, &uart->pci_device);

and that would eliminate a lot of the temporary sbdf variables. But to do that, you'd want to change parse_pci_sbdf() to only write the sbdf if returning non-NULL. Not strictly necessary, but it seems safer that way.

          uart->ps_bdf_enable = true;
      }
if ( *conf == ',' && *++conf != ',' )
      {
-        unsigned int b, d, f;
+        pci_sbdf_t sbdf;
- if ( !parse_pci(conf, NULL, &b, &d, &f) )
+        if ( !parse_pci_sbdf(conf, &sbdf) )
              PARSE_ERR_RET("Bad bridge PCI coordinates");
-        uart->pci_bridge = PCI_SBDF(0, b, d, f);
+        uart->pci_bridge = sbdf;
          uart->pb_bdf_enable = true;
      }
  #endif

diff --git a/xen/drivers/passthrough/vtd/dmar.c 
b/xen/drivers/passthrough/vtd/dmar.c
index 61269c7e0d..2dd362410e 100644
--- a/xen/drivers/passthrough/vtd/dmar.c
+++ b/xen/drivers/passthrough/vtd/dmar.c
@@ -1216,7 +1216,7 @@ static int __init cf_check parse_rmrr_param(const char 
*str)
          do {
              bool def_seg = false;
- stmp = parse_pci_seg(s + 1, &seg, &bus, &dev, &func, &def_seg);
+            stmp = parse_pci_sbdf_seg(s + 1, &sbdf, &def_seg);

Andrew already pointed out that sbdf is introduced in patch 3 when it should be introduced in this patch.

Regards,
Jason

              if ( !stmp )
                  return -EINVAL;



 


Rackspace

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