mirror of https://gitee.com/openkylin/linux.git
i40e/i40evf: carefully fill tx ring
We need to make sure that we stay away from the cache line where the DD bit (done) may be getting written back for the transmit ring since the hardware may be writing the whole cache line for a partial update. Change-ID: Id0b6dfc01f654def6a2a021af185803be1915d7e Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com> Signed-off-by: Catherine Sullivan <catherine.sullivan@intel.com> Tested-by: Kavindya Deegala <kavindya.s.deegala@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
ff80301efa
commit
be56052154
|
@ -2102,7 +2102,7 @@ static int i40e_xmit_descriptor_count(struct sk_buff *skb,
|
|||
|
||||
/* need: 1 descriptor per page * PAGE_SIZE/I40E_MAX_DATA_PER_TXD,
|
||||
* + 1 desc for skb_head_len/I40E_MAX_DATA_PER_TXD,
|
||||
* + 2 desc gap to keep tail from touching head,
|
||||
* + 4 desc gap to avoid the cache line where head is,
|
||||
* + 1 desc for context descriptor,
|
||||
* otherwise try next time
|
||||
*/
|
||||
|
@ -2113,7 +2113,7 @@ static int i40e_xmit_descriptor_count(struct sk_buff *skb,
|
|||
count += skb_shinfo(skb)->nr_frags;
|
||||
#endif
|
||||
count += TXD_USE_COUNT(skb_headlen(skb));
|
||||
if (i40e_maybe_stop_tx(tx_ring, count + 3)) {
|
||||
if (i40e_maybe_stop_tx(tx_ring, count + 4 + 1)) {
|
||||
tx_ring->tx_stats.tx_busy++;
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1482,7 +1482,7 @@ static int i40e_xmit_descriptor_count(struct sk_buff *skb,
|
|||
|
||||
/* need: 1 descriptor per page * PAGE_SIZE/I40E_MAX_DATA_PER_TXD,
|
||||
* + 1 desc for skb_head_len/I40E_MAX_DATA_PER_TXD,
|
||||
* + 2 desc gap to keep tail from touching head,
|
||||
* + 4 desc gap to avoid the cache line where head is,
|
||||
* + 1 desc for context descriptor,
|
||||
* otherwise try next time
|
||||
*/
|
||||
|
@ -1493,7 +1493,7 @@ static int i40e_xmit_descriptor_count(struct sk_buff *skb,
|
|||
count += skb_shinfo(skb)->nr_frags;
|
||||
#endif
|
||||
count += TXD_USE_COUNT(skb_headlen(skb));
|
||||
if (i40e_maybe_stop_tx(tx_ring, count + 3)) {
|
||||
if (i40e_maybe_stop_tx(tx_ring, count + 4 + 1)) {
|
||||
tx_ring->tx_stats.tx_busy++;
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue