• Allen Hubbe's avatar
    NTB: Fix ntb_transport out-of-order RX update · da2e5ae5
    Allen Hubbe authored
    It was possible for a synchronous update of the RX index in the error
    case to get ahead of the asynchronous RX index update in the normal
    case.  Change the RX processing to preserve an RX completion order.
    
    There were two error cases.  First, if a buffer is not present to
    receive data, there would be no queue entry to preserve the RX
    completion order.  Instead of dropping the RX frame, leave the RX frame
    in the ring.  Schedule RX processing when RX entries are enqueued, in
    case there are RX frames waiting in the ring to be received.
    
    Second, if a buffer is too small to receive data, drop the frame in the
    ring, mark the RX entry as done, and indicate the error in the RX entry
    length.  Check for a negative length in the receive callback in
    ntb_netdev, and count occurrences as rx_length_errors.
    Signed-off-by: default avatarAllen Hubbe <Allen.Hubbe@emc.com>
    Signed-off-by: default avatarJon Mason <jdmason@kudzu.us>
    da2e5ae5
ntb_transport.c 49.8 KB