• Eugenia Emantayev's avatar
    net/mlx4_en: Fix BlueFlame race · 2d4b6466
    Eugenia Emantayev authored
    Fix a race between BlueFlame flow and stamping in post send flow.
    Example:
    	SW: Build WQE 0 on the TX buffer, except the ownership bit
    	SW: Set ownership for WQE 0 on the TX buffer
    	SW: Ring doorbell for WQE 0
    	SW: Build WQE 1 on the TX buffer, except the ownership bit
    	SW: Set ownership for WQE 1 on the TX buffer
    	HW: Read WQE 0 and then WQE 1, before doorbell was rung/BF was done for WQE 1
    	HW: Produce CQEs for WQE 0 and WQE 1
    	SW: Process the CQEs, and stamp WQE 0 and WQE 1 accordingly (on the TX buffer)
    	SW: Copy WQE 1 from the TX buffer to the BF register - ALREADY STAMPED!
    	HW: CQE error with index 0xFFFF  - the BF WQE's control segment is STAMPED,
    		so the BF index is 0xFFFF. Error: Invalid Opcode.
    As a result QP enters the error state and no traffic can be sent.
    
    Solution:
    When stamping - do not stamp last completed wqe.
    Signed-off-by: default avatarEugenia Emantayev <eugenia@mellanox.com>
    Signed-off-by: default avatarAmir Vadai <amirv@mellanox.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    2d4b6466
en_tx.c 22.4 KB