23 Oct, 2020

1 commit


06 Aug, 2020

3 commits

  • Modify get_vq_state() so it returns an error code. In case of hardware
    acceleration, the available index may be retrieved from the device, an
    operation that can possibly fail.

    Reviewed-by: Parav Pandit
    Signed-off-by: Eli Cohen
    Link: https://lore.kernel.org/r/20200804162048.22587-9-eli@mellanox.com
    Signed-off-by: Michael S. Tsirkin
    Acked-by: Jason Wang

    Eli Cohen
     
  • For now VQ state involves 16 bit available index value encoded in u64
    variable. In the future it will be extended to contain more fields. Use
    struct to contain the state, now containing only a single u16 for the
    available index. In the future we can add fields to this struct.

    Reviewed-by: Parav Pandit
    Acked-by: Jason Wang
    Signed-off-by: Eli Cohen
    Link: https://lore.kernel.org/r/20200804162048.22587-8-eli@mellanox.com
    Signed-off-by: Michael S. Tsirkin

    Eli Cohen
     
  • This will enable vdpa providers to add support for multi queue feature
    and publish it to upper layers (vhost and virtio).

    Signed-off-by: Max Gurtovoy
    Reviewed-by: Jason Wang
    Link: https://lore.kernel.org/r/20200804162048.22587-7-eli@mellanox.com
    Signed-off-by: Michael S. Tsirkin

    Max Gurtovoy
     

05 Aug, 2020

3 commits

  • IRQ of a vq is not expected to be changed in a DRIVER_OK ~ !DRIVER_OK
    period for irq offloading purposes. Place this comment at the side of
    bus ops get_vq_irq than in set_status in vhost_vdpa.

    Signed-off-by: Zhu Lingshan
    Link: https://lore.kernel.org/r/20200804102123.69978-1-lingshan.zhu@intel.com
    Signed-off-by: Michael S. Tsirkin

    Zhu Lingshan
     
  • This commit adds a new function get_vq_irq() in struct
    vdpa_config_ops, which will return the irq number of a
    virtqueue.

    Signed-off-by: Zhu Lingshan
    Suggested-by: Jason Wang
    Link: https://lore.kernel.org/r/20200731065533.4144-4-lingshan.zhu@intel.com
    Signed-off-by: Michael S. Tsirkin

    Zhu Lingshan
     
  • Some legacy guests just assume features are 0 after reset.
    We detect that config space is accessed before features are
    set and set features to 0 automatically.
    Note: some legacy guests might not even access config space, if this is
    reported in the field we might need to catch a kick to handle these.

    Signed-off-by: Michael S. Tsirkin

    Michael S. Tsirkin
     

05 Jun, 2020

1 commit

  • This patch introduces a new method in the vdpa_config_ops which
    reports the physical address and the size of the doorbell for a
    specific virtqueue.

    This will be used by the future patches that maps doorbell to
    userspace.

    Signed-off-by: Jason Wang
    Link: https://lore.kernel.org/r/20200529080303.15449-4-jasowang@redhat.com
    Signed-off-by: Michael S. Tsirkin

    Jason Wang
     

17 Apr, 2020

1 commit

  • get_vq_align returns u16 now, but that's not enough for
    systems/devices with 64K pages. All callers assign it to
    a u32 variable anyway, so let's just change the return
    value type to u32.

    Reported-by: Arnd Bergmann
    Signed-off-by: Michael S. Tsirkin

    Michael S. Tsirkin
     

02 Apr, 2020

1 commit

  • 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: Jason Wang
    Link: https://lore.kernel.org/r/20200326140125.19794-6-jasowang@redhat.com
    Signed-off-by: Michael S. Tsirkin

    Jason Wang