netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/4] Convert some simple call_rcu() to kfree_rcu()/kvfree_rcu()
@ 2024-11-20  6:47 Ran Xiaokai
  2024-11-20  6:47 ` [PATCH 1/4] sched/topology: convert call_rcu(free_ctx) to kfree_rcu() Ran Xiaokai
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Ran Xiaokai @ 2024-11-20  6:47 UTC (permalink / raw)
  To: juri.lelli, vincent.guittot, mingo, peterz, pshelar, davem
  Cc: linux-kernel, ran.xiaokai, linux-perf-users, netdev, dev

From: Ran Xiaokai <ran.xiaokai@zte.com.cn>

These rcu callbacks simply call kfree()/kvfree(),
it's better to convert them to directly call kfree_rcu()/kvfree_rcu().

Ran Xiaokai (4):
  sched/topology: convert call_rcu(free_ctx) to kfree_rcu()
  perf/core: convert call_rcu(free_ctx) to kfree_rcu()
  net: openvswitch: convert call_rcu(dp_meter_instance_free_rcu) to
    kvfree_rcu()
  net: sysfs: convert call_rcu() to kvfree_rcu()

 kernel/events/core.c    | 10 +---------
 kernel/sched/topology.c | 10 ++--------
 net/core/net-sysfs.c    | 11 ++---------
 net/openvswitch/meter.c | 10 +---------
 4 files changed, 6 insertions(+), 35 deletions(-)

-- 
2.17.1


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 1/4] sched/topology: convert call_rcu(free_ctx) to kfree_rcu()
  2024-11-20  6:47 [PATCH 0/4] Convert some simple call_rcu() to kfree_rcu()/kvfree_rcu() Ran Xiaokai
@ 2024-11-20  6:47 ` Ran Xiaokai
  2024-11-20  6:47 ` [PATCH 2/4] perf/core: " Ran Xiaokai
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 8+ messages in thread
From: Ran Xiaokai @ 2024-11-20  6:47 UTC (permalink / raw)
  To: juri.lelli, vincent.guittot, mingo, peterz, pshelar, davem
  Cc: linux-kernel, ran.xiaokai, linux-perf-users, netdev, dev

From: Ran Xiaokai <ran.xiaokai@zte.com.cn>

The rcu callback free_asym_cap_entry() simply calls kfree().
It's better to directly call kfree_rcu().

Signed-off-by: Ran Xiaokai <ran.xiaokai@zte.com.cn>
---
 kernel/sched/topology.c | 10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)

diff --git a/kernel/sched/topology.c b/kernel/sched/topology.c
index 9748a4c8d668..60ff3ba1d6ff 100644
--- a/kernel/sched/topology.c
+++ b/kernel/sched/topology.c
@@ -1382,12 +1382,6 @@ asym_cpu_capacity_classify(const struct cpumask *sd_span,
 
 }
 
-static void free_asym_cap_entry(struct rcu_head *head)
-{
-	struct asym_cap_data *entry = container_of(head, struct asym_cap_data, rcu);
-	kfree(entry);
-}
-
 static inline void asym_cpu_capacity_update_data(int cpu)
 {
 	unsigned long capacity = arch_scale_cpu_capacity(cpu);
@@ -1438,7 +1432,7 @@ static void asym_cpu_capacity_scan(void)
 	list_for_each_entry_safe(entry, next, &asym_cap_list, link) {
 		if (cpumask_empty(cpu_capacity_span(entry))) {
 			list_del_rcu(&entry->link);
-			call_rcu(&entry->rcu, free_asym_cap_entry);
+			kfree_rcu(entry, rcu);
 		}
 	}
 
@@ -1449,7 +1443,7 @@ static void asym_cpu_capacity_scan(void)
 	if (list_is_singular(&asym_cap_list)) {
 		entry = list_first_entry(&asym_cap_list, typeof(*entry), link);
 		list_del_rcu(&entry->link);
-		call_rcu(&entry->rcu, free_asym_cap_entry);
+		kfree_rcu(entry, rcu);
 	}
 }
 
-- 
2.17.1



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/4] perf/core: convert call_rcu(free_ctx) to kfree_rcu()
  2024-11-20  6:47 [PATCH 0/4] Convert some simple call_rcu() to kfree_rcu()/kvfree_rcu() Ran Xiaokai
  2024-11-20  6:47 ` [PATCH 1/4] sched/topology: convert call_rcu(free_ctx) to kfree_rcu() Ran Xiaokai
