aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/hwmon/coretemp.c
diff options
context:
space:
mode:
authorGuenter Roeck <guenter.roeck@ericsson.com>2011-05-23 17:05:38 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2011-05-24 00:11:14 -0400
commitf4e0bcf06b9771af04273473592aeeb860ca2816 (patch)
tree0cf83331612b1e721b9663a71bfd5f364c49992f /drivers/hwmon/coretemp.c
parent5f2e8e2b0bf0f3a1819b25f6117a7f20bd15521d (diff)
hwmon: (coretemp) Add comments describing the handling of HT CPUs
The coretemp driver provides a single set of device attributes for each physical core of a HT CPU to avoid duplicate sensors. This functionality was introduced with commit d883b9f09772 ("hwmon: (coretemp) Skip duplicate CPU entries"). Commit e40cc4bdfd4b ("x86/hwmon: register alternate sibling upon CPU removal") extends this functionality to register the HT sibling of a CPU which is taken offline, to ensure that sensor attributes are provided if at least one HT sibling of a core is online. Add comments into the code describing the functionality in some more detail. Signed-off-by: Guenter Roeck <guenter.roeck@ericsson.com> Cc: Fenghua Yu <fenghua.yu@intel.com> Cc: Durgadoss R <durgadoss.r@intel.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/hwmon/coretemp.c')
-rw-r--r--drivers/hwmon/coretemp.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/drivers/hwmon/coretemp.c b/drivers/hwmon/coretemp.c
index a00245eb3fa0..9577c432e77f 100644
--- a/drivers/hwmon/coretemp.c
+++ b/drivers/hwmon/coretemp.c
@@ -506,7 +506,13 @@ static int create_core_data(struct platform_data *pdata,
506 if (attr_no > MAX_CORE_DATA - 1) 506 if (attr_no > MAX_CORE_DATA - 1)
507 return -ERANGE; 507 return -ERANGE;
508 508
509 /* Skip if it is a HT core, Not an error */ 509 /*
510 * Provide a single set of attributes for all HT siblings of a core
511 * to avoid duplicate sensors (the processor ID and core ID of all
512 * HT siblings of a core is the same).
513 * Skip if a HT sibling of this core is already online.
514 * This is not an error.
515 */
510 if (pdata->core_data[attr_no] != NULL) 516 if (pdata->core_data[attr_no] != NULL)
511 return 0; 517 return 0;
512 518
@@ -763,10 +769,20 @@ static void __cpuinit put_core_offline(unsigned int cpu)
763 if (pdata->core_data[indx] && pdata->core_data[indx]->cpu == cpu) 769 if (pdata->core_data[indx] && pdata->core_data[indx]->cpu == cpu)
764 coretemp_remove_core(pdata, &pdev->dev, indx); 770 coretemp_remove_core(pdata, &pdev->dev, indx);
765 771
766 /* Online the HT version of this core, if any */ 772 /*
773 * If a core is taken offline, but a HT sibling of the same core is
774 * still online, register the alternate sibling. This ensures that
775 * exactly one set of attributes is provided as long as at least one
776 * HT sibling of a core is online.
777 */
767 for_each_sibling(i, cpu) { 778 for_each_sibling(i, cpu) {
768 if (i != cpu) { 779 if (i != cpu) {
769 get_core_online(i); 780 get_core_online(i);
781 /*
782 * Display temperature sensor data for one HT sibling
783 * per core only, so abort the loop after one such
784 * sibling has been found.
785 */
770 break; 786 break;
771 } 787 }
772 } 788 }