forked from Minki/linux
igb: move gso_segs into buffer_info structure
This change moves gso_segs into the buffer_info structure to avoid a possible cache line miss in clean_tx_irq. Signed-off-by: Nicholas Nunley <nicholasx.d.nunley@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
717ba08935
commit
40e90c26f5
@ -141,6 +141,7 @@ struct igb_buffer {
|
||||
u16 length;
|
||||
u16 next_to_watch;
|
||||
u16 mapped_as_page;
|
||||
u16 gso_segs;
|
||||
};
|
||||
/* RX */
|
||||
struct {
|
||||
|
@ -3641,6 +3641,7 @@ static inline int igb_tx_map_adv(struct igb_ring *tx_ring, struct sk_buff *skb,
|
||||
}
|
||||
|
||||
tx_ring->buffer_info[i].skb = skb;
|
||||
tx_ring->buffer_info[i].gso_segs = skb_shinfo(skb)->gso_segs ?: 1;
|
||||
tx_ring->buffer_info[first].next_to_watch = i;
|
||||
|
||||
return ++count;
|
||||
@ -5032,7 +5033,7 @@ static bool igb_clean_tx_irq(struct igb_q_vector *q_vector)
|
||||
if (skb) {
|
||||
unsigned int segs, bytecount;
|
||||
/* gso_segs is currently only valid for tcp */
|
||||
segs = skb_shinfo(skb)->gso_segs ?: 1;
|
||||
segs = buffer_info->gso_segs;
|
||||
/* multiply data chunks by size of headers */
|
||||
bytecount = ((segs - 1) * skb_headlen(skb)) +
|
||||
skb->len;
|
||||
|
Loading…
Reference in New Issue
Block a user