• Benjamin Poirier's avatar
    bna: Add synchronization for tx ring. · 32dacf49
    Benjamin Poirier authored
    commit d667f785 upstream.
    
    We received two reports of BUG_ON in bnad_txcmpl_process() where
    hw_consumer_index appeared to be ahead of producer_index. Out of order
    write/read of these variables could explain these reports.
    
    bnad_start_xmit(), as a producer of tx descriptors, has a few memory
    barriers sprinkled around writes to producer_index and the device's
    doorbell but they're not paired with anything in bnad_txcmpl_process(), a
    consumer.
    
    Since we are synchronizing with a device, we must use mandatory barriers,
    not smp_*. Also, I didn't see the purpose of the last smp_mb() in
    bnad_start_xmit().
    Signed-off-by: default avatarBenjamin Poirier <bpoirier@suse.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    Signed-off-by: default avatarJiri Slaby <jslaby@suse.cz>
    32dacf49
bnad.c 86.3 KB