|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v8 2/5] xen/arm: Enable the existing x86 virtual PCI support for ARM
On 18.10.2021 10:03, Roger Pau Monné wrote:
> On Mon, Oct 18, 2021 at 09:47:06AM +0200, Jan Beulich wrote:
>> On 15.10.2021 18:51, Bertrand Marquis wrote:
>>> --- /dev/null
>>> +++ b/xen/arch/arm/vpci.c
>>> @@ -0,0 +1,77 @@
>>> +/*
>>> + * xen/arch/arm/vpci.c
>>> + *
>>> + * This program is free software; you can redistribute it and/or modify
>>> + * it under the terms of the GNU General Public License as published by
>>> + * the Free Software Foundation; either version 2 of the License, or
>>> + * (at your option) any later version.
>>> + *
>>> + * This program is distributed in the hope that it will be useful,
>>> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
>>> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
>>> + * GNU General Public License for more details.
>>> + */
>>> +#include <xen/sched.h>
>>> +#include <xen/vpci.h>
>>> +
>>> +#include <asm/mmio.h>
>>> +
>>> +static int vpci_mmio_read(struct vcpu *v, mmio_info_t *info,
>>> + register_t *r, void *p)
>>> +{
>>> + pci_sbdf_t sbdf;
>>> + /* data is needed to prevent a pointer cast on 32bit */
>>> + unsigned long data;
>>> +
>>> + /* We ignore segment part and always handle segment 0 */
>>> + sbdf.sbdf = VPCI_ECAM_BDF(info->gpa);
>>> +
>>> + if ( vpci_ecam_read(sbdf, ECAM_REG_OFFSET(info->gpa),
>>> + 1U << info->dabt.size, &data) )
>>> + {
>>
>> Here it is quite clear that the SBDF you pass into vpci_ecam_read() is
>> the virtual one. The function then calls vpci_read(), which in turn
>> will call vpci_read_hw() in a number of situations (first and foremost
>> whenever pci_get_pdev_by_domain() returns NULL). That function as well
>> as pci_get_pdev_by_domain() use the passed in SBDF as if it was a
>> physical one; I'm unable to spot any translation. Yet I do recall
>> seeing assignment of a virtual device and function number somewhere
>> (perhaps another of the related series), so the model also doesn't
>> look to assume 1:1 mapping of SBDF.
>>
>>> --- a/xen/drivers/passthrough/pci.c
>>> +++ b/xen/drivers/passthrough/pci.c
>>> @@ -756,6 +756,19 @@ int pci_add_device(u16 seg, u8 bus, u8 devfn,
>>> if ( !pdev->domain )
>>> {
>>> pdev->domain = hardware_domain;
>>> +#ifdef CONFIG_ARM
>>> + /*
>>> + * On ARM PCI devices discovery will be done by Dom0. Add vpci
>>> handler
>>> + * when Dom0 inform XEN to add the PCI devices in XEN.
>>> + */
>>> + ret = vpci_add_handlers(pdev);
>>> + if ( ret )
>>> + {
>>> + printk(XENLOG_ERR "Setup of vPCI failed: %d\n", ret);
>>> + pdev->domain = NULL;
>>> + goto out;
>>> + }
>>> +#endif
>>> ret = iommu_add_device(pdev);
>>> if ( ret )
>>> {
>>
>> Upon failure, vpci_add_handlers() will itself call vpci_remove_handlers().
>> What about iommu_add_device() failure? The device will have ->domain
>> zapped, but all vPCI handlers still in place. This aspect of insufficient
>> error cleanup was pointed out already in review of v1.
>>
>> Furthermore already in v1 I questioned why this would be Arm-specific: On
>> x86 this code path is going to be taken for all devices Xen wasn't able
>> to discover at boot (anything on segments we wouldn't consider config
>> space access safe on without reassurance by Dom0 plus SR-IOV VFs, at the
>> very least).
>
> My original plans for SR-IOV VFs on PVH dom0 involved trapping
> accesses to the SR-IOV capability and detecting the creation of VFs
> without the need for dom0 to notify them to Xen. This would avoid dom0
> having to call PHYSDEVOP_pci_device_add for that case.
>
> I might be confused, but I think we also spoke about other (non SR-IOV
> related) cases where PCI devices might appear after certain actions by
> dom0, so I think we need to keep the PHYSDEVOP_pci_device_add for PVH
> dom0.
Right, hotplugged ones, which I forgot to mention in my earlier reply.
>> Hence it is my understanding that something along these
>> lines is actually also needed for PVH Dom0. I've just checked, and
>> according to my mailbox that comment was actually left unresponded to.
>>
>> Roger, am I missing anything here as to PVH Dom0 getting handlers put in
>> place?
>
> No, I think we will need those, likewise for run-time reported MCFG
> regions.
Yes, this was what I referred to by "without reassurance by Dom0".
Thanks for confirming.
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |