[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <569D49FC.2050500@linutronix.de>
Date: Mon, 18 Jan 2016 21:24:28 +0100
From: Sebastian Andrzej Siewior <bigeasy@...utronix.de>
To: Alexandre Belloni <alexandre.belloni@...e-electrons.com>
Cc: Thomas Gleixner <tglx@...utronix.de>,
Boris Brezillon <boris.brezillon@...e-electrons.com>,
linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org,
linux-rt-users@...r.kernel.org,
Nicolas Ferre <nicolas.ferre@...el.com>
Subject: Re: [PATCH 4.4-rt2] fix
arm-at91-pit-remove-irq-handler-when-clock-is-unused.patch
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
Powered by blists - more mailing lists