linux/drivers/hwmon/coretemp.c
<<
>>
Prefs
   1/*
   2 * coretemp.c - Linux kernel module for hardware monitoring
   3 *
   4 * Copyright (C) 2007 Rudolf Marek <r.marek@assembler.cz>
   5 *
   6 * Inspired from many hwmon drivers
   7 *
   8 * This program is free software; you can redistribute it and/or modify
   9 * it under the terms of the GNU General Public License as published by
  10 * the Free Software Foundation; version 2 of the License.
  11 *
  12 * This program is distributed in the hope that it will be useful,
  13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15 * GNU General Public License for more details.
  16 *
  17 * You should have received a copy of the GNU General Public License
  18 * along with this program; if not, write to the Free Software
  19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  20 * 02110-1301 USA.
  21 */
  22
  23#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  24
  25#include <linux/module.h>
  26#include <linux/init.h>
  27#include <linux/slab.h>
  28#include <linux/jiffies.h>
  29#include <linux/hwmon.h>
  30#include <linux/sysfs.h>
  31#include <linux/hwmon-sysfs.h>
  32#include <linux/err.h>
  33#include <linux/mutex.h>
  34#include <linux/list.h>
  35#include <linux/platform_device.h>
  36#include <linux/cpu.h>
  37#include <linux/smp.h>
  38#include <linux/moduleparam.h>
  39#include <asm/msr.h>
  40#include <asm/processor.h>
  41#include <asm/cpu_device_id.h>
  42
  43#define DRVNAME "coretemp"
  44
  45/*
  46 * force_tjmax only matters when TjMax can't be read from the CPU itself.
  47 * When set, it replaces the driver's suboptimal heuristic.
  48 */
  49static int force_tjmax;
  50module_param_named(tjmax, force_tjmax, int, 0444);
  51MODULE_PARM_DESC(tjmax, "TjMax value in degrees Celsius");
  52
  53#define BASE_SYSFS_ATTR_NO      2       /* Sysfs Base attr no for coretemp */
  54#define NUM_REAL_CORES          32      /* Number of Real cores per cpu */
  55#define CORETEMP_NAME_LENGTH    17      /* String Length of attrs */
  56#define MAX_CORE_ATTRS          4       /* Maximum no of basic attrs */
  57#define TOTAL_ATTRS             (MAX_CORE_ATTRS + 1)
  58#define MAX_CORE_DATA           (NUM_REAL_CORES + BASE_SYSFS_ATTR_NO)
  59
  60#define TO_PHYS_ID(cpu)         (cpu_data(cpu).phys_proc_id)
  61#define TO_CORE_ID(cpu)         (cpu_data(cpu).cpu_core_id)
  62#define TO_ATTR_NO(cpu)         (TO_CORE_ID(cpu) + BASE_SYSFS_ATTR_NO)
  63
  64#ifdef CONFIG_SMP
  65#define for_each_sibling(i, cpu)        for_each_cpu(i, cpu_sibling_mask(cpu))
  66#else
  67#define for_each_sibling(i, cpu)        for (i = 0; false; )
  68#endif
  69
  70/*
  71 * Per-Core Temperature Data
  72 * @last_updated: The time when the current temperature value was updated
  73 *              earlier (in jiffies).
  74 * @cpu_core_id: The CPU Core from which temperature values should be read
  75 *              This value is passed as "id" field to rdmsr/wrmsr functions.
  76 * @status_reg: One of IA32_THERM_STATUS or IA32_PACKAGE_THERM_STATUS,
  77 *              from where the temperature values should be read.
  78 * @attr_size:  Total number of pre-core attrs displayed in the sysfs.
  79 * @is_pkg_data: If this is 1, the temp_data holds pkgtemp data.
  80 *              Otherwise, temp_data holds coretemp data.
  81 * @valid: If this is 1, the current temperature is valid.
  82 */
  83struct temp_data {
  84        int temp;
  85        int ttarget;
  86        int tjmax;
  87        unsigned long last_updated;
  88        unsigned int cpu;
  89        u32 cpu_core_id;
  90        u32 status_reg;
  91        int attr_size;
  92        bool is_pkg_data;
  93        bool valid;
  94        struct sensor_device_attribute sd_attrs[TOTAL_ATTRS];
  95        char attr_name[TOTAL_ATTRS][CORETEMP_NAME_LENGTH];
  96        struct mutex update_lock;
  97};
  98
  99/* Platform Data per Physical CPU */
 100struct platform_data {
 101        struct device *hwmon_dev;
 102        u16 phys_proc_id;
 103        struct temp_data *core_data[MAX_CORE_DATA];
 104        struct device_attribute name_attr;
 105};
 106
 107struct pdev_entry {
 108        struct list_head list;
 109        struct platform_device *pdev;
 110        u16 phys_proc_id;
 111};
 112
 113static LIST_HEAD(pdev_list);
 114static DEFINE_MUTEX(pdev_list_mutex);
 115
 116static ssize_t show_name(struct device *dev,
 117                        struct device_attribute *devattr, char *buf)
 118{
 119        return sprintf(buf, "%s\n", DRVNAME);
 120}
 121
 122static ssize_t show_label(struct device *dev,
 123                                struct device_attribute *devattr, char *buf)
 124{
 125        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 126        struct platform_data *pdata = dev_get_drvdata(dev);
 127        struct temp_data *tdata = pdata->core_data[attr->index];
 128
 129        if (tdata->is_pkg_data)
 130                return sprintf(buf, "Physical id %u\n", pdata->phys_proc_id);
 131
 132        return sprintf(buf, "Core %u\n", tdata->cpu_core_id);
 133}
 134
 135static ssize_t show_crit_alarm(struct device *dev,
 136                                struct device_attribute *devattr, char *buf)
 137{
 138        u32 eax, edx;
 139        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 140        struct platform_data *pdata = dev_get_drvdata(dev);
 141        struct temp_data *tdata = pdata->core_data[attr->index];
 142
 143        rdmsr_on_cpu(tdata->cpu, tdata->status_reg, &eax, &edx);
 144
 145        return sprintf(buf, "%d\n", (eax >> 5) & 1);
 146}
 147
 148static ssize_t show_tjmax(struct device *dev,
 149                        struct device_attribute *devattr, char *buf)
 150{
 151        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 152        struct platform_data *pdata = dev_get_drvdata(dev);
 153
 154        return sprintf(buf, "%d\n", pdata->core_data[attr->index]->tjmax);
 155}
 156
 157static ssize_t show_ttarget(struct device *dev,
 158                                struct device_attribute *devattr, char *buf)
 159{
 160        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 161        struct platform_data *pdata = dev_get_drvdata(dev);
 162
 163        return sprintf(buf, "%d\n", pdata->core_data[attr->index]->ttarget);
 164}
 165
 166static ssize_t show_temp(struct device *dev,
 167                        struct device_attribute *devattr, char *buf)
 168{
 169        u32 eax, edx;
 170        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 171        struct platform_data *pdata = dev_get_drvdata(dev);
 172        struct temp_data *tdata = pdata->core_data[attr->index];
 173
 174        mutex_lock(&tdata->update_lock);
 175
 176        /* Check whether the time interval has elapsed */
 177        if (!tdata->valid || time_after(jiffies, tdata->last_updated + HZ)) {
 178                rdmsr_on_cpu(tdata->cpu, tdata->status_reg, &eax, &edx);
 179                tdata->valid = 0;
 180                /* Check whether the data is valid */
 181                if (eax & 0x80000000) {
 182                        tdata->temp = tdata->tjmax -
 183                                        ((eax >> 16) & 0x7f) * 1000;
 184                        tdata->valid = 1;
 *              from where the temperature values should be read.
  78buf)
 178                rdmsr_                 ref="drivers/hwmon/coretemp.c#L17 href="drivers/hwmon/coretemp.c#L78" idef">time_88        unsigned i1nt u18s_pkg_data)
 1 90         175
 176        /* Check whether the time inter"L91" cla1ss="line" name="L91">  9111       int  *              from where the temperature values should be read.?a href="+code=core_data" class="sref">core_data[attr->index]-> 183          ) : -lass="line" namEAGAIN183"> 183  EAGAIN#L17 href="drivers/hwmon/coretemp.c#L78" i       boolL177" class="li/a>  9319>, "%d\n&quoass="line1" name="L94">  94   1     19>temp;
TOTAL_ATTRS->CORETE1MP_NA1E_LENGTH];">last_updated;
  LIST_HEAD" class="sref">LIST_HEAD(1  99(struct const>;
devattr = index)
             verl cl1c,> 2      struct index)
             verl cl1c,> 2 href="+code=bool" class2name=2L102"> 102{emp.c#L133" id="L133" class="PU CE4110"sref">index)
< AL_ATTRS             verl cl1c,> 2 class="line" name="L93"203"> 203        {emp.c#L133" id="L133" class="PU CE4150"sref">index)
< AL_ATTRS             verl cl1c,> 2  name="L94">  94   2a>];
2a href="driver{emp.c#L133" id="L133" class="PU CE4170"sref">index)
< AL_ATTRS             verl cl1c,> 2 code=TOTAL_ATTRS" class2L105"2class=LIST_HEAD" class="sref">LIST_HEAD(2ine" name2"L107"> 107struct ;
devattr =        2struct devattrdevattrLIST_HEAD(2i8       2srivers/hwmon/coretemp.c2"L10920s="line" name="L139"> 1398ref">devattrLIST_HEAD(2i9       2sa href="+code=platform_2="lin2" name="L110">">last_updated;
 211LIST_HEAD" class="sref">LIST_HEAD(2ine" name2"L113"> 113static , "Core %u2a href="+2ode=pdev_list" class="sr2f">pd21" class="sref">cpu) + 
;
devattrdevattr = 2how_n215href="driver{ecl1c,>10/a1"sref },            D4xx, N4xx, D5xx, N5xx=wmon/coretemp.c#L182" id="L182" class="line" 2"sref">de2ice *cpu) +             Z5xx, N2xx, pos)
       2 * @attr_size:  Tooooooooooooooooooooooooooooooooo* Note: Also matches 230 and 330"drivers/hwmon/coretemp.c#L78" id="L78" clas2/a>(buf21lass="comment"> * @is_pkg_daoooooooooooooooooooooooooooooooo* ot;id&aremcomp.ed by amp; _tablsdrivers/hwmon/coretemp.c#L78" id="L78" clas2/9       2  *              Othoooooooooooooooooooooooooooooooo*mon/coretemp.c#L182" id="L182" class="line" 2ne" name=2L122"> 122static ">cpu) +             Atom Tunnrl Creek (Exx), Lincroft (Z6xx)on/coretemp.c#L182" id="L182" class="line" 2nne" name2show_label" class="sref"2show_22t"> */
2evice *cpu) +             Atom MedCKAGE_(Z2460)o*mon/coretemp.c#L182" id="L182" class="line" 2nf="+code2e=to_sensor_dev_attr" cl2ss="s225href="driver{ecl36,>">cpu) +             Atom Cedar Trail/Cedarview (N2xxx, D2xxx)o*mon/coretemp.c#L182" id="L182" class="line" 2nsref">de2 class="sref">dev_get_dr2data<227">  LIST_HEAD" class="sref">LIST_HEAD(2sref">pda2a->">last_updated;_tus_init >> 16) &_tus_init0x7f)a href="driversadjustne" name="L149"> 149;
edx);
        struct devattr<2etemp.c#L230" id="L130" class="lin2" nam22>buf)
