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 length;
|
||||||
u16 next_to_watch;
|
u16 next_to_watch;
|
||||||
u16 mapped_as_page;
|
u16 mapped_as_page;
|
||||||
|
u16 gso_segs;
|
||||||
};
|
};
|
||||||
/* RX */
|
/* RX */
|
||||||
struct {
|
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].skb = skb;
|
||||||
|
tx_ring->buffer_info[i].gso_segs = skb_shinfo(skb)->gso_segs ?: 1;
|
||||||
tx_ring->buffer_info[first].next_to_watch = i;
|
tx_ring->buffer_info[first].next_to_watch = i;
|
||||||
|
|
||||||
return ++count;
|
return ++count;
|
||||||
|
@ -5032,7 +5033,7 @@ static bool igb_clean_tx_irq(struct igb_q_vector *q_vector)
|
||||||
if (skb) {
|
if (skb) {
|
||||||
unsigned int segs, bytecount;
|
unsigned int segs, bytecount;
|
||||||
/* gso_segs is currently only valid for tcp */
|
/* 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 */
|
/* multiply data chunks by size of headers */
|
||||||
bytecount = ((segs - 1) * skb_headlen(skb)) +
|
bytecount = ((segs - 1) * skb_headlen(skb)) +
|
||||||
skb->len;
|
skb->len;
|
||||||
|
|
Loading…
Reference in a new issue