mbox series

[net-next,v2,00/14] sfc: add vDPA support for EF100 devices

Message ID 20230307113621.64153-1-gautam.dawar@amd.com (mailing list archive)
Headers show
Series sfc: add vDPA support for EF100 devices | expand

Message

Gautam Dawar March 7, 2023, 11:36 a.m. UTC
Hi All,

This series adds the vdpa support for EF100 devices.
For now, only a network class of vdpa device is supported and
they can be created only on a VF. Each EF100 VF can have one
of the three function personalities (EF100, vDPA & None) at
any time with EF100 being the default. A VF's function personality
is changed to vDPA while creating the vdpa device using vdpa tool.

A vDPA management device is created per VF to allow selection of
the desired VF for vDPA device creation. The MAC address for the
target net device must be set either by specifying at the vdpa
device creation time via the `mac` parameter of the `vdpa dev add`
command or should be specified as the hardware address of the virtual
function using `devlink port function set hw_addr` command before
creating the vdpa device with the former taking precedence.

Changes since v1:

- To ensure isolation between DMA initiated by userspace (guest OS)
  and the host MCDI buffer, ummap VF's MCDI DMA buffer and use PF's
  IOMMU domain instead for executing vDPA VF's MCDI commands.
- As a result of above change, it is no more necessary to check for
  MCDI buffer's IOVA range overlap with the guest buffers. Accordingly,
  the DMA config operations and the rbtree/list implementation to store
  IOVA mappings have been dropped.
- Support vDPA only if running Firmware supports CLIENT_CMD_VF_PROXY
  capability. 
- Added .suspend config operation and updated get_vq_state/set_vq_state
  to support Live Migration. Also, features VIRTIO_F_ORDER_PLATFORM and
  VIRTIO_F_IN_ORDER have been masked off in get_device_features() to
  allow Live Migration as QEMU SVQ doesn't support them yet.
- Removed the minimum version (v6.1.0) requirement of QEMU as
  VIRTIO_F_IN_ORDER is not exposed
- Fetch the vdpa device MAC address from the underlying VF hw_addr (if
  set via `devlink port function set hw_addr` command)
- Removed the mandatory requirement of specifying mac address while
  creating vdpa device
- Moved create_vring_ctx() and get_doorbell_offset() in dev_add()
- Moved IRQ allocation at the time of vring creation
- Merged vring_created member of struct ef100_vdpa_vring_info as one
  of the flags in vring_state
- Simplified .set_status() implementation
- Removed un-necessary vdpa_state checks against
  EF100_VDPA_STATE_INITIALIZED
- Removed userspace triggerable warning in kick_vq()
- Updated year 2023 in copyright banner of new files
 
Gautam Dawar (14):
  sfc: add function personality support for EF100 devices
  sfc: implement MCDI interface for vDPA operations
  sfc: update MCDI headers for CLIENT_CMD_VF_PROXY capability bit
  sfc: evaluate vdpa support based on FW capability CLIENT_CMD_VF_PROXY
  sfc: implement init and fini functions for vDPA personality
  sfc: implement vDPA management device operations
  sfc: implement vdpa device config operations
  sfc: implement vdpa vring config operations
  sfc: implement device status related vdpa config operations
  sfc: implement filters for receiving traffic
  sfc: use PF's IOMMU domain for running VF's MCDI commands
  sfc: unmap VF's MCDI buffer when switching to vDPA mode
  sfc: update vdpa device MAC address
  sfc: register the vDPA device

 drivers/net/ethernet/sfc/Kconfig          |    8 +
 drivers/net/ethernet/sfc/Makefile         |    1 +
 drivers/net/ethernet/sfc/ef10.c           |    2 +-
 drivers/net/ethernet/sfc/ef100.c          |    7 +-
 drivers/net/ethernet/sfc/ef100_netdev.c   |   26 +-
 drivers/net/ethernet/sfc/ef100_nic.c      |  183 +-
 drivers/net/ethernet/sfc/ef100_nic.h      |   26 +-
 drivers/net/ethernet/sfc/ef100_vdpa.c     |  543 +++
 drivers/net/ethernet/sfc/ef100_vdpa.h     |  224 ++
 drivers/net/ethernet/sfc/ef100_vdpa_ops.c |  793 ++++
 drivers/net/ethernet/sfc/mcdi.c           |  108 +-
 drivers/net/ethernet/sfc/mcdi.h           |    9 +-
 drivers/net/ethernet/sfc/mcdi_filters.c   |   51 +-
 drivers/net/ethernet/sfc/mcdi_functions.c |    9 +-
 drivers/net/ethernet/sfc/mcdi_functions.h |    3 +-
 drivers/net/ethernet/sfc/mcdi_pcol.h      | 4390 ++++++++++++++++++++-
 drivers/net/ethernet/sfc/mcdi_vdpa.c      |  259 ++
 drivers/net/ethernet/sfc/mcdi_vdpa.h      |   83 +
 drivers/net/ethernet/sfc/net_driver.h     |   21 +
 drivers/net/ethernet/sfc/ptp.c            |    4 +-
 20 files changed, 6574 insertions(+), 176 deletions(-)
 create mode 100644 drivers/net/ethernet/sfc/ef100_vdpa.c
 create mode 100644 drivers/net/ethernet/sfc/ef100_vdpa.h
 create mode 100644 drivers/net/ethernet/sfc/ef100_vdpa_ops.c
 create mode 100644 drivers/net/ethernet/sfc/mcdi_vdpa.c
 create mode 100644 drivers/net/ethernet/sfc/mcdi_vdpa.h

