• Shiraz Saleem's avatar
    RDMA/irdma: Reduce iWARP QP destroy time · 2df6d895
    Shiraz Saleem authored
    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: 146b9756 ("RDMA/irdma: Add connection manager")
    Link: https://lore.kernel.org/r/20220425181703.1634-3-shiraz.saleem@intel.comSigned-off-by: default avatarShiraz Saleem <shiraz.saleem@intel.com>
    Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
    2df6d895
cm.c 120 KB