3.5.7.3 -stable review patch.  If anyone has any objections, please let me know.

------------------

From: Peter Popovec <popo...@oko.fei.tuke.sk>

commit a455e2985f57e2a71566bb8850094af38b2c932d upstream.

The driver's timer must be set up before enabling IRQ handler, otherwise
bad things may happen.

Reported-and-tested-by: Fengguang Wu <fengguang...@intel.com>
Signed-off-by: Peter Popovec <popo...@fei.tuke.sk>
Signed-off-by: Dmitry Torokhov <dmitry.torok...@gmail.com>
Signed-off-by: Herton Ronaldo Krzesinski <herton.krzesin...@canonical.com>
---
 drivers/input/joystick/walkera0701.c |    7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/drivers/input/joystick/walkera0701.c 
b/drivers/input/joystick/walkera0701.c
index 4dfa1ee..f8f892b 100644
--- a/drivers/input/joystick/walkera0701.c
+++ b/drivers/input/joystick/walkera0701.c
@@ -196,6 +196,7 @@ static void walkera0701_close(struct input_dev *dev)
        struct walkera_dev *w = input_get_drvdata(dev);
 
        parport_disable_irq(w->parport);
+       hrtimer_cancel(&w->timer);
 }
 
 static int walkera0701_connect(struct walkera_dev *w, int parport)
@@ -224,6 +225,9 @@ static int walkera0701_connect(struct walkera_dev *w, int 
parport)
        if (parport_claim(w->pardevice))
                goto init_err1;
 
+       hrtimer_init(&w->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
+       w->timer.function = timer_handler;
+
        w->input_dev = input_allocate_device();
        if (!w->input_dev)
                goto init_err2;
@@ -254,8 +258,6 @@ static int walkera0701_connect(struct walkera_dev *w, int 
parport)
        if (err)
                goto init_err3;
 
-       hrtimer_init(&w->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
-       w->timer.function = timer_handler;
        return 0;
 
  init_err3:
@@ -271,7 +273,6 @@ static int walkera0701_connect(struct walkera_dev *w, int 
parport)
 
 static void walkera0701_disconnect(struct walkera_dev *w)
 {
-       hrtimer_cancel(&w->timer);
        input_unregister_device(w->input_dev);
        parport_release(w->pardevice);
        parport_unregister_device(w->pardevice);
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to