sched: place state, next_sched and gso_skb in same cacheline again
authorFlorian Westphal <fw@strlen.de>
Wed, 8 Jun 2016 22:27:43 +0000 (00:27 +0200)
committerDavid S. Miller <davem@davemloft.net>
Thu, 9 Jun 2016 06:58:52 +0000 (23:58 -0700)
Earlier commits removed two members from struct Qdisc which places
next_sched/gso_skb into a different cacheline than ->state.

This restores the struct layout to what it was before the removal.
Move the two members, then add an annotation so they all reside in the
same cacheline.

This adds a 16 byte hole after cpu_qstats.

The hole could be closed but as it doesn't decrease total struct size just
do it this way.

Reported-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/sch_generic.h

index 4dedb7f..49534e2 100644 (file)
@@ -71,11 +71,11 @@ struct Qdisc {
        struct gnet_stats_basic_cpu __percpu *cpu_bstats;
        struct gnet_stats_queue __percpu *cpu_qstats;
 
-       struct Qdisc            *next_sched;
-       struct sk_buff          *gso_skb;
        /*
         * For performance sake on SMP, we put highly modified fields at the end
         */
+       struct Qdisc            *next_sched ____cacheline_aligned_in_smp;
+       struct sk_buff          *gso_skb;
        unsigned long           state;
        struct sk_buff_head     q;
        struct gnet_stats_basic_packed bstats;