|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v4 11/11] xen/arm: translate virtual PCI bus topology for guests
On 05.11.2021 07:56, Oleksandr Andrushchenko wrote:
> --- a/xen/arch/arm/vpci.c
> +++ b/xen/arch/arm/vpci.c
> @@ -41,6 +41,15 @@ static int vpci_mmio_read(struct vcpu *v, mmio_info_t
> *info,
> /* data is needed to prevent a pointer cast on 32bit */
> unsigned long data;
>
> +#ifdef CONFIG_HAS_VPCI_GUEST_SUPPORT
> + /*
> + * For the passed through devices we need to map their virtual SBDF
> + * to the physical PCI device being passed through.
> + */
> + if ( !bridge && !vpci_translate_virtual_device(v->domain, &sbdf) )
> + return 1;
Nit: Indentation.
> @@ -59,6 +68,15 @@ static int vpci_mmio_write(struct vcpu *v, mmio_info_t
> *info,
> struct pci_host_bridge *bridge = p;
> pci_sbdf_t sbdf = vpci_sbdf_from_gpa(bridge, info->gpa);
>
> +#ifdef CONFIG_HAS_VPCI_GUEST_SUPPORT
> + /*
> + * For the passed through devices we need to map their virtual SBDF
> + * to the physical PCI device being passed through.
> + */
> + if ( !bridge && !vpci_translate_virtual_device(v->domain, &sbdf) )
> + return 1;
Again.
> @@ -172,10 +175,37 @@ REGISTER_VPCI_INIT(vpci_add_virtual_device,
> VPCI_PRIORITY_MIDDLE);
> static void vpci_remove_virtual_device(struct domain *d,
> const struct pci_dev *pdev)
> {
> + ASSERT(pcidevs_locked());
> +
> clear_bit(pdev->vpci->guest_sbdf.dev, &d->vpci_dev_assigned_map);
> pdev->vpci->guest_sbdf.sbdf = ~0;
> }
>
> +/*
> + * Find the physical device which is mapped to the virtual device
> + * and translate virtual SBDF to the physical one.
> + */
> +bool vpci_translate_virtual_device(struct domain *d, pci_sbdf_t *sbdf)
const struct domain *d ?
> +{
> + const struct pci_dev *pdev;
> + bool found = false;
> +
> + pcidevs_lock();
> + for_each_pdev( d, pdev )
> + {
> + if ( pdev->vpci->guest_sbdf.sbdf == sbdf->sbdf )
> + {
> + /* Replace virtual SBDF with the physical one. */
> + *sbdf = pdev->sbdf;
> + found = true;
> + break;
> + }
> + }
> + pcidevs_unlock();
I think the description wants to at least mention that in principle
this is too coarse grained a lock, providing justification for why
it is deemed good enough nevertheless. (Personally, as expressed
before, I don't think the lock should be used here, but as long as
Roger agrees with you, you're fine.)
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |