From: viresh.kumar@linaro.org (Viresh Kumar)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] thermal: cpu_cooling: fix lockdep problems in cpu_cooling
Date: Wed, 12 Aug 2015 13:41:43 +0530 [thread overview]
Message-ID: <20150812081142.GB16445@linux> (raw)
In-Reply-To: <E1ZPQfV-0005nb-DN@rmk-PC.arm.linux.org.uk>
On 12-08-15, 08:41, Russell King wrote:
> diff --git a/drivers/thermal/cpu_cooling.c b/drivers/thermal/cpu_cooling.c
> /**
> @@ -221,7 +224,7 @@ static int cpufreq_thermal_notifier(struct notifier_block *nb,
> switch (event) {
>
> case CPUFREQ_ADJUST:
> - mutex_lock(&cooling_cpufreq_lock);
> + mutex_lock(&cooling_list_lock);
There is one more place where the list's locking needs update:
cpufreq_cooling_get_level().
> list_for_each_entry(cpufreq_dev, &cpufreq_dev_list, node) {
> if (!cpumask_test_cpu(policy->cpu,
> &cpufreq_dev->allowed_cpus))
> @@ -233,7 +236,7 @@ static int cpufreq_thermal_notifier(struct notifier_block *nb,
> cpufreq_verify_within_limits(policy, 0,
> max_freq);
> }
> - mutex_unlock(&cooling_cpufreq_lock);
> + mutex_unlock(&cooling_list_lock);
> break;
> default:
> return NOTIFY_DONE;
> @@ -865,12 +868,15 @@ __cpufreq_cooling_register(struct device_node *np,
> cpufreq_dev->cool_dev = cool_dev;
>
> mutex_lock(&cooling_cpufreq_lock);
> + mutex_lock(&cooling_list_lock);
Why is the list lock taken from within the existing lock here? and ...
> + list_add(&cpufreq_dev->node, &cpufreq_dev_list);
> + mutex_unlock(&cooling_list_lock);
>
> /* Register the notifier for first cpufreq cooling device */
> - if (list_empty(&cpufreq_dev_list))
> + if (cpufreq_dev_count == 0)
> cpufreq_register_notifier(&thermal_cpufreq_notifier_block,
> CPUFREQ_POLICY_NOTIFIER);
> - list_add(&cpufreq_dev->node, &cpufreq_dev_list);
> + cpufreq_dev_count++;
Maybe:
if (!cpufreq_dev_count++)
cpufreq_register_notifier();
>
> mutex_unlock(&cooling_cpufreq_lock);
>
> @@ -1014,14 +1020,18 @@ void cpufreq_cooling_unregister(struct thermal_cooling_device *cdev)
>
> cpufreq_dev = cdev->devdata;
> mutex_lock(&cooling_cpufreq_lock);
> - list_del(&cpufreq_dev->node);
> + cpufreq_dev_count--;
>
> /* Unregister the notifier for the last cpufreq cooling device */
> - if (list_empty(&cpufreq_dev_list))
> + if (cpufreq_dev_count == 0)
Maybe:
if (!--cpufreq_dev_count)
cpufreq_register_notifier();
> cpufreq_unregister_notifier(&thermal_cpufreq_notifier_block,
> CPUFREQ_POLICY_NOTIFIER);
> mutex_unlock(&cooling_cpufreq_lock);
>
> + mutex_lock(&cooling_list_lock);
... The same list lock is not taken from within the earlier critical
section?
> + list_del(&cpufreq_dev->node);
> + mutex_unlock(&cooling_list_lock);
> +
> thermal_cooling_device_unregister(cpufreq_dev->cool_dev);
> release_idr(&cpufreq_idr, cpufreq_dev->id);
> kfree(cpufreq_dev->time_in_idle_timestamp);
> --
> 2.1.0
--
viresh
next prev parent reply other threads:[~2015-08-12 8:11 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-12-14 21:36 3.18: lockdep problems in cpufreq Russell King - ARM Linux
2014-12-14 21:36 ` Russell King - ARM Linux
2014-12-14 22:23 ` Rafael J. Wysocki
2014-12-14 22:23 ` Rafael J. Wysocki
2014-12-15 3:56 ` Viresh Kumar
2014-12-15 3:56 ` Viresh Kumar
2014-12-15 13:28 ` Yadwinder Singh Brar
2014-12-15 13:28 ` Yadwinder Singh Brar
2014-12-15 13:46 ` Russell King - ARM Linux
2014-12-15 13:46 ` Russell King - ARM Linux
2014-12-15 14:54 ` Yadwinder Singh Brar
2014-12-15 14:54 ` Yadwinder Singh Brar
2014-12-15 17:43 ` Russell King - ARM Linux
2014-12-15 17:43 ` Russell King - ARM Linux
2014-12-15 21:41 ` Rafael J. Wysocki
2014-12-15 21:41 ` Rafael J. Wysocki
2014-12-15 23:09 ` Russell King - ARM Linux
2014-12-15 23:09 ` Russell King - ARM Linux
2014-12-16 3:41 ` Viresh Kumar
2014-12-16 3:41 ` Viresh Kumar
2015-01-06 15:38 ` Russell King - ARM Linux
2015-01-06 15:38 ` Russell King - ARM Linux
2015-05-18 18:56 ` Russell King - ARM Linux
2015-05-18 18:56 ` Russell King - ARM Linux
2015-05-18 22:05 ` Rafael J. Wysocki
2015-05-18 22:05 ` Rafael J. Wysocki
2015-08-11 17:03 ` Russell King - ARM Linux
2015-08-11 17:03 ` Russell King - ARM Linux
2015-08-12 5:16 ` Viresh Kumar
2015-08-12 5:16 ` Viresh Kumar
2015-08-12 7:21 ` Russell King - ARM Linux
2015-08-12 7:21 ` Russell King - ARM Linux
2015-08-12 7:35 ` Viresh Kumar
2015-08-12 7:35 ` Viresh Kumar
2015-08-12 7:41 ` [PATCH] thermal: cpu_cooling: fix lockdep problems in cpu_cooling Russell King
2015-08-12 8:11 ` Viresh Kumar [this message]
2015-08-12 9:08 ` Russell King - ARM Linux
2015-08-12 9:18 ` Viresh Kumar
2015-08-14 4:50 ` Eduardo Valentin
2015-08-14 5:53 ` Viresh Kumar
2015-08-15 1:19 ` Eduardo Valentin
2015-08-15 3:06 ` Viresh Kumar
2015-08-12 7:49 ` 3.18: lockdep problems in cpufreq Russell King - ARM Linux
2015-08-12 7:49 ` Russell King - ARM Linux
2015-08-12 8:12 ` Viresh Kumar
2015-08-12 8:12 ` Viresh Kumar
2015-08-12 9:08 ` Russell King - ARM Linux
2015-08-12 9:08 ` Russell King - ARM Linux
2015-08-12 9:19 ` Viresh Kumar
2015-08-12 9:19 ` Viresh Kumar
2015-08-13 1:20 ` Rafael J. Wysocki
2015-08-13 1:20 ` Rafael J. Wysocki
2015-08-13 8:17 ` Russell King - ARM Linux
2015-08-13 8:17 ` Russell King - ARM Linux
2015-08-13 8:22 ` Viresh Kumar
2015-08-13 8:22 ` Viresh Kumar
2015-08-18 1:32 ` Rafael J. Wysocki
2015-08-18 1:32 ` Rafael J. Wysocki
2015-08-18 9:30 ` Eduardo Valentin
2015-08-18 9:30 ` Eduardo Valentin
2014-12-16 3:37 ` Viresh Kumar
2014-12-16 3:37 ` Viresh Kumar
2014-12-15 14:38 ` Viresh Kumar
2014-12-15 14:38 ` Viresh Kumar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20150812081142.GB16445@linux \
--to=viresh.kumar@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.