From: Abhinav Jain <jain.abhinav177@gmail.com>
To: jgross@suse.com, sstabellini@kernel.org,
oleksandr_tyshchenko@epam.com, xen-devel@lists.xenproject.org,
linux-kernel@vger.kernel.org
Cc: skhan@linuxfoundation.org, javier.carrasco.cruz@gmail.com,
jain.abhinav177@gmail.com
Subject: [PATCH] xen: xen-pciback: Export a bridge and all its children as per TODO
Date: Sun, 9 Jun 2024 18:44:10 +0000 [thread overview]
Message-ID: <20240609184410.53500-1-jain.abhinav177@gmail.com> (raw)
Check if the device is a bridge.
If it is a bridge, iterate over all its child devices and export them.
Log error if the export fails for any particular device logging details.
Export error string is split across lines as I could see several
other such occurrences in the file.
Please let me know if I should change it in some way.
Signed-off-by: Abhinav Jain <jain.abhinav177@gmail.com>
---
drivers/xen/xen-pciback/xenbus.c | 39 +++++++++++++++++++++++++-------
1 file changed, 31 insertions(+), 8 deletions(-)
diff --git a/drivers/xen/xen-pciback/xenbus.c b/drivers/xen/xen-pciback/xenbus.c
index b11e401f1b1e..d15271d33ad6 100644
--- a/drivers/xen/xen-pciback/xenbus.c
+++ b/drivers/xen/xen-pciback/xenbus.c
@@ -258,14 +258,37 @@ static int xen_pcibk_export_device(struct xen_pcibk_device *pdev,
xen_register_device_domain_owner(dev, pdev->xdev->otherend_id);
}
- /* TODO: It'd be nice to export a bridge and have all of its children
- * get exported with it. This may be best done in xend (which will
- * have to calculate resource usage anyway) but we probably want to
- * put something in here to ensure that if a bridge gets given to a
- * driver domain, that all devices under that bridge are not given
- * to other driver domains (as he who controls the bridge can disable
- * it and stop the other devices from working).
- */
+ /* Check if the device is a bridge and export all its children */
+ if ((dev->hdr_type && PCI_HEADER_TYPE_MASK) == PCI_HEADER_TYPE_BRIDGE) {
+ struct pci_dev *child = NULL;
+
+ /* Iterate over all the devices in this bridge */
+ list_for_each_entry(child, &dev->subordinate->devices,
+ bus_list) {
+ dev_dbg(&pdev->xdev->dev,
+ "exporting child device %04x:%02x:%02x.%d\n",
+ child->domain, child->bus->number,
+ PCI_SLOT(child->devfn),
+ PCI_FUNC(child->devfn));
+
+ err = xen_pcibk_export_device(pdev,
+ child->domain,
+ child->bus->number,
+ PCI_SLOT(child->devfn),
+ PCI_FUNC(child->devfn),
+ devid);
+ if (err) {
+ dev_err(&pdev->xdev->dev,
+ "failed to export child device : "
+ "%04x:%02x:%02x.%d\n",
+ child->domain,
+ child->bus->number,
+ PCI_SLOT(child->devfn),
+ PCI_FUNC(child->devfn));
+ goto out;
+ }
+ }
+ }
out:
return err;
}
--
2.34.1
next reply other threads:[~2024-06-09 18:44 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-09 18:44 Abhinav Jain [this message]
2024-06-10 7:48 ` kernel test robot
2024-06-10 7:49 ` Jan Beulich
2024-06-10 9:53 ` kernel test robot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240609184410.53500-1-jain.abhinav177@gmail.com \
--to=jain.abhinav177@gmail.com \
--cc=javier.carrasco.cruz@gmail.com \
--cc=jgross@suse.com \
--cc=linux-kernel@vger.kernel.org \
--cc=oleksandr_tyshchenko@epam.com \
--cc=skhan@linuxfoundation.org \
--cc=sstabellini@kernel.org \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®