[Intel-wired-lan] [PATCH net-next 00/15] Introduce IDPF driver

Willem de Bruijn willemb at google.com
Wed Mar 29 17:31:50 UTC 2023


On Wed, Mar 29, 2023 at 10:07 AM Pavan Kumar Linga
<pavan.kumar.linga at intel.com> wrote:
>
> This patch series introduces the Infrastructure Data Path Function (IDPF)
> driver. It is used for both physical and virtual functions. Except for
> some of the device operations the rest of the functionality is the same
> for both PF and VF. IDPF uses virtchnl version2 opcodes and structures
> defined in the virtchnl2 header file which helps the driver to learn
> the capabilities and register offsets from the device Control Plane (CP)
> instead of assuming the default values.
>
> The format of the series follows the driver init flow to interface open.
> To start with, probe gets called and kicks off the driver initialization
> by spawning the 'vc_event_task' work queue which in turn calls the
> 'hard reset' function. As part of that, the mailbox is initialized which
> is used to send/receive the virtchnl messages to/from the CP. Once that is
> done, 'core init' kicks in which requests all the required global resources
> from the CP and spawns the 'init_task' work queue to create the vports.
>
> Based on the capability information received, the driver creates the said
> number of vports (one or many) where each vport is associated to a netdev.
> Also, each vport has its own resources such as queues, vectors etc.
> From there, rest of the netdev_ops and data path are added.
>
> IDPF implements both single queue which is traditional queueing model
> as well as split queue model. In split queue model, it uses separate queue
> for both completion descriptors and buffers which helps to implement
> out-of-order completions. It also helps to implement asymmetric queues,
> for example multiple RX completion queues can be processed by a single
> RX buffer queue and multiple TX buffer queues can be processed by a
> single TX completion queue. In single queue model, same queue is used
> for both descriptor completions as well as buffer completions. It also
> supports features such as generic checksum offload, generic receive
> offload (hardware GRO) etc.
>
> Pavan Kumar Linga (15):
>   virtchnl: add virtchnl version 2 ops
>   idpf: add module register and probe functionality
>   idpf: add controlq init and reset checks
>   idpf: add core init and interrupt request
>   idpf: add create vport and netdev configuration
>   idpf: continue expanding init task
>   idpf: configure resources for TX queues
>   idpf: configure resources for RX queues
>   idpf: initialize interrupts and enable vport
>   idpf: add splitq start_xmit
>   idpf: add TX splitq napi poll support
>   idpf: add RX splitq napi poll support
>   idpf: add singleq start_xmit and napi poll
>   idpf: add ethtool callbacks
>   idpf: configure SRIOV and add other ndo_ops
>
>  .../device_drivers/ethernet/intel/idpf.rst    |   46 +
>  drivers/net/ethernet/intel/Kconfig            |   11 +
>  drivers/net/ethernet/intel/Makefile           |    1 +
>  drivers/net/ethernet/intel/idpf/Makefile      |   18 +
>  drivers/net/ethernet/intel/idpf/idpf.h        |  734 +++
>  .../net/ethernet/intel/idpf/idpf_controlq.c   |  644 +++
>  .../net/ethernet/intel/idpf/idpf_controlq.h   |  131 +
>  .../ethernet/intel/idpf/idpf_controlq_api.h   |  190 +
>  .../ethernet/intel/idpf/idpf_controlq_setup.c |  175 +
>  drivers/net/ethernet/intel/idpf/idpf_dev.c    |  179 +
>  drivers/net/ethernet/intel/idpf/idpf_devids.h |   10 +
>  .../net/ethernet/intel/idpf/idpf_ethtool.c    | 1325 +++++
>  .../ethernet/intel/idpf/idpf_lan_pf_regs.h    |  124 +
>  .../net/ethernet/intel/idpf/idpf_lan_txrx.h   |  293 +
>  .../ethernet/intel/idpf/idpf_lan_vf_regs.h    |  128 +
>  drivers/net/ethernet/intel/idpf/idpf_lib.c    | 2551 +++++++++
>  drivers/net/ethernet/intel/idpf/idpf_main.c   |   85 +
>  drivers/net/ethernet/intel/idpf/idpf_mem.h    |   20 +
>  .../ethernet/intel/idpf/idpf_singleq_txrx.c   | 1262 +++++
>  drivers/net/ethernet/intel/idpf/idpf_txrx.c   | 4850 +++++++++++++++++
>  drivers/net/ethernet/intel/idpf/idpf_txrx.h   |  838 +++
>  drivers/net/ethernet/intel/idpf/idpf_vf_dev.c |  180 +
>  .../net/ethernet/intel/idpf/idpf_virtchnl.c   | 3802 +++++++++++++
>  drivers/net/ethernet/intel/idpf/virtchnl2.h   | 1153 ++++
>  .../ethernet/intel/idpf/virtchnl2_lan_desc.h  |  644 +++
>  25 files changed, 19394 insertions(+)
>  create mode 100644 Documentation/networking/device_drivers/ethernet/intel/idpf.rst
>  create mode 100644 drivers/net/ethernet/intel/idpf/Makefile
>  create mode 100644 drivers/net/ethernet/intel/idpf/idpf.h
>  create mode 100644 drivers/net/ethernet/intel/idpf/idpf_controlq.c
>  create mode 100644 drivers/net/ethernet/intel/idpf/idpf_controlq.h
>  create mode 100644 drivers/net/ethernet/intel/idpf/idpf_controlq_api.h
>  create mode 100644 drivers/net/ethernet/intel/idpf/idpf_controlq_setup.c
>  create mode 100644 drivers/net/ethernet/intel/idpf/idpf_dev.c
>  create mode 100644 drivers/net/ethernet/intel/idpf/idpf_devids.h
>  create mode 100644 drivers/net/ethernet/intel/idpf/idpf_ethtool.c
>  create mode 100644 drivers/net/ethernet/intel/idpf/idpf_lan_pf_regs.h
>  create mode 100644 drivers/net/ethernet/intel/idpf/idpf_lan_txrx.h
>  create mode 100644 drivers/net/ethernet/intel/idpf/idpf_lan_vf_regs.h
>  create mode 100644 drivers/net/ethernet/intel/idpf/idpf_lib.c
>  create mode 100644 drivers/net/ethernet/intel/idpf/idpf_main.c
>  create mode 100644 drivers/net/ethernet/intel/idpf/idpf_mem.h
>  create mode 100644 drivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c
>  create mode 100644 drivers/net/ethernet/intel/idpf/idpf_txrx.c
>  create mode 100644 drivers/net/ethernet/intel/idpf/idpf_txrx.h
>  create mode 100644 drivers/net/ethernet/intel/idpf/idpf_vf_dev.c
>  create mode 100644 drivers/net/ethernet/intel/idpf/idpf_virtchnl.c
>  create mode 100644 drivers/net/ethernet/intel/idpf/virtchnl2.h
>  create mode 100644 drivers/net/ethernet/intel/idpf/virtchnl2_lan_desc.h
>
> --
> 2.37.3

Reviewed-by: David Decotigny <decot at google.com>
Reviewed-by: Willem de Bruijn <willemb at google.com>

Tested-by: David Decotigny <decot at google.com>
Tested-by: Willem de Bruijn <willemb at google.com>

We have been working with this driver at Google for well over a year
through multiple revisions.

The current version runs in continuous testing with both functional
(RSS, checksum, TSO/USO, HW-GRO, etc., many from
tools/testing/selftests/net) and performance (github.com/google/neper
tcp_stream, tcp_rr, etc. in variety of #threads and #flows
configurations) tests, including ASAN, lockdep. The driver is also
exercised continuously with more varied application workloads.


More information about the Intel-wired-lan mailing list