2018-03-27 13:57:56

by Lenny Szubowicz

[permalink] [raw]
Subject: [PATCH] ACPI: acpi_pad: Fix memory leak in power saving threads

Fix once per second (round_robin_time) memory leak of about 1 KB in
each acpi_pad kernel idling thread that is activated.

Found by testing with kmemleak.

Signed-off-by: Lenny Szubowicz <[email protected]>
---
drivers/acpi/acpi_pad.c | 3 +++
1 file changed, 3 insertions(+)

diff --git a/drivers/acpi/acpi_pad.c b/drivers/acpi/acpi_pad.c
index 7544310..552c1f7 100644
--- a/drivers/acpi/acpi_pad.c
+++ b/drivers/acpi/acpi_pad.c
@@ -110,6 +110,7 @@ static void round_robin_cpu(unsigned int tsk_index)
cpumask_andnot(tmp, cpu_online_mask, pad_busy_cpus);
if (cpumask_empty(tmp)) {
mutex_unlock(&round_robin_lock);
+ free_cpumask_var(tmp);
return;
}
for_each_cpu(cpu, tmp) {
@@ -127,6 +128,8 @@ static void round_robin_cpu(unsigned int tsk_index)
mutex_unlock(&round_robin_lock);

set_cpus_allowed_ptr(current, cpumask_of(preferred_cpu));
+
+ free_cpumask_var(tmp);
}

static void exit_round_robin(unsigned int tsk_index)
--
1.8.3.1



2018-03-30 10:09:44

by Rafael J. Wysocki

[permalink] [raw]
Subject: Re: [PATCH] ACPI: acpi_pad: Fix memory leak in power saving threads

On Tuesday, March 27, 2018 3:56:40 PM CEST Lenny Szubowicz wrote:
> Fix once per second (round_robin_time) memory leak of about 1 KB in
> each acpi_pad kernel idling thread that is activated.
>
> Found by testing with kmemleak.
>
> Signed-off-by: Lenny Szubowicz <[email protected]>
> ---
> drivers/acpi/acpi_pad.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/drivers/acpi/acpi_pad.c b/drivers/acpi/acpi_pad.c
> index 7544310..552c1f7 100644
> --- a/drivers/acpi/acpi_pad.c
> +++ b/drivers/acpi/acpi_pad.c
> @@ -110,6 +110,7 @@ static void round_robin_cpu(unsigned int tsk_index)
> cpumask_andnot(tmp, cpu_online_mask, pad_busy_cpus);
> if (cpumask_empty(tmp)) {
> mutex_unlock(&round_robin_lock);
> + free_cpumask_var(tmp);
> return;
> }
> for_each_cpu(cpu, tmp) {
> @@ -127,6 +128,8 @@ static void round_robin_cpu(unsigned int tsk_index)
> mutex_unlock(&round_robin_lock);
>
> set_cpus_allowed_ptr(current, cpumask_of(preferred_cpu));
> +
> + free_cpumask_var(tmp);
> }
>
> static void exit_round_robin(unsigned int tsk_index)
>

Applied, thanks!