diff options
author | Jiri Kosina <jkosina@suse.cz> | 2011-10-25 03:58:12 -0400 |
---|---|---|
committer | Jiri Kosina <jkosina@suse.cz> | 2011-10-25 03:58:12 -0400 |
commit | f6f12427844516bc8e9cf84f43aca7bbbaa48157 (patch) | |
tree | c3ac710e02d65fc08629b25fcfba0e79e0092910 /drivers/hid/hidraw.c | |
parent | b0eae38cebc54e618896d3e6a799939da51a8cac (diff) | |
parent | bca621421c53caf73f36e181d6e5fe41fe0da7a7 (diff) |
Merge branch 'upstream-fixes' into for-linus
Conflicts:
drivers/hid/hid-wacom.c
Diffstat (limited to 'drivers/hid/hidraw.c')
-rw-r--r-- | drivers/hid/hidraw.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/hid/hidraw.c b/drivers/hid/hidraw.c index c79578b5a788..6d65d4e35120 100644 --- a/drivers/hid/hidraw.c +++ b/drivers/hid/hidraw.c | |||
@@ -272,8 +272,10 @@ static int hidraw_open(struct inode *inode, struct file *file) | |||
272 | dev = hidraw_table[minor]; | 272 | dev = hidraw_table[minor]; |
273 | if (!dev->open++) { | 273 | if (!dev->open++) { |
274 | err = hid_hw_power(dev->hid, PM_HINT_FULLON); | 274 | err = hid_hw_power(dev->hid, PM_HINT_FULLON); |
275 | if (err < 0) | 275 | if (err < 0) { |
276 | dev->open--; | ||
276 | goto out_unlock; | 277 | goto out_unlock; |
278 | } | ||
277 | 279 | ||
278 | err = hid_hw_open(dev->hid); | 280 | err = hid_hw_open(dev->hid); |
279 | if (err < 0) { | 281 | if (err < 0) { |
@@ -510,13 +512,12 @@ void hidraw_disconnect(struct hid_device *hid) | |||
510 | { | 512 | { |
511 | struct hidraw *hidraw = hid->hidraw; | 513 | struct hidraw *hidraw = hid->hidraw; |
512 | 514 | ||
515 | mutex_lock(&minors_lock); | ||
513 | hidraw->exist = 0; | 516 | hidraw->exist = 0; |
514 | 517 | ||
515 | device_destroy(hidraw_class, MKDEV(hidraw_major, hidraw->minor)); | 518 | device_destroy(hidraw_class, MKDEV(hidraw_major, hidraw->minor)); |
516 | 519 | ||
517 | mutex_lock(&minors_lock); | ||
518 | hidraw_table[hidraw->minor] = NULL; | 520 | hidraw_table[hidraw->minor] = NULL; |
519 | mutex_unlock(&minors_lock); | ||
520 | 521 | ||
521 | if (hidraw->open) { | 522 | if (hidraw->open) { |
522 | hid_hw_close(hid); | 523 | hid_hw_close(hid); |
@@ -524,6 +525,7 @@ void hidraw_disconnect(struct hid_device *hid) | |||
524 | } else { | 525 | } else { |
525 | kfree(hidraw); | 526 | kfree(hidraw); |
526 | } | 527 | } |
528 | mutex_unlock(&minors_lock); | ||
527 | } | 529 | } |
528 | EXPORT_SYMBOL_GPL(hidraw_disconnect); | 530 | EXPORT_SYMBOL_GPL(hidraw_disconnect); |
529 | 531 | ||