On 27-10-20, 10:34, Dave Jiang wrote: > Driver stage 1 postings for context: [1] > > The patch series has compilation and functional dependency on Fenghua's "Tag application > address space for devices" patch series for the ENQCMD CPU command enumeration and the PASID MSR > support. [2] > > == Background == > A typical DMA device requires the driver to translate application buffers to hardware addresses, > and a kernel-user transition to notify the hardware of new work. Shared Virtual Addressing (SVA) > allows the processor and device to use the same virtual addresses without requiring software to > translate between the address spaces. ENQCMD is a new instruction on Intel Platforms that allows > user applications to directly notify hardware of new work, much like how doorbells are used in > some hardware, but it carries a payload along with it. ENQCMDS is the supervisor version (ring0) > of ENQCMD. > > == ENQCMDS == > Introduce enqcmds(), a helper funciton that copies an input payload to a 64B aligned > destination and confirms whether the payload was accepted by the device or not. > enqcmds() wraps the new ENQCMDS CPU instruction. The ENQCMDS is a ring 0 CPU instruction that > performs similar to the ENQCMD instruction. Descriptor submission must use ENQCMD(S) for shared > workqueues (swq) on an Intel DSA device. > > == Shared WQ support == > Introduce shared workqueue (swq) support for the idxd driver. The current idxd driver contains > dedicated workqueue (dwq) support only. A dwq accepts descriptors from a MOVDIR64B instruction. > MOVDIR64B is a posted instruction on the PCIe bus, it does not wait for any response from the > device. If the wq is full, submitted descriptors are dropped. A swq utilizes the ENQCMDS in > ring 0, which is a non-posted instruction. The zero flag would be set to 1 if the device rejects > the descriptor or if the wq is full. A swq can be shared between multiple users > (kernel or userspace) due to not having to keep track of the wq full condition for submission. > A swq requires PASID and can only run with SVA support. > > == IDXD SVA support == > Add utilization of PASID to support Shared Virtual Addressing (SVA). With PASID support, > the descriptors can be programmed with host virtual address (HVA) rather than IOVA. > The hardware will work with the IOMMU in fulfilling page requests. With SVA support, > a user app using the char device interface can now submit descriptors without having to pin the > virtual memory range it wants to DMA in its own address space. > > The series does not add SVA support for the dmaengine subsystem. That support is coming at a > later time. Applied, thanks -- ~Vinod