[PATCH v2] Fix RTAS watchdog driver temperature read functionality

Benjamin Herrenschmidt benh at kernel.crashing.org
Thu Jun 25 21:28:14 EST 2009


On Thu, 2009-06-25 at 13:22 +0200, Utz Bacher wrote:
> 
> Adrian Reber wrote on 11.06.2009 12:52:17: 
> > 
> > I forgot about this patch. Can this still be merged?

Probably, can you re-send it in proper format to the list so it gets
into patchwork (unless it's already there in which case I'll pick it up
anyway) ?

Cheers,
Ben.

> > 
> > On Thu, Mar 26, 2009 at 01:05:42PM +0100, Adrian Reber wrote:
> > > Using the RTAS watchdog driver to read out the temperature crashes
> > > on a PXCAB:
> > > 
> > > Unable to handle kernel paging request for data at address
> 0xfe347b50
> > > Faulting instruction address: 0xc00000000001af64
> > > Oops: Kernel access of bad area, sig: 11 [#1]
> > > 
> > > The wrong usage of "(void *)__pa(&temperature)" in rtas_call() is
> > > removed by using the function rtas_get_sensor() which does the
> > > right thing.
> > > 
> > > Signed-off-by: Adrian Reber <adrian at lisas.de>
> > > ---
> > > v2: use rtas_get_sensor(); typo fixed
> > > ---
> > >  drivers/watchdog/wdrtas.c |    8 +++-----
> > >  1 files changed, 3 insertions(+), 5 deletions(-)
> > > 
> > > diff --git a/drivers/watchdog/wdrtas.c b/drivers/watchdog/wdrtas.c
> > > index 5d3b1a8..a9f00dc 100644
> > > --- a/drivers/watchdog/wdrtas.c
> > > +++ b/drivers/watchdog/wdrtas.c
> > > @@ -214,16 +214,14 @@ static void wdrtas_timer_keepalive(void)
> > >   */
> > >  static int wdrtas_get_temperature(void)
> > >  {
> > > -   long result;
> > > +   int result;
> > >     int temperature = 0;
> > >  
> > > -   result = rtas_call(wdrtas_token_get_sensor_state, 2, 2,
> > > -            (void *)__pa(&temperature),
> > > -            WDRTAS_THERMAL_SENSOR, 0);
> > > +   result = rtas_get_sensor(WDRTAS_THERMAL_SENSOR, 0,
> &temperature);
> > >  
> > >     if (result < 0)
> > >        printk(KERN_WARNING "wdrtas: reading the thermal sensor "
> > > -             "faild: %li\n", result);
> > > +             "failed: %i\n", result);
> > >     else
> > >        temperature = ((temperature * 9) / 5) + 32; /* fahrenheit
> */
> > >  
> > > -- 
> > > 1.5.6.6
> 
> makes sense. Second version also looks good to me -- thanks! 
> 
> Acked-by: Utz Bacher <utz.bacher at de.ibm.com> 
> 
> Utz 
> 
> :wq



More information about the Linuxppc-dev mailing list