device_attribute *u32 attr = ( 102 AL_ATTRS            e is1"sC c#Ls="aultdrivebo0) mobils and non mobils retso*mon/coretemp.c#L182" id="L182" class="line" 2n", , "%d\n&qu2ne" name=2L135"> 135static last_updated;
LIST_HEAD(2ef="+code2show_crit_alarm" class="2ref">23arget;
devattr
<85refIST_HEAD" class="sref">LIST_HEAD(2ef="+code2s="sref">device *last_updated;usef">sesref">devattrsesspan>
buf<">last_updated;era href="+code=HZeraoretemp.c#L88" id="L88" class="line" name2ode=eax" 2lass="sref">eax, sensor_device_attribute *attr = last_updated;ies should be rerf="+code=attr" class="sref">attr = toode=attr" class="sref">attr = dev_get_dr2data<2a>(pda2a->;ARRAY_SIZEref="drivers/hwARRAY_SIZEta[devattr;ies should be rerf="+++">temp = (tjmax<" class="sref">tdat   s.c#L174" id="L174   s.cta[83" class="line" namx/a_mverl_lues should be rex/a_mverl_lu"sref">sensor_device_amp; _tablsref">devattr;ies should be rerf="+].code=sensor_devlues should be rers/hwm)=u32" class="sref">u32 cpu,  184                 ->devattr;ies should be rerf="+].code=sensor_dev
(2 ( 148static ;ARRAY_SIZEref="drivers/hwARRAY_SIZEta[devattr;ies should be rerf="+++">temp = buf)
_mverlref">devattrtmf="+on/
devattr;ies should be rerf="+]emp.c#L88" id="L88" class="line" name2aers/hwmo2evice *tdatatdatc>83" class="line" namx/a_mverles should be rex/a_mverlf="+on                  ne" name="L136">tmf="+83" class="line" nammverlref">devattr

mp.c#L88" id="L88" class="line" name2atemp.c#L2buf)
tmf="+83" class="line" nammoretemp.c#L67" id="line" non                 ANYref="drivers/hwANYname="sref">last_updatec>83" class="line" namx/a_moretemp.c#L67" id=x/a_moref="+on                  ne" name="L136">tmf="+83" class="line" nammoretemp.c#L67" id="line" n)=u32" class="sref">u32 s2nsor_device_attributetmf="+83" class="line" nam
to_sensor_L177" class="li/a>dev_get_dr2data<25>, "%d\n&qu2a>(tdata            Early chips have no MSRrriveTjMaxd*mon/coretemp.c#L182" id="L182" class="line" 2t;2 "%d\n&qu2ne" name=2L157"> 157static tdatc>83" class="line" namx/a_mverles should be rex/a_mverlf="+on  0xf/

ref">last_updatec>83" class="line" namx/a_moretemp.c#L67" id=x/a_moref="+o<oa4=u32" class="sref">u32 sho25s="sref">buf)
sesref">devattrsesspan>
LIST_HEAD(2class="sr2f">device *buf<" class="sref">tdatc>83" class="line" namx/a_mverles should be rex/a_mverlf="+o="+co0xe/

ref">last_updateusef">sesref">devattrsesspan">temp = s2nsor_device_attribute 180                8ref">devattr 132       mon/core2"oretemp.c#L88" id="L88" class="line" name2href="+co2e=to_sensor_dev_attr" cl2ss="s2ef">tomp.c#L88" id="L88" class="line" name2href="+co2 class="sref">dev_get_dr2data<26 (2 2L166"> 166static 2how_t2mpU Core from which tempeoooooooooooooooo*mon/coretemp.c#L182" id="L182" class="line" 2"sref">de2ice *buf)
ssafee=status_reg" class="sref">ssafee=statuta[tdata->valid = 0;
buf)
tdatara href="+code=HZeraoret">temp = eax, buf)
device_a_warnttribute *[devattr<2vers/hwmo2/coretemp.c#L170" id="L120" cl26>buf)
index<+code=devattr" class="sref">devattr<2href="+co2e=to_sensor_dev_attr" cl2ss="s27a href="+code=eax" cl        wwwwwwwwwmp.c#L133" id="L133" class= rets="sref">index = 0;
dev_get_dr2data<27 devicusef">sesref">devattrsesspan>
LIST_HEAD(2sref">pda2a->tjmax<} else<" class="sref">tdatc>83" class="line" namx/a_mverles should be rex/a_mverlf="+o=l+co0x17/

r!lass="sref">tdata->temp = (& 184                 aAL_ATTRS           on/coretemp.c#L182" id="L182" class="line" 2class="sr2f">update_lock);

U Core from which tempeoooooooooooooooooooooooo* docuh teation on tha+co" cyou happen to knowon/coretemp.c#L182" id="L182" class="line" 2csref">de2"L177"> 177        i2 (!, char 2after( * @attr_size:  Tooooooooooooooooooooooooo*mon/coretemp.c#L182" id="L182" class="line" 2lass="sre2">cpu, tdatadevicusef">sesref">devattrsesspan>
LIST_HEAD(2sers/hwmo2id="L180" class="line" n2me="L280"> 180          } else =  181             2  if 2            Pmon/cor ID bits 52:50 (EDX starts at bit 32)o*mon/coretemp.c#L182" id="L182" class="line" 2ame="L1822> 182               2     2  devicwmon/core2"> 132       mon/core2"oret>
tdatalid" class="sref">valid< href="+cod8=valid" claIST_HEAD" class="sref">LIST_HEAD(2="sref">t2ata->"%d\n&qu2mp.c#L1842 id="L184" class="line" 2ame="2184"> 184                 aAL_ATTRS           on/coretemp.c#L182" id="L182" class="line" 2/coretemp2c#L18ef="drive85" class=2line"28ode=sU Core from which tempeoooooooooooooooooooooooo* Mobils Penryn ret seef" to be pmon/cor ID 7 ive5on/coretemp.c#L182" id="L182" class="line" 2/e" name=2ass="line" name="L78">  2828pU Core from which tempeoooooooooooooooooooooooo* (guesswork)on/coretemp.c#L182" id="L182" class="line" 2 class="l2/a>, char 288        unsigned i2nt buf)
tdatc>83" class="line" namx/a_mverles should be rex/a_mverlf="+on  0x17/

temp.c#L182" id="L182" class="line" 2aass="sre2ef="+code=u32" class="sr2ef">u28s="sref">buf)
tdatwmon/core2"> 132       mon/core2"oret>
= 5="sref">last_updatewmon/core2"> 132       mon/core2"oret>
= 7"">temp =  2 90buf)
  9212      hwmon/coretemp.c#L84" ioooooooooooooooooooooooooooooooo* If0MSRrEE bit is set, set it ao 90 degrees C"drivers/hwmon/coretemp.c#L78" id="L78" clas2        */
t2 class="line" name="L93"2>  9329vers/hwmon/coretemp.c#L84" ioooooooooooooooooooooooooooooooo*mon/coretemp.c#L182" id="L182" class="line" 2ass="line2" name="L94">  94   2     2984"> 184                        <devattr
<9srefIST_HEAD" class="sref">LIST_HEAD(2
LIST_HEAD(2_NAME_LEN2GTH" class="sref">CORETE2MP_NA2E_LENGTH];;;;;;;;;;;;;;;;;L177" class="li/a>buf)
, char 2  99tdatusef">sesref">devattrsesspan">temp =  3      struct ssafee=status_reg" class="sref">ssafee=statuta[tdata->valid = 0;
tdatara href="+code=HZeraoret">temp =  3 class="line" name="L93"303"> 30" class="sref">tjmax -
 *devattr<3 301 3  name="L94">  94   3a>];
3084"> 184                        index<+code=devattr" class="sref">devattr<3 401 3 code=TOTAL_ATTRS" class3L105"30ame="L1  85<1e, the temp_data       index = 0;
 107struct tdata->temp = buf)
 -

<devattr = 0;
buf)
tdatsmp; ref="drivers/hwmon/coret>

temp =  180           AL_ATTRS           on/coretemp.c#L182" id="L182" class="line" 311" id="L311" class="line" name="L311"> 31     hwmon/coretemp.c#L84" ioooooooooooooooo* If0we don't use f">rEE it means0we aremdesktop retf=ivers/hwmon/coretemp.c#L78" id="L78" clas3ine" name3"L113"> 113static  */
pd31vers/hwmon/coretemp.c#L84" ioooooooooooooooo*mon/coretemp.c#L182" id="L182" class="line" 3p.c#L114"3id="L114" class="line" n3me="L3184"> 184          href="drivers/e_a_warnttribute *[index = 0;
;
3how_n31/hwmon/coretemp.c#L177" id="L177" class="3"sref">de3ice *       3buf31s_pkg_data)
">last_updated;_tus_init >> 16) &_tus_init0x7f)a href="driversef">mmp; ref="drivers/hwef">mmp; ta;
edx);
        struct devattr<3ne" name=3L122"> 122static device_attribute *u32  *temp = 3evice *last_updated;era href="+code=HZeraoretemp.c#L88" id="L88" class="line" name3s.c#L114"3, char *tdata);
        struct sensor_device_attribute *attr = attr = de3 class="sref">dev_get_dr3data<32ref="+code=tdata" class="sref">tdatapda3a-> * @attr_size:  Tooooooooo* A new featuremof curre:  Intel(R) processors,
 * @is_pkg_daoooooooo* IA32_TEMPERATURE_TARGETrcontains0 *              Othoooooooo*mon/coretemp.c#L182" id="L182" class="line" 3ical id &337;u\n", );
ssafee=status_reg" class="sref">ssafee=statuta[[tdata->valid = 0;
 102" class="sref">tdatara href="+code=HZeraoret">temp = , tjmax<" class="sref">tdatc>83" class="line" namx/a_mverles should be rex/a_mverlf="+o="+co0xe/

ref">last_updatec>83" class="line" namx/a_mverles should be rex/a_mverlf="+o!  0x1c=u32" class="sref">u32  135static  184                 ahref="drivers/e_a_warnttribute *[index]-> = 0;
33arget;
            explicit amp;  tablsekg_da23rbe rex/a_m"> 102" cnFtribute * 102" class="sref">tdatara hr6="+coef">sesref">devattrse33mon/coretemp.c#L182" itemp.c#L177" id="L177" class="3nsref">de3 class="sref">dev_get_dr3d>buf<">la3t_updated;era href="3code=33ef=/coretemp.c#L182" id="L182" class="line" 311" " class=3sisde=sUplau/a>)e, temaa>)
113">class="3nsref">de3 class="sref">dev_get_dr3d>eaturemofsensor_device_attribute<3a> *<33"drivers/hwmon/coretemp.c#L78" id="L78" clas* willlineusss="ass="3nsref">de3 class="sref">dev_get_dr3d>EMPERATUR>last_updated;ies sh3uld b33sdrivers/hwmon/coretemp.c#L78" id="L78" clas="line" 3s9       330" id="L130" class="lin3"  102< amp;  ta3ls ref"ies omp.ride heur3sef"s34mon/coretemp.c#L182" id="L182" class="line" a>stdblass="sref">edxstdbl  184                 ahref="drivers/e_a_warnttributelass2="srettribute * 102" class="sref">tdatarlsdriv)oa3t_updated;ies should3be re3f="+++">temp = (2 (">last_upforcecomme"  ta+code=buf" class="sref3>buf<33102"> 102< buf<">la3t_updated;ies should3be re3f="+++">temp = ste=s 122static  184                 ahref="drivers/e_a_warnttributelass2="sreod2=ussrttribute * 102< eaturemofvest_updated;ies sho3ld be3rerf="+]emp.c#L88" id=p = ">last_upforcecomme"  ta+    devattr

mp.c#L88" id=etemp.c#L177" id="L177forcecomme"sref">">last_upforcecomme"  tab          (LIST_HEADt35="+++">tempde3 class="sref">dev_get_dr3d772t_drvd3ta2 class="sref">dev_get3dr2da35sdrivers/hwmon/coretemp.c#L78" id="L* Aemaa>)
113">sisdmade 184 1"sreunarnt *de3 class="sref">dev_get_dr3d7"+].code3ly chips have no MSRrriv3TjMax35 on/coretemp.c#L182" id="L182" class* NOTE: " clcalcullasssref"3dmayde=sUblassrrect.class="3nsref">de3 class="sref">dev_get_dr3d7re2="+co3n>2 ">last_updated;_tus_init ivers/hwef">mmp; ta;
ssafee=status_regcl        wwwwwww             la3ef">sesref">devattrse35n/coretemp.c#L88" id="L88" class="line" nam>(2class=3sr2f">device *sesref">devattr35f31s_pkg_data)
 " class="sref">attr/core2"> " cl32a href="+code=eax" p" class="sref">attr/" cl32a ade=buf" class="sref3>buf<33102"> 102<"driversw3on/core2"> 132      3mon/c36">index<+code=devattr" class="sref">deeeeeedevattr<3ne" name=3L122"> 122static u32   3     36="+++">tempattr/" cl32a rles should be rex/aattr_at2u(attr/" cl32a rles should be rex/aattr_at2u((attr/" cl32a rles should be rex/aattr_at2u(
re(
attr/" cl32a rles should be rex/aattr_at2u( 184                 ahref=d be reMSR_IA32_TEMPp" class="sref">attr/" cl32a rles should be rex/aattr_at2u(la3href="+code=valid" class3"sref36n/coretemp.c#L88" id="L88" class="line" nam"dr" clas3="sref">tdatara href="+c3de=HZ3631"commL177" class="li/a>attrment " cl32a href="+code=eax" r" class="sref">attr->ade=buf" class="sref3>buf<33102"> 102< to acces30MSRr0x17, 3" um    desk3op"sr3f">index<+code=devattr" class="sref">deeeeeeedevattr<3ne" name=3L122"> 122static )
u32 devicu3ef">sesref">devattrse3732t"> *temp = 3ev"driversus_info_x_                ef="drivera);
        struct 3>temptmf="+on/( 122static );
        struct   3     37">index<+code=devattr" class=_init >> 16) &_t2"> 12_at2uibutverl0x7f)->( = ref="+code=eax" buf(shre_lab=">3ev"driversus_info_xshre_crit_alar>s2nsor_device_ashre_crit_alar>>3ev"driversus_info_xshre_amp;s2nsor_device_ashre_amp;>3ev"driversus_info_xshre_a"sref">">last_updatshre_a"sre    ,rivera);
        struct temp = temp = rhref="7;u\n"tmf="+on/(_lab="ribute *_crit_alar>ribute * 102devicu3ef">sesref">devattrse3span>
_inputribute *_critribute * 102 180  3     3 } else = _sreribute *<"oretemp.c#L182" id="L182" class="line"3cor ID bi3s 52:50 (EDX starts at b3t 32)3811LIST_HEAD" class="sref">LIST_HEADvalid< href="+3od8=v3832t"> *temp 148static attr->rles should be rex/aat2u_size([devattr(2="sref3>t2ata->( 184r" class="sref">attr->rles should be rex/aat2u_attr(tmf="+on/

tmf="+on/
devattr"+].code3         aAL_ATTRS  3     38">index<+code=devattr" class=>)
    sysfs_at2u_hwmon/co3/9       3sysfs_at2u_hwmo;_tusd be reMSR_IA32_TEMPr" class="sref">attr->rles should be rex/asd_at2u                sd_at2u ref"136">tmf="+on/
(attr->rles should be rex/asd_at2u                sd_at2u ref"136">tmf="+on/
( 184r" class="sref">attr->rles should be rex/aat2u_attr(tmf="+on/
attr->rles should be rex/asd_at2u                sd_at2u ref"136">tmf="+on/
(
re id &337;u\n"();
        struct attr->rles should be rex/asd_at2u                sd_at2u ref"136">tmf="+on/
(tmf="+on/
devicu3"> 132       mon/cor32"ore3>
= 7"">temp = attr->rles should be rex/asd_at2u                sd_at2u ref"136">tmf="+on/
">last_updatindee fd &337;u\n"(  3     39sspan">temp =  3      struct  184                 ahref=d be reMSR_IA32_TEMPr" class="sref">attr->rles should be rex/asd_at2u                sd_at2u ref"136">tmf="+on/
 3 href="+cod   temp = devattr
<9srefIST_HEetemp.c     COR3TE2MP_NA2E_LENGTH];;3;;;;;3;;;;;;href="+code=tdatxit_fruf)
 -
txit_fruf    :buf3/a>)
 148static 

temp.c#L182" id="L182" class3ref="_remove_fimverl0x7f)-> 184                 ahref=d be reMSR_IA32_TEMPr" class="sref">attr->rles should be rex/asd_at2u                sd_at2u ref"136">tmf="+on/
devicu3="2drivers/hwmon/coretem3.c2#L30029s_pkg_dataetemp.c#L177" id="L177=tdata" clas3s="sref">3evice *tda4usef">sesref">devattr4esspanetemp.c#L88" id="L88" class="line" na4a>->LIST_HEAD" class="sref">LIST_HEADtdatara href="+c4de=HZ40id" claIST_HEAD" class="sref">LIST_HEAD 4)
 135)
indrl_tablsref">devattrindex = 0_init >> 16) &_tus_init0x7f)a href="driversef">mmp; ref="drivers/hwef">mmp; ta;
_mverlref">dsef " class="sref">attrsef " cl  184c30href="drivera *];;4 cla44="srefce * = 0itemp.c#L177" id="L177" class="3nsref">de3 class="sref">dev_get_dr34buf)
de3 class="sref">dev_get_dr34<9a>

40 on/coretemp.c#L182" id="L182" class= Readings migh="+cop u/" ce whenf="+code3c visited h_o deep sleep.c#L84" ioooooooooooooooooooooooooooooooo* I4> 1804          AL_ATTRS  4     4  on/coretemp.c#L182" id="L182" class* fixed etemstepp *de3 class="sref">dev_get_dr3439;t use 4">rEE it means0we aremde4ktop 4etf=ivers/hwmon/coretemp.c#L78" id="L="line" 3s9       330" id="L130" class="lin3"4ooooooooo4oooooo* (with exeception4of At4132t"> *temp, char 288        unsigned i2nt buf)
ttc>83" class="line" namx/a_mverles should be rex/a_mvererlf="+on  0xf/

ref">last_u0xcc>83" class="line" namx/a_mverles should be rex/amic"+c
re(last_u0x39verl_tablsref">devattrindex<+code=devattr" classrdrivers/e_a_warnttributeic"+c
repda3" clCPUde_attribute * 148staticENODEVata" clas3s="srENODEV>3evice *3ho4_n31/hwmon/coretemp.c#L88" id="L88" class="line" na4gt; = 0etemp.c          4 34uf31s_temp.c#L88" id="L88" class="line" na4  ""> 122static  ""> 12"+code=DRVNAME"3clasvers/hwmon/co3/9       3 mmp;s="line_datep              ;s="line_datep)
device_attribut4 4u32 temptdatwmon/hys_="+css=    struct tdatwmonTO_PHYS_ID  184c30href="drivera *la4t_updated;era href="4code=42sref"">temptdatwmon/cl _p.cry"+codrivers/hwef">mmp;s2nsor_device_ap>3evice * *<42mon/coretemp.c#L182" id="L182" class="lin4a href="+4ode=sensor_devvales shou4d be 425ref="+code=attr" class="sremutex_loclf="+on  0xf/tdatwmon/cl _list_mutexref=dice * *tda427ref="+code=attr" class="srelist_e2"_each_p.cry"sref">tdatwmonlist_e2"_each_p.cry  184;s2nsor_device_ap>3evf=d be reMSR_IA32_TEMPp"l _list"sref">tdatwmon/cl _list>3evf=ttr" class="srelist"sref">tdatwmonlistref=d        4 curre:  Intel(R) proces4ors,
42a>

temp.c#L182" a class="line" 2a>,;s2nsor_device_ap>3evrles should be rex/a/hys_="+css="sref">tdatwmon/hys_="+css=    sttruct tdatwmon/hys_="+css=    verl_tablsref">devattr
tdatwmon/cl _list_mutexref=dice * *              Otho4ooooo43} else =  = 0;
" clas4="sref">tdatara href="+c4de=HZ43id" claIST_HEAD" class="sref">LIST_HEADtdatwmon/cl _list_mutexref=dice *]->tdatwmonNULL  *33arget4/a>;
4a12rsuetemp.c#L88" id="L88" class="line" na4/73ef="+c4ef">sesref">devattrse43"srefce *buf<">la4t_updated;era href="4code=43ef=/cpkg_dat_init >> 16) &_tment " class="sref">attrment " cl32a he=DRVNAME"3clasvers/hwmon/co3/9       3 mmpref=_ment " class="sref">attrref=_ment " cl )
devattreaturemo4sensor_device_attribute<4a> *<43mon/coretemp.c#L182" id="L182a> = )
edxdevattrattrment " cl32a href="+code=eax" r" class="sref">attr->ice *LIST_HEAD" class="sref">LIST_HEAD;ies should4be re44="+++">tempattr->struct attrkzalloc attrment " cl32a )f=ttr" class="sreGFP_KERNEL"sref">tdatwmonGFP_KERNELref=dice *attr->d   index<+code=devattretemp.creMSR_IA32_TEMPNULL"sref">tdatwmonNULL  *2 (attr->rles should be rex/askg_us_relass="sref">edxedxla4t_updated;ies should4be re4f="+++">temp = ;ies sho4ld be4rerf="+]emp.c#reMSR_IA32_TEMPr" class="sref">attr->rles should be rex/ais_=kg_" class="sref">attrrs_=kg_" cl>struct edx *devattr

mp.c#reMSR_IA32_TEMPr" class="sref">attr->rles should be rex/ac30href="drivera *attr->rles should be rex/ac30_"com_s="sref">tdatwmonc30_"com_s=    struct tdatwmonTO_CORE_ID  184c30href="drivera *attr->rles should be rex/aat2u_size( *t45="+++">tempattr->rles should be rex/au/" ce_loclf="+on  0xf/ *dev_get4dr2da45rs/hwm)=u32" etemp.creMSR_IA32_TEMPr" class="sref">attr->ice *;
)
attrsarnte_"com_" cl  ""> 122static  ""> 12"+codref="+code=eax" p"/a>              pdevattrla4ef">sesref">devattrse45="+++">temp = )
edxdevice *devattrsesref">devattr45a>

mp.c#_init >> 16) &_tment " class="sref">attrment " cl32a href="+code=eax" r" class="sref">attr->ice * 132      4mon/c46ers/hwm"+code_init >> 16) &_t/core2"> " class="sref">attr/core2"> " cl32a href="+code=eax" p" class="sref">attr/" cl32a struct  datedrv" class="sref">attr/core2"> datedrv" cl  184;"/a>              p *mmp; ref="drivers/hwef">mmp; ta;
_mverlref">dsef " class="sref">attrsef " cl  184c30href="drivera *temptdata);
        struct  = 3ev"driversus_info_xat2u_no(
de3 class="sref">dev_get_dr34=e" namx/4rom which tempeooooooooo4ooooo46n31/horetemp.c#L182" id="L182" class* Find at2u number etemsysfs:class="3nsref">de3 class="sref">dev_get_dr34tbuf<">la4href="+code=valid" class4"sref46de3 class="sref">dev_get_dr34t(2class=4="sref">tdatara href="+c4de=HZ46 on/coretemp.c#L182" id="L182" class="T clat2u number is alwaysassref<"p+ 2class="3nsref">de3 class="sref">dev_get_dr34tst_updat4[1_*, a cavail *de3 class="sref">dev_get_dr34 to acces40MSRr0x17, 3" um    desk4op"sr47 on/coretemp.c#L182" id="L182" class*"line" 3s9       330" id="L130" class="lin3"4wwmp.c#L143" id="L133" class= rets4"sref471on/coretemp.c#L182" id="L18at2u_no(edx 184c30href="drivera *devicu4ef">sesref">devattrse47id" claIST_HEAD" class="sref">LIST_HEAD4>  4     47">index<+code=devattretemp.c-> 148staticERANGE(tempde3 class="sref">dev_get_dr34ooooooooo4oooo* someone at Intel p4ease<47de3 class="sref">dev_get_dr34o(2class=4ze:  Toooooooooooooooooo4ooooo47 on/coretemp.c#L182" id="L182" class="toaavo<"pduplic ce sene3co (" cl="+code3c ID1"sressrefID1da3allclass="3nsref">de3 class="sref">dev_get_dr34ost_updat4ef">sesref">devattrse47 on/coretemp.c#L182" id="L182" class= HT /a>)ings da3aassre 31  " clsrde3 class="sref">dev_get_dr34lass="lin4" n2me="L280"> 180  4     48 on/coretemp.c#L182" id="L182" class* Skip a ca HT /a>)ingpda3" isassrefde3 class="sref">dev_get_dr34lwmp.c#L14s 52:50 (EDX starts at b4t 32)48tf=ivers/hwmon/coretemp.c#L78" id="L= T de3 class="sref">dev_get_dr34l">devicu4ss="sref">valid< href="+4od8=v48)on/coretemp.c#L182" id="L182" class*"line" 3s9       330" id="L130" class="lin3"4>(2="sref4>t2ata->attr/" cl32a rles should be rex/a"com_" class="sref">attrscom_" cl tmf="+on/(tdatwmonNULL   4     48">index<+code=devattretemp.c     ;
attr->struct attrref=_ment " cl )
edxattr->d   

temp.c#L182" etemp.c-> 148staticENOMEM(devicu4"> 132       mon/cor42"ore48f31s_temp.c#L88" id="L88" class="line" na4"drivers/4wwwwwwwwwaAL_ATTRS  4     49sspan">tempi" id=ctemaccode " clskg_usretgisters*"line" 3s9       330" id="L130" class="lin3"40MSRrEE b4t is set, set it ao 90 d4grees491on/coretemp.c#L182" id="L182" class="line" 3ical id &337;u\n", );
attr->rles should be rex/askg_us_relass="sref">edxtdata<40alid" cl4oooooooo* o0) {wisis1"5 4egree4932t"> *temp,rete3 101 3 href="+cod   devattr];;4;;;;;49s24/hwmon/correMSR_IA32_TEMPr" class="sref">attr->rles should be rex/aa"sref">">last_updatomme"  tab337;u\n"">last_updatdatea"sreref="+code=HZeraoretc ta;
              pbuf4/a>)
<   

temp.ttemp.c#L177" id="L177" class="3nsref">de3 class="sref">dev_get_dr340">devicu4="2drivers/hwmon/coretem4.c2#L49 on/coretemp.c#L182" id="L182" class= Read " clskilllundocuid="ed bits 8:15pda3ass="TEMPERATURE_TARGET.class="3nsref">de3 class="sref">dev_get_dr35sref">tda5usef">sesref">devattr50 on/coretemp.c#L182" id="L182" class* T cltargeoaerg_uref 1butde=sUin3" isclass="3nsref">de3 class="sref">dev_get_dr35s1ef">tda5u is set, set it ao 90 d5"sref50tf=ivers/hwmon/coretemp.c#L78" id="L= etgister. Atoms don't= hre2" cletgistersat3all.class="3nsref">de3 class="sref">dev_get_dr35s2ef">tda5uooooooo* o0) {wisis1"5 5de=HZ50)on/coretemp.c#L182" id="L182" class*"line" 3s9       330" id="L130" class="lin3"5warnta83" class="line" namx/a_mverles should be rex/a_mver>)
t1cverl_tablsref">devattrindex<+code=devattrc#L182" id="L182" class="line" 3ical id &337;u\n", );
devattrtdata<5s633" id=5LE2MP_NA2E_LENGTH];;5 cla450mon/coretemp.c#L182" a cl!if="+code=eax" rete3 101 3 href="+coderl_tablsref">devattrtemp = attr->rles should be rex/aatargeon/co3/9       3atargeosrefl_tablsref">devattr)
 184r" class="sref">attr->rles should be rex/aa"sref">">last_updatomme"  tab- (lass="line" 2a>,rTEMPERATURE_TARGETes shor*tff)b          

50pan>
attr->rles should be rex/aat2u_size(rEE it means0we aremde5ktop 511on/coretemp.etemp.c#L88" id="L88" class="line" na532ef">tda5oooooo* (with exeception5of At51id" claIST_HEAD" class="sref">LIST_HEADattr/" cl32a rles should be rex/a"com_" class="sref">attrscom_" cl tmf="+on/( 184r" class="sref">attr->     erfacods*"line" 3s9       330" id="L130" class="lin3"5773ef="+c5de3show_name" class="sre5">3ho51s24/hwmon/correMSR_IA32_TEMP2" class="line" 3ical id &337;u\n" 184r" class="sref">attr->" d be reMSR_IA32_TEMP/cl >              p(tdata<5gt;,rete3 101 3 href="+cod        5 35uf31s_temp.c#L88" id="L88" class="line" na5 device_attribut5 5tempattr/" cl32a rles should be rex/a"com_" class="sref">attrscom_" cl tmf="+on/( 184NULL"sref">tdatwmonNULL  *la5t_updated;era href="5code=52eraoretemp.c#L88" id="L88" ckfruf)
 -
kfruf    s7ef="3384"> 184r" class="sref">attr->a href="+code=vaa" class="sref">tdata<5ss="sref"5sensor_device_attribute<5a> *<52
<9srefIST_HEetemp.creMSR_IA32_TEMP=tdata" clas3s="sref">3evice * *tda52ef=/cpkg_datvo<"preMSR_IA32_TEMPvers/hwmon/co3/9       3 attrscom2" c_add_"com    sunsignedta)
edx     5 curre:  Intel(R) proces5ors,
5231"corl_tablsref">devattr

mp.c#_init >> 16) &_t/core2"> ""> 122static  ""> 12"+codref="+code=eax" p"/a>              p              ;s="line_datep)
tdata<5nam32comm5nt"> *              Otho5ooooo53} else = 3ev href="+code=vaa" class="sref">tdata<5nute" cla5href="+code=valid" class5"sref5311LIST_HEAD" class="sref">LIST_HEAD" clas5="sref">tdatara href="+c5de=HZ5332t"> *temp              pLIST_HEAD" class="sref">LIST_HEADla5erles should be rex/a_mv5rlf="53mon/coretemp.c#L182" etemp. href="+code=vaa" class="sref">tdata<5ns="sref"5>]->33arget5/a>;
535ref="+code=attr" class="sre2" class="line" 3ical id &337;u\n"attrsarnte_"com_" cl               p)
edxsesref">devattrse5362t"> *temp,rete3 101 3 href="+cod   la5t_updated;era href="5code=53mon/coretemp.c#L182" id="L182" classcl _pete3 101 3 hrcl _pet               p" >)
     5sensor_device_attribute<5a> *<5331"coetemp.c#L88" id="L88" class="line" na5>EMPERATU5>last_updated;ies sh5uld b53f31s_temp.c#L88" id="L88" class="line" na5attrscom2" c_remove_"com  " class="sref">attr/core2"> " cl32a href="+code=eax" p" class="sref">attr/" cl32a "l_tablsref">devattr = 0;
 122static  = devattr
