Patchwork [3.5.y.z,extended,stable] Patch "Input: walkera0701 - fix crash on startup" has been added to staging queue

login
register
mail settings
Submitter Herton Ronaldo Krzesinski
Date Jan. 7, 2013, 8:39 p.m.
Message ID <1357591148-22761-1-git-send-email-herton.krzesinski@canonical.com>
Download mbox | patch
Permalink /patch/210227/
State New
Headers show

Comments

Herton Ronaldo Krzesinski - Jan. 7, 2013, 8:39 p.m.
This is a note to let you know that I have just added a patch titled

    Input: walkera0701 - fix crash on startup

to the linux-3.5.y-queue branch of the 3.5.y.z extended stable tree 
which can be found at:

 http://kernel.ubuntu.com/git?p=ubuntu/linux.git;a=shortlog;h=refs/heads/linux-3.5.y-queue

If you, or anyone else, feels it should not be added to this tree, please 
reply to this email.

For more information about the 3.5.y.z tree, see
https://wiki.ubuntu.com/Kernel/Dev/ExtendedStable

Thanks.
-Herton

------

From 627daa5b6d5c65eed9e7cd2b8f07ec9c409d69de Mon Sep 17 00:00:00 2001
From: Peter Popovec <popovec@oko.fei.tuke.sk>
Date: Fri, 14 Dec 2012 22:57:25 -0800
Subject: [PATCH] Input: walkera0701 - fix crash on startup

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.wu@intel.com>
Signed-off-by: Peter Popovec <popovec@fei.tuke.sk>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Herton Ronaldo Krzesinski <herton.krzesinski@canonical.com>
---
 drivers/input/joystick/walkera0701.c |    7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

--
1.7.9.5

Patch

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);