On 01/18/2016 07:42 PM, Alexandre Belloni wrote: > On 18/01/2016 at 18:25:22 +0100, Sebastian Andrzej Siewior wrote : >> * Alexandre Belloni | 2016-01-17 03:23:14 [+0100]: >> >>> index 80d74c4adcbe..43b50634d640 100644 >>> --- a/drivers/clocksource/timer-atmel-pit.c >>> +++ b/drivers/clocksource/timer-atmel-pit.c >>> @@ -96,11 +96,44 @@ static int pit_clkevt_shutdown(struct clock_event_device *dev) >>> >>> /* disable irq, leaving the clocksource active */ >>> pit_write(data->base, AT91_PIT_MR, (data->cycle - 1) | AT91_PIT_PITEN); >>> - free_irq(atmel_pit_irq, data); >>> + if (!clockevent_state_detached(dev)) >>> + free_irq(data->irq, data); >> >> I did it in the meantime without clockevent_state_detached(). From what >> it looks, it first sets the state and then invokes >> pit_clkevt_shutdown(). Any particular reason for this? >> > > Yeah, I forgot to mention that. Freeing the irq unconditionally > results in: … > > > My understanding is that clockevents_exchange_device() changes the state > from detached to shutdown and so at that point the IRQ has never been > requested. I see. So we get shutdown called twice while set_periodic was only called once. In that case I would suggest to have internal bookkeeping instead of relying on current core's behavior when it is time free the irq. > Sebastian -- To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html