index<+code_init >> 16) &_tment " class="sref">attrment " cl32a href="+code=eax" r" class="sref">attr->struct attr/" cl32a rles should be rex/a"com_" class="sref">attrscom_" cl tmf="+on/2 (templa5t_updated;ies should5be re5f="+++">temp 148static attr->rles should be rex/aat2u_size([     5vest_updated;ies sho5ld be54a>

temp.c#L182" id="L182" class3ref="_remove_fimverl0x7f)-> 184                 ahref=d be reMSR_IA32_TEMPr" class="sref">attr->rles should be rex/asd_at2u                sd_at2u ref"136">tmf="+on/
devattr 184p" class="sref">attr/" cl32a rles should be rex/a"com_" class="sref">attrscom_" cl tmf="+on/attr/" cl32a rles should be rex/a"com_" class="sref">attrscom_" cl tmf="+on/ 184NULL"sref">tdatwmonNULL  *t55="+++etemp.c#L88" id="L88" class="line" na58rerf="+]5ta2 class="sref">dev_get5dr2da55rs/hwtemp.c#L88" id="L88" class="line" na58"+].code5ly chips have no MSRrriv5TjMax55 on/cpkg_data)
attrscom2" c_probm  ""> 122static  ""> 12"+codref="+code=eax" p"/a>              p;
rl_tablsref">devattrtemp " class="sref">attr/core2"> " cl32a href="+code=eax" p" class="sref">attr/" cl32a ice *la5ef">sesref">devattrse55="+++">temp = 3ev href="+code=vaa" class="sref">tdata<5>(2class=5sr2f">device *tdata<5>EMPERATU5usef">sesref">devattr55a>

mp.c#ttemp.c#L177" id="L177"  Initialize " clper-package " cl/_init urvs *"line" 3s9       330" id="L130" class="lin3"5"driversw5on/core2"> 132      5mon/c56mon/coretemp.c#L182" id="L18p" class="sref">attr/" cl32a struct attrkzalloc  " class="sref">attr/core2"> " cl32a )f=ttr" class="sreGFP_KERNEL"sref">tdatwmonGFP_KERNELref=dice *attr/" cl32a vs9       330" id="L130" class="lin3"5a href="+5ode=tdataaAL_ATTRS  5     56="+++">temp 148staticENOMEM(( 184p" class="sref">attr/" cl32a " d be reMSR_IA32_TEMP/cl >              p
,rete3 101 3 href="+cod   la5href="+code=valid" class5"sref56a>)
<   tdatara href="+c5de=HZ56erf="+]emp.c#reMSR_IA32_TEMPp" class="sref">attr/" cl32a rles should be rex/a/hys_="+css="sref">tdatwmon/hys_="+css=    struct tdatwmons=         56a>

mp.c#reMSR_IA32_TEMP/core2"> satedrv" class="sref">attr/core2"> satedrv" cl  184;"/a>              p)
attr/" cl32a v    attr/" cl32a rles should be rex/atdata_"/a>              tdata_"/a    struct sesref">devattrse5732t"> *temp,IS_ERR       wwwwwww IS_ERR    s7ef="3384"> 184p" class="sref">attr/" cl32a rles should be rex/atdata_"/a>              tdata_"/a    )derl_tablsref">devattr5> 184p" class="sref">attr/" cl32a rles should be rex/atdata_"/a>              tdata_"/a    )      5     57">index<+code=devattrid="L182" classcl _pete3 101 3 hrcl _pet               p" >)
temp = 0etemp.c     tdata<5ost_updat5ef">sesref">devattrse57 on/coref="+code=tdatxit_uld )
 -
txit_uld     : 180  5     58mon/coretemp.c#L182" id="L183ref="_remove_fimverl0x7f)->              pattr/" cl32a rles should be rex/aMobitat2u( satedrv" class="sref">attr/core2"> satedrv" cl  184;"/a>              p)
tdatwmonNULL valid< href="+5od8=v58)on/coref="+code=tdatxit_fruf)
 -
