Commit d883b9f0 authored by Jean Delvare's avatar Jean Delvare

hwmon: (coretemp) Skip duplicate CPU entries

On hyper-threaded CPUs, each core appears twice in the CPU list. Skip
the second entry to avoid duplicate sensors.
Signed-off-by: default avatarJean Delvare <khali@linux-fr.org>
Acked-by: default avatarHuaxu Wan <huaxu.wan@intel.com>
Cc: stable@kernel.org
parent 436cad2a
...@@ -405,6 +405,10 @@ struct pdev_entry { ...@@ -405,6 +405,10 @@ struct pdev_entry {
struct list_head list; struct list_head list;
struct platform_device *pdev; struct platform_device *pdev;
unsigned int cpu; unsigned int cpu;
#ifdef CONFIG_SMP
u16 phys_proc_id;
u16 cpu_core_id;
#endif
}; };
static LIST_HEAD(pdev_list); static LIST_HEAD(pdev_list);
...@@ -415,6 +419,22 @@ static int __cpuinit coretemp_device_add(unsigned int cpu) ...@@ -415,6 +419,22 @@ static int __cpuinit coretemp_device_add(unsigned int cpu)
int err; int err;
struct platform_device *pdev; struct platform_device *pdev;
struct pdev_entry *pdev_entry; struct pdev_entry *pdev_entry;
#ifdef CONFIG_SMP
struct cpuinfo_x86 *c = &cpu_data(cpu);
#endif
mutex_lock(&pdev_list_mutex);
#ifdef CONFIG_SMP
/* Skip second HT entry of each core */
list_for_each_entry(pdev_entry, &pdev_list, list) {
if (c->phys_proc_id == pdev_entry->phys_proc_id &&
c->cpu_core_id == pdev_entry->cpu_core_id) {
err = 0; /* Not an error */
goto exit;
}
}
#endif
pdev = platform_device_alloc(DRVNAME, cpu); pdev = platform_device_alloc(DRVNAME, cpu);
if (!pdev) { if (!pdev) {
...@@ -438,7 +458,10 @@ static int __cpuinit coretemp_device_add(unsigned int cpu) ...@@ -438,7 +458,10 @@ static int __cpuinit coretemp_device_add(unsigned int cpu)
pdev_entry->pdev = pdev; pdev_entry->pdev = pdev;
pdev_entry->cpu = cpu; pdev_entry->cpu = cpu;
mutex_lock(&pdev_list_mutex); #ifdef CONFIG_SMP
pdev_entry->phys_proc_id = c->phys_proc_id;
pdev_entry->cpu_core_id = c->cpu_core_id;
#endif
list_add_tail(&pdev_entry->list, &pdev_list); list_add_tail(&pdev_entry->list, &pdev_list);
mutex_unlock(&pdev_list_mutex); mutex_unlock(&pdev_list_mutex);
...@@ -449,6 +472,7 @@ static int __cpuinit coretemp_device_add(unsigned int cpu) ...@@ -449,6 +472,7 @@ static int __cpuinit coretemp_device_add(unsigned int cpu)
exit_device_put: exit_device_put:
platform_device_put(pdev); platform_device_put(pdev);
exit: exit:
mutex_unlock(&pdev_list_mutex);
return err; return err;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment