Thread (8 messages) flat view 8 messages, 2 authors, 2012-11-01

Re: [BUG v3.6.2, 3.7-rc1] Unable to rmmod any hid special driver

From: Jiri Kosina <hidden>
Date: 2012-11-01 10:14:55
Subsystem: hid core layer, the rest · Maintainers: Jiri Kosina, Benjamin Tissoires, Linus Torvalds

On Thu, 18 Oct 2012, Benjamin Tissoires wrote:
Hi Guys,

Commit 4fe9f8e203fdad1524c04beb390f3c6099781ed9 upstream
Commit 57a38d925e665fcd729cd9ad4a75c84e11bd95c9 linux-stable

This commit "HID: hidraw: don't deallocate memory when it is in use"
prevents users to rmmod then insmod  any hid special driver without
either physically unplugging the device or without rmmod-ing the hid
bus itself.

When the user does a rmmod, hidinput_disconnect is called before
hidraw_disconnect, thus, the hidraw device is still there, but the
input one not. It leads to the fact that the device is not working
anymore even if you call modprobe.

Any idea to solve that?
Guys, how about this?


---
 drivers/hid/hidraw.c |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/hid/hidraw.c b/drivers/hid/hidraw.c
index 17d15bb..fce4256 100644
--- a/drivers/hid/hidraw.c
+++ b/drivers/hid/hidraw.c
@@ -560,10 +560,11 @@ static void drop_ref(struct hidraw *hidraw, int exists_bit)
 {
 	mutex_lock(&minors_lock);
 	if (exists_bit) {
-		hid_hw_close(hidraw->hid);
 		hidraw->exist = 0;
-		if (hidraw->open)
+		if (hidraw->open) {
+			hid_hw_close(hidraw->hid);
 			wake_up_interruptible(&hidraw->wait);
+		}
 	} else {
 		--hidraw->open;
 	}
-- 
Jiri Kosina
SUSE Labs
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help