ALSA: seq: memory: Use guard() for locking
authorTakashi Iwai <tiwai@suse.de>
Tue, 27 Feb 2024 08:52:55 +0000 (09:52 +0100)
committerTakashi Iwai <tiwai@suse.de>
Wed, 28 Feb 2024 14:01:21 +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-14-tiwai@suse.de
sound/core/seq/seq_memory.c

index e705e753811895f2aa4ff45e9bac9c3711bc8ac0..20155e3e87c6ac1d51c2598e8ce979ebe9499e99 100644 (file)
@@ -232,7 +232,6 @@ static inline void free_cell(struct snd_seq_pool *pool,
 
 void snd_seq_cell_free(struct snd_seq_event_cell * cell)
 {
-       unsigned long flags;
        struct snd_seq_pool *pool;
 
        if (snd_BUG_ON(!cell))
@@ -241,7 +240,7 @@ void snd_seq_cell_free(struct snd_seq_event_cell * cell)
        if (snd_BUG_ON(!pool))
                return;
 
-       spin_lock_irqsave(&pool->lock, flags);
+       guard(spinlock_irqsave)(&pool->lock);
        free_cell(pool, cell);
        if (snd_seq_ev_is_variable(&cell->event)) {
                if (cell->event.data.ext.len & SNDRV_SEQ_EXT_CHAINED) {
@@ -259,7 +258,6 @@ void snd_seq_cell_free(struct snd_seq_event_cell * cell)
                if (snd_seq_output_ok(pool))
                        wake_up(&pool->output_sleep);
        }
-       spin_unlock_irqrestore(&pool->lock, flags);
 }
 
 
@@ -449,9 +447,8 @@ int snd_seq_pool_init(struct snd_seq_pool *pool)
                return -ENOMEM;
 
        /* add new cells to the free cell list */
-       spin_lock_irq(&pool->lock);
+       guard(spinlock_irq)(&pool->lock);
        if (pool->ptr) {
-               spin_unlock_irq(&pool->lock);
                kvfree(cellptr);
                return 0;
        }
@@ -470,20 +467,16 @@ int snd_seq_pool_init(struct snd_seq_pool *pool)
        /* init statistics */
        pool->max_used = 0;
        pool->total_elements = pool->size;
-       spin_unlock_irq(&pool->lock);
        return 0;
 }
 
 /* refuse the further insertion to the pool */
 void snd_seq_pool_mark_closing(struct snd_seq_pool *pool)
 {
-       unsigned long flags;
-
        if (snd_BUG_ON(!pool))
                return;
-       spin_lock_irqsave(&pool->lock, flags);
+       guard(spinlock_irqsave)(&pool->lock);
        pool->closing = 1;
-       spin_unlock_irqrestore(&pool->lock, flags);
 }
 
 /* remove events */
@@ -502,18 +495,17 @@ int snd_seq_pool_done(struct snd_seq_pool *pool)
                schedule_timeout_uninterruptible(1);
        
        /* release all resources */
-       spin_lock_irq(&pool->lock);
-       ptr = pool->ptr;
-       pool->ptr = NULL;
-       pool->free = NULL;
-       pool->total_elements = 0;
-       spin_unlock_irq(&pool->lock);
+       scoped_guard(spinlock_irq, &pool->lock) {
+               ptr = pool->ptr;
+               pool->ptr = NULL;
+               pool->free = NULL;
+               pool->total_elements = 0;
+       }
 
        kvfree(ptr);
 
-       spin_lock_irq(&pool->lock);
+       guard(spinlock_irq)(&pool->lock);
        pool->closing = 0;
-       spin_unlock_irq(&pool->lock);
 
        return 0;
 }