Hi Nicolin, On 4/11/2025 12:07 PM, Nicolin Chen wrote: > The vIOMMU object is designed to represent a slice of an IOMMU HW for its > virtualization features shared with or passed to user space (a VM mostly) > in a way of HW acceleration. This extended the HWPT-based design for more > advanced virtualization feature. > > A vCMDQ introduced by this series as a part of the vIOMMU infrastructure > represents a HW supported queue/buffer for VM to use exclusively, e.g. > - NVIDIA's virtual command queue > - AMD vIOMMU's command buffer I assume we can pass multiple buffer details (like GPA, size) from guest to hypervisor. Is that correct understanding? > either of which is an IOMMU HW feature to directly load and execute cache > invalidation commands issued by a guest kernel, to shoot down TLB entries > that HW cached for guest-owned stage-1 page table entries. This is a big > improvement since there is no VM Exit during an invalidation, compared to > the traditional invalidation pathway by trapping a guest-own invalidation > queue and forwarding those commands/requests to the host kernel that will > eventually fill a HW-owned queue to execute those commands. > > Thus, a vCMDQ object, as an initial use case, is all about a guest-owned > HW command queue that VMM can allocate/configure depending on the request > from a guest kernel. Introduce a new IOMMUFD_OBJ_VCMDQ and its allocator > IOMMUFD_CMD_VCMDQ_ALLOC allowing VMM to forward the IOMMU-specific queue > info, such as queue base address, size, and etc. > > Meanwhile, a guest-owned command queue needs the kernel (a command queue > driver) to control the queue by reading/writing its consumer and producer > indexes, which means the command queue HW allows the guest kernel to get > a direct R/W access to those registers. Introduce an mmap infrastructure > to the iommufd core so as to support pass through a piece of MMIO region > from the host physical address space to the guest physical address space. > The VMA info (vm_pgoff/size) used by an mmap must be pre-allocated during > the IOMMUFD_CMD_VCMDQ_ALLOC and given those info to the user space as an > output driver-data by the IOMMUFD_CMD_VCMDQ_ALLOC. So, this requires a > driver-specific user data support by a vIOMMU object. Nice! Thanks. -Vasant