• Haiyang Zhang's avatar
    net: mana: Fix race of mana_hwc_post_rx_wqe and new hwc response · 8af174ea
    Haiyang Zhang authored
    The mana_hwc_rx_event_handler() / mana_hwc_handle_resp() calls
    complete(&ctx->comp_event) before posting the wqe back. It's
    possible that other callers, like mana_create_txq(), start the
    next round of mana_hwc_send_request() before the posting of wqe.
    And if the HW is fast enough to respond, it can hit no_wqe error
    on the HW channel, then the response message is lost. The mana
    driver may fail to create queues and open, because of waiting for
    the HW response and timed out.
    Sample dmesg:
    [  528.610840] mana 39d4:00:02.0: HWC: Request timed out!
    [  528.614452] mana 39d4:00:02.0: Failed to send mana message: -110, 0x0
    [  528.618326] mana 39d4:00:02.0 enP14804s2: Failed to create WQ object: -110
    
    To fix it, move posting of rx wqe before complete(&ctx->comp_event).
    
    Cc: stable@vger.kernel.org
    Fixes: ca9c54d2 ("net: mana: Add a driver for Microsoft Azure Network Adapter (MANA)")
    Signed-off-by: default avatarHaiyang Zhang <haiyangz@microsoft.com>
    Reviewed-by: default avatarLong Li <longli@microsoft.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    8af174ea
hw_channel.c 20.8 KB