On Tue, May 27, 2025 at 06:51:50PM -0700, Nathan Chen wrote:
On 5/20/2025 6:01 AM, Daniel P. Berrangé wrote:
> > Add support for an "iommufd" virDomainIOMMUDef member that will be
> > translated to a qemu "-object iommufd" command line argument. This
> > iommufd struct has an "id" member to specify the iommufd object id
> > that can be associated with a passthrough device, and an "fd"
> > member to specify the fd for externally opening the /dev/iommu and
> > VFIO cdev by a management layer.
> >
> > @@ -28310,6 +28406,16 @@ virDomainIOMMUDefFormat(virBuffer *buf,
> > virXMLFormatElement(&childBuf, "driver",
&driverAttrBuf, NULL);
> > + if (iommu->iommufd) {
> > + virBufferAddLit(&childBuf, "<iommufd>\n");
> > + virBufferAdjustIndent(&childBuf, 2);
> > + virBufferAsprintf(&childBuf,
"<id>%s</id>\n", iommu->iommufd->id);
> > + if (iommu->iommufd->fd)
> > + virBufferAsprintf(&childBuf,
"<fd>%s</fd>\n", iommu->iommufd->fd);
> I'm not convinced we should be exposing the QEMU "id" in the XML.
> It is an identifier libvirt uses internally for configuring
> QEMU, but I don't see a reason why the end user needs to control
> its name. I'm similarly not sure we should expose an FD to
> users eitherm, just use that internally when talking to QEMU.
>
> IOW, why aren't we just having "iommu='yes'" as an attribute
> on the <iommu> device, avoiding all the logic below that
> tries to force all devices to use the same configuration.
That makes sense - I will simply have an attribute like "iommufd='yes'"
as
an attribute in the next revision instead of having users specify the
iommufd id themselves.
As for exposing an FD to users, this is meant to mirror the qemu
implementation where users can specify the FD string [0], so I think we
should keep this part as-is.
The FD passing functionality exposed by QEMU is targetted at mgmt
apps like libvirt, which apply sandboxing to QEMU, and thus need
to pass in pre-opened FDs. Most of the time, this is not something
that libvirt will expose to its own API/XML users, as FDs are a
very low level concept that is backend implementation specific.
With regards,
Daniel
--
|:
https://berrange.com -o-
https://www.flickr.com/photos/dberrange :|
|:
https://libvirt.org -o-
https://fstop138.berrange.com :|
|:
https://entangle-photo.org -o-
https://www.instagram.com/dberrange :|