Commit 7e417a66 authored by Eric Dumazet's avatar Eric Dumazet Committed by David S. Miller

net: napi: use READ_ONCE()/WRITE_ONCE()

gro_flush_timeout and napi_defer_hard_irqs can be read
from napi_complete_done() while other cpus write the value,
whithout explicit synchronization.

Use READ_ONCE()/WRITE_ONCE() to annotate the races.
Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 6f8b12d6
...@@ -6242,12 +6242,12 @@ bool napi_complete_done(struct napi_struct *n, int work_done) ...@@ -6242,12 +6242,12 @@ bool napi_complete_done(struct napi_struct *n, int work_done)
if (work_done) { if (work_done) {
if (n->gro_bitmask) if (n->gro_bitmask)
timeout = n->dev->gro_flush_timeout; timeout = READ_ONCE(n->dev->gro_flush_timeout);
n->defer_hard_irqs_count = n->dev->napi_defer_hard_irqs; n->defer_hard_irqs_count = READ_ONCE(n->dev->napi_defer_hard_irqs);
} }
if (n->defer_hard_irqs_count > 0) { if (n->defer_hard_irqs_count > 0) {
n->defer_hard_irqs_count--; n->defer_hard_irqs_count--;
timeout = n->dev->gro_flush_timeout; timeout = READ_ONCE(n->dev->gro_flush_timeout);
if (timeout) if (timeout)
ret = false; ret = false;
} }
......
...@@ -367,7 +367,7 @@ NETDEVICE_SHOW_RW(tx_queue_len, fmt_dec); ...@@ -367,7 +367,7 @@ NETDEVICE_SHOW_RW(tx_queue_len, fmt_dec);
static int change_gro_flush_timeout(struct net_device *dev, unsigned long val) static int change_gro_flush_timeout(struct net_device *dev, unsigned long val)
{ {
dev->gro_flush_timeout = val; WRITE_ONCE(dev->gro_flush_timeout, val);
return 0; return 0;
} }
...@@ -384,7 +384,7 @@ NETDEVICE_SHOW_RW(gro_flush_timeout, fmt_ulong); ...@@ -384,7 +384,7 @@ NETDEVICE_SHOW_RW(gro_flush_timeout, fmt_ulong);
static int change_napi_defer_hard_irqs(struct net_device *dev, unsigned long val) static int change_napi_defer_hard_irqs(struct net_device *dev, unsigned long val)
{ {
dev->napi_defer_hard_irqs = val; WRITE_ONCE(dev->napi_defer_hard_irqs, val);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment