bnx2x: Tx barriers and locks
authorVladislav Zolotarov <vladz@broadcom.com>
Sun, 28 Feb 2010 00:12:02 +0000 (00:12 +0000)
committerDavid S. Miller <davem@davemloft.net>
Mon, 1 Mar 2010 02:37:12 +0000 (18:37 -0800)
commitc16cc0b464b8876cfd57ce1c1dbcb6f9a6a0bce3
tree8f70b0b1a48a5e9e2ad44d7d446936a75a936215
parent76dadd76c265a0cdb5a76aa4eef03fcc9639b388
bnx2x: Tx barriers and locks

[Resending with the proper subject. Sorry for the mess. ]

This patch is based on the RFC of Stanislaw Gruszka.

More specifically it fixes two possible races:
- One, described by Stanislaw, may lead to permanent disabling of the Tx
queue.
This is fixed by adding the smp_wmb() to propagate the BD consumer
change towards the memory.
- Second may lead to bnx2x_start_xmit() returning NETDEV_TX_BUSY.
This is fixed by taking a tx_lock() before rechecking the number of
available Tx BDs.

thanks,
vlad

Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
Signed-off-by: Vladislav Zolotarov <vladz@broadcom.com>
Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/bnx2x_main.c