summaryrefslogtreecommitdiff
path: root/drivers/hid
diff options
context:
space:
mode:
authorJiri Kosina <jkosina@suse.cz>2021-11-05 12:16:17 +0100
committerJiri Kosina <jkosina@suse.cz>2021-11-05 12:16:17 +0100
commit3f81b3a387f7f7b0978647a96f99fc5b5fd9b64c (patch)
tree85621199beaa1f8a67e05cc013047968b9152eeb /drivers/hid
parenta7c2b7ea82ea934d9bf7045f1c5623dadba7e444 (diff)
parent3d422a4668ef0c5e30f616e9a9b4c7ac3adaade1 (diff)
Merge branch 'for-5.16/wacom' into for-linus
- improvement of device management handling (Cai Huoqing, Jason Gerecke)
Diffstat (limited to 'drivers/hid')
-rw-r--r--drivers/hid/wacom_sys.c15
1 files changed, 6 insertions, 9 deletions
diff --git a/drivers/hid/wacom_sys.c b/drivers/hid/wacom_sys.c
index 93f49b766376..2717d39600b4 100644
--- a/drivers/hid/wacom_sys.c
+++ b/drivers/hid/wacom_sys.c
@@ -881,8 +881,8 @@ static int wacom_add_shared_data(struct hid_device *hdev)
if (!data) {
data = kzalloc(sizeof(struct wacom_hdev_data), GFP_KERNEL);
if (!data) {
- retval = -ENOMEM;
- goto out;
+ mutex_unlock(&wacom_udev_list_lock);
+ return -ENOMEM;
}
kref_init(&data->kref);
@@ -890,22 +890,19 @@ static int wacom_add_shared_data(struct hid_device *hdev)
list_add_tail(&data->list, &wacom_udev_list);
}
+ mutex_unlock(&wacom_udev_list_lock);
+
wacom_wac->shared = &data->shared;
- retval = devm_add_action(&hdev->dev, wacom_remove_shared_data, wacom);
- if (retval) {
- mutex_unlock(&wacom_udev_list_lock);
- wacom_remove_shared_data(wacom);
+ retval = devm_add_action_or_reset(&hdev->dev, wacom_remove_shared_data, wacom);
+ if (retval)
return retval;
- }
if (wacom_wac->features.device_type & WACOM_DEVICETYPE_TOUCH)
wacom_wac->shared->touch = hdev;
else if (wacom_wac->features.device_type & WACOM_DEVICETYPE_PEN)
wacom_wac->shared->pen = hdev;
-out:
- mutex_unlock(&wacom_udev_list_lock);
return retval;
}