diff mbox series

PM: EM: use kfree_rcu to simplify the code

Message ID 20250218082021.2766-1-lirongqing@baidu.com (mailing list archive)
State Queued
Delegated to: Rafael Wysocki
Headers show
Series PM: EM: use kfree_rcu to simplify the code | expand

Commit Message

lirongqing Feb. 18, 2025, 8:20 a.m. UTC
From: Li RongQing <lirongqing@baidu.com>

The callback function of call_rcu() just calls kfree(), so use
kfree_rcu() instead of call_rcu() + callback function.

Signed-off-by: Li RongQing <lirongqing@baidu.com>
---
 kernel/power/energy_model.c | 10 +---------
 1 file changed, 1 insertion(+), 9 deletions(-)

Comments

Rafael J. Wysocki Feb. 18, 2025, 12:49 p.m. UTC | #1
+Lukasz Luba

On Tue, Feb 18, 2025 at 9:20 AM lirongqing <lirongqing@baidu.com> wrote:
>
> From: Li RongQing <lirongqing@baidu.com>
>
> The callback function of call_rcu() just calls kfree(), so use
> kfree_rcu() instead of call_rcu() + callback function.
>
> Signed-off-by: Li RongQing <lirongqing@baidu.com>

This looks fine to me.  Lukasz?

