Commit e40cc4bdfd4b89813f072f72bd9c7055814d3f0f

Authored by Jan Beulich
Committed by Guenter Roeck
1 parent f6aeccdb96

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>

Showing 1 changed file with 15 additions and 7 deletions Side-by-side Diff

drivers/hwmon/coretemp.c
... ... @@ -491,14 +491,22 @@
491 491  
492 492 static 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 497 mutex_lock(&pdev_list_mutex);
496   - list_for_each_entry_safe(p, n, &pdev_list, list) {
497   - if (p->cpu == cpu) {
498   - platform_device_unregister(p->pdev);
499   - list_del(&p->list);
500   - kfree(p);
501   - }
  498 + list_for_each_entry(p, &pdev_list, list) {
  499 + if (p->cpu != cpu)
  500 + continue;
  501 +
  502 + platform_device_unregister(p->pdev);
  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 511 mutex_unlock(&pdev_list_mutex);
504 512 }