|
@@ -177,6 +177,7 @@ bnad_txcmpl_process(struct bnad *bnad, struct bna_tcb *tcb)
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|
hw_cons = *(tcb->hw_consumer_index);
|
|
hw_cons = *(tcb->hw_consumer_index);
|
|
|
|
+ rmb();
|
|
cons = tcb->consumer_index;
|
|
cons = tcb->consumer_index;
|
|
q_depth = tcb->q_depth;
|
|
q_depth = tcb->q_depth;
|
|
|
|
|
|
@@ -3094,7 +3095,7 @@ bnad_start_xmit(struct sk_buff *skb, struct net_device *netdev)
|
|
BNA_QE_INDX_INC(prod, q_depth);
|
|
BNA_QE_INDX_INC(prod, q_depth);
|
|
tcb->producer_index = prod;
|
|
tcb->producer_index = prod;
|
|
|
|
|
|
- smp_mb();
|
|
|
|
|
|
+ wmb();
|
|
|
|
|
|
if (unlikely(!test_bit(BNAD_TXQ_TX_STARTED, &tcb->flags)))
|
|
if (unlikely(!test_bit(BNAD_TXQ_TX_STARTED, &tcb->flags)))
|
|
return NETDEV_TX_OK;
|
|
return NETDEV_TX_OK;
|
|
@@ -3102,7 +3103,6 @@ bnad_start_xmit(struct sk_buff *skb, struct net_device *netdev)
|
|
skb_tx_timestamp(skb);
|
|
skb_tx_timestamp(skb);
|
|
|
|
|
|
bna_txq_prod_indx_doorbell(tcb);
|
|
bna_txq_prod_indx_doorbell(tcb);
|
|
- smp_mb();
|
|
|
|
|
|
|
|
return NETDEV_TX_OK;
|
|
return NETDEV_TX_OK;
|
|
}
|
|
}
|