Input: ipaq-micro-keys - use guard notation when acquiring mutex and spinlock
authorDmitry Torokhov <dmitry.torokhov@gmail.com>
Sun, 25 Aug 2024 05:16:11 +0000 (22:16 -0700)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Thu, 3 Oct 2024 15:53:14 +0000 (08:53 -0700)
This makes the code more compact and error handling more robust
by ensuring that locks are released in all code paths when control
leaves critical section.

Link: https://lore.kernel.org/r/20240825051627.2848495-8-dmitry.torokhov@gmail.com
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
drivers/input/keyboard/ipaq-micro-keys.c

index 1d71dd7..58631bf 100644 (file)
@@ -54,18 +54,18 @@ static void micro_key_receive(void *data, int len, unsigned char *msg)
 
 static void micro_key_start(struct ipaq_micro_keys *keys)
 {
-       spin_lock(&keys->micro->lock);
+       guard(spinlock)(&keys->micro->lock);
+
        keys->micro->key = micro_key_receive;
        keys->micro->key_data = keys;
-       spin_unlock(&keys->micro->lock);
 }
 
 static void micro_key_stop(struct ipaq_micro_keys *keys)
 {
-       spin_lock(&keys->micro->lock);
+       guard(spinlock)(&keys->micro->lock);
+
        keys->micro->key = NULL;
        keys->micro->key_data = NULL;
-       spin_unlock(&keys->micro->lock);
 }
 
 static int micro_key_open(struct input_dev *input)
@@ -141,13 +141,11 @@ static int micro_key_resume(struct device *dev)
        struct ipaq_micro_keys *keys = dev_get_drvdata(dev);
        struct input_dev *input = keys->input;
 
-       mutex_lock(&input->mutex);
+       guard(mutex)(&input->mutex);
 
        if (input_device_enabled(input))
                micro_key_start(keys);
 
-       mutex_unlock(&input->mutex);
-
        return 0;
 }