diff options
| -rw-r--r-- | drivers/hwmon/coretemp.c | 22 |
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 | ||
| 492 | static void coretemp_device_remove(unsigned int cpu) | 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 | 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 | } |
