[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