• Jason Wang's avatar
    vDPA: introduce vDPA bus · 961e9c84
    Jason Wang authored
    vDPA device is a device that uses a datapath which complies with the
    virtio specifications with vendor specific control path. vDPA devices
    can be both physically located on the hardware or emulated by
    software. vDPA hardware devices are usually implemented through PCIE
    with the following types:
    
    - PF (Physical Function) - A single Physical Function
    - VF (Virtual Function) - Device that supports single root I/O
      virtualization (SR-IOV). Its Virtual Function (VF) represents a
      virtualized instance of the device that can be assigned to different
      partitions
    - ADI (Assignable Device Interface) and its equivalents - With
      technologies such as Intel Scalable IOV, a virtual device (VDEV)
      composed by host OS utilizing one or more ADIs. Or its equivalent
      like SF (Sub function) from Mellanox.
    
    >From a driver's perspective, depends on how and where the DMA
    translation is done, vDPA devices are split into two types:
    
    - Platform specific DMA translation - From the driver's perspective,
      the device can be used on a platform where device access to data in
      memory is limited and/or translated. An example is a PCIE vDPA whose
      DMA request was tagged via a bus (e.g PCIE) specific way. DMA
      translation and protection are done at PCIE bus IOMMU level.
    - Device specific DMA translation - The device implements DMA
      isolation and protection through its own logic. An example is a vDPA
      device which uses on-chip IOMMU.
    
    To hide the differences and complexity of the above types for a vDPA
    device/IOMMU options and in order to present a generic virtio device
    to the upper layer, a device agnostic framework is required.
    
    This patch introduces a software vDPA bus which abstracts the
    common attributes of vDPA device, vDPA bus driver and the
    communication method (vdpa_config_ops) between the vDPA device
    abstraction and the vDPA bus driver. This allows multiple types of
    drivers to be used for vDPA device like the virtio_vdpa and vhost_vdpa
    driver to operate on the bus and allow vDPA device could be used by
    either kernel virtio driver or userspace vhost drivers as:
    
       virtio drivers  vhost drivers
              |             |
        [virtio bus]   [vhost uAPI]
              |             |
       virtio device   vhost device
       virtio_vdpa drv vhost_vdpa drv
                 \       /
                [vDPA bus]
                     |
                vDPA device
                hardware drv
                     |
                [hardware bus]
                     |
                vDPA hardware
    
    With the abstraction of vDPA bus and vDPA bus operations, the
    difference and complexity of the under layer hardware is hidden from
    upper layer. The vDPA bus drivers on top can use a unified
    vdpa_config_ops to control different types of vDPA device.
    Signed-off-by: default avatarJason Wang <jasowang@redhat.com>
    Link: https://lore.kernel.org/r/20200326140125.19794-6-jasowang@redhat.comSigned-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
    961e9c84
vdpa.c 3.95 KB