txit_fruf    :5>t2ata->)
 -
kfruf    s7ef="3384"> 184p" class="sref">attr/" cl32a v      5     58
<9srefIST_HEetemp.creMSR_IA32_TEMP=tdata" clas3s="sref">3evice * *)
attrscom2" c_remove  ""> 122static  ""> 12"+codref="+code=eax" p"/a>              pdevattrdevicu5"> 132       mon/cor52"ore58a>

mp.c#_init >> 16) &_t/core2"> " class="sref">attr/core2"> " cl32a href="+code=eax" p" class="sref">attr/" cl32a struct  datedrv" class="sref">attr/core2"> datedrv" cl  184;"/a>              p *  5     59} else = LIST_HEAD *temp 148static  148static attr/" cl32a rles should be rex/a"com_" class="sref">attrscom_" cl tmf="+on/
devattrindex<+code=devattretemp.c#L88" id="L88" c;s="line_remove_"comass="sref">attrscom2" c_remove_"com  184p" class="sref">attr/" cl32a " d be reMSR_IA32_TEMP/cl >              p)
;
];;5;;;;;59s24/hwmon/correMSR_IA32_TEMP3ref="_remove_fimverl0x7f)->              pattr/" cl32a rles should be rex/aMobitat2u(buf597ref="+code=attr" class="sretdata_"/af="_unregister>              tdata_"/af="_unregister    s7ef="3384"> 184p" class="sref">attr/" cl32a rles should be rex/atdata_"/a>              tdata_"/a    )     satedrv" class="sref">attr/core2"> satedrv" cl  184;"/a>              p)
tdatwmonNULL devicu5="2drivers/hwmon/coretem5.c2#L59a>

mp.c#reMSR_IA32_TEMPkfruf)
 -
kfruf    s7ef="3384"> 184p" class="sref">attr/" cl32a v    tda6usef">sesref">devattr60} elsetda6u is set, set it ao 90 d6"sref60tf=ivetemp.c#L88" id="L88" class="line" na6s2ef">tda6uooooooo* o0) {wisis1"5 6de=HZ60id" claIST_HEAD" class="sref">LIST_HEAD 60rs/hwpkg_dat_init >> 16) &_t/core2"> " clasass="sref">attr/core2"> " clas elseL88" id="L88" c;s="line_" clasass="sref">attr;s="line_" clasame=2L1rl_tablsref">devattrindex<+code+code=commp; _ta3 clasass="sref">attr" clasame=2L1rl_tablsref">devattrattrownasame=2L1.c#L177" id="L1THIS_MODULEass="sref">attrTHIS_MODULE devattr];;6 cla460mon/coretemp.c#L182" +code=commp; _tauld )
 -
