On Tue, Apr 06, 2021 at 09:35:17AM +0800, Jason Wang wrote:
No, I wish people would stop talking about SVA.VFIO and VDPA has no buisness having map/unmap interfaces once we haveSo it looks like the PASID was bound to SVA in this design. I think it's not
/dev/ioasid. That all belongs in the iosaid side.
I know they have those interfaces today, but that doesn't mean we have
to keep using them for PASID use cases, they should be replaced with a
'do dma from this pasid on /dev/ioasid' interface certainly not a
'here is a pasid from /dev/ioasid, go ahead and configure it youself'
interface
necessairly the case:
SVA and vSVA are a very special narrow configuration of a PASID. There
are lots of other PASID configurations! That is the whole point, a
PASID is complicated, there are many configuration scenarios, they
need to be in one place with a very clearly defined uAPI
1) PASID can be implemented without SVA, in this case a map/unmap interfaceAny interface to manipulate a PASID should be under /dev/ioasid. We do
is still required
not want to duplicate this into every subsystem.
2) For the case that hypervisor want to do some mediation in the middle for/dev/ioasid should allow userspace to setup any PASID configuration it
a virtqueue. e.g in the case of control vq that is implemented in the
VF/ADI/SF itself, the hardware virtqueue needs to be controlled by Qemu,
Though binding qemu's page table to cvq can work but it looks like a
overkill, a small dedicated buffers that is mapped for this PASID seems more
suitalbe.
wants. There are many choices. That is the whole point, instead of
copying&pasting all the PASID configuration option into every
subsystem we have on place to configure it.
If you want a PASID (or generic ioasid) that has the guest physical
map, which is probably all that VDPA would ever want, then /dev/ioasid
should be able to prepare that.
If you just want to map a few buffers into a PASID then it should be
able to do that too.
So do you mean the device should not expose the PASID confiugration API toThis always needs co-operating with the vIOMMU driver. We can't have
guest? I think it could happen if we assign the whole device and let guest
to configure it for nested VMs.
nested PASID use without both parts working together.
The vIOMMU driver configures the PASID and assigns the mappings
(however complicated that turns out to be)
The VDPA/mdev driver authorizes the HW to use the ioasid mapping, eg
by authorizing a queue to issue PCIe TLPs with a specific PASID.
The authorization is triggered by the guest telling the vIOMMU to
allow a vRID to talk to a PASID, which qemu would have to translate to
telling something like the VDPA driver under the vRID that it can use
a PASID from /dev/ioasid
For security a VDPA/mdev device MUST NOT issue PASIDs that the vIOMMU
has not authorized its vRID to use. Otherwise the security model of
something like VFIO in the guest becomes completely broken.
Jason