]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net-sysfs: remove rcu field from 'struct rps_dev_flow_table'
authorEric Dumazet <edumazet@google.com>
Mon, 2 Mar 2026 18:14:31 +0000 (18:14 +0000)
committerJakub Kicinski <kuba@kernel.org>
Thu, 5 Mar 2026 00:54:10 +0000 (16:54 -0800)
Remove rps_dev_flow_table_release() in favor of kvfree_rcu_mightsleep().

In the following pach, we will remove "u8 @log" field
and 'struct rps_dev_flow_table' size will be a power-of-two.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Reviewed-by: Kuniyuki Iwashima <kuniyu@google.com>
Link: https://patch.msgid.link/20260302181432.1836150-7-edumazet@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
include/net/rps.h
net/core/net-sysfs.c

index dee930d9dd38e0e975e78d938bc7adc96048b724..e900480e828b487c721b3ef392f4abb427ad442c 100644 (file)
@@ -44,7 +44,6 @@ struct rps_dev_flow {
  */
 struct rps_dev_flow_table {
        u8                      log;
-       struct rcu_head         rcu;
        struct rps_dev_flow     flows[];
 };
 #define RPS_DEV_FLOW_TABLE_SIZE(_num) (sizeof(struct rps_dev_flow_table) + \
index 52fcf7fa58a808e79c1a17c8719830bcfb7c1674..fd6f81930bc6437957f32206c84db87ee242fede 100644 (file)
@@ -1072,13 +1072,6 @@ static ssize_t show_rps_dev_flow_table_cnt(struct netdev_rx_queue *queue,
        return sysfs_emit(buf, "%lu\n", val);
 }
 
-static void rps_dev_flow_table_release(struct rcu_head *rcu)
-{
-       struct rps_dev_flow_table *table = container_of(rcu,
-           struct rps_dev_flow_table, rcu);
-       vfree(table);
-}
-
 static ssize_t store_rps_dev_flow_table_cnt(struct netdev_rx_queue *queue,
                                            const char *buf, size_t len)
 {
@@ -1131,7 +1124,7 @@ static ssize_t store_rps_dev_flow_table_cnt(struct netdev_rx_queue *queue,
                                       RCU_INITIALIZER(table)));
 
        if (old_table)
-               call_rcu(&old_table->rcu, rps_dev_flow_table_release);
+               kvfree_rcu_mightsleep(old_table);
 
        return len;
 }
@@ -1168,7 +1161,7 @@ static void rx_queue_release(struct kobject *kobj)
 
        old_table = unrcu_pointer(xchg(&queue->rps_flow_table, NULL));
        if (old_table)
-               call_rcu(&old_table->rcu, rps_dev_flow_table_release);
+               kvfree_rcu_mightsleep(old_table);
 #endif
 
        memset(kobj, 0, sizeof(*kobj));