uld     2L1.c#L177" id="L1DRVNAMEass="sref">attrDRVNAME devattrtempdevattr)
attrprobm attrscom2" c_probm devattr

60pan>
attrremove attrscom2" c_remove devattr 1806          AL_ATTRS  6     61} els}    rEE it means0we aremde6ktop 6111LIST_HEAD" class="sref">LIST_HEADtda6oooooo* (with exeception6of At61id" cpkg_data)
tdatwmoncs="line_"/af="_ad=    sunsignedta)
devattr to acce6t id ="lieraturemscale!s6"sref61">index<+codea> = 3ev href="+code=vaa" class="sref">tdata<6wmo3/core6emp.c#L115" id="L135" cl61arge615ref="+code=a_init >> 16) &_t/core2"> ""> 122static  ""> 12"+codref="+code=eax" p"/a>              ptdata<6w6to acce6de3show_name" class="sre6">3ho61"sref">temp              p              ptdata<6w7to acce6="+code=commp; ref="driv6rs/hw61a>)
<        6 36uf31s_temp.c#L88" id="L88" class="line" na6               p ""> 12_allocass="sref">attr/core2"> ""> 12_alloc    s7ef="3384"> 184DRVNAMEass="sref">attrDRVNAME tdatwmonTO_PHYS_ID    s7ef="3384"> 184c30href="driveradevice_attribut6 621rs/hwm"+codea cl!if="+code=eax" ;"/a>              pdevattrtemp3ev&33-> 148staticENOMEM(la6t_updated;era href="6code=62mon/coretemp.c#L182" id="L182" classpr_pete3 101 3 hrpr_pet    s7drivers/e_a_warnttribute 12 allocation failede_attributev    index<+code=devattrgoto href="+code=tdatxit)
 -
txit         *tda627ref="+code=attr" class="sre/cl _pntry>              pattrkzalloc               ptdatwmonGFP_KERNELref=dice *     6 curre:  Intel(R) proces6ors,
628rs/hwm"+codea cl!if="+code=eax" ;"/a_pntry>              pdevattr
3ev&33-> 148staticENOMEM( *              Otho6ooooo63} else =  12_put)
 -