Comments

Jason Wang March 10, 2023, 5:09 a.m. UTC | #1
On Tue, Mar 7, 2023 at 7:36 PM Gautam Dawar <gautam.dawar@amd.com> wrote:
>
> Hi All,
>
> This series adds the vdpa support for EF100 devices.

Would you mind posting some performance numbers for this device?

Thanks

> For now, only a network class of vdpa device is supported and
> they can be created only on a VF. Each EF100 VF can have one
> of the three function personalities (EF100, vDPA & None) at
> any time with EF100 being the default. A VF's function personality
> is changed to vDPA while creating the vdpa device using vdpa tool.
>
> A vDPA management device is created per VF to allow selection of
> the desired VF for vDPA device creation. The MAC address for the
> target net device must be set either by specifying at the vdpa
> device creation time via the `mac` parameter of the `vdpa dev add`
> command or should be specified as the hardware address of the virtual
> function using `devlink port function set hw_addr` command before
> creating the vdpa device with the former taking precedence.
>
> Changes since v1:
>
> - To ensure isolation between DMA initiated by userspace (guest OS)
>   and the host MCDI buffer, ummap VF's MCDI DMA buffer and use PF's
>   IOMMU domain instead for executing vDPA VF's MCDI commands.
> - As a result of above change, it is no more necessary to check for
>   MCDI buffer's IOVA range overlap with the guest buffers. Accordingly,
>   the DMA config operations and the rbtree/list implementation to store
>   IOVA mappings have been dropped.
> - Support vDPA only if running Firmware supports CLIENT_CMD_VF_PROXY
>   capability.
> - Added .suspend config operation and updated get_vq_state/set_vq_state
>   to support Live Migration. Also, features VIRTIO_F_ORDER_PLATFORM and
>   VIRTIO_F_IN_ORDER have been masked off in get_device_features() to
>   allow Live Migration as QEMU SVQ doesn't support them yet.
> - Removed the minimum version (v6.1.0) requirement of QEMU as
>   VIRTIO_F_IN_ORDER is not exposed
> - Fetch the vdpa device MAC address from the underlying VF hw_addr (if
>   set via `devlink port function set hw_addr` command)
> - Removed the mandatory requirement of specifying mac address while
>   creating vdpa device
> - Moved create_vring_ctx() and get_doorbell_offset() in dev_add()
> - Moved IRQ allocation at the time of vring creation
> - Merged vring_created member of struct ef100_vdpa_vring_info as one
>   of the flags in vring_state
> - Simplified .set_status() implementation
> - Removed un-necessary vdpa_state checks against
>   EF100_VDPA_STATE_INITIALIZED
> - Removed userspace triggerable warning in kick_vq()
> - Updated year 2023 in copyright banner of new files
>
> Gautam Dawar (14):
>   sfc: add function personality support for EF100 devices
>   sfc: implement MCDI interface for vDPA operations
>   sfc: update MCDI headers for CLIENT_CMD_VF_PROXY capability bit
>   sfc: evaluate vdpa support based on FW capability CLIENT_CMD_VF_PROXY
>   sfc: implement init and fini functions for vDPA personality
>   sfc: implement vDPA management device operations
>   sfc: implement vdpa device config operations
>   sfc: implement vdpa vring config operations
>   sfc: implement device status related vdpa config operations
>   sfc: implement filters for receiving traffic
>   sfc: use PF's IOMMU domain for running VF's MCDI commands
>   sfc: unmap VF's MCDI buffer when switching to vDPA mode
>   sfc: update vdpa device MAC address
>   sfc: register the vDPA device
>
>  drivers/net/ethernet/sfc/Kconfig          |    8 +
>  drivers/net/ethernet/sfc/Makefile         |    1 +
>  drivers/net/ethernet/sfc/ef10.c           |    2 +-
>  drivers/net/ethernet/sfc/ef100.c          |    7 +-
>  drivers/net/ethernet/sfc/ef100_netdev.c   |   26 +-
>  drivers/net/ethernet/sfc/ef100_nic.c      |  183 +-
>  drivers/net/ethernet/sfc/ef100_nic.h      |   26 +-
>  drivers/net/ethernet/sfc/ef100_vdpa.c     |  543 +++
>  drivers/net/ethernet/sfc/ef100_vdpa.h     |  224 ++
>  drivers/net/ethernet/sfc/ef100_vdpa_ops.c |  793 ++++
>  drivers/net/ethernet/sfc/mcdi.c           |  108 +-
>  drivers/net/ethernet/sfc/mcdi.h           |    9 +-
>  drivers/net/ethernet/sfc/mcdi_filters.c   |   51 +-
>  drivers/net/ethernet/sfc/mcdi_functions.c |    9 +-
>  drivers/net/ethernet/sfc/mcdi_functions.h |    3 +-
>  drivers/net/ethernet/sfc/mcdi_pcol.h      | 4390 ++++++++++++++++++++-
>  drivers/net/ethernet/sfc/mcdi_vdpa.c      |  259 ++
>  drivers/net/ethernet/sfc/mcdi_vdpa.h      |   83 +
>  drivers/net/ethernet/sfc/net_driver.h     |   21 +
>  drivers/net/ethernet/sfc/ptp.c            |    4 +-
>  20 files changed, 6574 insertions(+), 176 deletions(-)
>  create mode 100644 drivers/net/ethernet/sfc/ef100_vdpa.c
>  create mode 100644 drivers/net/ethernet/sfc/ef100_vdpa.h
>  create mode 100644 drivers/net/ethernet/sfc/ef100_vdpa_ops.c
>  create mode 100644 drivers/net/ethernet/sfc/mcdi_vdpa.c
>  create mode 100644 drivers/net/ethernet/sfc/mcdi_vdpa.h
>
> --
> 2.30.1
>
Gautam Dawar March 13, 2023, 6:26 a.m. UTC | #2
On 3/10/23 10:39, Jason Wang wrote:
> Caution: This message originated from an External Source. Use proper caution when opening attachments, clicking links, or responding.
>
>
> On Tue, Mar 7, 2023 at 7:36 PM Gautam Dawar <gautam.dawar@amd.com> wrote:
>> Hi All,
>>
>> This series adds the vdpa support for EF100 devices.
> Would you mind posting some performance numbers for this device?

