]> www.infradead.org Git - users/hch/misc.git/commitdiff
ALSA: hda/core: Use guard() for spinlocks
authorTakashi Iwai <tiwai@suse.de>
Wed, 27 Aug 2025 07:29:03 +0000 (09:29 +0200)
committerTakashi Iwai <tiwai@suse.de>
Fri, 29 Aug 2025 09:52:15 +0000 (11:52 +0200)
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
sound/hda/core/controller.c
sound/hda/core/stream.c

index b5c833b9f8b9cad5bab898b4ec9d1cafb598e013..a7c00ad801170c673518cc9bc311a755a6eee159 100644 (file)
@@ -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
index 0caeebcc591a0a4b03397f20565ac602850bb811..579ec544ef4a48c96268f4324aff4441417a5903 100644 (file)
@@ -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 */