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

Re: [PATCH v2 3/3] [FUTURE] xen/arm: enable vPCI for domUs


  • To: Julien Grall <julien@xxxxxxx>
  • From: Roger Pau Monné <roger.pau@xxxxxxxxxx>
  • Date: Fri, 7 Jul 2023 15:40:43 +0200
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=mKqHOiBRlhA6MKR5OwHg83eo+1ILFlGtOUD75klLS/g=; b=VkExaI0mD/vF74fu+mnByZGz4jymdkzE2p2uuXCyD4G2wbKQuXxxc9W5IoOr3zFS59GBmU7R+BiUucz7CYX84I3W5j/lkzSWR8aDWrwFtAzzVh7uAzq+DnGcK+YI4FZ1ZzRyE+/i+0VDdjeKyfD0C12jQkWWDSQ9QIDt+Q3aWw/ljBqJd7JECqkD3Ly+IXwsbn2cIaJjam0xYOChOEqqWqod0cVrPc2cf/ydm2WPCIiK+F5OepdXxaSg7JPeHk/7MmPCKlK3sZ4I0/T1vlRNo2ofslFKBYmDB4sp/ULJrTo+CQWrNp1fOm7DWw0PRq0o2QzfAraPZ50Y7+4UwIfXYg==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lmgAIoeOyoc71H9AlzPwN87V2yF/f4sHQ5DWDf6YkSFTlUy6zXt6Pc/53jpKBU8gzTE/TB0egBetGjaumdyo/De+TI3uqdHMadW3tS+0McZlPBll/6AmWkeH5zG/5Us3DbQ9YIrYt8U5fQcby+ZjX8jQ7olI8JU/zv/3PF4V/IVYDEdrIUiuAmDeESUPWZLwSi4AJ5JAgiljt8PTRAThTGScWzIM8Xupnw/bKRZMAt9+RjaiC0VTE0879ROFxrG4IgCzr2I6oW2IiqaH2scLieUYOC1b8iHewKEFOZFYIz5ZMl+7JM2+8YY9ZWNJnCQNe2aqaJmkAFfm7Ham04xuFQ==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com;
  • Cc: Stewart Hildebrand <stewart.hildebrand@xxxxxxx>, xen-devel@xxxxxxxxxxxxxxxxxxxx, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Bertrand Marquis <bertrand.marquis@xxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>, Oleksandr Tyshchenko <oleksandr_tyshchenko@xxxxxxxx>, Artem Mygaiev <artem_mygaiev@xxxxxxxx>
  • Delivery-date: Fri, 07 Jul 2023 13:41:12 +0000
  • Ironport-data: A9a23:fLObt6v5FQNWXq+PQlPZWup+7efnVOZfMUV32f8akzHdYApBsoF/q tZmKWGGM/mDZDT2L4tzaY+1pBwDupDRxoQ2HQM9/y43Qi1H+JbJXdiXEBz9bniYRiHhoOCLz O1FM4Wdc5pkJpP4jk3wWlQ0hSAkjclkfpKlVKiffHg3HVQ+IMsYoUoLs/YjhYJ1isSODQqIu Nfjy+XSI1bg0DNvWo4uw/vrRChH4rKq4Vv0gnRkPaoQ5ACGyCFMZH4iDfrZw0XQE9E88tGSH 44v/JnhlkvF8hEkDM+Sk7qTWiXmlZaLYGBiIlIPM0STqkAqSh4ai87XB9JFAatjsB2bnsgZ9 Tl4ncfYpTHFnEH7sL91vxFwS0mSNEDdkVPNCSDXXce7lyUqf5ZwqhnH4Y5f0YAwo45K7W9yG fMwdgFRQB+furyN7YmKQ89Xmpt6Cuq7BdZK0p1g5Wmx4fcOZ7nmGv+Pz/kImTA6i4ZJAOrUY NcfZXx3dhPcbhZTO1ARTpUjgOOvgXq5eDpdwL6XjfNvvy6Pk0osjf60b4W9lt+iHK25mm6Co W3L5SLhCwwyP92D0zuVtHmrg4cjmAuiAd9PTOXgrqQCbFu7x21JEQxNbwOCnMKHlGmbQvBmd FwWw397xUQ13AnxJjXnZDW6vXqFsxg0S9dWVeog52ml0bbZ/A+DGi4ETzpNZdY8vck6bTUv2 hmCmNaBLSxitviZRGyQ8p+QrCiuIm4FIGkafygGQAAZpd75r+kblQnTR9xuFKq0iNzdGjzqx T2O6i8kiN07h8MRy7+y+1yBhju2v4XIVSY8/ACRVWWghitHY4qia52t+ELsx/9KJ4aETXGMp HEB3cOZ6YgmCpWAlzeERukXK624/PaOMDDagllHEoEo8nKm/HvLVYlK/Dx7E0J4Pc8FdCHBb VfavEVa45o7AZexRap+Yob0AcJ6y6HlTI7hTqqNMYUIZYVtfgia+i0ofVSXw23mjEkrl+c4J IufdsGvS30dDMyL0QaLegvU6pdzrghW+I8ZbcmTI8iPuVZGWEOodA==
  • Ironport-hdrordr: A9a23:c+e9tKNdp/6q58BcT8/255DYdb4zR+YMi2TDiHoddfUFSKalfp 6V98jzjSWE8Ar4WBkb+exoS5PwOk80lKQFqbX5Uo3SODUO1FHHEGgm1/qa/9SCIVy0ygc+79 YGT0EWMrSZYTdHZITBkW+F+r0bsbq6GdWT9ILjJgBWPGNXgs9bjjtRO0K+KAlbVQNGDZ02GN 614ddGnSOpfTA6f9m2HX4MWsnEvpnumIj9aRALKhY74E3W5AnYpYLSIly95FMzQjlPybAt/S zslBH43Lyqt7WW2wLRzGja6rVRgZ/ExsFYDMKBp8AJInHHixquZq5mR7qe1QpF6t2H2RIPqp 3hsh0gN8N85zf6ZWeuuybg3AHmzXIH92Li4UXwuwqtneXJABYBT+ZRj4NQdRXUr2A6ustn7a 5N12WF87JKEBL7mjjn7dSgbWAlqqP0mwtirQcgtQ0dbWIsUs4SkWXZxjIRLH40JlO71GngKp grMCiT3ocQTbrQVQGigoAm+q3QYp10JGbLfqFKgL3o7xFG2H9+1EcW38oZgzMJ8488UYBN46 DePr1vj6wmdL5gUUtRPpZ1fSKMMB24fTvcdGaJZVj3HqAOPHzA75bx/bUu/emvPJgF1oE7lp jNWE5R8TdaQTOmNeSemJlQthzdSmS0WjrgjslY+phio7X5AL7mKzeKRlwim9ap5/8fHsrYUf CuP48+OY6UEUL+XYJSmwHuUZhbLncTFMUTp9YgQlqL5tnGL4X739arAso75ICdYgrMdlmPc0 frBgKDW/moxnrbJEPQkVzWR27nfFD58NZ5DLXaltJjuLQwCg==
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On Fri, Jul 07, 2023 at 02:27:17PM +0100, Julien Grall wrote:
> Hi,
> 
> On 07/07/2023 14:13, Roger Pau Monné wrote:
> > On Fri, Jul 07, 2023 at 01:09:40PM +0100, Julien Grall wrote:
> > > Hi,
> > > 
> > > On 07/07/2023 12:34, Roger Pau Monné wrote:
> > > > On Fri, Jul 07, 2023 at 12:16:46PM +0100, Julien Grall wrote:
> > > > > 
> > > > > 
> > > > > On 07/07/2023 11:47, Roger Pau Monné wrote:
> > > > > > On Fri, Jul 07, 2023 at 11:33:14AM +0100, Julien Grall wrote:
> > > > > > > Hi,
> > > > > > > 
> > > > > > > On 07/07/2023 11:06, Roger Pau Monné wrote:
> > > > > > > > On Fri, Jul 07, 2023 at 10:00:51AM +0100, Julien Grall wrote:
> > > > > > > > > On 07/07/2023 02:47, Stewart Hildebrand wrote:
> > > > > > > > > > Note that CONFIG_HAS_VPCI_GUEST_SUPPORT is not currently 
> > > > > > > > > > used in the upstream
> > > > > > > > > > code base. It will be used by the vPCI series [1]. This 
> > > > > > > > > > patch is intended to be
> > > > > > > > > > merged as part of the vPCI series.
> > > > > > > > > > 
> > > > > > > > > > v1->v2:
> > > > > > > > > > * new patch
> > > > > > > > > > ---
> > > > > > > > > >       xen/arch/arm/Kconfig              | 1 +
> > > > > > > > > >       xen/arch/arm/include/asm/domain.h | 2 +-
> > > > > > > > > >       2 files changed, 2 insertions(+), 1 deletion(-)
> > > > > > > > > > 
> > > > > > > > > > diff --git a/xen/arch/arm/Kconfig b/xen/arch/arm/Kconfig
> > > > > > > > > > index 4e0cc421ad48..75dfa2f5a82d 100644
> > > > > > > > > > --- a/xen/arch/arm/Kconfig
> > > > > > > > > > +++ b/xen/arch/arm/Kconfig
> > > > > > > > > > @@ -195,6 +195,7 @@ config PCI_PASSTHROUGH
> > > > > > > > > >             depends on ARM_64
> > > > > > > > > >             select HAS_PCI
> > > > > > > > > >             select HAS_VPCI
> > > > > > > > > > +   select HAS_VPCI_GUEST_SUPPORT
> > > > > > > > > >             default n
> > > > > > > > > >             help
> > > > > > > > > >               This option enables PCI device passthrough
> > > > > > > > > > diff --git a/xen/arch/arm/include/asm/domain.h 
> > > > > > > > > > b/xen/arch/arm/include/asm/domain.h
> > > > > > > > > > index 1a13965a26b8..6e016b00bae1 100644
> > > > > > > > > > --- a/xen/arch/arm/include/asm/domain.h
> > > > > > > > > > +++ b/xen/arch/arm/include/asm/domain.h
> > > > > > > > > > @@ -298,7 +298,7 @@ static inline void 
> > > > > > > > > > arch_vcpu_block(struct vcpu *v) {}
> > > > > > > > > >       #define arch_vm_assist_valid_mask(d) (1UL << 
> > > > > > > > > > VMASST_TYPE_runstate_update_flag)
> > > > > > > > > > -#define has_vpci(d) ({ IS_ENABLED(CONFIG_HAS_VPCI) && 
> > > > > > > > > > is_hardware_domain(d); })
> > > > > > > > > > +#define has_vpci(d)    ({ (void)(d); 
> > > > > > > > > > IS_ENABLED(CONFIG_HAS_VPCI); })
> > > > > > > > > 
> > > > > > > > > As I mentioned in the previous patch, wouldn't this enable 
> > > > > > > > > vPCI
> > > > > > > > > unconditionally for all the domain? Shouldn't this be instead 
> > > > > > > > > an optional
> > > > > > > > > feature which would be selected by the toolstack?
> > > > > > > > 
> > > > > > > > I do think so, at least on x86 we signal whether vPCI should be
> > > > > > > > enabled for a domain using xen_arch_domainconfig at domain 
> > > > > > > > creation.
> > > > > > > > 
> > > > > > > > Ideally we would like to do this on a per-device basis for 
> > > > > > > > domUs, so
> > > > > > > > we should consider adding a new flag to 
> > > > > > > > xen_domctl_assign_device in
> > > > > > > > order to signal whether the assigned device should use vPCI.
> > > > > > > 
> > > > > > > I am a bit confused with this paragraph. If the device is not 
> > > > > > > using vPCI,
> > > > > > > how will it be exposed to the domain? Are you planning to support 
> > > > > > > both vPCI
> > > > > > > and PV PCI passthrough for a same domain?
> > > > > > 
> > > > > > You could have an external device model handling it using the ioreq
> > > > > > interface, like we currently do passthrough for HVM guests.
> > > > > 
> > > > > IMHO, if one decide to use QEMU for emulating the host bridge, then 
> > > > > there is
> > > > > limited point to also ask Xen to emulate the hostbridge for some other
> > > > > device. So what would be the use case where you would want to be a
> > > > > per-device basis decision?
> > > > 
> > > > You could also emulate the bridge in Xen and then have QEMU and
> > > > vPCI handle accesses to the PCI config space for different devices.
> > > > The ioreq interface already allows registering for config space
> > > > accesses on a per SBDF basis.
> > > > 
> > > > XenServer currently has a use-case where generic PCI device
> > > > passthrough is handled by QEMU, while some GPUs are passed through
> > > > using a custom emulator.  So some domains effectively end with a QEMU
> > > > instance and a custom emulator, I don't see why you couldn't
> > > > technically replace QEMU with vPCI in this scenario.
> > > > 
> > > > The PCI root complex might be emulated by QEMU, or ideally by Xen.
> > > > That shouldn't prevent other device models from handling accesses for
> > > > devices, as long as accesses to the ECAM region(s) are trapped and
> > > > decoded by Xen.  IOW: if we want bridges to be emulated by ioreq
> > > > servers we need to introduce an hypercall to register ECAM regions
> > > > with Xen so that it can decode accesses and forward them
> > > > appropriately.
> > > 
> > > Thanks for the clarification. Going back to the original discussion. Even
> > > with this setup, I think we still need to tell at domain creation whether
> > > vPCI will be used (think PCI hotplug).
> > 
> > Well, for PCI hotplug you will still need to execute a
> > XEN_DOMCTL_assign_device hypercall in order to assign the device, at
> > which point you could pass the vPCI flag.
> 
> I am probably missing something here. If you don't pass the vPCI flag at
> domain creation, wouldn't it mean that hostbridge would not be created until
> later? Are you thinking to make it unconditionally or hotplug it (even
> that's even possible)?

I think at domain creation more than a vPCI flag you want an 'emulate a
PCI bridge' flag.  Such flag will also be needed if in the future you
want to support virtio-pci devices for example, and those have nothing
do to do with vPCI.

> > 
> > What you likely want at domain create is whether the IOMMU should be
> > enabled or not, as we no longer allow late enabling of the IOMMU once
> > the domain has been created.
> > 
> > One question I have is whether Arm plans to allow exposing fully
> > emulated devices on the PCI config space, or that would be limited to
> > PCI device passthrough?
> 
> In the longer term, I would expect to have a mix of physical and emulated
> device (e.g. virtio).

That's what I would expect.

> > 
> > IOW: should an emulated PCI root complex be unconditionally exposed to
> > guests so that random ioreq servers can register for SBDF slots?
> 
> I would say no. The vPCI should only be added when the configuration
> requested it. This is to avoid exposing unnecessary emulation to a domain
> (not everyone will want to use a PCI hostbridge).

Right, then as replied above you might want a domain create flag to
signal whether to emulate a PCI bridge for the domain.

> > 
> > > After that, the device assignment hypercall could have a way to say 
> > > whether
> > > the device will be emulated by vPCI. But I don't think this is necessary 
> > > to
> > > have from day one as the ABI will be not stable (this is a DOMCTL).
> > 
> > Indeed, it's not a stable interface, but we might as well get
> > something sane if we have to plumb it through the tools.  Either if
> > it's a domain create flag or a device attach flag you will need some
> > plumbing to do at the toolstack level, at which point we might as well
> > use an interface that doesn't have arbitrary limits.
> 
> I think we need both flags. In your approach you seem to want to either have
> the hostbridge created unconditionally or hotplug it (if that's even
> possible).

You could in theory have hotplug MCFG (ECAM) regions in ACPI, but I'm
unsure how many OSes support that, but no, I don't think we should try
to hotplug PCI bridges.

I was thinking that for x86 PVH we might want to unconditionally
expose a PCI bridge, but it might be better to signal that from the
domain configuration and not make it mandatory.

> However, I don't think we should have the vPCI unconditionally created and
> we should still allow the toolstack to say at domain creation that PCI will
> be used.

Indeed.  I think a domain create emulate a PCI bridge flag and a vPCI
flag for XEN_DOMCTL_assign_device are required.

Thanks, Roger.



 


Rackspace

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