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: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Eric Dumazet
2020-04-22 09:13:28 -07:00
committed by David S. Miller
parent 6f8b12d661
commit 7e417a66b8
2 changed files with 5 additions and 5 deletions

View File

@@ -6242,12 +6242,12 @@ bool napi_complete_done(struct napi_struct *n, int work_done)
if (work_done) {
if (n->gro_bitmask)
timeout = n->dev->gro_flush_timeout;
n->defer_hard_irqs_count = n->dev->napi_defer_hard_irqs;
timeout = READ_ONCE(n->dev->gro_flush_timeout);
n->defer_hard_irqs_count = READ_ONCE(n->dev->napi_defer_hard_irqs);
}
if (n->defer_hard_irqs_count > 0) {
n->defer_hard_irqs_count--;
timeout = n->dev->gro_flush_timeout;
timeout = READ_ONCE(n->dev->gro_flush_timeout);
if (timeout)
ret = false;
}