txit_""> 12_put        " clas6="sref">tdatara href="+c6de=HZ63id" claIST_HEAD" class="sref">LIST_HEADla6erles should be rex/a_mv6rlf="63eraoretemp.c#L88" id="L88" c2" class="line" 3ical id &337;u\n" ""> 12_ad="sref">tdatwmon/core2"> ""> 12_ad=  184;"/a>              p *]->devattr33arget6/a>;
6312rsus_info_x/a> 3 hrpr_pet    s7drivers/e_a_warnttribute 12 addition failed (sref"d)e_attribute" >)
sesref">devattrse63mon/coretemp.c#L182" goto href="+code=tdatxit_""> 12_fruf)
 -
txit_""> 12_fruf             6sensor_device_attribute<6a> *<6331"cohref="+code=vaa" class="sref">tdata<6>EMPERATU6>last_updated;ies sh6uld b63a>

mp.c#reMSR_IA32_TEMP/"/a_pntry>              p              p              ptdata<6              ptdatwmon/hys_="+css=    struct tdatwmons=        LIST_HEAD" class="sref">LIST_HEAD;ies should6be re64="+++">temptdatwmonlist_add_tail               ptdatwmonlist32a " d be reMSR_IA32_TEMP/cl _list"sref">tdatwmon/cl _list"+cod     *la6t_updated;ies should6be re6f="+++href="+code=tdatxit_""> 12_fruf)
 -
txit_""> 12_fruf    :     6vest_updated;ies sho6ld be64erf="+]emp.c#reMSR_IA32_TEMPkfruf)
 -
kfruf    s7ef="3384"> 184p"/a_pntry>              pdevattr 12_put)
 -
txit_""> 12_put    : ""> 12_put)
 -
/core2"> ""> 12_put  184;"/a>              p *)
 -
txit    :t65="+++">tempdev_get6dr2da6532rsus_info_xetemp.c 3ev href="+code=vaa" class="sref">tdata<68"+].code6ly chips have no MSRrriv6TjMax65 on/cetemp.c#L88" id="L88" class="line" na67re2="+co6n>2 tdatwmoncs="line_"/af="_remove )
la6ef">sesref">devattrse65="+++rl_tablsref">devattr(2class=6sr2f">device *              p              p32a " ref="+code=eax" n)
 -
u>3ev href="+code=vaa" class="sref">tdata<68EMPERATU6usef">sesref">devattr65a>

mp.c#reMSR_IA32_TEMPude3show_nam/a> -
u1"sref"should be rex/a/hys_="+css="sref">tdatwmon/hys_="+css=    struct tdatwmonTO_PHYS_ID    s7ef="3384"> 184c30href="driveratdata<6"driversw6on/core2"> 132      6mon/c66 on/c                 p  6     66="+++">temptdatwmonlist_e2"_each_pntry 184;>              p32a " ef="+code=eax" n)
 -
u>3ev" d be reMSR_IA32_TEMP/cl _list"sref">tdatwmon/cl _list"+co" ef="+code=eax" list"sref">tdatwmonlist32a )1rl_tablsref">devattrtdatwmon/hys_="+css=    s!truct tdatwmon/hys_="+css=    vs9       330" id="L130" class="lin3"6t"+].code6y.alidl.hic/Wiki/Mobilit6/720.66">index<+code=devattretemp.c#continue    
 ""> 12_unregister>              pcore2"> ""> 12_unregister  184;>              p32a rles should be rex/a/"/a>              ptdatwmonlist32a )    la6href="+code=valid" class6"sref66mon/coretemp.c#L182" id="L182" classkfruf)
 -
