Re: [RFC PATCH 13/13] m68k: mvme16x: Convert to clocksource APIy
From: Thomas Gleixner
Date: Sun Nov 18 2018 - 12:12:55 EST
Finn,
On Wed, 14 Nov 2018, Finn Thain wrote:
> On Tue, 13 Nov 2018, Thomas Gleixner wrote:
> > Urgh. Then you have more serious trouble. If the interrupting handler
> > calls any of the time accessor functions then you can actually live lock
> > when the interrupt happens in the middle of the write locked section of
> > the core timekeeping update.
>
> Does this apply to arch_gettimeoffset also? If so, that would mean another
> bug fix patch for -stable...
arch_gettimeoffset() can be called from any context. The only interrupt
which can affect it is the timer interrupt. As m68k are all UP machines
this is not a problem because:
ktime_get()
do {
seq = read_seqcount_begin(tk.seq);
nsec = .... + arch_gettimeoffset();
} while (seqcount_retry(tk.seq);
and the timer interrupt does:
arch_timeoffset += value;
...
xtime_update()
...
write_seqcount_begin(tk.seq);
....
write_seqcount_end(tk.seq);
So where ever the timer interrupt hits inside of ktime_get() or any other
accessor the seqcount will make it retry, so the result is always
consistent.
For SMP that would be a different story.
> > So you really want to disable interrupts across the whole timer
> > interrupt function or make sure that the timer interrupt is the highest
> > priority one on the system.
> >
>
> The timer interrupt priority isn't always what one would hope.
>
> But I can certainly disable interrupts for timer_interrupt() execution
> (that is, xtime_update() etc.)
Oh yes, you should.
Thanks,
tglx