From: Bernard Metzler <bmt@xxxxxxxxxxxxxx> This patch set contributes a new version of the SoftiWarp driver, as originally introduced to the list Oct 6th, 2017. SoftiWarp (siw) implements the iWarp RDMA protocol over kernel TCP sockets. The driver integrates with the linux-rdma framework. For this patch series, we aimed at fixing the main obstacles, which prevented siw acceptance in the past: 1. siw now uses the recently extended rdma netlink protocol for adding and removing siw devices. It became the only way of managing siw devices. 2. The driver integrates with the currently reviewed RDMA/IWPM patch series on introducing no port mapping requirements. These patches as provided by Steve Wise are a pre-requisit to run siw in an environment with active iwpmd. The code has the following known limitations: 1. Only IPv4 addresses are supported / no IPv6 support. 2. All previously flexible module parameters are translated into const values as defined in siw_main.c. We propose another extension of the netlink protocol to make those driver parameters dynamically settable. Ideally, we would distinguish between link specific and connection specific parameters. Currently, we would like to see the following parameters settable: o MPA peer-to-peer mode (boolean on/off) o MPA CRC (boolean on/off) o MPA CRC negotiation mode: accept different CRC setting from peer (boolean on/off) o TCP_NODELAY to control Nagle settings of TCP socket (boolean on/off) o MPA version (0, 1 or 2) o Zerocopy to let TCP transmit out of application buffers wr/o copying data (boolean on/off) o GSO to select Generic Segementation Offload for larger frames (one frame may span 1 .. n Ethernet frames, if advertised by TCP socket) In principle, all of those parameters could be controlled per connection. At least, dynamically setting those per device is highly desirable. Please let's agree on the most clean solution for that. We maintain a snapshot of the current code at https://github.com/zrlio/softiwarp-for-linux-rdma.git within branch 'siw-for-rdma-next-nvme-5.0'. This branch is based on the rdma-next tree and additionally includes the latest netlink and portmapper patches from Steve Wise as well as the latest nvme-5.0 code changes from git://git.infradead.org/nvme.git. We tested siw with NVMeF host and target applications and therefor merged with latest nvme development. The matching siw user library is maintained at https://github.com/zrlio/softiwarp-user-for-linux-rdma.git. It is based on rdma-core, and extended with Steve's patches to both rdma netlink and portmapper. The relevant branch name is 'siw-for-rdma-next'. As always, we'd highly appreciate your code review. Thanks very much for your time. Bernard Bernard Metzler (13): iWarp wire packet format SIW main include file SIW network and RDMA core interface SIW object management SIW connection management SIW application interface SIW application buffer management SIW queue pair methods SIW transmit path SIW receive path SIW completion queue methods SIW debugging SIW addition to kernel build environment drivers/infiniband/Kconfig | 1 + drivers/infiniband/sw/Makefile | 1 + drivers/infiniband/sw/siw/Kconfig | 17 + drivers/infiniband/sw/siw/Makefile | 15 + drivers/infiniband/sw/siw/iwarp.h | 415 ++++ drivers/infiniband/sw/siw/siw.h | 805 ++++++++ drivers/infiniband/sw/siw/siw_ae.c | 120 ++ drivers/infiniband/sw/siw/siw_cm.c | 2185 ++++++++++++++++++++++ drivers/infiniband/sw/siw/siw_cm.h | 156 ++ drivers/infiniband/sw/siw/siw_cq.c | 150 ++ drivers/infiniband/sw/siw/siw_debug.c | 467 +++++ drivers/infiniband/sw/siw/siw_debug.h | 87 + drivers/infiniband/sw/siw/siw_main.c | 846 +++++++++ drivers/infiniband/sw/siw/siw_mem.c | 243 +++ drivers/infiniband/sw/siw/siw_obj.c | 338 ++++ drivers/infiniband/sw/siw/siw_obj.h | 200 ++ drivers/infiniband/sw/siw/siw_qp.c | 1473 +++++++++++++++ drivers/infiniband/sw/siw/siw_qp_rx.c | 1533 +++++++++++++++ drivers/infiniband/sw/siw/siw_qp_tx.c | 1340 +++++++++++++ drivers/infiniband/sw/siw/siw_verbs.c | 1888 +++++++++++++++++++ drivers/infiniband/sw/siw/siw_verbs.h | 119 ++ include/uapi/rdma/rdma_user_ioctl_cmds.h | 1 + include/uapi/rdma/siw_user.h | 216 +++ 23 files changed, 12616 insertions(+) create mode 100644 drivers/infiniband/sw/siw/Kconfig create mode 100644 drivers/infiniband/sw/siw/Makefile create mode 100644 drivers/infiniband/sw/siw/iwarp.h create mode 100644 drivers/infiniband/sw/siw/siw.h create mode 100644 drivers/infiniband/sw/siw/siw_ae.c create mode 100644 drivers/infiniband/sw/siw/siw_cm.c create mode 100644 drivers/infiniband/sw/siw/siw_cm.h create mode 100644 drivers/infiniband/sw/siw/siw_cq.c create mode 100644 drivers/infiniband/sw/siw/siw_debug.c create mode 100644 drivers/infiniband/sw/siw/siw_debug.h create mode 100644 drivers/infiniband/sw/siw/siw_main.c create mode 100644 drivers/infiniband/sw/siw/siw_mem.c create mode 100644 drivers/infiniband/sw/siw/siw_obj.c create mode 100644 drivers/infiniband/sw/siw/siw_obj.h create mode 100644 drivers/infiniband/sw/siw/siw_qp.c create mode 100644 drivers/infiniband/sw/siw/siw_qp_rx.c create mode 100644 drivers/infiniband/sw/siw/siw_qp_tx.c create mode 100644 drivers/infiniband/sw/siw/siw_verbs.c create mode 100644 drivers/infiniband/sw/siw/siw_verbs.h create mode 100644 include/uapi/rdma/siw_user.h -- 2.17.2