• Roland Dreier's avatar
    IPoIB/cm: Fix racy use of receive WR/SGL in ipoib_cm_post_receive_nonsrq() · a7d834c4
    Roland Dreier authored
    For devices that don't support SRQs, ipoib_cm_post_receive_nonsrq() is
    called from both ipoib_cm_handle_rx_wc() and ipoib_cm_nonsrq_init_rx(),
    and these two callers are not synchronized against each other.
    However, ipoib_cm_post_receive_nonsrq() always reuses the same receive
    work request and scatter list structures, so multiple callers can end
    up stepping on each other, which leads to posting garbled work
    requests.
    
    Fix this by having the caller pass in the ib_recv_wr and ib_sge
    structures to use, and allocating new local structures in
    ipoib_cm_nonsrq_init_rx().
    
    Based on a patch by Pradeep Satyanarayana <pradeep@us.ibm.com> and
    David Wilder <dwilder@us.ibm.com>, with debugging help from Hoang-Nam
    Nguyen <hnguyen@de.ibm.com>.
    Signed-off-by: default avatarRoland Dreier <rolandd@cisco.com>
    a7d834c4
ipoib_cm.c 42.2 KB