Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1210615 > unrolled thread

[PATCH v2] thermal: cpu_cooling: Remove usage of devm functions

Started byVaishali Thakkar <vthakkar1994@gmail.com>
First post2015-08-20 18:20 +0200
Last post2015-08-27 11:10 +0200
Articles 7 — 3 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH v2] thermal: cpu_cooling: Remove usage of devm functions Vaishali Thakkar <vthakkar1994@gmail.com> - 2015-08-20 18:20 +0200
    Re: [PATCH v2] thermal: cpu_cooling: Remove usage of devm functions Javi Merino <javi.merino@arm.com> - 2015-08-26 14:50 +0200
      Re: [PATCH v2] thermal: cpu_cooling: Remove usage of devm functions Viresh Kumar <viresh.kumar@linaro.org> - 2015-08-26 15:00 +0200
        Re: [PATCH v2] thermal: cpu_cooling: Remove usage of devm functions Javi Merino <javi.merino@arm.com> - 2015-08-26 15:10 +0200
          Re: [PATCH v2] thermal: cpu_cooling: Remove usage of devm functions Viresh Kumar <viresh.kumar@linaro.org> - 2015-08-26 15:20 +0200
            Re: [PATCH v2] thermal: cpu_cooling: Remove usage of devm functions Vaishali Thakkar <vthakkar1994@gmail.com> - 2015-08-27 03:40 +0200
              Re: [PATCH v2] thermal: cpu_cooling: Remove usage of devm functions Javi Merino <javi.merino@arm.com> - 2015-08-27 11:10 +0200

#1210615 — [PATCH v2] thermal: cpu_cooling: Remove usage of devm functions

FromVaishali Thakkar <vthakkar1994@gmail.com>
Date2015-08-20 18:20 +0200
Subject[PATCH v2] thermal: cpu_cooling: Remove usage of devm functions
Message-ID<pZAJk-1B8-9@gated-at.bofh.it>
In the function cpufreq_get_requested_power, the memory allocated
for load_cpu is live within the function only. And after the
allocation it is immediately freed with devm_kfree. There is no
need to allocate memory for load_cpu with devm function so replace
devm_kcalloc with kcalloc and devm_kfree with kfree.

Signed-off-by: Vaishali Thakkar <vthakkar1994@gmail.com>
---
Changes since v1:
	- Introduce new label based on Viresh Kumar's suggestion
---
 drivers/thermal/cpu_cooling.c | 20 +++++++++-----------
 1 file changed, 9 insertions(+), 11 deletions(-)

