• Eli Cohen's avatar
    IPoIB: Fix TX queue lockup with mixed UD/CM traffic · f0dc117a
    Eli Cohen authored
    The IPoIB UD QP reports send completions to priv->send_cq, which is
    usually left unarmed; it only gets armed when the number of
    outstanding send requests reaches the size of the TX queue. This
    arming is done only in the send path for the UD QP.  However, when
    sending CM packets, the net queue may be stopped for the same reasons
    but no measures are taken to recover the UD path from a lockup.
    
    Consider this scenario: a host sends high rate of both CM and UD
    packets, with a TX queue length of N.  If at some time the number of
    outstanding UD packets is more than N/2 and the overall outstanding
    packets is N-1, and CM sends a packet (making the number of
    outstanding sends equal N), the TX queue will be stopped.  When all
    the CM packets complete, the number of outstanding packets will still
    be higher than N/2 so the TX queue will not be restarted.
    
    Fix this by calling ib_req_notify_cq() when the queue is stopped in
    the CM path.
    Signed-off-by: default avatarEli Cohen <eli@mellanox.co.il>
    Signed-off-by: default avatarRoland Dreier <rolandd@cisco.com>
    f0dc117a
ipoib_cm.c 42.7 KB