mirror of https://github.com/torvalds/linux.git
ALSA: hda/core: Use guard() for spinlocks
Replace the manual spin lock/unlock pairs with guard() for code simplification. Only code refactoring, and no behavior change. Signed-off-by: Takashi Iwai <tiwai@suse.de> Link: https://patch.msgid.link/20250827072916.31933-24-tiwai@suse.de
This commit is contained in:
parent
3a4a4d06f7
commit
39f374ce54
|
|
@ -44,7 +44,7 @@ void snd_hdac_bus_init_cmd_io(struct hdac_bus *bus)
|
|||
{
|
||||
WARN_ON_ONCE(!bus->rb.area);
|
||||
|
||||
spin_lock_irq(&bus->reg_lock);
|
||||
guard(spinlock_irq)(&bus->reg_lock);
|
||||
/* CORB set up */
|
||||
bus->corb.addr = bus->rb.addr;
|
||||
bus->corb.buf = (__le32 *)bus->rb.area;
|
||||
|
|
@ -86,7 +86,6 @@ void snd_hdac_bus_init_cmd_io(struct hdac_bus *bus)
|
|||
snd_hdac_chip_writeb(bus, RIRBCTL, AZX_RBCTL_DMA_EN | AZX_RBCTL_IRQ_EN);
|
||||
/* Accept unsolicited responses */
|
||||
snd_hdac_chip_updatel(bus, GCTL, AZX_GCTL_UNSOL, AZX_GCTL_UNSOL);
|
||||
spin_unlock_irq(&bus->reg_lock);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(snd_hdac_bus_init_cmd_io);
|
||||
|
||||
|
|
@ -112,18 +111,17 @@ static void hdac_wait_for_cmd_dmas(struct hdac_bus *bus)
|
|||
*/
|
||||
void snd_hdac_bus_stop_cmd_io(struct hdac_bus *bus)
|
||||
{
|
||||
spin_lock_irq(&bus->reg_lock);
|
||||
/* disable ringbuffer DMAs */
|
||||
snd_hdac_chip_writeb(bus, RIRBCTL, 0);
|
||||
snd_hdac_chip_writeb(bus, CORBCTL, 0);
|
||||
spin_unlock_irq(&bus->reg_lock);
|
||||
scoped_guard(spinlock_irq, &bus->reg_lock) {
|
||||
/* disable ringbuffer DMAs */
|
||||
snd_hdac_chip_writeb(bus, RIRBCTL, 0);
|
||||
snd_hdac_chip_writeb(bus, CORBCTL, 0);
|
||||
}
|
||||
|
||||
hdac_wait_for_cmd_dmas(bus);
|
||||
|
||||
spin_lock_irq(&bus->reg_lock);
|
||||
guard(spinlock_irq)(&bus->reg_lock);
|
||||
/* disable unsolicited responses */
|
||||
snd_hdac_chip_updatel(bus, GCTL, AZX_GCTL_UNSOL, 0);
|
||||
spin_unlock_irq(&bus->reg_lock);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(snd_hdac_bus_stop_cmd_io);
|
||||
|
||||
|
|
@ -171,9 +169,8 @@ static int snd_hdac_bus_send_cmd_pio(struct hdac_bus *bus, unsigned int val)
|
|||
{
|
||||
unsigned int addr = azx_command_addr(val);
|
||||
int timeout = 50;
|
||||
int ret = -EIO;
|
||||
|
||||
spin_lock_irq(&bus->reg_lock);
|
||||
guard(spinlock_irq)(&bus->reg_lock);
|
||||
|
||||
while (timeout--) {
|
||||
/* check ICB bit */
|
||||
|
|
@ -184,8 +181,7 @@ static int snd_hdac_bus_send_cmd_pio(struct hdac_bus *bus, unsigned int val)
|
|||
/* Set ICB bit */
|
||||
snd_hdac_chip_updatew(bus, IRS, AZX_IRS_BUSY, AZX_IRS_BUSY);
|
||||
|
||||
ret = snd_hdac_bus_wait_for_pio_response(bus, addr);
|
||||
goto out;
|
||||
return snd_hdac_bus_wait_for_pio_response(bus, addr);
|
||||
}
|
||||
udelay(1);
|
||||
}
|
||||
|
|
@ -193,10 +189,7 @@ static int snd_hdac_bus_send_cmd_pio(struct hdac_bus *bus, unsigned int val)
|
|||
dev_dbg_ratelimited(bus->dev, "send_cmd_pio timeout: IRS=%#x, val=%#x\n",
|
||||
snd_hdac_chip_readw(bus, IRS), val);
|
||||
|
||||
out:
|
||||
spin_unlock_irq(&bus->reg_lock);
|
||||
|
||||
return ret;
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -228,7 +221,7 @@ static int snd_hdac_bus_send_cmd_corb(struct hdac_bus *bus, unsigned int val)
|
|||
unsigned int addr = azx_command_addr(val);
|
||||
unsigned int wp, rp;
|
||||
|
||||
spin_lock_irq(&bus->reg_lock);
|
||||
guard(spinlock_irq)(&bus->reg_lock);
|
||||
|
||||
bus->last_cmd[azx_command_addr(val)] = val;
|
||||
|
||||
|
|
@ -236,7 +229,6 @@ static int snd_hdac_bus_send_cmd_corb(struct hdac_bus *bus, unsigned int val)
|
|||
wp = snd_hdac_chip_readw(bus, CORBWP);
|
||||
if (wp == 0xffff) {
|
||||
/* something wrong, controller likely turned to D3 */
|
||||
spin_unlock_irq(&bus->reg_lock);
|
||||
return -EIO;
|
||||
}
|
||||
wp++;
|
||||
|
|
@ -245,7 +237,6 @@ static int snd_hdac_bus_send_cmd_corb(struct hdac_bus *bus, unsigned int val)
|
|||
rp = snd_hdac_chip_readw(bus, CORBRP);
|
||||
if (wp == rp) {
|
||||
/* oops, it's full */
|
||||
spin_unlock_irq(&bus->reg_lock);
|
||||
return -EAGAIN;
|
||||
}
|
||||
|
||||
|
|
@ -253,8 +244,6 @@ static int snd_hdac_bus_send_cmd_corb(struct hdac_bus *bus, unsigned int val)
|
|||
bus->corb.buf[wp] = cpu_to_le32(val);
|
||||
snd_hdac_chip_writew(bus, CORBWP, wp);
|
||||
|
||||
spin_unlock_irq(&bus->reg_lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -333,21 +322,20 @@ static int snd_hdac_bus_get_response_rirb(struct hdac_bus *bus,
|
|||
timeout = jiffies + msecs_to_jiffies(1000);
|
||||
|
||||
for (loopcounter = 0;; loopcounter++) {
|
||||
spin_lock_irq(&bus->reg_lock);
|
||||
if (!bus->polling_mode)
|
||||
prepare_to_wait(&bus->rirb_wq, &wait,
|
||||
TASK_UNINTERRUPTIBLE);
|
||||
if (bus->polling_mode)
|
||||
snd_hdac_bus_update_rirb(bus);
|
||||
if (!bus->rirb.cmds[addr]) {
|
||||
if (res)
|
||||
*res = bus->rirb.res[addr]; /* the last value */
|
||||
scoped_guard(spinlock_irq, &bus->reg_lock) {
|
||||
if (!bus->polling_mode)
|
||||
finish_wait(&bus->rirb_wq, &wait);
|
||||
spin_unlock_irq(&bus->reg_lock);
|
||||
return 0;
|
||||
prepare_to_wait(&bus->rirb_wq, &wait,
|
||||
TASK_UNINTERRUPTIBLE);
|
||||
if (bus->polling_mode)
|
||||
snd_hdac_bus_update_rirb(bus);
|
||||
if (!bus->rirb.cmds[addr]) {
|
||||
if (res)
|
||||
*res = bus->rirb.res[addr]; /* the last value */
|
||||
if (!bus->polling_mode)
|
||||
finish_wait(&bus->rirb_wq, &wait);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
spin_unlock_irq(&bus->reg_lock);
|
||||
if (time_after(jiffies, timeout))
|
||||
break;
|
||||
#define LOOP_COUNT_MAX 3000
|
||||
|
|
|
|||
|
|
@ -370,7 +370,7 @@ struct hdac_stream *snd_hdac_stream_assign(struct hdac_bus *bus,
|
|||
if (substream->pcm)
|
||||
key |= (substream->pcm->device << 16);
|
||||
|
||||
spin_lock_irq(&bus->reg_lock);
|
||||
guard(spinlock_irq)(&bus->reg_lock);
|
||||
list_for_each_entry(azx_dev, &bus->stream_list, list) {
|
||||
if (azx_dev->direction != substream->stream)
|
||||
continue;
|
||||
|
|
@ -389,7 +389,6 @@ struct hdac_stream *snd_hdac_stream_assign(struct hdac_bus *bus,
|
|||
res->assigned_key = key;
|
||||
res->substream = substream;
|
||||
}
|
||||
spin_unlock_irq(&bus->reg_lock);
|
||||
return res;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(snd_hdac_stream_assign);
|
||||
|
|
@ -419,9 +418,8 @@ void snd_hdac_stream_release(struct hdac_stream *azx_dev)
|
|||
{
|
||||
struct hdac_bus *bus = azx_dev->bus;
|
||||
|
||||
spin_lock_irq(&bus->reg_lock);
|
||||
guard(spinlock_irq)(&bus->reg_lock);
|
||||
snd_hdac_stream_release_locked(azx_dev);
|
||||
spin_unlock_irq(&bus->reg_lock);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(snd_hdac_stream_release);
|
||||
|
||||
|
|
@ -923,13 +921,11 @@ int snd_hdac_dsp_prepare(struct hdac_stream *azx_dev, unsigned int format,
|
|||
int err;
|
||||
|
||||
guard(snd_hdac_dsp_lock)(azx_dev);
|
||||
spin_lock_irq(&bus->reg_lock);
|
||||
if (azx_dev->running || azx_dev->locked) {
|
||||
spin_unlock_irq(&bus->reg_lock);
|
||||
return -EBUSY;
|
||||
scoped_guard(spinlock_irq, &bus->reg_lock) {
|
||||
if (azx_dev->running || azx_dev->locked)
|
||||
return -EBUSY;
|
||||
azx_dev->locked = true;
|
||||
}
|
||||
azx_dev->locked = true;
|
||||
spin_unlock_irq(&bus->reg_lock);
|
||||
|
||||
err = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV_SG, bus->dev,
|
||||
byte_size, bufp);
|
||||
|
|
@ -955,9 +951,9 @@ int snd_hdac_dsp_prepare(struct hdac_stream *azx_dev, unsigned int format,
|
|||
error:
|
||||
snd_dma_free_pages(bufp);
|
||||
err_alloc:
|
||||
spin_lock_irq(&bus->reg_lock);
|
||||
azx_dev->locked = false;
|
||||
spin_unlock_irq(&bus->reg_lock);
|
||||
scoped_guard(spinlock_irq, &bus->reg_lock) {
|
||||
azx_dev->locked = false;
|
||||
}
|
||||
return err;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(snd_hdac_dsp_prepare);
|
||||
|
|
@ -1001,9 +997,8 @@ void snd_hdac_dsp_cleanup(struct hdac_stream *azx_dev,
|
|||
snd_dma_free_pages(dmab);
|
||||
dmab->area = NULL;
|
||||
|
||||
spin_lock_irq(&bus->reg_lock);
|
||||
guard(spinlock_irq)(&bus->reg_lock);
|
||||
azx_dev->locked = false;
|
||||
spin_unlock_irq(&bus->reg_lock);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(snd_hdac_dsp_cleanup);
|
||||
#endif /* CONFIG_SND_HDA_DSP_LOADER */
|
||||
|
|
|
|||
Loading…
Reference in New Issue