]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commit
RDMA/irdma: Reduce iWARP QP destroy time
authorShiraz Saleem <shiraz.saleem@intel.com>
Mon, 25 Apr 2022 18:17:02 +0000 (13:17 -0500)
committerStefan Bader <stefan.bader@canonical.com>
Wed, 22 Jun 2022 12:23:17 +0000 (14:23 +0200)
commitb34f29cd64c74a479d69feca5ce9f0bd2bcce5f3
treeb56df51b43a6290cf43a4f1ee70f3698ef053596
parent657828b728ac4dc18297d0d5fdbff405819d6435
RDMA/irdma: Reduce iWARP QP destroy time

BugLink: https://bugs.launchpad.net/bugs/1978240
commit 2df6d895907b2f5dfbc558cbff7801bba82cb3cc upstream.

QP destroy is synchronous and waits for its refcnt to be decremented in
irdma_cm_node_free_cb (for iWARP) which fires after the RCU grace period
elapses.

Applications running a large number of connections are exposed to high
wait times on destroy QP for events like SIGABORT.

The long pole for this wait time is the firing of the call_rcu callback
during a CM node destroy which can be slow. It holds the QP reference
count and blocks the destroy QP from completing.

call_rcu only needs to make sure that list walkers have a reference to the
cm_node object before freeing it and thus need to wait for grace period
elapse. The rest of the connection teardown in irdma_cm_node_free_cb is
moved out of the grace period wait in irdma_destroy_connection. Also,
replace call_rcu with a simple kfree_rcu as it just needs to do a kfree on
the cm_node

Fixes: 146b9756f14c ("RDMA/irdma: Add connection manager")
Link: https://lore.kernel.org/r/20220425181703.1634-3-shiraz.saleem@intel.com
Signed-off-by: Shiraz Saleem <shiraz.saleem@intel.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
drivers/infiniband/hw/irdma/cm.c