kfruf    s7ef="3384"> 184p>              p32a )    tdatara href="+c6de=HZ66erf="+]emp.c#etemp.c#L88" id="L88" class="line" na6tEMPERATU6[              pLIST_HEAD" class="sref">LIST_HEADsesref">devattrse67id" cpkg_datreMSR_IA32_TEMPboodevatref">tdatwmonss_any_"com_on>dev  " class="sref">attr/core2"> " cl32a href="+code=eax" p" class="sref">attr/" cl32a vs9       330" id="L130" class="lin3"6tdata6>devattr  6     67">index<+codea> = ;
tempdev "coms, except pkgment " cl/*"line" 3s9       330" id="L130" class="lin3"6ooooooooo6oooo* someone at Intel p6ease<67="+++">temp 148static  148static devattr

temp.c#L182" a clc#L182" id="L18p" class="sref">attr/" cl32a rles should be rex/a"com_" class="sref">attrscom_" cl tmf="+on/
devattrsesref">devattrse67pan>
attr/" cl32a rles should be rex/a"com_" class="sref">attrscom_" cl tmf="+on/
attrss_=kg_" cllassv1rl_tablsref">devattr 180  6     68} else = tdatwmoninivrsmp    valid< href="+6od8=v68="+++">temp6>t2ata->tdatwmonfalsvrsmp      6     68 on/cetemp.c#L88" id="L88" class="line" na6c bit 28 6et seef" to be pmon/cor 6D 7 i68/a>;
devatref">tdatwmondate"com_on>dev )
devattr -
a hrefo_x8e32a href="+code=eax" cass="sref">attrcame=2L1d be reMSR_IA32_TEMPa h_" class="sref">attrs h_" cl    s7ef="3384"> 184c30href="driveratdata<6 ">devicu6"> 132       mon/cor62"ore68a>

mp.c#_init >> 16) &_t/core2"> ""> 122static  ""> 12"+codref="+code=eax" p"/a>              p              ;s="line_datep)
tdata<6"drivers/6wwwwwwwwwaAL_ATTRS  6     69} else = 3ev href="+code=vaa" class="sref">tdata<60MSRrEE b6t is set, set it ao 90 d6grees6911LIST_HEAD" class="sref">LIST_HEAD *tempdevattrindttemp.c#L177" id="L177.+]emp.c#* sensors. Wv "heck " is bit on>y, all " clearlylCPUsline" 3s9       330" id="L130" class="lin3"6" bit 28 6rsmp; ref="drivers/hwmon6coret69/a>;
ttemp.c#L177" id="L177.+]emp.c#* without " crmal sensors will be filteredtout.line" 3s9       330" id="L130" class="lin3"6"tempeooo6TE2MP_NA2E_LENGTH];;6;;;;;69s24/httemp.c#L177" id="L177.+]emp.c#*"line" 3s9       330" id="L130" class="lin3"60oooooooo6s="line" n2ame="29s="sre6">buf69mon/coretemp.a cl!if="+code=eax" s h_hasass="sref">attrs h_has )
attrcame=" ef="+code=eax" X86_FEATURE_DTHERM(

temp.c#L182" rtemp. href="+code=vaa" class="sref">tdata<60">devicu6="2drivers/hwmon/coretem6.c2#L69f31s_temp.c#L88" id="L88" class="line" na7sref">tda7usef">sesref">devattr70} else              pdevattrtda7u is set, set it ao 90 d7"sref701on/coretemp.+]emp.c#ttemp.c#L177" id="L177"  Check " e microeax" evation of " clCPU *"line" 3s9       330" id="L130" class="lin3"7s2ef">tda7uooooooo* o0) {wisis1"5 7de=HZ70="+++">tempattrchk_u="L1_evation )
tdata<7s to acce7s0MSRr0xEE,rriveTjn/c, l7ft"sr70mon/coretemp.c#L182" id="L182" class="lin7s5to acce7ssmp; ref="drivers/hwmon7"sref7012rsus_info_x/a>];;7 cla470s24/httemp.c#L177" id="L177.+]emp.c#+]emp.c#* Alright, we have DTS support.line" 3s9       330" id="L130" class="lin3"7s7to acce7s="line" n2ame="29s="sre7/aamp70="+++ttemp.c#L177" id="L177.+]emp.c#+]emp.c#* Wv are brntting3" cl_first_ "com/a> " is pkgline" 3s9       330" id="L130" class="lin3"7s8to acce7s>)


70pan>
ttemp.c#L177" id="L177.+]emp.c#+]emp.c#* " cn brntt " is "com/on>dev.line" 3s9       330" id="L130" class="lin3"7> 1807          AL_ATTRS  7     71} elsttemp.c#L177" id="L177.+]emp.c#+]emp.c#*"line" 3s9       330" id="L130" class="lin3"739;t use 7">rEE it means0we aremde7ktop 711on/coretemp.+]emp.c#t3ev&337;u\n"tdatwmoncs="line_"/af="_ad=    s>)
tdata<732ef">tda7oooooo* (with exeception7of At71="+++">temp 3 href="+cod   tdata<7> to acce7t id ="lieraturemscale!s7"sref71">index<+code=devattrttemp.c#L177" id="L177" line" 3s9       330" id="L130" class="lin3"7wmo3/core7emp.c#L115" id="L135" cl71arge71/a>;
ttemp.c#L177" id="L177.+]emp.c#+]emp.c#* Check whether pkgment support is availablv.line" 3s9       330" id="L130" class="lin3"7>6to acce7de3show_name" class="sre7">3ho71s24/httemp.c#L177" id="L177.+]emp.c#+]emp.c#* If so,/ad=/a> erfacvs etempkgment.line" 3s9       330" id="L130" class="lin3"7>7to acce7="+code=commp; ref="driv7rs/hw71="+++ttemp.c#L177" id="L177.+]emp.c#+]emp.c#*"line" 3s9       330" id="L130" class="lin3"738to acce7 3attrs h_has )
attrcame=" ef="+code=eax" X86_FEATURE_PTS(71pan>
tdatwmoncs="line_add_ccom    s>)
tdata<7 device_attribut7 721rs/hwm"+codettemp.c#L177" id="L177" line" 3s9       330" id="L130" class="lin3"7+3nne" na7e3show_label" class="sre7"3sho72="+++ttemp.c#L177" id="L177.+]emp.c#* PhysicallCPU d"> 12 already exists.line" 3s9       330" id="L130" class="lin3"7"sref">la7t_updated;era href="7code=72mon/cttemp.c#L177" id="L177.+]emp.c#* So,/just/ad=/a> erfacvs etem" is "com.line" 3s9       330" id="L130" class="lin3"7" to acce7sensor_device_attribute<7a> *<72">indttemp.c#L177" id="L177.+]emp.c#*"line" 3s9       330" id="L130" class="lin3"7"mo3/core7ode=sensor_devvales shou7d be 725ref="+code=a7;u\n"tdatwmoncs="line_add_ccom    s>)
tdata<7 6to acce7de3e=to_sensor_dev_attr"7cl3ss72"srefetemp.c#L88" id="L88" class="line" na7b7to acce7"+code=tdata" class="sre7">tda72a>)
<        7 curre:  Intel(R) proces7ors,
728rs/hpkg_datvo<"preMSR_IA32_TEMPvers/hwmon/co3/9       3 devatref">tdatwmonpute"com_off>dev )

rl_tablsref">devattr *              Otho7ooooo73} else = )
tdata<7nute" cla7href="+code=valid" class7"sref731on/coretemp._init >> 16) &_t/core2"> " class="sref">attr/core2"> " cl32a href="+code=eax" p" class="sref">attr/" cl32a ice *" clas7="sref">tdatara href="+c7de=HZ732on/coretemp._init >> 16) &_t/core2"> ""> 122static  ""> 12"+codref="+code=eax" p"/a>              p              ;s="line_datep)
tdata<7/sref">la7erles should be rex/a_mv7rlf="73rs/hwtemp.c#L88" id="L88" class="line" na7ns="sref"7>]-> 12 dovs not exist,/just/etemp.c*"line" 3s9       330" id="L130" class="lin3"7n href="+7rm" class="3ref">33arget7/a>;
7312rsus_info_xa cl!if="+code=eax" ;"/a>              psesref">devattrse73mon/coretemp.c#L182" rtemp. href="+code=vaa" class="sref">tdata<7nta<32ref7t_updated;era href="7code=73a>)
<        7sensor_device_attribute<7a> *<73erf="+]emp.c#reMSR_IA32_TEMPp" class="sref">attr/" cl32a struct  datedrv" class="sref">attr/core2"> datedrv" cl  184;"/a>              p *EMPERATU7>last_updated;ies sh7uld b73f31s_temp.c#L88" id="L88" class="line" na7tdata<7 amp;  ta7ls ref"ies omp.ride heur7sef"s7411LIST_HEAD" class="sref">LIST_HEAD;ies should7be re7432t"> *tempindex<+code=devattrrtemp. href="+code=vaa" class="sref">tdata<7hre2="+co7e=buf" class="sref2>buf<74arge74/a>;
2 (attr/" cl32a rles should be rex/a"com_" class="sref">attrscom_" cl tmf="+on/attr/" cl32a rles should be rex/a"com_" class="sref">attrscom_" cl tmf="+on/la7t_updated;ies should7be re74mon/coretemp.c#L182" id="L182" class;s="line_remove_"comass="sref">attrscom2" c_remove_"com  184p" class="sref">attr/" cl32a " d be reMSR_IA32_TEMP/cl >              p)
tdata<7 3">     7vest_updated;ies sho7ld be7431"cohref="+code=vaa" class="sref">tdata<77EMPERATU7mverlref">devattr *tempdev, but another HT siblnttline" 3s9       330" id="L130" class="lin3"7+amp;  ta7"line" nam
dev, register " clalternate siblntt.line" 3s9       330" id="L130" class="lin3"7+sdriv)oa7ensor_dev_attr" cl2ss="s7ef">t75="+++ttemp.c#L177" id="L177.+]emp.c#* T is ensurvs that exactly one set of attributvs is provided as lottline" 3s9       330" id="L130" class="lin3"7+rerf="+]7ta2 class="sref">dev_get7dr2da75mon/cttemp.c#L177" id="L177.+]emp.c#* as at least one HT siblntt of a "com/as on>dev.line" 3s9       330" id="L130" class="lin3"78"+].code7ly chips have no MSRrriv7TjMax75">indttemp.c#L177" id="L177.+]emp.c#*"line" 3s9       330" id="L130" class="lin3"77re2="+co7n>2  184a>
)
devattrdevattrla7ef">sesref">devattrse75mon/coretemp.c#L182" "+code=a7;u\n"devatref">tdatwmondate"com_on>dev tdata<7>(2class=7sr2f">device *sesref">devattr75pan>
ttemp.c#L177" id="L177.+]emp.c#+]emp.c#+]emp.c#* Dis/coy s="lera urv sensor " cl/etemone HT siblnttline" 3s9       330" id="L130" class="lin3"7"driversw7on/core2"> 132      7mon/c76} elsttemp.c#L177" id="L177.+]emp.c#+]emp.c#+]emp.c#* ler "com/on>y, so abort " clloop after one suchline" 3s9       330" id="L130" class="lin3"7"amp;  ta7co2e=to_sensor_dev_attr"7cl2ss76a hrehtemp.c#L177" id="L177.+]emp.c#+]emp.c#+]emp.c#* siblntt has been found.line" 3s9       330" id="L130" class="lin3"7a href="+7ode=tdataaAL_ATTRS  7     76="+++ttemp.c#L177" id="L177.+]emp.c#+]emp.c#+]emp.c#*"line" 3s9       330" id="L130" class="lin3"7t
tdata<7t"+].code7y.alidl.hic/Wiki/Mobilit7/720.76">index<+code=devattretemp.c#L88" id="L88" class="line" na7are2="+co700MSRr0x17, bit 28 1>
templa7href="+code=valid" class7"sref76="+++ttemp.c#L177" id="L177.+]emp.c#  If all class/a> " is pkg are off>dev, remove " cld"> 12.line" 3s9       330" id="L130" class="lin3"7a(2class=7="sref">tdatara href="+c7de=HZ76mon/cttemp.c#L177" id="L177.+]emp.c#* cs="line_"/af="_remove calls unregister_/core2"> ""> 12,line" 3s9       330" id="L130" class="lin3"7aEMPERATU7[sesref">devattrse7732t"> *tempdevatref">tdatwmonss_any_"com_on>dev  184p" class="sref">attr/" cl32a avs9       330" id="L130" class="lin3"7tdata7>tdatwmoncs="line_"/af="_remove )
tdata<7 "+].code7         aAL_ATTRS  7     77 on/cetemp.c#L88" id="L88" class="line" na7 "Lsline87p to Penryn, I d=uld not7find 77/a>;
)
la7oooo* someone at Intel p7ease<77mon/coretemp.c#L182" "+code=aaaaaaaaaaunsignedtlott>> 16) &_tactionass="sref">attractionrsmp" vo<"pref="+code=eax" hc30href="drivera
devattrsesref">devattrse77pan>
)
tdata<7lass="lin7" n2me="L280"> 180  7     78 on/c   attractionrsmpv1rl_tablsref">devattrvalid< href="+7od8=v78="+++">tempattrCPU_ONLINE"+++:7>t2ata->tdatwmonCPU_DOWN_FAILED"+++:  7     78">index<+code=devattrt;u\n"devatref">tdatwmondate"com_on>dev tdata<7c bit 28 7et seef" to be pmon/cor 7D 7 i7812rsus_info_x/a>tdata<7 tempeooo7oooooooooooooooooooo* (g7esswo7862rsus_info_xcaseattr" class="sreCPU_DOWN_PREPAREass="sref">attrCPU_DOWN_PREPARE"+++:la7h tempeooooooooooooooooo7ooooo78mon/coretemp.c#L182" id="L182" classpute"com_off>devatref">tdatwmonpute"com_off>dev tdata<7c(2class=7ld be rex/a_mverlf="+on 70x17/78a>

temp.c#L182" break href="+code=vaa" class="sref">tdata<7 EMPERATU7"> 132       mon/cor72"ore78a>

mp.c#etemp.c#L88" id="L88" class="line" na7"drivers/7wwwwwwwwwaAL_ATTRS  7     79} elsetdata<70MSRrEE b7t is set, set it ao 90 d7grees79tf=ivetemp.c#L88" id="L88" class="line" na70alid" cl7oooooooo* o0) {wisis1"5 7egree79id" claIST_HEAD" class="sref">LIST_HEADattr__ref" clref= = rl_tablsref">devattrdevattrindex<+code+code=commp; _tanotifier_callf="+on  0xf/];;7;;;;;79"srefce *buf79mon/cpkg_datconstt_init >> 16) &_tx86_s h_s="sref">tdatwmonx86_s h_s="+code=DRVNAME"3clas__ref=constass="sref">attr__ref=const"+code=DRVNAME"3clascs="line_idsass="sref">attrss="line_ids devattr

temp.{ ef="+code=eax" X86_VENDOR_INTEL"sref">tdatwmonX86_VENDOR_INTELrsmp" >)
tdatwmonX86_FAMILY_ANYrsmp" >)
tdatwmonX86_MODEL_ANYrsmp" >)
devattrdevicu7="2drivers/hwmon/coretem7.c2#L79a>

mp.c#{etemp.c#L88" id="L88" class="line" na8sref">tda8usef">sesref">devattr80} els}    tda8u is set, set it ao 90 d8"sref80a hrehref="+code=tdaMODULE_DEVICE_TABLEass="sref">attrMODULE_DEVICE_TABLE )
attrss="line_ids tdata<8s2ef">tda8uooooooo* o0) {wisis1"5 8de=HZ80id" claIST_HEAD" class="sref">LIST_HEAD 80rs/hwpkg_data)
devattr = )
3ev href="+code=vaa" class="sref">tdata<8s6to acce8sE2MP_NA2E_LENGTH];;8 cla480"srefce *)


80pan>
ttemp.c#L177" id="L177.+]emp.c#* sensors. Wv "heck " is bit on>y, all " clearlylCPUsline" 3s9       330" id="L130" class="lin3"8> 1808          AL_ATTRS  8     81} elsttemp.c#L177" id="L177.+]emp.c#* without " crmal sensors will be filteredtout.line" 3s9       330" id="L130" class="lin3"839;t use 8">rEE it means0we aremde8ktop 81a hrehtemp.c#L177" id="L177.+]emp.c# "line" 3s9       330" id="L130" class="lin3"832ef">tda8oooooo* (with exeception8of At8132t"> *tempattrss="line_ids  148staticENODEVass="sref">attrENODEV>3ev href="+code=vaa" class="sref">tdata<8> to acce8t id ="lieraturemscale!s8"sref81mon/coretemp.c#L182" id="L182" class="lin8wmo3/core8emp.c#L115" id="L135" cl81arge815ref="+code=a7;u\n" "182" _register>              pcore2"> "182" _register tdatwmoncs="line_"182"  tdata<8>6to acce8de3show_name" class="sre8">3ho816raoretemp.c#a clc#L182" id="L18rete3 101 3 href="+cod   tdata<8g9a>81a>

mp.c#reMSR_IA32_TEMPdateon>dev_c30sass="sref">attrdateon>dev_c30s tdata<8 dev_c30TURE_TARGETadev_c30 tdata<8 9;t use 8s="sref">device_attribut8 821on/coretemp.+]emp.c#tdevatref">tdatwmondate"com_on>dev tdata<8+3nne" na8e3show_label" class="sre8"3sho82id" claIST_HEAD" class="sref">LIST_HEADla8t_updated;era href="8code=82mon/c#ifndefattr" class="sreCONFIG_HOTPLUG_CPUass="sref">attrCONFIG_HOTPLUG_CPUd" claIST_HEAD" class="sref">LIST_HEAD *<824rs/hwm"+codea clL88" id="L88" clist__HEty>              list__HEty tdatwmon/cl _list"+codv1rl_tablsref">devattrdev_c30sass="sref">attrputeon>dev_c30s tdata<8 6to acce8de3e=to_sensor_dev_attr"8cl3ss82mon/coretemp.c#L182" if="+code=eax" 2" class="line" 3ical id &33-> 148staticENODEVass="sref">attrENODEV>3ev href="+code=vaa" class="sref">tdata<8b7to acce8"+code=tdata" class="sre8">tda82mon/coretemp.c#L182" goto href="+code=tdatxit "182" _unreg)
 -
txit "182" _unreg>3ev href="+code=vaa" class="sref">tdata<8b8to acce8 curre:  Intel(R) proces8ors,
82erf="+]emp.c#etemp.c#L88" id="L88" class="line" na8+9a>
#e>diftemp.c#L88" id="L88" class="line" na8nam32comm8nt"> *              Otho8ooooo83 on/c   tdata<8/a>" clas8="sref">tdatara href="+c8de=HZ83="+++">tempdev_c30sass="sref">attrputeon>dev_c30s tdata<8/sref">la8erles should be rex/a_mv8rlf="8332rsus_info_xetemp.c     ]->33arget8/a>;
8312rsu#ifndefattr" class="sreCONFIG_HOTPLUG_CPUass="sref">attrCONFIG_HOTPLUG_CPUd" claIST_HEAD" class="sref">LIST_HEADsesref">devattrse83mon/chref="+code=tdatxit "182" _unreg)
 -
txit "182" _unreg>3ev:;era href="8code=837"+++">temp "182" _unregister>              pcore2"> "182" _unregister tdatwmoncs="line_"182"  tdata<8/3">     8sensor_device_attribute<8a> *<83erf="#e>diftemp.c#L88" id="L88" class="line" na8n9a>last_updated;ies sh8uld b83 on/coref="+code=tdatxit)
 -
txit    :3ev href="+code=vaa" class="sref">tdata<8 amp;  ta8ls ref"ies omp.ride heur8sef"s84tf=ivetemp.c#L88" id="L88" class="line" na8lsdriv)oa8t_updated;ies should8be re84id" claIST_HEAD" class="sref">LIST_HEAD)
 -
vetxit"+code=DRVNAME"3clascs="line_txit)
 -
cs="line_txit devattr              p32a " ref="+code=eax" n)
 -
u>3ev href="+code=vaa" class="sref">tdata<8772t;2 ( *la8t_updated;ies should8be re847"+++">tempdev_c30sass="sref">attrdateon>dev_c30s tdata<8 3">     8vest_updated;ies sho8ld be84erf="+]emp.c#reMSR_IA32_TEMPunregister_hots h_notifierf="+on  0xf/tdata<87EMPERATU8mverlref">devattr

mp.c#reMSR_IA32_TEMPmutex_loclf="+on  0xf/              ptdatwmonlist_e2"_each_pntry 184;>              p32a " ef="+code=eax" n)
 -
u>3ev" d be reMSR_IA32_TEMP/cl _list"sref">tdatwmon/cl _list"+co" ef="+code=eax" list"sref">tdatwmonlist32a )1rl_tablsref="+code=tdata" class="sref8+amp;  ta8"line" nam
 ""> 12_unregister>              pcore2"> ""> 12_unregister  184;>              p32a rles should be rex/a/"/a>              pt85="+++">temp              p32a rles should be rex/alist"sref">tdatwmonlist32a )    dev_get8dr2da85mon/coretemp.c#L182" id="L182" classkfruf)
 -
kfruf    s7ef="3384"> 184p>              p32a )                  pdev_c30sass="sref">attrputeon>dev_c30s tdata<8nbuf<">la8ef">sesref">devattrse857"+++">temp "182" _unregister>              pcore2"> "182" _unregister tdatwmoncs="line_"182"  tdata<8>(2class=8sr2f">device *sesref">devattr85f31s_temp.c#L88" id="L88" class="line" na8"driversw8on/core2"> 132      8mon/c86} elstref="+code=tdaMODULE_AUTHORass="sref">attrMODULE_AUTHOR    s7temp.c#L177"_innttT>"Rudolf Marek <r.marek@L17embler.czles "line" 3a href="+code=vaa" class="sref">tdata<8"amp;  ta8co2e=to_sensor_dev_attr"8cl2ss86a hrehref="+code=tdaMODULE_DESCRIPTIONass="sref">attrMODULE_DESCRIPTION    s7temp.c#L177"_innttT>"Intel Cref s="lera urv ss=itor"line" 3a href="+code=vaa" class="sref">tdata<8"sdriv)oa8ode=tdataaAL_ATTRS  8     86="+++tref="+code=tdaMODULE_LICENSEass="sref">attrMODULE_LICENSE    s7temp.c#L177"_innttT>"GPL"line" 3a href="+code=vaa" class="sref">tdata<8"rerf="+]8ls ret us    Intel provi8ed ta86rs/hwtemp.c#L88" id="L88" class="line" na8t"+].code8y.alidl.hic/Wiki/Mobilit8/720.86">ind7;u\n")
 -
cs="line_txit 


> The original LXR software by " cl9 3http://sourcee2"ge.net/projects/lxr>>LXR id=uwmoy"+co" " is exleri="L1al id=ion by 9 3mailto:lxr@empux.noonlxr@empux.no"+co.
> lxr.empux.no kindly hosted by 9 3http://www.redpill-emppro.noonRedpill Lmppro AS"+co" provider of Lmpuxtconsultntt and olera ions ser> 12s since 1995.