@ 2024-11-20  6:47 ` Ran Xiaokai
  2024-11-20  9:12   ` Peter Zijlstra
  2024-11-20  6:47 ` [PATCH 3/4] net: openvswitch: convert call_rcu(dp_meter_instance_free_rcu) to kvfree_rcu() Ran Xiaokai
  2024-11-20  6:47 ` [PATCH 4/4] net: sysfs: convert call_rcu() " Ran Xiaokai
  3 siblings, 1 reply; 8+ messages in thread
From: Ran Xiaokai @ 2024-11-20  6:47 UTC (permalink / raw)
  To: juri.lelli, vincent.guittot, mingo, peterz, pshelar, davem
  Cc: linux-kernel, ran.xiaokai, linux-perf-users, netdev, dev

From: Ran Xiaokai <ran.xiaokai@zte.com.cn>

The rcu callback free_ctx() simply calls kfree().
It's better to directly call kfree_rcu().

Signed-off-by: Ran Xiaokai <ran.xiaokai@zte.com.cn>
---
 kernel/events/core.c | 10 +---------
 1 file changed, 1 insertion(+), 9 deletions(-)

diff --git a/kernel/events/core.c b/kernel/events/core.c
index 065f9188b44a..7f4cc9c41bbe 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -1210,14 +1210,6 @@ static void free_task_ctx_data(struct pmu *pmu, void *task_ctx_data)
 		kmem_cache_free(pmu->task_ctx_cache, task_ctx_data);
 }
 
-static void free_ctx(struct rcu_head *head)
-{
-	struct perf_event_context *ctx;
-
-	ctx = container_of(head, struct perf_event_context, rcu_head);
-	kfree(ctx);
-}
-
 static void put_ctx(struct perf_event_context *ctx)
 {
 	if (refcount_dec_and_test(&ctx->refcount)) {
@@ -1225,7 +1217,7 @@ static void put_ctx(struct perf_event_context *ctx)
 			put_ctx(ctx->parent_ctx);
 		if (ctx->task && ctx->task != TASK_TOMBSTONE)
 			put_task_struct(ctx->task);
-		call_rcu(&ctx->rcu_head, free_ctx);
+		kfree_rcu(ctx, rcu_head);
 	}
 }
 
-- 
2.17.1



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 3/4] net: openvswitch: convert call_rcu(dp_meter_instance_free_rcu) to kvfree_rcu()
  2024-11-20  6:47 [PATCH 0/4] Convert some simple call_rcu() to kfree_rcu()/kvfree_rcu() Ran Xiaokai
  2024-11-20  6:47 ` [PATCH 1/4] sched/topology: convert call_rcu(free_ctx) to kfree_rcu() Ran Xiaokai
  2024-11-20  6:47 ` [PATCH 2/4] perf/core: " Ran Xiaokai
@ 2024-11-20  6:47 ` Ran Xiaokai
  2024-11-21  8:37   ` Paolo Abeni
  2024-11-20  6:47 ` [PATCH 4/4] net: sysfs: convert call_rcu() " Ran Xiaokai
  3 siblings, 1 reply; 8+ messages in thread
From: Ran Xiaokai @ 2024-11-20  6:47 UTC (permalink / raw)
  To: juri.lelli, vincent.guittot, mingo, peterz, pshelar, davem
  Cc: linux-kernel, ran.xiaokai, linux-perf-users, netdev, dev

From: Ran Xiaokai <ran.xiaokai@zte.com.cn>

The rcu callback dp_meter_instance_free_rcu() simply calls kvfree().
It's better to directly call kvfree_rcu().

Signed-off-by: Ran Xiaokai <ran.xiaokai@zte.com.cn>
---
 net/openvswitch/meter.c | 10 +---------
 1 file changed, 1 insertion(+), 9 deletions(-)

diff --git a/net/openvswitch/meter.c b/net/openvswitch/meter.c
index cc08e0403909..d99efb9ce1a0 100644
--- a/net/openvswitch/meter.c
+++ b/net/openvswitch/meter.c
@@ -83,14 +83,6 @@ static void dp_meter_instance_free(struct dp_meter_instance *ti)
 	kvfree(ti);
 }
 
-static void dp_meter_instance_free_rcu(struct rcu_head *rcu)
-{
-	struct dp_meter_instance *ti;
-
-	ti = container_of(rcu, struct dp_meter_instance, rcu);
-	kvfree(ti);
-}
-
 static int
 dp_meter_instance_realloc(struct dp_meter_table *tbl, u32 size)
 {
@@ -108,7 +100,7 @@ dp_meter_instance_realloc(struct dp_meter_table *tbl, u32 size)
 			new_ti->dp_meters[i] = ti->dp_meters[i];
 
 	rcu_assign_pointer(tbl->ti, new_ti);
-	call_rcu(&ti->rcu, dp_meter_instance_free_rcu);
+	kvfree_rcu(ti, rcu);
 
 	return 0;
 }
-- 
2.17.1



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 4/4] net: sysfs: convert call_rcu() to kvfree_rcu()
  2024-11-20  6:47 [PATCH 0/4] Convert some simple call_rcu() to kfree_rcu()/kvfree_rcu() Ran Xiaokai
                   ` (2 preceding siblings ...)
  2024-11-20  6:47 ` [PATCH 3/4] net: openvswitch: convert call_rcu(dp_meter_instance_free_rcu) to kvfree_rcu() Ran Xiaokai
@ 2024-11-20  6:47 ` Ran Xiaokai
  3 siblings, 0 replies; 8+ messages in thread
From: Ran Xiaokai @ 2024-11-20  6:47 UTC (permalink / raw)
  To: juri.lelli, vincent.guittot, mingo, peterz, pshelar, davem
  Cc: linux-kernel, ran.xiaokai, linux-perf-users, netdev, dev

From: Ran Xiaokai <ran.xiaokai@zte.com.cn>

The rcu callback rps_dev_flow_table_release() simply calls vfree().
It's better to directly call kvfree_rcu().

Signed-off-by: Ran Xiaokai <ran.xiaokai@zte.com.cn>
---
 net/core/net-sysfs.c | 11 ++---------
 1 file changed, 2 insertions(+), 9 deletions(-)

diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c
index 2d9afc6e2161..8ba2251af077 100644
--- a/net/core/net-sysfs.c
+++ b/net/core/net-sysfs.c
@@ -947,13 +947,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)
 {
@@ -1008,7 +1001,7 @@ static ssize_t store_rps_dev_flow_table_cnt(struct netdev_rx_queue *queue,
 	spin_unlock(&rps_dev_flow_lock);
 
 	if (old_table)
-		call_rcu(&old_table->rcu, rps_dev_flow_table_release);
+		kvfree_rcu(old_table, rcu);
 
 	return len;
 }
@@ -1046,7 +1039,7 @@ static void rx_queue_release(struct kobject *kobj)
 	flow_table = rcu_dereference_protected(queue->rps_flow_table, 1);
 	if (flow_table) {
 		RCU_INIT_POINTER(queue->rps_flow_table, NULL);
-		call_rcu(&flow_table->rcu, rps_dev_flow_table_release);
+		kvfree_rcu(flow_table, rcu);
 	}
 #endif
 
-- 
2.17.1



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/4] perf/core: convert call_rcu(free_ctx) to kfree_rcu()
  2024-11-20  6:47 ` [PATCH 2/4] perf/core: " Ran Xiaokai
@ 2024-11-20  9:12   ` Peter Zijlstra
  2024-11-20  9:16     ` Peter Zijlstra
  0 siblings, 1 reply; 8+ messages in thread
From: Peter Zijlstra @ 2024-11-20  9:12 UTC (permalink / raw)
  To: Ran Xiaokai
  Cc: juri.lelli, vincent.guittot, mingo, pshelar, davem, linux-kernel,
	ran.xiaokai, linux-perf-users, netdev, dev

On Wed, Nov 20, 2024 at 06:47:14AM +0000, Ran Xiaokai wrote:
> From: Ran Xiaokai <ran.xiaokai@zte.com.cn>
> 
> The rcu callback free_ctx() simply calls kfree().
> It's better to directly call kfree_rcu().

Why is it better? 

> Signed-off-by: Ran Xiaokai <ran.xiaokai@zte.com.cn>
> ---
>  kernel/events/core.c | 10 +---------
>  1 file changed, 1 insertion(+), 9 deletions(-)
> 
> diff --git a/kernel/events/core.c b/kernel/events/core.c
> index 065f9188b44a..7f4cc9c41bbe 100644
> --- a/kernel/events/core.c
> +++ b/kernel/events/core.c
> @@ -1210,14 +1210,6 @@ static void free_task_ctx_data(struct pmu *pmu, void *task_ctx_data)
>  		kmem_cache_free(pmu->task_ctx_cache, task_ctx_data);
>  }
>  
> -static void free_ctx(struct rcu_head *head)
> -{
> -	struct perf_event_context *ctx;
> -
> -	ctx = container_of(head, struct perf_event_context, rcu_head);
> -	kfree(ctx);
> -}
> -
>  static void put_ctx(struct perf_event_context *ctx)
>  {
>  	if (refcount_dec_and_test(&ctx->refcount)) {
> @@ -1225,7 +1217,7 @@ static void put_ctx(struct perf_event_context *ctx)
>  			put_ctx(ctx->parent_ctx);
>  		if (ctx->task && ctx->task != TASK_TOMBSTONE)
>  			put_task_struct(ctx->task);
> -		call_rcu(&ctx->rcu_head, free_ctx);
> +		kfree_rcu(ctx, rcu_head);
>  	}
>  }
>  
> -- 
> 2.17.1
> 
> 

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/4] perf/core: convert call_rcu(free_ctx) to kfree_rcu()
  2024-11-20  9:12   ` Peter Zijlstra