Sure, will do with the next version of this patch series.

Thanks

> Thanks
>
>> For now, only a network class of vdpa device is supported and
>> they can be created only on a VF. Each EF100 VF can have one
>> of the three function personalities (EF100, vDPA & None) at
>> any time with EF100 being the default. A VF's function personality
>> is changed to vDPA while creating the vdpa device using vdpa tool.
>>
>> A vDPA management device is created per VF to allow selection of
>> the desired VF for vDPA device creation. The MAC address for the
>> target net device must be set either by specifying at the vdpa
>> device creation time via the `mac` parameter of the `vdpa dev add`
>> command or should be specified as the hardware address of the virtual
>> function using `devlink port function set hw_addr` command before
>> creating the vdpa device with the former taking precedence.
>>
>> Changes since v1:
>>
>> - To ensure isolation between DMA initiated by userspace (guest OS)
>>    and the host MCDI buffer, ummap VF's MCDI DMA buffer and use PF's
>>    IOMMU domain instead for executing vDPA VF's MCDI commands.
>> - As a result of above change, it is no more necessary to check for
>>    MCDI buffer's IOVA range overlap with the guest buffers. Accordingly,
>>    the DMA config operations and the rbtree/list implementation to store
>>    IOVA mappings have been dropped.
>> - Support vDPA only if running Firmware supports CLIENT_CMD_VF_PROXY
>>    capability.
>> - Added .suspend config operation and updated get_vq_state/set_vq_state
>>    to support Live Migration. Also, features VIRTIO_F_ORDER_PLATFORM and
>>    VIRTIO_F_IN_ORDER have been masked off in get_device_features() to
>>    allow Live Migration as QEMU SVQ doesn't support them yet.
>> - Removed the minimum version (v6.1.0) requirement of QEMU as
>>    VIRTIO_F_IN_ORDER is not exposed
>> - Fetch the vdpa device MAC address from the underlying VF hw_addr (if
>>    set via `devlink port function set hw_addr` command)
>> - Removed the mandatory requirement of specifying mac address while
>>    creating vdpa device
>> - Moved create_vring_ctx() and get_doorbell_offset() in dev_add()
>> - Moved IRQ allocation at the time of vring creation
>> - Merged vring_created member of struct ef100_vdpa_vring_info as one
>>    of the flags in vring_state
>> - Simplified .set_status() implementation
>> - Removed un-necessary vdpa_state checks against
>>    EF100_VDPA_STATE_INITIALIZED
>> - Removed userspace triggerable warning in kick_vq()
>> - Updated year 2023 in copyright banner of new files
>>
>> Gautam Dawar (14):
>>    sfc: add function personality support for EF100 devices
>>    sfc: implement MCDI interface for vDPA operations
>>    sfc: update MCDI headers for CLIENT_CMD_VF_PROXY capability bit
>>    sfc: evaluate vdpa support based on FW capability CLIENT_CMD_VF_PROXY
>>    sfc: implement init and fini functions for vDPA personality
>>    sfc: implement vDPA management device operations
>>    sfc: implement vdpa device config operations
>>    sfc: implement vdpa vring config operations
>>    sfc: implement device status related vdpa config operations
>>    sfc: implement filters for receiving traffic
>>    sfc: use PF's IOMMU domain for running VF's MCDI commands
>>    sfc: unmap VF's MCDI buffer when switching to vDPA mode
>>    sfc: update vdpa device MAC address
>>    sfc: register the vDPA device
>>
>>   drivers/net/ethernet/sfc/Kconfig          |    8 +
>>   drivers/net/ethernet/sfc/Makefile         |    1 +
>>   drivers/net/ethernet/sfc/ef10.c           |    2 +-
>>   drivers/net/ethernet/sfc/ef100.c          |    7 +-
>>   drivers/net/ethernet/sfc/ef100_netdev.c   |   26 +-
>>   drivers/net/ethernet/sfc/ef100_nic.c      |  183 +-
>>   drivers/net/ethernet/sfc/ef100_nic.h      |   26 +-
>>   drivers/net/ethernet/sfc/ef100_vdpa.c     |  543 +++
>>   drivers/net/ethernet/sfc/ef100_vdpa.h     |  224 ++
>>   drivers/net/ethernet/sfc/ef100_vdpa_ops.c |  793 ++++
>>   drivers/net/ethernet/sfc/mcdi.c           |  108 +-
>>   drivers/net/ethernet/sfc/mcdi.h           |    9 +-
>>   drivers/net/ethernet/sfc/mcdi_filters.c   |   51 +-
>>   drivers/net/ethernet/sfc/mcdi_functions.c |    9 +-
>>   drivers/net/ethernet/sfc/mcdi_functions.h |    3 +-
>>   drivers/net/ethernet/sfc/mcdi_pcol.h      | 4390 ++++++++++++++++++++-
>>   drivers/net/ethernet/sfc/mcdi_vdpa.c      |  259 ++
>>   drivers/net/ethernet/sfc/mcdi_vdpa.h      |   83 +
>>   drivers/net/ethernet/sfc/net_driver.h     |   21 +
>>   drivers/net/ethernet/sfc/ptp.c            |    4 +-
>>   20 files changed, 6574 insertions(+), 176 deletions(-)
>>   create mode 100644 drivers/net/ethernet/sfc/ef100_vdpa.c
>>   create mode 100644 drivers/net/ethernet/sfc/ef100_vdpa.h
>>   create mode 100644 drivers/net/ethernet/sfc/ef100_vdpa_ops.c
>>   create mode 100644 drivers/net/ethernet/sfc/mcdi_vdpa.c
>>   create mode 100644 drivers/net/ethernet/sfc/mcdi_vdpa.h
>>
>> --
>> 2.30.1
>>