On 28-12-16, 22:56, David Gstir wrote: > Since migrating to the 'set-state' interface the cs5535 driver causes a > crash after loading: Right after initialization, the IRQ handler > (mfgpt_tick) is triggered with clock event device in detached state. This > state not properly handled and causes a crash through NULL pointer > dereference upon calling the clockevent's event_handler. > > This patch fixes this by handling the detached state the same way the > shutdown state is handled. > > Fixes: 8f9327cbb6e8 ("clockevents/drivers/cs5535: Migrate to new 'set-state' interface") > Cc: stable@xxxxxxxxxxxxxxx > Cc: Andres Salomon <dilinger@xxxxxxxxxx> > Cc: Viresh Kumar <viresh.kumar@xxxxxxxxxx> > Signed-off-by: David Gstir <david@xxxxxxxxxxxxx> > --- > drivers/clocksource/cs5535-clockevt.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/clocksource/cs5535-clockevt.c b/drivers/clocksource/cs5535-clockevt.c > index 9a7e37cf56b0..649e0cd90805 100644 > --- a/drivers/clocksource/cs5535-clockevt.c > +++ b/drivers/clocksource/cs5535-clockevt.c > @@ -117,7 +117,8 @@ static irqreturn_t mfgpt_tick(int irq, void *dev_id) > /* Turn off the clock (and clear the event) */ > disable_timer(cs5535_event_clock); > > - if (clockevent_state_shutdown(&cs5535_clockevent)) > + if (clockevent_state_shutdown(&cs5535_clockevent) || > + clockevent_state_detached(&cs5535_clockevent)) > return IRQ_HANDLED; > > /* Clear the counter */ Sorry for breaking it, but it looks we have unearthed a bug because of my patch. I wouldn't enable the IRQ unless the clockevents core has asked for it, i.e. by calling set_state_periodic() or set_state_oneshot(). The driver is currently enabling the IRQ from its init code and that's where the problem is IMHO. -- viresh -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html