Merge tag 'printk-for-5.16-fixup' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-microblaze.git] / sound / core / timer.c
index 92b7008..b3214ba 100644 (file)
@@ -624,13 +624,13 @@ static int snd_timer_stop1(struct snd_timer_instance *timeri, bool stop)
        if (!timer)
                return -EINVAL;
        spin_lock_irqsave(&timer->lock, flags);
+       list_del_init(&timeri->ack_list);
+       list_del_init(&timeri->active_list);
        if (!(timeri->flags & (SNDRV_TIMER_IFLG_RUNNING |
                               SNDRV_TIMER_IFLG_START))) {
                result = -EBUSY;
                goto unlock;
        }
-       list_del_init(&timeri->ack_list);
-       list_del_init(&timeri->active_list);
        if (timer->card && timer->card->shutdown)
                goto unlock;
        if (stop) {
@@ -665,23 +665,22 @@ static int snd_timer_stop1(struct snd_timer_instance *timeri, bool stop)
 static int snd_timer_stop_slave(struct snd_timer_instance *timeri, bool stop)
 {
        unsigned long flags;
+       bool running;
 
        spin_lock_irqsave(&slave_active_lock, flags);
-       if (!(timeri->flags & SNDRV_TIMER_IFLG_RUNNING)) {
-               spin_unlock_irqrestore(&slave_active_lock, flags);
-               return -EBUSY;
-       }
+       running = timeri->flags & SNDRV_TIMER_IFLG_RUNNING;
        timeri->flags &= ~SNDRV_TIMER_IFLG_RUNNING;
        if (timeri->timer) {
                spin_lock(&timeri->timer->lock);
                list_del_init(&timeri->ack_list);
                list_del_init(&timeri->active_list);
-               snd_timer_notify1(timeri, stop ? SNDRV_TIMER_EVENT_STOP :
-                                 SNDRV_TIMER_EVENT_PAUSE);
+               if (running)
+                       snd_timer_notify1(timeri, stop ? SNDRV_TIMER_EVENT_STOP :
+                                         SNDRV_TIMER_EVENT_PAUSE);
                spin_unlock(&timeri->timer->lock);
        }
        spin_unlock_irqrestore(&slave_active_lock, flags);
-       return 0;
+       return running ? 0 : -EBUSY;
 }
 
 /*