Message ID | 20240418073603.99336-2-kerneljasonxing@gmail.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 84b6823cd96b38c40b3b30beabbfa48d92990e1a |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | locklessly protect left members in struct rps_dev_flow | expand |
On Thu, Apr 18, 2024 at 9:36 AM Jason Xing <kerneljasonxing@gmail.com> wrote: > > From: Jason Xing <kernelxing@tencent.com> > > Removing one unnecessary reader protection and add another writer > protection to finish the locklessly proctection job. > > Note: the removed READ_ONCE() is not needed because we only have to protect > the locklessly reader in the different context (rps_may_expire_flow()). > > Signed-off-by: Jason Xing <kernelxing@tencent.com> Reviewed-by: Eric Dumazet <edumazet@google.com>
If CONFIG_RFS_ACCEL is off, then I think there will be a compile error with this change, since 'head' is used, but no longer defined.
On Wed, May 29, 2024 at 10:34 PM John Sperbeck <jsperbeck@google.com> wrote: > > If CONFIG_RFS_ACCEL is off, then I think there will be a compile error with this change, since 'head' is used, but no longer defined. I assume you are speaking of this commit ? commit 84b6823cd96b38c40b3b30beabbfa48d92990e1a Author: Jason Xing <kernelxing@tencent.com> Date: Thu Apr 18 15:36:01 2024 +0800 net: rps: protect last_qtail with rps_input_queue_tail_save() helper
Hi John, On Thu, May 30, 2024 at 4:34 AM John Sperbeck <jsperbeck@google.com> wrote: > > If CONFIG_RFS_ACCEL is off, then I think there will be a compile error with this change, since 'head' is used, but no longer defined. Thanks for your report. I'll fix it today.
On Thu, May 30, 2024 at 4:45 AM Eric Dumazet <edumazet@google.com> wrote: > > On Wed, May 29, 2024 at 10:34 PM John Sperbeck <jsperbeck@google.com> wrote: > > > > If CONFIG_RFS_ACCEL is off, then I think there will be a compile error with this change, since 'head' is used, but no longer defined. > > I assume you are speaking of this commit ? > > commit 84b6823cd96b38c40b3b30beabbfa48d92990e1a > Author: Jason Xing <kernelxing@tencent.com> > Date: Thu Apr 18 15:36:01 2024 +0800 > > net: rps: protect last_qtail with rps_input_queue_tail_save() helper Yes, I will fix it soon. Thanks, Jason
diff --git a/net/core/dev.c b/net/core/dev.c index 854a3a28a8d8..58e0da91bfef 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -4501,7 +4501,7 @@ set_rps_cpu(struct net_device *dev, struct sk_buff *skb, struct netdev_rx_queue *rxqueue; struct rps_dev_flow_table *flow_table; struct rps_dev_flow *old_rflow; - u32 flow_id; + u32 flow_id, head; u16 rxq_index; int rc; @@ -4529,8 +4529,8 @@ set_rps_cpu(struct net_device *dev, struct sk_buff *skb, old_rflow->filter = RPS_NO_FILTER; out: #endif - rflow->last_qtail = - READ_ONCE(per_cpu(softnet_data, next_cpu).input_queue_head); + head = READ_ONCE(per_cpu(softnet_data, next_cpu).input_queue_head); + rps_input_queue_tail_save(&rflow->last_qtail, head); } rflow->cpu = next_cpu; @@ -4613,7 +4613,7 @@ static int get_rps_cpu(struct net_device *dev, struct sk_buff *skb, if (unlikely(tcpu != next_cpu) && (tcpu >= nr_cpu_ids || !cpu_online(tcpu) || ((int)(READ_ONCE(per_cpu(softnet_data, tcpu).input_queue_head) - - READ_ONCE(rflow->last_qtail))) >= 0)) { + rflow->last_qtail)) >= 0)) { tcpu = next_cpu; rflow = set_rps_cpu(dev, skb, rflow, next_cpu); }