All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Pali Rohár" <pali.rohar@gmail.com>
To: Guenter Roeck <linux@roeck-us.net>
Cc: Arnd Bergmann <arnd@arndb.de>,
	"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
	Steven Honeyman <stevenhoneyman@gmail.com>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH] i8k: Fix temperature bug handling in i8k_get_temp()
Date: Sun, 30 Nov 2014 15:48:15 +0100	[thread overview]
Message-ID: <201411301548.16031@pali> (raw)
In-Reply-To: <547ADC90.8000507@roeck-us.net>

[-- Attachment #1: Type: Text/Plain, Size: 2975 bytes --]

On Sunday 30 November 2014 10:00:00 Guenter Roeck wrote:
> On 11/18/2014 06:56 AM, Pali Rohár wrote:
> > Static array prev[] was incorrectly initialized. It should
> > be initialized to some "invalid" temperature value (above
> > I8K_MAX_TEMP).
> > 
> > Next, function should store "invalid" value to prev[] (above
> > I8K_MAX_TEMP), not valid (= I8K_MAX_TEMP) because whole
> > temperature bug handling will not work.
> > 
> > And last part, to not break existing detection of
> > temperature sensors, register them also if i8k report too
> > high temperature (above I8K_MAX_TEMP). This is needed
> > because some sensors are sometimes turned off (e.g sensor
> > on GPU which can be turned off/on) and in this case SMM
> > report too high value.
> > 
> > To prevent reporting "invalid" values to userspace, return
> > -EINVAL. In this case sensors which are currently turned
> > off (e.g optimus/powerexpress/enduro gpu) are reported as
> > "N/A" by lm-sensors package.
> > 
> > Signed-off-by: Pali Rohár <pali.rohar@gmail.com>
> > ---
> > 
> >   drivers/char/i8k.c |   16 ++++++++++------
> >   1 file changed, 10 insertions(+), 6 deletions(-)
> > 
> > diff --git a/drivers/char/i8k.c b/drivers/char/i8k.c
> > index 7272b08..e34a019 100644
> > --- a/drivers/char/i8k.c
> > +++ b/drivers/char/i8k.c
> > @@ -298,7 +298,7 @@ static int i8k_get_temp(int sensor)
> > 
> >   	int temp;
> >   
> >   #ifdef I8K_TEMPERATURE_BUG
> > 
> > -	static int prev[4];
> > +	static int prev[4] = { I8K_MAX_TEMP+1, I8K_MAX_TEMP+1,
> > I8K_MAX_TEMP+1, I8K_MAX_TEMP+1 };
> > 
> >   #endif
> >   
> >   	regs.ebx = sensor & 0xff;
> >   	rc = i8k_smm(&regs);
> > 
> > @@ -317,10 +317,12 @@ static int i8k_get_temp(int sensor)
> > 
> >   	 */
> >   	
> >   	if (temp > I8K_MAX_TEMP) {
> >   	
> >   		temp = prev[sensor];
> > 
> > -		prev[sensor] = I8K_MAX_TEMP;
> > +		prev[sensor] = I8K_MAX_TEMP+1;
> > 
> >   	} else {
> >   	
> >   		prev[sensor] = temp;
> >   	
> >   	}
> > 
> > +	if (temp > I8K_MAX_TEMP)
> > +		return -ERANGE;
> 
> Can we return -ENODATA in this case ? I think that would be
> more appropriate.
> 

This is internal kernel function, no problem. If you prefer 
NODATA instead RANGE I will change it.

> >   #endif
> >   
> >   	return temp;
> > 
> > @@ -499,6 +501,8 @@ static ssize_t
> > i8k_hwmon_show_temp(struct device *dev,
> > 
> >   	int temp;
> >   	
> >   	temp = i8k_get_temp(index);
> > 
> > +	if (temp == -ERANGE)
> > +		return -EINVAL;
> 
> and can we also return -ENODATA to user space ?
> This would make the code a bit cleaner.
> 
> Thanks,
> Guenter

There was some problems when I tested similar patch for radeon.ko 
(do not report temperature to userspace when card is turned off).

I can test lm-sensors which is in Ubuntu 12.04 LTS (there is 
probably some older version) what happens with -ENODATA from i8k.

-- 
Pali Rohár
pali.rohar@gmail.com

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

  reply	other threads:[~2014-11-30 14:48 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-10-19 14:46 [PATCH] i8k: Ignore temperature sensors which report invalid values Pali Rohár
2014-10-19 15:13 ` Guenter Roeck
2014-10-20 16:46   ` Pali Rohár
2014-10-21  4:27     ` Guenter Roeck
2014-10-22 12:29       ` Pali Rohár
2014-10-22 16:19         ` Guenter Roeck
2014-10-22 16:35           ` Pali Rohár
2014-10-22 17:10             ` Guenter Roeck
2014-10-23 10:37               ` Pali Rohár
2014-10-23 16:45                 ` Guenter Roeck
2014-11-17  8:35                   ` Pali Rohár
2014-11-18  5:56                     ` Guenter Roeck
2014-11-18 14:46                       ` Pali Rohár
2014-11-18 14:56                         ` [PATCH] i8k: Fix temperature bug handling in i8k_get_temp() Pali Rohár
2014-11-30  0:12                           ` Guenter Roeck
2014-11-30 14:44                             ` Pali Rohár
2014-11-30  9:00                           ` Guenter Roeck
2014-11-30 14:48                             ` Pali Rohár [this message]
2014-11-30 15:56                               ` Guenter Roeck
2014-11-30 16:00                                 ` Pali Rohár

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=201411301548.16031@pali \
    --to=pali.rohar@gmail.com \
    --cc=arnd@arndb.de \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@roeck-us.net \
    --cc=stevenhoneyman@gmail.com \
    /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.