From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752099AbcL1V4s (ORCPT ); Wed, 28 Dec 2016 16:56:48 -0500 Received: from mail.sigma-star.at ([95.130.255.111]:45996 "EHLO mail.sigma-star.at" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750735AbcL1V4g (ORCPT ); Wed, 28 Dec 2016 16:56:36 -0500 From: David Gstir To: linux-kernel@vger.kernel.org Cc: daniel.lezcano@linaro.org, tglx@linutronix.de, richard@nod.at, stable@vger.kernel.org, Andres Salomon , Viresh Kumar Subject: [PATCH] clockevents/drivers/cs5535: Un-break driver with 'set-state' interface Date: Wed, 28 Dec 2016 22:56:03 +0100 Message-Id: <20161228215603.6600-1-david@sigma-star.at> X-Mailer: git-send-email 2.11.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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@vger.kernel.org Cc: Andres Salomon Cc: Viresh Kumar Signed-off-by: David Gstir --- 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 */ -- 2.11.0