bnxt_en: Fix tx push race condition.
Set the is_push flag in the software BD before the tx data is pushed to the chip. It is possible to get the tx interrupt as soon as the tx data is pushed. The tx handler will not handle the event properly if the is_push flag is not set and it will crash. Signed-off-by: Michael Chan <michael.chan@broadocm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
fa54cc70ed
commit
b9a8460a08
1 changed files with 2 additions and 1 deletions
|
@ -286,7 +286,9 @@ static netdev_tx_t bnxt_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||
cpu_to_le32(DB_KEY_TX_PUSH | DB_LONG_TX_PUSH | prod);
|
||||
txr->tx_prod = prod;
|
||||
|
||||
tx_buf->is_push = 1;
|
||||
netdev_tx_sent_queue(txq, skb->len);
|
||||
wmb(); /* Sync is_push and byte queue before pushing data */
|
||||
|
||||
push_len = (length + sizeof(*tx_push) + 7) / 8;
|
||||
if (push_len > 16) {
|
||||
|
@ -298,7 +300,6 @@ static netdev_tx_t bnxt_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||
push_len);
|
||||
}
|
||||
|
||||
tx_buf->is_push = 1;
|
||||
goto tx_done;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue