On Thu, 21 May 2015, Ezequiel Garcia wrote: > On 05/21/2015 07:00 PM, Thomas Gleixner wrote: > > On Thu, 21 May 2015, Ezequiel Garcia wrote: > >> +static cycle_t clocksource_read_cycles(struct clocksource *cs) > >> +{ > >> + u32 counter, overflw; > >> + unsigned long flags; > >> + > >> + raw_spin_lock_irqsave(&lock, flags); > > > > Hmm. Is that lock really necessary to read that counter? The > > clocksource is global. And if its actually used for timekeeping, the > > lock can get heavy contended. > > > > Yup, it is really (and sadly) necessary. The kernel hangs up completely > without it when the counter is accesed by more than one CPU. > > Apparently, those two timer registers overflow and counter must be read > atomically. Welcome to the wonderful world of useless timer hardware. tglx