ALSA: seq: memory: 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: Takashi Iwai <tiwai@suse.de> Link: https://lore.kernel.org/r/20240227085306.9764-14-tiwai@suse.de
This commit is contained in:
parent
68f014a58b
commit
6768bd1000
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue