Commit b0489269 authored by Takashi Iwai's avatar Takashi Iwai
Browse files

ALSA: hrtimer: Use guard() for locking



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: default avatarTakashi Iwai <tiwai@suse.de>
Link: https://lore.kernel.org/r/20240227085306.9764-5-tiwai@suse.de
parent beb45974
Loading
Loading
Loading
Loading
+11 −13
Original line number Diff line number Diff line
@@ -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);
	scoped_guard(spinlock, &t->lock) {
		if (!t->running)
		goto out; /* fast path */
			return HRTIMER_NORESTART; /* fast path */
		stime->in_callback = true;
		ticks = t->sticks;
	spin_unlock(&t->lock);
	}

	/* 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);
		scoped_guard(spinlock_irq, &t->lock) {
			t->running = 0; /* just to be sure */
			stime->in_callback = 1; /* skip start/stop */
		spin_unlock_irq(&t->lock);
		}

		hrtimer_cancel(&stime->hrt);
		kfree(stime);