aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/hwmon
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@novell.com>2010-09-13 06:23:05 -0400
committerGuenter Roeck <guenter.roeck@ericsson.com>2010-09-24 14:44:19 -0400
commite40cc4bdfd4b89813f072f72bd9c7055814d3f0f (patch)
treeaab7459b56b53ea2aaec22900aeb687454f5ccfa /drivers/hwmon
parentf6aeccdb96fc0555e939dd507702922f07dcbcbb (diff)
x86/hwmon: register alternate sibling upon CPU removal
Just like pkgtemp registers another core of the same package when one gets removed, coretemp should register another hyperthread (if available) in that situation. As pointed out in the patch fixing the respective code in pkgtemp, the list protectng mutex must be dropped before calling coretemp_device_add(), and due to the restructured loop (including an explicit return) the "safe" variant of the list iterator isn't needed anymore. Signed-off-by: Jan Beulich <jbeulich@novell.com> Cc: Rudolf Marek <r.marek@assembler.cz> Signed-off-by: Guenter Roeck <guenter.roeck@ericsson.com>
Diffstat (limited to 'drivers/hwmon')
-rw-r--r--drivers/hwmon/coretemp.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/drivers/hwmon/coretemp.c b/drivers/hwmon/coretemp.c
index 5850da64ae28..baa842a80b4b 100644
--- a/drivers/hwmon/coretemp.c
+++ b/drivers/hwmon/coretemp.c
@@ -491,14 +491,22 @@ exit:
491 491
492static void coretemp_device_remove(unsigned int cpu) 492static void coretemp_device_remove(unsigned int cpu)
493{ 493{
494 struct pdev_entry *p, *n; 494 struct pdev_entry *p;
495 unsigned int i;
496
495 mutex_lock(&pdev_list_mutex); 497 mutex_lock(&pdev_list_mutex);
496 list_for_each_entry_safe(p, n, &pdev_list, list) { 498 list_for_each_entry(p, &pdev_list, list) {
497 if (p->cpu == cpu) { 499 if (p->cpu != cpu)
498 platform_device_unregister(p->pdev); 500 continue;
499 list_del(&p->list); 501
500 kfree(p); 502 platform_device_unregister(p->pdev);
501 } 503 list_del(&p->list);
504 mutex_unlock(&pdev_list_mutex);
505 kfree(p);
506 for_each_cpu(i, cpu_sibling_mask(cpu))
507 if (i != cpu && !coretemp_device_add(i))
508 break;
509 return;
502 } 510 }
503 mutex_unlock(&pdev_list_mutex); 511 mutex_unlock(&pdev_list_mutex);
504} 512}