This patch series implements work queues as an alternative for the main tasklets in the rdma_rxe driver. The first few patches perform some cleanups of the current tasklet code followed by a patch that makes the internal API for task execution pluggable and implements an inline and a tasklet based set of functions. The remaining patches cleanup the qp reset and error code in the three tasklets and modify the locking logic to prevent making multiple calls to the tasklet scheduling routine. Finally after this preparation the work queue equivalent set of functions is added and module parameters are implemented to allow tuning the task types. The advantages of the work queue version of deferred task execution is mainly that the work queue variant has much better scalability and overall performance than the tasklet variant. The tasklet performance saturates with one connected queue pair and stays constant. The work queue performance is slightly better for one queue pair but scales up with the number of connected queue pairs. The perftest microbenchmarks in local loopback mode (not a very realistic test case) can reach approximately 100Gb/sec with work queues compared to about 16Gb/sec for tasklets. This patch series is derived from an earlier patch set developed by Ian Ziemba at HPE which is used in some Lustre storage clients attached to Lustre servers with hard RoCE v2 NICs. Bob Pearson (16): RDMA/rxe: Remove init of task locks from rxe_qp.c RDMA/rxe: Removed unused name from rxe_task struct RDMA/rxe: Split rxe_run_task() into two subroutines RDMA/rxe: Make rxe_do_task static RDMA/rxe: Rename task->state_lock to task->lock RDMA/rxe: Make task interface pluggable RDMA/rxe: Simplify reset state handling in rxe_resp.c RDMA/rxe: Split rxe_drain_resp_pkts() RDMA/rxe: Handle qp error in rxe_resp.c RDMA/rxe: Cleanup comp tasks in rxe_qp.c RDMA/rxe: Remove __rxe_do_task() RDMA/rxe: Make tasks schedule each other RDMA/rxe: Implement disable/enable_task() RDMA/rxe: Replace TASK_STATE_START by TASK_STATE_IDLE RDMA/rxe: Add workqueue support for tasks RDMA/rxe: Add parameters to control task type drivers/infiniband/sw/rxe/rxe.c | 9 +- drivers/infiniband/sw/rxe/rxe_comp.c | 35 ++- drivers/infiniband/sw/rxe/rxe_net.c | 4 +- drivers/infiniband/sw/rxe/rxe_qp.c | 87 +++---- drivers/infiniband/sw/rxe/rxe_req.c | 10 +- drivers/infiniband/sw/rxe/rxe_resp.c | 75 ++++-- drivers/infiniband/sw/rxe/rxe_task.c | 354 ++++++++++++++++++++------ drivers/infiniband/sw/rxe/rxe_task.h | 76 +++--- drivers/infiniband/sw/rxe/rxe_verbs.c | 8 +- 9 files changed, 451 insertions(+), 207 deletions(-) base-commit: 9abf2313adc1ca1b6180c508c25f22f9395cc780 -- 2.34.1