Re: [RFCv3 PATCH 1/6] uacce: Add documents for WarpDrive/uacce

Jason Gunthorpe
2018-11-23T18:05:10Z

On Fri, Nov 23, 2018 at 04:02:42PM +0800, Kenneth Lee wrote:

> It is already part of Jean's patchset. And that's why I built my solution on
> VFIO in the first place. But I think the concept of SVA and PASID is not
> compatible with the original VFIO concept space. You would not share your whole
> address space to a device at all in a virtual machine manager,
> wouldn't you?

Why not? That seems to fit VFIO's space just fine to me.. You might
need a new upcall to create a full MM registration, but that doesn't
seem unsuited.

Part of the point here is you should try to make sensible revisions to
existing subsystems before just inventing a new thing...

VFIO is deeply connected to the IOMMU, so enabling more general IOMMU
based approache seems perfectly fine to me..

> > Once the VFIO driver knows about this as a generic capability then the
> > device it exposes to userspace would use CPU addresses instead of DMA
> > addresses.
> >
> > The question is if your driver needs much more than the device
> > agnostic generic services VFIO provides.
> >
> > I'm not sure what you have in mind with resource management.. It is
> > hard to revoke resources from userspace, unless you are doing
> > kernel syscalls, but then why do all this?
>
> Say, I have 1024 queues in my accelerator. I can get one by opening the device
> and attach it with the fd. If the process exit by any means, the queue can be
> returned with the release of the fd. But if it is mdev, it will still be there
> and some one should tell the allocator it is available again. This is not easy
> to design in user space.

?? why wouldn't the mdev track the queues assigned using the existing
open/close/ioctl callbacks?

That is basic flow I would expect:

open(/dev/vfio)
ioctl(unity map entire process MM to mdev with IOMMU)

// Create a HQ queue and link the PASID in the HW to this HW queue
struct hw queue[..];
ioctl(create HW queue)

// Get BAR doorbell memory for the queue
bar = mmap()

// Submit work to the queue using CPU addresses
queue[0] = ...
writel(bar [..], &queue);

// Queue, SVA, etc is cleaned up when the VFIO closes
close()

Presumably the kernel has to handle the PASID and related for security
reasons, so they shouldn't go to userspace?

If there is something missing in vfio to do this is it looks pretty
small to me..

Jason