From: Jean Delvare <khali@linux-fr.org>
To: lm-sensors@vger.kernel.org
Subject: Re: [lm-sensors] [PATCH] coretemp: Add TEMP_TARGET support
Date: Sun, 16 Dec 2007 11:34:59 +0000 [thread overview]
Message-ID: <20071216123459.049e0fde@hyperion.delvare> (raw)
In-Reply-To: <4751C613.8040502@assembler.cz>
Hi Rudolf,
On Sat, 01 Dec 2007 21:37:39 +0100, Rudolf Marek wrote:
> Attached patch enables driver to export the target temperature. This temperature
> is calibrated into each CPU, and serves as some indicator to cooling platform.
> All fans should spin at full speed if the temperature is reached.
>
> Signed-off-by: Rudolf Marek <r.marek@assembler.cz>
>
> I managed to get answer from Intel at:
>
> http://softwarecommunity.intel.com/isn/Community/en-US/forums/permalink/30228436/30230975/ShowThread.aspx#30230975
>
> Can someone test if it works please? The lines in the patch are longer than 80
> chars, imho it is allowed now?
Only if folding the line in question would hinder code readability.
This doesn't seem to be the case here so I think you should fold (most
of) the lines.
> coretemp-isa-0000
> Adapter: ISA adapter
> Core 0: +36.0°C (high = +65.0°C, crit = +85.0°C)
>
> I have in plan to add Penryn CPUs to driver once I know the details.
I can only test on my T2600 which does not have the feature. So all I
can say is that there is no regression there.
> Index: linux-2.6.23.9/drivers/hwmon/coretemp.c
> =================================> --- linux-2.6.23.9.orig/drivers/hwmon/coretemp.c 2007-12-01 12:28:08.000000000 +0100
> +++ linux-2.6.23.9/drivers/hwmon/coretemp.c 2007-12-01 21:29:10.000000000 +0100
> @@ -38,7 +38,7 @@
>
> #define DRVNAME "coretemp"
>
> -typedef enum { SHOW_TEMP, SHOW_TJMAX, SHOW_LABEL, SHOW_NAME } SHOW;
> +typedef enum { SHOW_TEMP, SHOW_TJMAX, SHOW_TTARGET, SHOW_LABEL, SHOW_NAME } SHOW;
>
> /*
> * Functions declaration
> @@ -55,6 +55,7 @@
> unsigned long last_updated; /* in jiffies */
> int temp;
> int tjmax;
> + int ttarget;
> u8 alarm;
> };
>
> @@ -95,9 +96,10 @@
>
> if (attr->index = SHOW_TEMP)
> err = data->valid ? sprintf(buf, "%d\n", data->temp) : -EAGAIN;
> - else
> + else if (attr->index = SHOW_TJMAX)
> err = sprintf(buf, "%d\n", data->tjmax);
> -
> + else
> + err = sprintf(buf, "%d\n", data->ttarget);
> return err;
> }
>
> @@ -105,6 +107,8 @@
> SHOW_TEMP);
> static SENSOR_DEVICE_ATTR(temp1_crit, S_IRUGO, show_temp, NULL,
> SHOW_TJMAX);
> +static SENSOR_DEVICE_ATTR(temp1_max, S_IRUGO, show_temp, NULL,
> + SHOW_TTARGET);
> static DEVICE_ATTR(temp1_crit_alarm, S_IRUGO, show_alarm, NULL);
> static SENSOR_DEVICE_ATTR(temp1_label, S_IRUGO, show_name, NULL, SHOW_LABEL);
> static SENSOR_DEVICE_ATTR(name, S_IRUGO, show_name, NULL, SHOW_NAME);
> @@ -223,10 +227,27 @@
> "temperature might be wrong!\n");
> }
>
> + data->ttarget = data->tjmax;
This initialization isn't needed. data->ttarget is only read if the
temp1_max is created, and in this case you overwrite the value below.
> +
> + /* read the still undocumented IA32_TEMPERATURE_TARGET it exists
> + on older CPUs but not here */
I can't really make sense of the second part of this comment, please
clarify.
> + if (c->x86_model > 0xe) {
> + err = rdmsr_safe_on_cpu(data->id, 0x1a2, &eax, &edx);
> + if (err) {
> + dev_warn(&pdev->dev, "Unable to read IA32_TEMPERATURE_TARGET MSR\n");
> + } else {
> + data->ttarget = data->tjmax - (((eax >> 8) & 0xff) * 1000);
> + err = device_create_file(&pdev->dev,
> + &sensor_dev_attr_temp1_max.dev_attr);
> + if (err)
> + goto exit_free;
> + }
> + }
> +
> platform_set_drvdata(pdev, data);
You have a race condition here, the driver data should be set before
creating any sysfs file, otherwise dev_get_drvdata() might be called
before it is set.
>
> if ((err = sysfs_create_group(&pdev->dev.kobj, &coretemp_group)))
> - goto exit_free;
> + goto exit_dev;
>
> data->class_dev = hwmon_device_register(&pdev->dev);
> if (IS_ERR(data->class_dev)) {
> @@ -240,6 +261,8 @@
>
> exit_class:
> sysfs_remove_group(&pdev->dev.kobj, &coretemp_group);
> +exit_dev:
> + device_remove_file(&pdev->dev, &sensor_dev_attr_temp1_max.dev_attr);
> exit_free:
> kfree(data);
> exit:
> @@ -252,6 +275,7 @@
>
> hwmon_device_unregister(data->class_dev);
> sysfs_remove_group(&pdev->dev.kobj, &coretemp_group);
> + device_remove_file(&pdev->dev, &sensor_dev_attr_temp1_max.dev_attr);
> platform_set_drvdata(pdev, NULL);
> kfree(data);
> return 0;
> Index: linux-2.6.23.9/Documentation/hwmon/coretemp
> =================================> --- linux-2.6.23.9.orig/Documentation/hwmon/coretemp 2007-12-01 21:25:17.000000000 +0100
> +++ linux-2.6.23.9/Documentation/hwmon/coretemp 2007-12-01 21:28:35.000000000 +0100
> @@ -25,7 +25,8 @@
> the Out-Of-Spec bit. Following table summarizes the exported sysfs files:
>
> temp1_input - Core temperature (in millidegrees Celsius).
> -temp1_crit - Maximum junction temperature (in millidegrees Celsius).
> +temp1_max - All cooling devices should be turned on (on Core2).
> +temp1_crit - Maximum junction temperature (in millidegrees Celsius).
> temp1_crit_alarm - Set when Out-of-spec bit is set, never clears.
> Correct CPU operation is no longer guaranteed.
> temp1_label - Contains string "Core X", where X is processor
--
Jean Delvare
_______________________________________________
lm-sensors mailing list
lm-sensors@lm-sensors.org
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors
prev parent reply other threads:[~2007-12-16 11:34 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-12-01 20:37 [lm-sensors] [PATCH] coretemp: Add TEMP_TARGET support Rudolf Marek
2007-12-16 11:34 ` Jean Delvare [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20071216123459.049e0fde@hyperion.delvare \
--to=khali@linux-fr.org \
--cc=lm-sensors@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.