ALSA: hrtimer: Use guard() for locking
authorTakashi Iwai <tiwai@suse.de>
Tue, 27 Feb 2024 08:52:46 +0000 (09:52 +0100)
committerTakashi Iwai <tiwai@suse.de>
Wed, 28 Feb 2024 14:01:20 +0000 (15:01 +0100)
We can simplify the code gracefully with new guard() macro and co for
automatic cleanup of locks.

Only the code refactoring, and no functional changes.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Link: https://lore.kernel.org/r/20240227085306.9764-5-tiwai@suse.de
sound/core/hrtimer.c

index e97ff8cccb643359cae97162040f516a7b0c43b1..147c1fea4708efe3bb3d1f7faed8923633f49e9c 100644 (file)
@@ -35,12 +35,12 @@ static enum hrtimer_restart snd_hrtimer_callback(struct hrtimer *hrt)
        unsigned long ticks;
        enum hrtimer_restart ret = HRTIMER_NORESTART;
 
-       spin_lock(&t->lock);
-       if (!t->running)
-               goto out; /* fast path */
-       stime->in_callback = true;
-       ticks = t->sticks;
-       spin_unlock(&t->lock);
+       scoped_guard(spinlock, &t->lock) {
+               if (!t->running)
+                       return HRTIMER_NORESTART; /* fast path */
+               stime->in_callback = true;
+               ticks = t->sticks;
+       }
 
        /* calculate the drift */
        delta = ktime_sub(hrt->base->get_time(), hrtimer_get_expires(hrt));
@@ -49,15 +49,13 @@ static enum hrtimer_restart snd_hrtimer_callback(struct hrtimer *hrt)
 
        snd_timer_interrupt(stime->timer, ticks);
 
-       spin_lock(&t->lock);
+       guard(spinlock)(&t->lock);
        if (t->running) {
                hrtimer_add_expires_ns(hrt, t->sticks * resolution);
                ret = HRTIMER_RESTART;
        }
 
        stime->in_callback = false;
- out:
-       spin_unlock(&t->lock);
        return ret;
 }
 
@@ -80,10 +78,10 @@ static int snd_hrtimer_close(struct snd_timer *t)
        struct snd_hrtimer *stime = t->private_data;
 
        if (stime) {
-               spin_lock_irq(&t->lock);
-               t->running = 0; /* just to be sure */
-               stime->in_callback = 1; /* skip start/stop */
-               spin_unlock_irq(&t->lock);
+               scoped_guard(spinlock_irq, &t->lock) {
+                       t->running = 0; /* just to be sure */
+                       stime->in_callback = 1; /* skip start/stop */
+               }
 
                hrtimer_cancel(&stime->hrt);
                kfree(stime);