[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v12 11/15] vpci: add initial support for virtual PCI bus topology
On 09.01.2024 22:51, Stewart Hildebrand wrote: > --- a/xen/drivers/Kconfig > +++ b/xen/drivers/Kconfig > @@ -15,4 +15,8 @@ source "drivers/video/Kconfig" > config HAS_VPCI > bool > > +config HAS_VPCI_GUEST_SUPPORT > + bool > + depends on HAS_VPCI Wouldn't this better be "select", or even just "imply"? > --- a/xen/drivers/vpci/vpci.c > +++ b/xen/drivers/vpci/vpci.c > @@ -40,6 +40,49 @@ extern vpci_register_init_t *const __start_vpci_array[]; > extern vpci_register_init_t *const __end_vpci_array[]; > #define NUM_VPCI_INIT (__end_vpci_array - __start_vpci_array) > > +#ifdef CONFIG_HAS_VPCI_GUEST_SUPPORT > +static int add_virtual_device(struct pci_dev *pdev) > +{ > + struct domain *d = pdev->domain; > + unsigned int new_dev_number; > + > + if ( is_hardware_domain(d) ) > + return 0; > + > + ASSERT(rw_is_write_locked(&pdev->domain->pci_lock)); > + > + /* > + * Each PCI bus supports 32 devices/slots at max or up to 256 when > + * there are multi-function ones which are not yet supported. > + */ > + if ( pdev->info.is_extfn && !pdev->info.is_virtfn ) > + { > + gdprintk(XENLOG_ERR, "%pp: only function 0 passthrough supported\n", > + &pdev->sbdf); The message suggests you ought to check pdev->devfn to have the low three bits clear. Yet what you check are two booleans. Further doesn't this require the multi-function bit to be emulated clear? And finally don't you then also need to disallow assignment of devices with phantom functions? > --- a/xen/include/xen/sched.h > +++ b/xen/include/xen/sched.h > @@ -484,6 +484,14 @@ struct domain > * 2. pdev->vpci->lock > */ > rwlock_t pci_lock; > +#ifdef CONFIG_HAS_VPCI_GUEST_SUPPORT > + /* > + * The bitmap which shows which device numbers are already used by the > + * virtual PCI bus topology and is used to assign a unique SBDF to the > + * next passed through virtual PCI device. > + */ > + DECLARE_BITMAP(vpci_dev_assigned_map, VPCI_MAX_VIRT_DEV); > +#endif > #endif With this the 2nd #endif would likely better gain a comment. > --- a/xen/include/xen/vpci.h > +++ b/xen/include/xen/vpci.h > @@ -21,6 +21,13 @@ typedef int vpci_register_init_t(struct pci_dev *dev); > > #define VPCI_ECAM_BDF(addr) (((addr) & 0x0ffff000) >> 12) > > +/* > + * Maximum number of devices supported by the virtual bus topology: > + * each PCI bus supports 32 devices/slots at max or up to 256 when > + * there are multi-function ones which are not yet supported. > + */ > +#define VPCI_MAX_VIRT_DEV (PCI_SLOT(~0) + 1) The limit being this means only bus 0 / seg 0 is supported, which I think the comment would better also say. (In add_virtual_device(), which has a similar comment, there's then at least a 2nd one saying so.) Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |