diff options
author | Jakub Kicinski <kuba@kernel.org> | 2021-09-23 11:19:49 -0700 |
---|---|---|
committer | Jakub Kicinski <kuba@kernel.org> | 2021-09-23 11:19:49 -0700 |
commit | 2fcd14d0f78090f57aecd7f424e2b0373cd631a7 (patch) | |
tree | f8946c307a3b5d319c17ec988d8a38c0fe7a08de /net/core/dev.c | |
parent | 9aad3e4ede9bebda23579f674420123dacb61fda (diff) | |
parent | 9bc62afe03afdf33904f5e784e1ad68c50ff00bb (diff) | |
download | linux-stable-2fcd14d0f78090f57aecd7f424e2b0373cd631a7.tar.gz linux-stable-2fcd14d0f78090f57aecd7f424e2b0373cd631a7.tar.bz2 linux-stable-2fcd14d0f78090f57aecd7f424e2b0373cd631a7.zip |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
net/mptcp/protocol.c
977d293e23b4 ("mptcp: ensure tx skbs always have the MPTCP ext")
efe686ffce01 ("mptcp: ensure tx skbs always have the MPTCP ext")
same patch merged in both trees, keep net-next.
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'net/core/dev.c')
-rw-r--r-- | net/core/dev.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index f930329f0dc2..62ddd7d6e00d 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -6925,12 +6925,16 @@ EXPORT_SYMBOL(napi_disable); */ void napi_enable(struct napi_struct *n) { - BUG_ON(!test_bit(NAPI_STATE_SCHED, &n->state)); - smp_mb__before_atomic(); - clear_bit(NAPI_STATE_SCHED, &n->state); - clear_bit(NAPI_STATE_NPSVC, &n->state); - if (n->dev->threaded && n->thread) - set_bit(NAPI_STATE_THREADED, &n->state); + unsigned long val, new; + + do { + val = READ_ONCE(n->state); + BUG_ON(!test_bit(NAPI_STATE_SCHED, &val)); + + new = val & ~(NAPIF_STATE_SCHED | NAPIF_STATE_NPSVC); + if (n->dev->threaded && n->thread) + new |= NAPIF_STATE_THREADED; + } while (cmpxchg(&n->state, val, new) != val); } EXPORT_SYMBOL(napi_enable); |