GIT: unionfs2-2.6.27.y: hwmon: (coretemp) Skip duplicate CPU entries

Erez Zadok ezk at fsl.cs.sunysb.edu
Thu Aug 12 23:15:34 EDT 2010


commit 4fe7e0696857ed6b1980a2e5198aa4507c1fa9e9
Author: Jean Delvare <khali at linux-fr.org>
Date:   Fri Jul 9 16:22:49 2010 +0200

    hwmon: (coretemp) Skip duplicate CPU entries
    
    commit d883b9f0977269d519469da72faec6a7f72cb489 upstream.
    
    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 at linux-fr.org>
    Acked-by: Huaxu Wan <huaxu.wan at intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>

diff --git a/drivers/hwmon/coretemp.c b/drivers/hwmon/coretemp.c
index d73d0ba..a7f98c9 100644
--- a/drivers/hwmon/coretemp.c
+++ b/drivers/hwmon/coretemp.c
@@ -317,6 +317,10 @@ struct pdev_entry {
 	struct list_head list;
 	struct platform_device *pdev;
 	unsigned int cpu;
+#ifdef CONFIG_SMP
+	u16 phys_proc_id;
+	u16 cpu_core_id;
+#endif
 };
 
 static LIST_HEAD(pdev_list);
@@ -327,6 +331,22 @@ static int __cpuinit coretemp_device_add(unsigned int cpu)
 	int err;
 	struct platform_device *pdev;
 	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);
 	if (!pdev) {
@@ -350,7 +370,10 @@ static int __cpuinit coretemp_device_add(unsigned int cpu)
 
 	pdev_entry->pdev = pdev;
 	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);
 	mutex_unlock(&pdev_list_mutex);
 
@@ -361,6 +384,7 @@ exit_device_free:
 exit_device_put:
 	platform_device_put(pdev);
 exit:
+	mutex_unlock(&pdev_list_mutex);
 	return err;
 }
 


More information about the unionfs-cvs mailing list