* [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).