]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
ALSA: seq: Align temporary re-locking with irqsave version
authorTakashi Iwai <tiwai@suse.de>
Thu, 28 Mar 2019 14:55:08 +0000 (15:55 +0100)
committerTakashi Iwai <tiwai@suse.de>
Tue, 9 Apr 2019 15:22:46 +0000 (17:22 +0200)
In a few places in sequencer core, we temporarily unlock / re-lock the
pool spin lock while waiting for the allocation in the blocking mode.
There spin_unlock_irq() / spin_lock_irq() pairs are called while
initially spin_lock_irqsave() is used (and spin_lock_irqrestore() at
the end of the function again).  This is likely OK for now, but it's a
bit confusing and error-prone.

This patch replaces these temporary relocking lines with the irqsave
variant to make the lock/unlock sequence more consistently.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/core/seq/seq_fifo.c
sound/core/seq/seq_memory.c

index 72c0302a55d23c05720d6062bef600b40fec6971..613ae10d33b8cffb1e81b70b44316003ac49ae24 100644 (file)
@@ -195,9 +195,9 @@ int snd_seq_fifo_cell_out(struct snd_seq_fifo *f,
                }
                set_current_state(TASK_INTERRUPTIBLE);
                add_wait_queue(&f->input_sleep, &wait);
-               spin_unlock_irq(&f->lock);
+               spin_unlock_irqrestore(&f->lock, flags);
                schedule();
-               spin_lock_irq(&f->lock);
+               spin_lock_irqsave(&f->lock, flags);
                remove_wait_queue(&f->input_sleep, &wait);
                if (signal_pending(current)) {
                        spin_unlock_irqrestore(&f->lock, flags);
index 6ea4d8a5a71e72f65e5e655b9b3eb6fc4988dfe9..ae0b8971f6ce61739ee9394450da4fe42380eff9 100644 (file)
@@ -244,13 +244,13 @@ static int snd_seq_cell_alloc(struct snd_seq_pool *pool,
 
                set_current_state(TASK_INTERRUPTIBLE);
                add_wait_queue(&pool->output_sleep, &wait);
-               spin_unlock_irq(&pool->lock);
+               spin_unlock_irqrestore(&pool->lock, flags);
                if (mutexp)
                        mutex_unlock(mutexp);
                schedule();
                if (mutexp)
                        mutex_lock(mutexp);
-               spin_lock_irq(&pool->lock);
+               spin_lock_irqsave(&pool->lock, flags);
                remove_wait_queue(&pool->output_sleep, &wait);
                /* interrupted? */
                if (signal_pending(current)) {