> ---
>  kernel/power/energy_model.c | 10 +---------
>  1 file changed, 1 insertion(+), 9 deletions(-)
>
> diff --git a/kernel/power/energy_model.c b/kernel/power/energy_model.c
> index 3874f0e..72655ef 100644
> --- a/kernel/power/energy_model.c
> +++ b/kernel/power/energy_model.c
> @@ -161,14 +161,6 @@ static void em_debug_create_pd(struct device *dev) {}
>  static void em_debug_remove_pd(struct device *dev) {}
>  #endif
>
> -static void em_destroy_table_rcu(struct rcu_head *rp)
> -{
> -       struct em_perf_table __rcu *table;
> -
> -       table = container_of(rp, struct em_perf_table, rcu);
> -       kfree(table);
> -}
> -
>  static void em_release_table_kref(struct kref *kref)
>  {
>         struct em_perf_table __rcu *table;
> @@ -176,7 +168,7 @@ static void em_release_table_kref(struct kref *kref)
>         /* It was the last owner of this table so we can free */
>         table = container_of(kref, struct em_perf_table, kref);
>
> -       call_rcu(&table->rcu, em_destroy_table_rcu);
> +       kfree_rcu(table, rcu);
>  }
>
>  /**
> --
> 2.9.4
>
Lukasz Luba Feb. 19, 2025, 2:31 p.m. UTC | #2
On 2/18/25 12:49, Rafael J. Wysocki wrote:
> +Lukasz Luba
> 
> On Tue, Feb 18, 2025 at 9:20 AM lirongqing <lirongqing@baidu.com> wrote:
>>
>> From: Li RongQing <lirongqing@baidu.com>
>>
>> The callback function of call_rcu() just calls kfree(), so use
>> kfree_rcu() instead of call_rcu() + callback function.
>>
>> Signed-off-by: Li RongQing <lirongqing@baidu.com>
> 
> This looks fine to me.  Lukasz?

Thanks Rafael for letting me know.

> 
>> ---
>>   kernel/power/energy_model.c | 10 +---------
>>   1 file changed, 1 insertion(+), 9 deletions(-)
>>
>> diff --git a/kernel/power/energy_model.c b/kernel/power/energy_model.c
>> index 3874f0e..72655ef 100644
>> --- a/kernel/power/energy_model.c
>> +++ b/kernel/power/energy_model.c
>> @@ -161,14 +161,6 @@ static void em_debug_create_pd(struct device *dev) {}
>>   static void em_debug_remove_pd(struct device *dev) {}
>>   #endif
>>
>> -static void em_destroy_table_rcu(struct rcu_head *rp)
>> -{
>> -       struct em_perf_table __rcu *table;
>> -
>> -       table = container_of(rp, struct em_perf_table, rcu);
>> -       kfree(table);
>> -}
>> -
>>   static void em_release_table_kref(struct kref *kref)
>>   {
>>          struct em_perf_table __rcu *table;
>> @@ -176,7 +168,7 @@ static void em_release_table_kref(struct kref *kref)
>>          /* It was the last owner of this table so we can free */
>>          table = container_of(kref, struct em_perf_table, kref);
>>
>> -       call_rcu(&table->rcu, em_destroy_table_rcu);
>> +       kfree_rcu(table, rcu);
>>   }
>>
>>   /**
>> --
>> 2.9.4
>>

That should work the same way, nice cleanup.
Thanks Li!
LGTM,

Reviewed-by: Lukasz Luba <lukasz.luba@arm.com>
Rafael J. Wysocki Feb. 20, 2025, 7:54 p.m. UTC | #3
On Wed, Feb 19, 2025 at 3:32 PM Lukasz Luba <lukasz.luba@arm.com> wrote:
>
>
>
> On 2/18/25 12:49, Rafael J. Wysocki wrote:
> > +Lukasz Luba
> >
> > On Tue, Feb 18, 2025 at 9:20 AM lirongqing <lirongqing@baidu.com> wrote:
> >>
> >> From: Li RongQing <lirongqing@baidu.com>
> >>
> >> The callback function of call_rcu() just calls kfree(), so use
> >> kfree_rcu() instead of call_rcu() + callback function.
> >>
> >> Signed-off-by: Li RongQing <lirongqing@baidu.com>
> >
> > This looks fine to me.  Lukasz?
>
> Thanks Rafael for letting me know.
>
> >
> >> ---
> >>   kernel/power/energy_model.c | 10 +---------
> >>   1 file changed, 1 insertion(+), 9 deletions(-)
> >>
> >> diff --git a/kernel/power/energy_model.c b/kernel/power/energy_model.c
> >> index 3874f0e..72655ef 100644
> >> --- a/kernel/power/energy_model.c
> >> +++ b/kernel/power/energy_model.c
> >> @@ -161,14 +161,6 @@ static void em_debug_create_pd(struct device *dev) {}
> >>   static void em_debug_remove_pd(struct device *dev) {}
> >>   #endif
> >>
> >> -static void em_destroy_table_rcu(struct rcu_head *rp)
> >> -{
> >> -       struct em_perf_table __rcu *table;
> >> -
> >> -       table = container_of(rp, struct em_perf_table, rcu);
> >> -       kfree(table);
> >> -}
> >> -
> >>   static void em_release_table_kref(struct kref *kref)
> >>   {
> >>          struct em_perf_table __rcu *table;
> >> @@ -176,7 +168,7 @@ static void em_release_table_kref(struct kref *kref)
> >>          /* It was the last owner of this table so we can free */
> >>          table = container_of(kref, struct em_perf_table, kref);
> >>
> >> -       call_rcu(&table->rcu, em_destroy_table_rcu);
> >> +       kfree_rcu(table, rcu);
> >>   }
> >>
> >>   /**
> >> --
> >> 2.9.4
> >>
>
> That should work the same way, nice cleanup.
> Thanks Li!
> LGTM,
>
> Reviewed-by: Lukasz Luba <lukasz.luba@arm.com>

Applied as 6.15 material, thanks!
diff mbox series

Patch

diff --git a/kernel/power/energy_model.c b/kernel/power/energy_model.c
index 3874f0e..72655ef 100644
--- a/kernel/power/energy_model.c
+++ b/kernel/power/energy_model.c
@@ -161,14 +161,6 @@  static void em_debug_create_pd(struct device *dev) {}
 static void em_debug_remove_pd(struct device *dev) {}
 #endif
 
-static void em_destroy_table_rcu(struct rcu_head *rp)
-{
-	struct em_perf_table __rcu *table;
-
-	table = container_of(rp, struct em_perf_table, rcu);
-	kfree(table);
-}
-
 static void em_release_table_kref(struct kref *kref)
 {
 	struct em_perf_table __rcu *table;
@@ -176,7 +168,7 @@  static void em_release_table_kref(struct kref *kref)
 	/* It was the last owner of this table so we can free */
 	table = container_of(kref, struct em_perf_table, kref);
 
-	call_rcu(&table->rcu, em_destroy_table_rcu);
+	kfree_rcu(table, rcu);
 }
 
 /**