diff options
author | David S. Miller <davem@davemloft.net> | 2023-06-07 10:09:05 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2023-06-07 10:09:05 +0100 |
commit | e3144ff52f7d2c884eef352cec9b9ff9acd2eb2f (patch) | |
tree | a5898632fd2ce3dd1f7dfca691a0a1f6dfdf1231 /include/linux/netdevice.h | |
parent | ab39b113e74751958aac1b125a14ee42bd7d3efd (diff) | |
parent | 5c3b74a92aa285a3df722bf6329ba7ccf70346d6 (diff) |
Merge branch 'rfs-lockless-annotate'
Eric Dumazet says:
====================
rfs: annotate lockless accesses
rfs runs without locks held, so we should annotate
read and writes to shared variables.
It should prevent compilers forcing writes
in the following situation:
if (var != val)
var = val;
A compiler could indeed simply avoid the conditional:
var = val;
This matters if var is shared between many cpus.
v2: aligns one closing bracket (Simon)
adds Fixes: tags (Jakub)
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/linux/netdevice.h')
-rw-r--r-- | include/linux/netdevice.h | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 08fbd4622ccf..e6f22b7403d0 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -768,8 +768,11 @@ static inline void rps_record_sock_flow(struct rps_sock_flow_table *table, /* We only give a hint, preemption can change CPU under us */ val |= raw_smp_processor_id(); - if (table->ents[index] != val) - table->ents[index] = val; + /* The following WRITE_ONCE() is paired with the READ_ONCE() + * here, and another one in get_rps_cpu(). + */ + if (READ_ONCE(table->ents[index]) != val) + WRITE_ONCE(table->ents[index], val); } } |