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: Jean Delvare <khali@linux-fr.org> Acked-by: Huaxu Wan <huaxu.wan@intel.com> Cc: stable@kernel.org
This commit is contained in:
Родитель
436cad2a41
Коммит
d883b9f097
|
@ -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)
|
||||||
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)
|
||||||
|
|
||||||
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 @@ exit_device_free:
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче