lkml.org 
[lkml]   [2021]   [Aug]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC][PATCH v2 03/13] vfio: Document VMID control for IOMMU Virtualization
    Date
    The VFIO API was enhanced to support VMID control with two
    new iotcls to set and get VMID between the kernel and the
    virtual machine hypervisor. So updating the document.

    Signed-off-by: Nicolin Chen <nicolinc@nvidia.com>
    ---
    Documentation/driver-api/vfio.rst | 34 +++++++++++++++++++++++++++++++
    1 file changed, 34 insertions(+)

    diff --git a/Documentation/driver-api/vfio.rst b/Documentation/driver-api/vfio.rst
    index c663b6f97825..a76a17065cdd 100644
    --- a/Documentation/driver-api/vfio.rst
    +++ b/Documentation/driver-api/vfio.rst
    @@ -239,6 +239,40 @@ group and can access them as follows::
    /* Gratuitous device reset and go... */
    ioctl(device, VFIO_DEVICE_RESET);

    +IOMMU Virtual Machine Identifier (VMID)
    +------------------------
    +In case of virtualization, each VM is assigned a Virtual Machine Identifier
    +(VMID). This VMID is used to tag translation lookaside buffer (TLB) entries,
    +to identify which VM each entry belongs to. This tagging allows translations
    +for multiple different VMs to be present in the TLBs at the same time.
    +
    +The IOMMU Kernel driver is responsible for allocating a VMID. However, only
    +a hypervisor knows what physical devices get assigned to the same VM. Thus,
    +when the first physical device gets assigned to the VM, once the hypervisor
    +finishes its IOCTL call of VFIO_SET_IOMMU, it should call the following:
    +
    +struct vm {
    + int iommu_type;
    + uint32_t vmid; /* initial value is VFIO_IOMMU_VMID_INVALID */
    +} vm0;
    +
    + /* ... */
    + ioctl(container->fd, VFIO_SET_IOMMU, vm0->iommu_type);
    + /* ... */
    + if (vm0->vmid == VFIO_IOMMU_VMID_INVALID)
    + ioctl(container->fd, VFIO_IOMMU_GET_VMID, &vm0->vmid);
    +
    +This VMID would be the shared value, across the entire VM, between all the
    +physical devices that are assigned to it. So, when other physical devices
    +get assigned to the VM, before the hypervisor runs into the IOCTL call of
    +VFIO_IOMMU_SET_VMID, it should call the following:
    +
    + /* ... */
    + ioctl(container->fd, VFIO_SET_IOMMU, vm0->iommu_type);
    + /* ... */
    + if (vm0->vmid != VFIO_IOMMU_VMID_INVALID)
    + ioctl(container->fd, VFIO_IOMMU_SET_VMID, vmid);
    +
    VFIO User API
    -------------------------------------------------------------------------------

    --
    2.17.1
    \
     
     \ /
      Last update: 2021-08-31 05:08    [W:2.954 / U:0.108 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site