Message ID | 20240417062721.45652-4-kerneljasonxing@gmail.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | locklessly protect left members in struct rps_dev_flow | expand |
On Wed, Apr 17, 2024 at 2:27 PM Jason Xing <kerneljasonxing@gmail.com> wrote: > > From: Jason Xing <kernelxing@tencent.com> > > This is the last member in struct rps_dev_flow which should be > protected locklessly. So finish it. > > Signed-off-by: Jason Xing <kernelxing@tencent.com> > --- > net/core/dev.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/net/core/dev.c b/net/core/dev.c > index 40a535158e45..aeb45025e2bc 100644 > --- a/net/core/dev.c > +++ b/net/core/dev.c > @@ -4533,7 +4533,7 @@ set_rps_cpu(struct net_device *dev, struct sk_buff *skb, > rps_input_queue_tail_save(&rflow->last_qtail, head); > } > > - rflow->cpu = next_cpu; > + WRITE_ONCE(rflow->cpu, next_cpu); > return rflow; > } > > @@ -4597,7 +4597,7 @@ static int get_rps_cpu(struct net_device *dev, struct sk_buff *skb, > * we can look at the local (per receive queue) flow table > */ > rflow = &flow_table->flows[hash & flow_table->mask]; > - tcpu = rflow->cpu; > + tcpu = READ_ONCE(rflow->cpu); Hello Eric, I think I don't need this one either, right? Only protecting the writer side in set_rps_cpu() and the reader side in rps_may_expire_flow() is enough. Thanks, Jason > > /* > * If the desired CPU (where last recvmsg was done) is > -- > 2.37.3 >
diff --git a/net/core/dev.c b/net/core/dev.c index 40a535158e45..aeb45025e2bc 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -4533,7 +4533,7 @@ set_rps_cpu(struct net_device *dev, struct sk_buff *skb, rps_input_queue_tail_save(&rflow->last_qtail, head); } - rflow->cpu = next_cpu; + WRITE_ONCE(rflow->cpu, next_cpu); return rflow; } @@ -4597,7 +4597,7 @@ static int get_rps_cpu(struct net_device *dev, struct sk_buff *skb, * we can look at the local (per receive queue) flow table */ rflow = &flow_table->flows[hash & flow_table->mask]; - tcpu = rflow->cpu; + tcpu = READ_ONCE(rflow->cpu); /* * If the desired CPU (where last recvmsg was done) is