On Tue, 13 Nov 2018, Thomas Gleixner wrote:
On Wed, 14 Nov 2018, Finn Thain wrote:
What I mean by that is, the interrupt level (IPL) prevents interrupt
handlers from being re-entered. But a handler can still get
interrupted by a higher priority interrupt request. In the past I've
had to add defensive locking because of this.
In these patches I've assumed it was possible for some higher priority
interrupt handler to perform a clocksource read after the timer
handler started executing. Hence the use of local_irq_save/restore.
To be sure, I've just run a quick test and confirmed that the timer
handler can indeed get interrupted by the ethernet interrupt handler.
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...
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.)
--
Thanks,
tglx