]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net: rps: remove kfree_rcu_mightsleep() use
authorEric Dumazet <edumazet@google.com>
Mon, 7 Apr 2025 16:36:02 +0000 (16:36 +0000)
committerJakub Kicinski <kuba@kernel.org>
Tue, 8 Apr 2025 19:30:55 +0000 (12:30 -0700)
Add an rcu_head to sd_flow_limit and rps_sock_flow_table structs
to use the more conventional and predictable k[v]free_rcu().

Signed-off-by: Eric Dumazet <edumazet@google.com>
Reviewed-by: Willem de Bruijn <willemb@google.com>
Link: https://patch.msgid.link/20250407163602.170356-5-edumazet@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
include/net/rps.h
net/core/dev.h
net/core/sysctl_net_core.c

index e358e9711f27523534fdf4cbf57729cbdf629b8a..507f4aa5d39b296e65668969a13e5732738bf531 100644 (file)
@@ -57,9 +57,10 @@ struct rps_dev_flow_table {
  * meaning we use 32-6=26 bits for the hash.
  */
 struct rps_sock_flow_table {
-       u32     mask;
+       struct rcu_head rcu;
+       u32             mask;
 
-       u32     ents[] ____cacheline_aligned_in_smp;
+       u32             ents[] ____cacheline_aligned_in_smp;
 };
 #define        RPS_SOCK_FLOW_TABLE_SIZE(_num) (offsetof(struct rps_sock_flow_table, ents[_num]))
 
index e855e1cb43fd1a88a0cd67709f4704d774cc4e9d..710abc05ebdb0da9fface4a60692778ec8ff634e 100644 (file)
@@ -15,6 +15,7 @@ struct cpumask;
 /* Random bits of netdevice that don't need to be exposed */
 #define FLOW_LIMIT_HISTORY     (1 << 7)  /* must be ^2 and !overflow buckets */
 struct sd_flow_limit {
+       struct rcu_head         rcu;
        unsigned int            count;
        u8                      log_buckets;
        unsigned int            history_head;
index 5cfe76ede5237f34aee1eee17a3e851b4a4cea92..5dbb2c6f371defbf79d4581f9b6c1c3fb13fa9d9 100644 (file)
@@ -201,7 +201,7 @@ static int rps_sock_flow_sysctl(const struct ctl_table *table, int write,
                        if (orig_sock_table) {
                                static_branch_dec(&rps_needed);
                                static_branch_dec(&rfs_needed);
-                               kvfree_rcu_mightsleep(orig_sock_table);
+                               kvfree_rcu(orig_sock_table, rcu);
                        }
                }
        }
@@ -239,7 +239,7 @@ static int flow_limit_cpu_sysctl(const struct ctl_table *table, int write,
                                     lockdep_is_held(&flow_limit_update_mutex));
                        if (cur && !cpumask_test_cpu(i, mask)) {
                                RCU_INIT_POINTER(sd->flow_limit, NULL);
-                               kfree_rcu_mightsleep(cur);
+                               kfree_rcu(cur, rcu);
                        } else if (!cur && cpumask_test_cpu(i, mask)) {
                                cur = kzalloc_node(len, GFP_KERNEL,
                                                   cpu_to_node(i));