Thread (39 messages) 39 messages, 5 authors, 2021-07-23

RE: [PATCH 3/6] vfio: remove the unused mdev iommu hook

From: "Tian, Kevin" <kevin.tian@intel.com>
Date: 2021-05-14 06:56:23
Also in: kvm, linux-iommu

From: Tian, Kevin
Sent: Friday, May 14, 2021 2:28 PM
quoted
From: Jason Gunthorpe <jgg@ziepe.ca>
Sent: Thursday, May 13, 2021 8:01 PM

On Thu, May 13, 2021 at 03:28:52AM +0000, Tian, Kevin wrote:
quoted
Are you specially concerned about this iommu_device hack which
directly connects mdev_device to iommu layer or the entire removed
logic including the aux domain concept? For the former we are now
following up the referred thread to find a clean way. But for the latter
we feel it's still necessary regardless of how iommu interface is
redesigned
quoted
quoted
to support device connection from the upper level driver. The reason is
that with mdev or subdevice one physical device could be attached to
multiple domains now. there could be a primary domain with DOMAIN_
DMA type for DMA_API use by parent driver itself, and multiple auxiliary
domains with DOMAIN_UNMANAGED types for subdevices assigned to
different VMs.
Why do we need more domains than just the physical domain for the
parent? How does auxdomain appear in /dev/ioasid?
Say the parent device has three WQs. WQ1 is used by parent driver itself,
while WQ2/WQ3 are assigned to VM1/VM2 respectively.

WQ1 is attached to domain1 for an IOVA space to support DMA API
operations in parent driver.

WQ2 is attached to domain2 for the GPA space of VM1. Domain2 is
created when WQ2 is assigned to VM1 as a mdev.

WQ3 is attached to domain3 for the GPA space of VM2. Domain3 is
created when WQ3 is assigned to VM2 as a mdev.

In this case domain1 is the primary while the other two are auxiliary
to the parent.

auxdomain represents as a normal domain in /dev/ioasid, with only
care required when doing attachment.

e.g. VM1 is assigned with both a pdev and mdev. Qemu creates
gpa_ioasid which is associated with a single domain for VM1's
GPA space and this domain is shared by both pdev and mdev.
Here pdev/mdev are just conceptual description. Following your
earlier suggestion /dev/ioasid will not refer to explicit mdev_device.
Instead, each vfio device attached to an ioasid is represented by either
"struct device" for pdev or "struct device + pasid" for mdev. The
presence of pasid decides which iommu_attach api should be used.
The domain becomes the primary domain of pdev when attaching
pdev to gpa_ioasid:
	iommu_attach_device(domain, device);

The domain becomes the auxiliary domain of mdev's parent when
attaching mdev to gpa_ioasid:
	iommu_aux_attach_device(domain, device, pasid);

Thanks
Kevin
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help