diff --git a/drivers/thermal/cpu_cooling.c b/drivers/thermal/cpu_cooling.c
index 620dcd4..7027923 100644
--- a/drivers/thermal/cpu_cooling.c
+++ b/drivers/thermal/cpu_cooling.c
@@ -584,8 +584,7 @@ static int cpufreq_get_requested_power(struct thermal_cooling_device *cdev,
 	if (trace_thermal_power_cpu_get_power_enabled()) {
 		u32 ncpus = cpumask_weight(&cpufreq_device->allowed_cpus);
 
-		load_cpu = devm_kcalloc(&cdev->device, ncpus, sizeof(*load_cpu),
-					GFP_KERNEL);
+		load_cpu = kcalloc(ncpus, sizeof(*load_cpu), GFP_KERNEL);
 	}
 
 	for_each_cpu(cpu, &cpufreq_device->allowed_cpus) {
@@ -607,22 +606,21 @@ static int cpufreq_get_requested_power(struct thermal_cooling_device *cdev,
 
 	dynamic_power = get_dynamic_power(cpufreq_device, freq);
 	ret = get_static_power(cpufreq_device, tz, freq, &static_power);
-	if (ret) {
-		if (load_cpu)
-			devm_kfree(&cdev->device, load_cpu);
-		return ret;
-	}
+	if (ret)
+		goto free;
 
-	if (load_cpu) {
+	if (load_cpu)
 		trace_thermal_power_cpu_get_power(
 			&cpufreq_device->allowed_cpus,
 			freq, load_cpu, i, dynamic_power, static_power);
 
-		devm_kfree(&cdev->device, load_cpu);
-	}
-
 	*power = static_power + dynamic_power;
 	return 0;
+
+free:
+	kfree(load_cpu);
+
+	return ret;
 }
 
 /**
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [next] | [standalone]


#1213828

FromJavi Merino <javi.merino@arm.com>
Date2015-08-26 14:50 +0200
Message-ID<q1Ijp-602-31@gated-at.bofh.it>
In reply to#1210615
I missed this because I wasn't CCed :(  Thankfully, I'll be in
MAINTAINERS for this soon.

On Thu, Aug 20, 2015 at 05:14:02PM +0100, Vaishali Thakkar wrote:
> In the function cpufreq_get_requested_power, the memory allocated
> for load_cpu is live within the function only. And after the
> allocation it is immediately freed with devm_kfree. There is no
> need to allocate memory for load_cpu with devm function so replace
> devm_kcalloc with kcalloc and devm_kfree with kfree.
> 
> Signed-off-by: Vaishali Thakkar <vthakkar1994@gmail.com>
> ---
> Changes since v1:
> 	- Introduce new label based on Viresh Kumar's suggestion
> ---
>  drivers/thermal/cpu_cooling.c | 20 +++++++++-----------
>  1 file changed, 9 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/thermal/cpu_cooling.c b/drivers/thermal/cpu_cooling.c
> index 620dcd4..7027923 100644
> --- a/drivers/thermal/cpu_cooling.c
> +++ b/drivers/thermal/cpu_cooling.c
> @@ -584,8 +584,7 @@ static int cpufreq_get_requested_power(struct thermal_cooling_device *cdev,
>  	if (trace_thermal_power_cpu_get_power_enabled()) {
>  		u32 ncpus = cpumask_weight(&cpufreq_device->allowed_cpus);
>  
> -		load_cpu = devm_kcalloc(&cdev->device, ncpus, sizeof(*load_cpu),
> -					GFP_KERNEL);
> +		load_cpu = kcalloc(ncpus, sizeof(*load_cpu), GFP_KERNEL);
>  	}
>  
>  	for_each_cpu(cpu, &cpufreq_device->allowed_cpus) {
> @@ -607,22 +606,21 @@ static int cpufreq_get_requested_power(struct thermal_cooling_device *cdev,
>  
>  	dynamic_power = get_dynamic_power(cpufreq_device, freq);
>  	ret = get_static_power(cpufreq_device, tz, freq, &static_power);
> -	if (ret) {
> -		if (load_cpu)
> -			devm_kfree(&cdev->device, load_cpu);
> -		return ret;
> -	}
> +	if (ret)
> +		goto free;
>  
> -	if (load_cpu) {
> +	if (load_cpu)
>  		trace_thermal_power_cpu_get_power(
>  			&cpufreq_device->allowed_cpus,
>  			freq, load_cpu, i, dynamic_power, static_power);
>  
> -		devm_kfree(&cdev->device, load_cpu);

This introduces a memory leak.  Keep the kfree() here, you can't drop
it.  Cheers,
Javi

> -	}
> -
>  	*power = static_power + dynamic_power;
>  	return 0;
> +
> +free:
> +	kfree(load_cpu);
> +
> +	return ret;
>  }
>  
>  /**
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1213835

FromViresh Kumar <viresh.kumar@linaro.org>
Date2015-08-26 15:00 +0200
Message-ID<q1It5-6bl-17@gated-at.bofh.it>
In reply to#1213828
On 26-08-15, 13:47, Javi Merino wrote:
> I missed this because I wasn't CCed :(  Thankfully, I'll be in
> MAINTAINERS for this soon.

Yeah, I need to resend that patch soon :)

> > -		devm_kfree(&cdev->device, load_cpu);
> 
> This introduces a memory leak.  Keep the kfree() here, you can't drop
> it.  Cheers,
> Javi
> 
> > -	}
> > -
> >  	*power = static_power + dynamic_power;
> >  	return 0;
> > +
> > +free:
> > +	kfree(load_cpu);

Wouldn't this make that work ?

-- 
viresh
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1213839

FromJavi Merino <javi.merino@arm.com>
Date2015-08-26 15:10 +0200
Message-ID<q1ICK-6BL-11@gated-at.bofh.it>
In reply to#1213835
On Wed, Aug 26, 2015 at 01:51:58PM +0100, Viresh Kumar wrote:
> On 26-08-15, 13:47, Javi Merino wrote:
> > I missed this because I wasn't CCed :(  Thankfully, I'll be in
> > MAINTAINERS for this soon.
> 
> Yeah, I need to resend that patch soon :)
> 
> > > -		devm_kfree(&cdev->device, load_cpu);
> > 
> > This introduces a memory leak.  Keep the kfree() here, you can't drop
> > it.  Cheers,
> > Javi
> > 
> > > -	}
> > > -
> > >  	*power = static_power + dynamic_power;
> > >  	return 0;
> > > +
> > > +free:
> > > +	kfree(load_cpu);
> 
> Wouldn't this make that work ?

Nope, you're not reaching that code path from there.  Removing the
"return 0" would work, but I don't like it, since we would be calling
kfree() all the time, even when the trace is not enabled.  I'd rather
leave the kfree() where it is.

Cheers,
Javi
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1213848

FromViresh Kumar <viresh.kumar@linaro.org>
Date2015-08-26 15:20 +0200
Message-ID<q1IMq-6N8-13@gated-at.bofh.it>
In reply to#1213839
On 26-08-15, 14:09, Javi Merino wrote:
> On Wed, Aug 26, 2015 at 01:51:58PM +0100, Viresh Kumar wrote:
> > On 26-08-15, 13:47, Javi Merino wrote:
> > > I missed this because I wasn't CCed :(  Thankfully, I'll be in
> > > MAINTAINERS for this soon.
> > 
> > Yeah, I need to resend that patch soon :)
> > 
> > > > -		devm_kfree(&cdev->device, load_cpu);
> > > 
> > > This introduces a memory leak.  Keep the kfree() here, you can't drop
> > > it.  Cheers,
> > > Javi
> > > 
> > > > -	}
> > > > -
> > > >  	*power = static_power + dynamic_power;
> > > >  	return 0;

So, the change I suggested on V1 removed this as well :) and Vaishali
missed it completely.

> > > > +
> > > > +free:
> > > > +	kfree(load_cpu);
> > 
> > Wouldn't this make that work ?
> 
> Nope, you're not reaching that code path from there.  Removing the
> "return 0" would work, but I don't like it, since we would be calling
> kfree() all the time, even when the trace is not enabled.  I'd rather
> leave the kfree() where it is.

Hmm..

-- 
viresh
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1214267

FromVaishali Thakkar <vthakkar1994@gmail.com>
Date2015-08-27 03:40 +0200
Message-ID<q1Ukx-6pj-7@gated-at.bofh.it>
In reply to#1213848
On Wed, Aug 26, 2015 at 6:44 PM, Viresh Kumar <viresh.kumar@linaro.org> wrote:
> On 26-08-15, 14:09, Javi Merino wrote:
>> On Wed, Aug 26, 2015 at 01:51:58PM +0100, Viresh Kumar wrote:
>> > On 26-08-15, 13:47, Javi Merino wrote:
>> > > I missed this because I wasn't CCed :(  Thankfully, I'll be in
>> > > MAINTAINERS for this soon.
>> >
>> > Yeah, I need to resend that patch soon :)
>> >
>> > > > -               devm_kfree(&cdev->device, load_cpu);
>> > >
>> > > This introduces a memory leak.  Keep the kfree() here, you can't drop
>> > > it.  Cheers,
>> > > Javi
>> > >
>> > > > -       }
>> > > > -
>> > > >         *power = static_power + dynamic_power;
>> > > >         return 0;
>
> So, the change I suggested on V1 removed this as well :) and Vaishali
> missed it completely.

Yes. I missed the point that kfree was called at 2 places previously.
Would you like me to send v3 with changes having just new label with
'goto' at both of these places or you would like to apply v1 of the patch?

>> > > > +
>> > > > +free:
>> > > > +       kfree(load_cpu);
>> >
>> > Wouldn't this make that work ?
>>
>> Nope, you're not reaching that code path from there.  Removing the
>> "return 0" would work, but I don't like it, since we would be calling
>> kfree() all the time, even when the trace is not enabled.  I'd rather
>> leave the kfree() where it is.
>
> Hmm..
>
> --
> viresh



-- 
Vaishali
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1214400

FromJavi Merino <javi.merino@arm.com>
Date2015-08-27 11:10 +0200
Message-ID<q21m1-8oJ-1@gated-at.bofh.it>
In reply to#1214267
On Thu, Aug 27, 2015 at 02:31:26AM +0100, Vaishali Thakkar wrote:
> On Wed, Aug 26, 2015 at 6:44 PM, Viresh Kumar <viresh.kumar@linaro.org> wrote:
> > On 26-08-15, 14:09, Javi Merino wrote:
> >> On Wed, Aug 26, 2015 at 01:51:58PM +0100, Viresh Kumar wrote:
> >> > On 26-08-15, 13:47, Javi Merino wrote:
> >> > > I missed this because I wasn't CCed :(  Thankfully, I'll be in
> >> > > MAINTAINERS for this soon.
> >> >
> >> > Yeah, I need to resend that patch soon :)
> >> >
> >> > > > -               devm_kfree(&cdev->device, load_cpu);
> >> > >
> >> > > This introduces a memory leak.  Keep the kfree() here, you can't drop
> >> > > it.  Cheers,
> >> > > Javi
> >> > >
> >> > > > -       }
> >> > > > -
> >> > > >         *power = static_power + dynamic_power;
> >> > > >         return 0;
> >
> > So, the change I suggested on V1 removed this as well :) and Vaishali
> > missed it completely.
> 
> Yes. I missed the point that kfree was called at 2 places previously.
> Would you like me to send v3 with changes having just new label with
> 'goto' at both of these places or you would like to apply v1 of the patch?

I vote for v1.  I've acked it.

Cheers,
Javi
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web