Re: [PATCH] RISC-V: Check clint_time_val before use

From: Maciej W. Rozycki
Date: Sat Sep 26 2020 - 06:52:43 EST


On Sat, 26 Sep 2020, Damien Le Moal wrote:

> > > With this applied in addition to your patch, it works.
> > >
> > > diff --git a/drivers/clocksource/timer-clint.c b/drivers/clocksource/timer-
> > > clint.c
> > > index d17367dee02c..8dbec85979fd 100644
> > > --- a/drivers/clocksource/timer-clint.c
> > > +++ b/drivers/clocksource/timer-clint.c
> > > @@ -37,7 +37,7 @@ static unsigned long clint_timer_freq;
> > > static unsigned int clint_timer_irq;
> > >
> > > #ifdef CONFIG_RISCV_M_MODE
> > > -u64 __iomem *clint_time_val;
> > > +u64 __iomem *clint_time_val = NULL;
> > > #endif
> >
> > Hmm, BSS initialisation issue?
>
> Not a static variable, so it is not in BSS, no ?

Maybe it has a weird declaration elsewhere which messes up things (I
haven't checked), but it looks to me like it does have static storage
(rather than automatic or thread one), so if uninitialised it goes to BSS,
and it is supposed to be all-zeros whether explicitly assigned a NULL
value or not. It does have external rather than internal linkage (as it
would if it had the `static' keyword), but it does not matter. Best check
with `objdump'/`readelf'.

Maciej