@ 2024-11-20  9:16     ` Peter Zijlstra
  0 siblings, 0 replies; 8+ messages in thread
From: Peter Zijlstra @ 2024-11-20  9:16 UTC (permalink / raw)
  To: Ran Xiaokai
  Cc: juri.lelli, vincent.guittot, mingo, pshelar, davem, linux-kernel,
	ran.xiaokai, linux-perf-users, netdev

On Wed, Nov 20, 2024 at 10:12:15AM +0100, Peter Zijlstra wrote:
> On Wed, Nov 20, 2024 at 06:47:14AM +0000, Ran Xiaokai wrote:
> > From: Ran Xiaokai <ran.xiaokai@zte.com.cn>
> > 
> > The rcu callback free_ctx() simply calls kfree().
> > It's better to directly call kfree_rcu().
> 
> Why is it better? 

*sigh*, also please don't cross post with a moderated list :-(

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 3/4] net: openvswitch: convert call_rcu(dp_meter_instance_free_rcu) to kvfree_rcu()
  2024-11-20  6:47 ` [PATCH 3/4] net: openvswitch: convert call_rcu(dp_meter_instance_free_rcu) to kvfree_rcu() Ran Xiaokai
@ 2024-11-21  8:37   ` Paolo Abeni
  0 siblings, 0 replies; 8+ messages in thread
From: Paolo Abeni @ 2024-11-21  8:37 UTC (permalink / raw)
  To: Ran Xiaokai, juri.lelli, vincent.guittot, mingo, peterz, pshelar,
	davem
  Cc: linux-kernel, ran.xiaokai, linux-perf-users, netdev, dev

On 11/20/24 07:47, Ran Xiaokai wrote:
> From: Ran Xiaokai <ran.xiaokai@zte.com.cn>
> 
> The rcu callback dp_meter_instance_free_rcu() simply calls kvfree().
> It's better to directly call kvfree_rcu().
> 
> Signed-off-by: Ran Xiaokai <ran.xiaokai@zte.com.cn>

Since the patches in this series are independent one from each other,
please break the series on a per subsystem basis. The patch 3 & 4 should
target the net-next tree. It will simplify maintainers life (and yours).

Also please note:

## Form letter - net-next-closed

The merge window for v6.13 has begun and net-next is closed for new
drivers, features, code refactoring and optimizations. We are currently
accepting bug fixes only.

Please repost when net-next reopens after Dec 2nd.

RFC patches sent for review only are welcome at any time.

See:
https://www.kernel.org/doc/html/next/process/maintainer-netdev.html#development-cycle









^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2024-11-21  8:37 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-11-20  6:47 [PATCH 0/4] Convert some simple call_rcu() to kfree_rcu()/kvfree_rcu() Ran Xiaokai
2024-11-20  6:47 ` [PATCH 1/4] sched/topology: convert call_rcu(free_ctx) to kfree_rcu() Ran Xiaokai
2024-11-20  6:47 ` [PATCH 2/4] perf/core: " Ran Xiaokai
2024-11-20  9:12   ` Peter Zijlstra
2024-11-20  9:16     ` Peter Zijlstra
2024-11-20  6:47 ` [PATCH 3/4] net: openvswitch: convert call_rcu(dp_meter_instance_free_rcu) to kvfree_rcu() Ran Xiaokai
2024-11-21  8:37   ` Paolo Abeni
2024-11-20  6:47 ` [PATCH 4/4] net: sysfs: convert call_rcu() " Ran Xiaokai

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).