Re: [RFC 06/20] iommu: Add iommu_device_init[exit]_user_dma interfaces
From: David Gibson
Date: Wed Sep 29 2021 - 03:12:34 EST
On Wed, Sep 29, 2021 at 05:38:56AM +0000, Tian, Kevin wrote:
> > From: David Gibson <david@xxxxxxxxxxxxxxxxxxxxx>
> > Sent: Wednesday, September 29, 2021 12:56 PM
> >
> > >
> > > Unlike vfio, iommufd adopts a device-centric design with all group
> > > logistics hidden behind the fd. Binding a device to iommufd serves
> > > as the contract to get security context established (and vice versa
> > > for unbinding). One additional requirement in iommufd is to manage the
> > > switch between multiple security contexts due to decoupled bind/attach:
> > >
> > > 1) Open a device in "/dev/vfio/devices" with user access blocked;
> >
> > Probably worth clarifying that (1) must happen for *all* devices in
> > the group before (2) happens for any device in the group.
>
> No. User access is naturally blocked for other devices as long as they
> are not opened yet.
Uh... my point is that everything in the group has to be removed from
regular kernel drivers before we reach step (2). Is the plan that you
must do that before you can even open them? That's a reasonable
choice, but then I think you should show that step in this description
as well.
> > > 2) Bind the device to an iommufd with an initial security context
> > > (an empty iommu domain which blocks dma) established for its
> > > group, with user access unblocked;
> > >
> > > 3) Attach the device to a user-specified ioasid (shared by all devices
> > > attached to this ioasid). Before attaching, the device should be first
> > > detached from the initial context;
> >
> > So, this step can implicitly but observably change the behaviour for
> > other devices in the group as well. I don't love that kind of
> > difficult to predict side effect, which is why I'm *still* not totally
> > convinced by the device-centric model.
>
> which side-effect is predicted here? The user anyway needs to be
> aware of such group restriction regardless whether it uses group
> or nongroup interface.
Yes, exactly. And with a group interface it's obvious it has to
understand it. With the non-group interface, you can get to this
stage in ignorance of groups. It will even work as long as you are
lucky enough only to try with singleton-group devices. Then you try
it with two devices in the one group and doing (3) on device A will
implicitly change the DMA environment of device B.
(or at least, it will if they share a group because they don't have
distinguishable RIDs. That's not the only multi-device group case,
but it's one of them).
--
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
Attachment:
signature.asc
Description: PGP signature