OSDN Git Service

net: better skb->sender_cpu and skb->napi_id cohabitation
authorEric Dumazet <edumazet@google.com>
Wed, 18 Nov 2015 14:30:50 +0000 (06:30 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 14 Jun 2017 11:16:26 +0000 (13:16 +0200)
commit52d8b8ad2b4ba478b55e0dfff56a13ab436a6b65
tree84d1e0dbb0c2f9d8c9e53b3a028a362f9a3bc441
parent3c0fcb52674afb2a88097510203678fe3d441c71
net: better skb->sender_cpu and skb->napi_id cohabitation

commit 52bd2d62ce6758d811edcbd2256eb9ea7f6a56cb upstream.

skb->sender_cpu and skb->napi_id share a common storage,
and we had various bugs about this.

We had to call skb_sender_cpu_clear() in some places to
not leave a prior skb->napi_id and fool netdev_pick_tx()

As suggested by Alexei, we could split the space so that
these errors can not happen.

0 value being reserved as the common (not initialized) value,
let's reserve [1 .. NR_CPUS] range for valid sender_cpu,
and [NR_CPUS+1 .. ~0U] for valid napi_id.

This will allow proper busy polling support over tunnels.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Suggested-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Cc: Paul Menzel <pmenzel@molgen.mpg.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
include/linux/skbuff.h
net/core/dev.c