Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ALSA: emu10k1: Use guard() for spin locks

Clean up the code using guard() for spin locks.

Merely code refactoring, and no behavior change.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Link: https://patch.msgid.link/20250829144342.4290-29-tiwai@suse.de

+192 -325
+6 -6
sound/pci/emu10k1/emu10k1_main.c
··· 745 745 { 746 746 struct snd_ctl_elem_id id; 747 747 748 - spin_lock_irq(&emu->reg_lock); 749 - // This is the only thing that can actually happen. 750 - emu->emu1010.clock_source = emu->emu1010.clock_fallback; 751 - emu->emu1010.wclock = 1 - emu->emu1010.clock_source; 752 - snd_emu1010_update_clock(emu); 753 - spin_unlock_irq(&emu->reg_lock); 748 + scoped_guard(spinlock_irq, &emu->reg_lock) { 749 + // This is the only thing that can actually happen. 750 + emu->emu1010.clock_source = emu->emu1010.clock_fallback; 751 + emu->emu1010.wclock = 1 - emu->emu1010.clock_source; 752 + snd_emu1010_update_clock(emu); 753 + } 754 754 snd_ctl_build_ioff(&id, emu->ctl_clock_source, 0); 755 755 snd_ctl_notify(emu->card, SNDRV_CTL_EVENT_MASK_VALUE, &id); 756 756 }
+5 -6
sound/pci/emu10k1/emu10k1_synth.c
··· 55 55 return -ENOMEM; 56 56 } 57 57 58 - spin_lock_irq(&hw->voice_lock); 58 + guard(spinlock_irq)(&hw->voice_lock); 59 59 hw->synth = emux; 60 60 hw->get_synth_voice = snd_emu10k1_synth_get_voice; 61 - spin_unlock_irq(&hw->voice_lock); 62 61 63 62 dev->driver_data = emux; 64 63 ··· 76 77 emux = dev->driver_data; 77 78 78 79 hw = emux->hw; 79 - spin_lock_irq(&hw->voice_lock); 80 - hw->synth = NULL; 81 - hw->get_synth_voice = NULL; 82 - spin_unlock_irq(&hw->voice_lock); 80 + scoped_guard(spinlock_irq, &hw->voice_lock) { 81 + hw->synth = NULL; 82 + hw->get_synth_voice = NULL; 83 + } 83 84 84 85 snd_emux_free(emux); 85 86 return 0;
+16 -30
sound/pci/emu10k1/emufx.c
··· 440 440 void *private_data, 441 441 struct snd_emu10k1_fx8010_irq *irq) 442 442 { 443 - unsigned long flags; 444 - 445 443 irq->handler = handler; 446 444 irq->gpr_running = gpr_running; 447 445 irq->private_data = private_data; 448 446 irq->next = NULL; 449 - spin_lock_irqsave(&emu->fx8010.irq_lock, flags); 447 + guard(spinlock_irqsave)(&emu->fx8010.irq_lock); 450 448 if (emu->fx8010.irq_handlers == NULL) { 451 449 emu->fx8010.irq_handlers = irq; 452 450 emu->dsp_interrupt = snd_emu10k1_fx8010_interrupt; ··· 453 455 irq->next = emu->fx8010.irq_handlers; 454 456 emu->fx8010.irq_handlers = irq; 455 457 } 456 - spin_unlock_irqrestore(&emu->fx8010.irq_lock, flags); 457 458 return 0; 458 459 } 459 460 ··· 460 463 struct snd_emu10k1_fx8010_irq *irq) 461 464 { 462 465 struct snd_emu10k1_fx8010_irq *tmp; 463 - unsigned long flags; 464 466 465 - spin_lock_irqsave(&emu->fx8010.irq_lock, flags); 467 + guard(spinlock_irqsave)(&emu->fx8010.irq_lock); 466 468 tmp = emu->fx8010.irq_handlers; 467 469 if (tmp == irq) { 468 470 emu->fx8010.irq_handlers = tmp->next; ··· 475 479 if (tmp) 476 480 tmp->next = tmp->next->next; 477 481 } 478 - spin_unlock_irqrestore(&emu->fx8010.irq_lock, flags); 479 482 return 0; 480 483 } 481 484 ··· 1080 1085 struct snd_emu10k1_fx8010_pcm_rec *ipcm) 1081 1086 { 1082 1087 unsigned int i; 1083 - int err = 0; 1084 1088 struct snd_emu10k1_fx8010_pcm *pcm; 1085 1089 1086 1090 if (ipcm->substream >= EMU10K1_FX8010_PCM_COUNT) ··· 1090 1096 return -EINVAL; 1091 1097 pcm = &emu->fx8010.pcm[ipcm->substream]; 1092 1098 guard(mutex)(&emu->fx8010.lock); 1093 - spin_lock_irq(&emu->reg_lock); 1094 - if (pcm->opened) { 1095 - err = -EBUSY; 1096 - goto __error; 1097 - } 1099 + guard(spinlock_irq)(&emu->reg_lock); 1100 + if (pcm->opened) 1101 + return -EBUSY; 1098 1102 if (ipcm->channels == 0) { /* remove */ 1099 1103 pcm->valid = 0; 1100 1104 } else { 1101 1105 /* FIXME: we need to add universal code to the PCM transfer routine */ 1102 - if (ipcm->channels != 2) { 1103 - err = -EINVAL; 1104 - goto __error; 1105 - } 1106 + if (ipcm->channels != 2) 1107 + return -EINVAL; 1106 1108 pcm->valid = 1; 1107 1109 pcm->opened = 0; 1108 1110 pcm->channels = ipcm->channels; ··· 1113 1123 for (i = 0; i < pcm->channels; i++) 1114 1124 pcm->etram[i] = ipcm->etram[i]; 1115 1125 } 1116 - __error: 1117 - spin_unlock_irq(&emu->reg_lock); 1118 - return err; 1126 + return 0; 1119 1127 } 1120 1128 1121 1129 static int snd_emu10k1_ipcm_peek(struct snd_emu10k1 *emu, 1122 1130 struct snd_emu10k1_fx8010_pcm_rec *ipcm) 1123 1131 { 1124 1132 unsigned int i; 1125 - int err = 0; 1126 1133 struct snd_emu10k1_fx8010_pcm *pcm; 1127 1134 1128 1135 if (ipcm->substream >= EMU10K1_FX8010_PCM_COUNT) ··· 1128 1141 EMU10K1_FX8010_PCM_COUNT); 1129 1142 pcm = &emu->fx8010.pcm[ipcm->substream]; 1130 1143 guard(mutex)(&emu->fx8010.lock); 1131 - spin_lock_irq(&emu->reg_lock); 1144 + guard(spinlock_irq)(&emu->reg_lock); 1132 1145 ipcm->channels = pcm->channels; 1133 1146 ipcm->tram_start = pcm->tram_start; 1134 1147 ipcm->buffer_size = pcm->buffer_size; ··· 1142 1155 ipcm->etram[i] = pcm->etram[i]; 1143 1156 ipcm->res1 = ipcm->res2 = 0; 1144 1157 ipcm->pad = 0; 1145 - spin_unlock_irq(&emu->reg_lock); 1146 - return err; 1158 + return 0; 1147 1159 } 1148 1160 1149 1161 #define SND_EMU10K1_GPR_CONTROLS 44 ··· 2396 2410 } 2397 2411 if ((emu->fx8010.etram_pages.bytes / 2) == size) 2398 2412 return 0; 2399 - spin_lock_irq(&emu->emu_lock); 2400 - outl(HCFG_LOCKTANKCACHE_MASK | inl(emu->port + HCFG), emu->port + HCFG); 2401 - spin_unlock_irq(&emu->emu_lock); 2413 + scoped_guard(spinlock_irq, &emu->emu_lock) { 2414 + outl(HCFG_LOCKTANKCACHE_MASK | inl(emu->port + HCFG), emu->port + HCFG); 2415 + } 2402 2416 snd_emu10k1_ptr_write(emu, TCB, 0, 0); 2403 2417 snd_emu10k1_ptr_write(emu, TCBS, 0, TCBS_BUFFSIZE_16K); 2404 2418 if (emu->fx8010.etram_pages.area != NULL) { ··· 2414 2428 memset(emu->fx8010.etram_pages.area, 0, size * 2); 2415 2429 snd_emu10k1_ptr_write(emu, TCB, 0, emu->fx8010.etram_pages.addr); 2416 2430 snd_emu10k1_ptr_write(emu, TCBS, 0, size_reg); 2417 - spin_lock_irq(&emu->emu_lock); 2418 - outl(inl(emu->port + HCFG) & ~HCFG_LOCKTANKCACHE_MASK, emu->port + HCFG); 2419 - spin_unlock_irq(&emu->emu_lock); 2431 + scoped_guard(spinlock_irq, &emu->emu_lock) { 2432 + outl(inl(emu->port + HCFG) & ~HCFG_LOCKTANKCACHE_MASK, emu->port + HCFG); 2433 + } 2420 2434 } 2421 2435 2422 2436 return 0;
+22 -34
sound/pci/emu10k1/emumixer.c
··· 978 978 const struct snd_emu1010_clock_info *emu_ci = 979 979 &emu1010_clock_info[emu1010_idx(emu)]; 980 980 unsigned int val; 981 - int change = 0; 982 981 983 982 val = ucontrol->value.enumerated.item[0] ; 984 983 if (val >= emu_ci->num) 985 984 return -EINVAL; 986 985 guard(snd_emu1010_fpga_lock)(emu); 987 - spin_lock_irq(&emu->reg_lock); 988 - change = (emu->emu1010.clock_source != val); 989 - if (change) { 986 + scoped_guard(spinlock_irq, &emu->reg_lock) { 987 + if (emu->emu1010.clock_source == val) 988 + return 0; 990 989 emu->emu1010.clock_source = val; 991 990 emu->emu1010.wclock = emu_ci->vals[val]; 992 991 snd_emu1010_update_clock(emu); 993 992 994 993 snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, EMU_MUTE); 995 994 snd_emu1010_fpga_write(emu, EMU_HANA_WCLOCK, emu->emu1010.wclock); 996 - spin_unlock_irq(&emu->reg_lock); 997 - 998 - msleep(10); // Allow DLL to settle 999 - snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, EMU_UNMUTE); 1000 - } else { 1001 - spin_unlock_irq(&emu->reg_lock); 1002 995 } 1003 - return change; 996 + 997 + msleep(10); // Allow DLL to settle 998 + snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, EMU_UNMUTE); 999 + return 1; 1004 1000 } 1005 1001 1006 1002 static const struct snd_kcontrol_new snd_emu1010_clock_source = ··· 1204 1208 change = (emu->i2c_capture_source != source_id); 1205 1209 if (change) { 1206 1210 snd_emu10k1_i2c_write(emu, ADC_MUX, 0); /* Mute input */ 1207 - spin_lock_irq(&emu->emu_lock); 1208 - gpio = inw(emu->port + A_IOCFG); 1209 - if (source_id==0) 1210 - outw(gpio | 0x4, emu->port + A_IOCFG); 1211 - else 1212 - outw(gpio & ~0x4, emu->port + A_IOCFG); 1213 - spin_unlock_irq(&emu->emu_lock); 1211 + scoped_guard(spinlock_irq, &emu->emu_lock) { 1212 + gpio = inw(emu->port + A_IOCFG); 1213 + if (source_id == 0) 1214 + outw(gpio | 0x4, emu->port + A_IOCFG); 1215 + else 1216 + outw(gpio & ~0x4, emu->port + A_IOCFG); 1217 + } 1214 1218 1215 1219 ngain = emu->i2c_capture_volume[source_id][0]; /* Left */ 1216 1220 ogain = emu->i2c_capture_volume[emu->i2c_capture_source][0]; /* Left */ ··· 1371 1375 } 1372 1376 1373 1377 1374 - spin_lock_irq(&emu->reg_lock); 1378 + guard(spinlock_irq)(&emu->reg_lock); 1375 1379 reg = snd_emu10k1_ptr_read(emu, A_SPDIF_SAMPLERATE, 0); 1376 1380 tmp = reg & ~A_SPDIF_RATE_MASK; 1377 1381 tmp |= val; 1378 1382 change = (tmp != reg); 1379 1383 if (change) 1380 1384 snd_emu10k1_ptr_write(emu, A_SPDIF_SAMPLERATE, 0, tmp); 1381 - spin_unlock_irq(&emu->reg_lock); 1382 1385 return change; 1383 1386 } 1384 1387 ··· 1501 1506 int num_efx = emu->audigy ? 8 : 4; 1502 1507 int mask = emu->audigy ? 0x3f : 0x0f; 1503 1508 1504 - spin_lock_irq(&emu->reg_lock); 1509 + guard(spinlock_irq)(&emu->reg_lock); 1505 1510 for (voice = 0; voice < 3; voice++) 1506 1511 for (idx = 0; idx < num_efx; idx++) { 1507 1512 val = ucontrol->value.integer.value[(voice * num_efx) + idx] & mask; ··· 1521 1526 &mix->send_routing[0][0]); 1522 1527 } 1523 1528 } 1524 - spin_unlock_irq(&emu->reg_lock); 1525 1529 return change; 1526 1530 } 1527 1531 ··· 1568 1574 int change = 0, idx, val; 1569 1575 int num_efx = emu->audigy ? 8 : 4; 1570 1576 1571 - spin_lock_irq(&emu->reg_lock); 1577 + guard(spinlock_irq)(&emu->reg_lock); 1572 1578 for (idx = 0; idx < 3*num_efx; idx++) { 1573 1579 val = ucontrol->value.integer.value[idx] & 255; 1574 1580 if (mix->send_volume[idx/num_efx][idx%num_efx] != val) { ··· 1587 1593 &mix->send_volume[0][0]); 1588 1594 } 1589 1595 } 1590 - spin_unlock_irq(&emu->reg_lock); 1591 1596 return change; 1592 1597 } 1593 1598 ··· 1631 1638 &emu->pcm_mixer[snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)]; 1632 1639 int change = 0, idx, val; 1633 1640 1634 - spin_lock_irq(&emu->reg_lock); 1641 + guard(spinlock_irq)(&emu->reg_lock); 1635 1642 for (idx = 0; idx < 3; idx++) { 1636 1643 unsigned uval = ucontrol->value.integer.value[idx] & 0x1ffff; 1637 1644 val = uval * 0x8000U / 0xffffU; ··· 1648 1655 snd_emu10k1_ptr_write(emu, VTFT_VOLUMETARGET, mix->epcm->voices[0]->number, mix->attn[0]); 1649 1656 } 1650 1657 } 1651 - spin_unlock_irq(&emu->reg_lock); 1652 1658 return change; 1653 1659 } 1654 1660 ··· 1700 1708 int num_efx = emu->audigy ? 8 : 4; 1701 1709 int mask = emu->audigy ? 0x3f : 0x0f; 1702 1710 1703 - spin_lock_irq(&emu->reg_lock); 1711 + guard(spinlock_irq)(&emu->reg_lock); 1704 1712 for (idx = 0; idx < num_efx; idx++) { 1705 1713 val = ucontrol->value.integer.value[idx] & mask; 1706 1714 if (mix->send_routing[0][idx] != val) { ··· 1715 1723 &mix->send_routing[0][0]); 1716 1724 } 1717 1725 } 1718 - spin_unlock_irq(&emu->reg_lock); 1719 1726 return change; 1720 1727 } 1721 1728 ··· 1762 1771 int change = 0, idx, val; 1763 1772 int num_efx = emu->audigy ? 8 : 4; 1764 1773 1765 - spin_lock_irq(&emu->reg_lock); 1774 + guard(spinlock_irq)(&emu->reg_lock); 1766 1775 for (idx = 0; idx < num_efx; idx++) { 1767 1776 val = ucontrol->value.integer.value[idx] & 255; 1768 1777 if (mix->send_volume[0][idx] != val) { ··· 1776 1785 &mix->send_volume[0][0]); 1777 1786 } 1778 1787 } 1779 - spin_unlock_irq(&emu->reg_lock); 1780 1788 return change; 1781 1789 } 1782 1790 ··· 1820 1830 int change = 0, val; 1821 1831 unsigned uval; 1822 1832 1823 - spin_lock_irq(&emu->reg_lock); 1833 + guard(spinlock_irq)(&emu->reg_lock); 1824 1834 uval = ucontrol->value.integer.value[0] & 0x1ffff; 1825 1835 val = uval * 0x8000U / 0xffffU; 1826 1836 if (mix->attn[0] != val) { ··· 1832 1842 snd_emu10k1_ptr_write(emu, VTFT_VOLUMETARGET, mix->epcm->voices[ch]->number, mix->attn[0]); 1833 1843 } 1834 1844 } 1835 - spin_unlock_irq(&emu->reg_lock); 1836 1845 return change; 1837 1846 } 1838 1847 ··· 1874 1885 sw = ucontrol->value.integer.value[0]; 1875 1886 if (emu->card_capabilities->invert_shared_spdif) 1876 1887 sw = !sw; 1877 - spin_lock_irq(&emu->emu_lock); 1888 + guard(spinlock_irq)(&emu->emu_lock); 1878 1889 if ( emu->card_capabilities->i2c_adc) { 1879 1890 /* Do nothing for Audigy 2 ZS Notebook */ 1880 1891 } else if (emu->audigy) { ··· 1895 1906 reg |= val; 1896 1907 outl(reg | val, emu->port + HCFG); 1897 1908 } 1898 - spin_unlock_irq(&emu->emu_lock); 1899 1909 return change; 1900 1910 } 1901 1911
+77 -96
sound/pci/emu10k1/emumpu401.c
··· 68 68 return; 69 69 } 70 70 71 - spin_lock(&midi->input_lock); 72 - if ((status & midi->ipr_rx) && mpu401_input_avail(emu, midi)) { 73 - if (!(midi->midi_mode & EMU10K1_MIDI_MODE_INPUT)) { 74 - mpu401_clear_rx(emu, midi); 75 - } else { 76 - byte = mpu401_read_data(emu, midi); 77 - if (midi->substream_input) 78 - snd_rawmidi_receive(midi->substream_input, &byte, 1); 71 + scoped_guard(spinlock, &midi->input_lock) { 72 + if ((status & midi->ipr_rx) && mpu401_input_avail(emu, midi)) { 73 + if (!(midi->midi_mode & EMU10K1_MIDI_MODE_INPUT)) { 74 + mpu401_clear_rx(emu, midi); 75 + } else { 76 + byte = mpu401_read_data(emu, midi); 77 + if (midi->substream_input) 78 + snd_rawmidi_receive(midi->substream_input, &byte, 1); 79 + } 79 80 } 80 81 } 81 - spin_unlock(&midi->input_lock); 82 82 83 - spin_lock(&midi->output_lock); 84 - if ((status & midi->ipr_tx) && mpu401_output_ready(emu, midi)) { 85 - if (midi->substream_output && 86 - snd_rawmidi_transmit(midi->substream_output, &byte, 1) == 1) { 87 - mpu401_write_data(emu, midi, byte); 88 - } else { 89 - snd_emu10k1_intr_disable(emu, midi->tx_enable); 83 + scoped_guard(spinlock, &midi->output_lock) { 84 + if ((status & midi->ipr_tx) && mpu401_output_ready(emu, midi)) { 85 + if (midi->substream_output && 86 + snd_rawmidi_transmit(midi->substream_output, &byte, 1) == 1) { 87 + mpu401_write_data(emu, midi, byte); 88 + } else { 89 + snd_emu10k1_intr_disable(emu, midi->tx_enable); 90 + } 90 91 } 91 92 } 92 - spin_unlock(&midi->output_lock); 93 93 } 94 94 95 95 static void snd_emu10k1_midi_interrupt(struct snd_emu10k1 *emu, unsigned int status) ··· 106 106 { 107 107 int timeout, ok; 108 108 109 - spin_lock_irq(&midi->input_lock); 110 - mpu401_write_data(emu, midi, 0x00); 111 - /* mpu401_clear_rx(emu, midi); */ 109 + scoped_guard(spinlock_irq, &midi->input_lock) { 110 + mpu401_write_data(emu, midi, 0x00); 111 + /* mpu401_clear_rx(emu, midi); */ 112 112 113 - mpu401_write_cmd(emu, midi, cmd); 114 - if (ack) { 115 - ok = 0; 116 - timeout = 10000; 117 - while (!ok && timeout-- > 0) { 118 - if (mpu401_input_avail(emu, midi)) { 119 - if (mpu401_read_data(emu, midi) == MPU401_ACK) 120 - ok = 1; 113 + mpu401_write_cmd(emu, midi, cmd); 114 + if (ack) { 115 + ok = 0; 116 + timeout = 10000; 117 + while (!ok && timeout-- > 0) { 118 + if (mpu401_input_avail(emu, midi)) { 119 + if (mpu401_read_data(emu, midi) == MPU401_ACK) 120 + ok = 1; 121 + } 121 122 } 122 - } 123 - if (!ok && mpu401_read_data(emu, midi) == MPU401_ACK) 123 + if (!ok && mpu401_read_data(emu, midi) == MPU401_ACK) 124 + ok = 1; 125 + } else { 124 126 ok = 1; 125 - } else { 126 - ok = 1; 127 + } 127 128 } 128 - spin_unlock_irq(&midi->input_lock); 129 129 if (!ok) { 130 130 dev_err(emu->card->dev, 131 131 "midi_cmd: 0x%x failed at 0x%lx (status = 0x%x, data = 0x%x)!!!\n", ··· 145 145 emu = midi->emu; 146 146 if (snd_BUG_ON(!emu)) 147 147 return -ENXIO; 148 - spin_lock_irq(&midi->open_lock); 149 - midi->midi_mode |= EMU10K1_MIDI_MODE_INPUT; 150 - midi->substream_input = substream; 151 - if (!(midi->midi_mode & EMU10K1_MIDI_MODE_OUTPUT)) { 152 - spin_unlock_irq(&midi->open_lock); 153 - if (snd_emu10k1_midi_cmd(emu, midi, MPU401_RESET, 1)) 154 - goto error_out; 155 - if (snd_emu10k1_midi_cmd(emu, midi, MPU401_ENTER_UART, 1)) 156 - goto error_out; 157 - } else { 158 - spin_unlock_irq(&midi->open_lock); 148 + scoped_guard(spinlock_irq, &midi->open_lock) { 149 + midi->midi_mode |= EMU10K1_MIDI_MODE_INPUT; 150 + midi->substream_input = substream; 151 + if (midi->midi_mode & EMU10K1_MIDI_MODE_OUTPUT) 152 + return 0; 159 153 } 154 + if (snd_emu10k1_midi_cmd(emu, midi, MPU401_RESET, 1)) 155 + return -EIO; 156 + if (snd_emu10k1_midi_cmd(emu, midi, MPU401_ENTER_UART, 1)) 157 + return -EIO; 160 158 return 0; 161 - 162 - error_out: 163 - return -EIO; 164 159 } 165 160 166 161 static int snd_emu10k1_midi_output_open(struct snd_rawmidi_substream *substream) ··· 166 171 emu = midi->emu; 167 172 if (snd_BUG_ON(!emu)) 168 173 return -ENXIO; 169 - spin_lock_irq(&midi->open_lock); 170 - midi->midi_mode |= EMU10K1_MIDI_MODE_OUTPUT; 171 - midi->substream_output = substream; 172 - if (!(midi->midi_mode & EMU10K1_MIDI_MODE_INPUT)) { 173 - spin_unlock_irq(&midi->open_lock); 174 - if (snd_emu10k1_midi_cmd(emu, midi, MPU401_RESET, 1)) 175 - goto error_out; 176 - if (snd_emu10k1_midi_cmd(emu, midi, MPU401_ENTER_UART, 1)) 177 - goto error_out; 178 - } else { 179 - spin_unlock_irq(&midi->open_lock); 174 + scoped_guard(spinlock_irq, &midi->open_lock) { 175 + midi->midi_mode |= EMU10K1_MIDI_MODE_OUTPUT; 176 + midi->substream_output = substream; 177 + if (midi->midi_mode & EMU10K1_MIDI_MODE_INPUT) 178 + return 0; 180 179 } 180 + if (snd_emu10k1_midi_cmd(emu, midi, MPU401_RESET, 1)) 181 + return -EIO; 182 + if (snd_emu10k1_midi_cmd(emu, midi, MPU401_ENTER_UART, 1)) 183 + return -EIO; 181 184 return 0; 182 - 183 - error_out: 184 - return -EIO; 185 185 } 186 186 187 187 static int snd_emu10k1_midi_input_close(struct snd_rawmidi_substream *substream) 188 188 { 189 189 struct snd_emu10k1 *emu; 190 190 struct snd_emu10k1_midi *midi = (struct snd_emu10k1_midi *)substream->rmidi->private_data; 191 - int err = 0; 192 191 193 192 emu = midi->emu; 194 193 if (snd_BUG_ON(!emu)) 195 194 return -ENXIO; 196 - spin_lock_irq(&midi->open_lock); 197 - snd_emu10k1_intr_disable(emu, midi->rx_enable); 198 - midi->midi_mode &= ~EMU10K1_MIDI_MODE_INPUT; 199 - midi->substream_input = NULL; 200 - if (!(midi->midi_mode & EMU10K1_MIDI_MODE_OUTPUT)) { 201 - spin_unlock_irq(&midi->open_lock); 202 - err = snd_emu10k1_midi_cmd(emu, midi, MPU401_RESET, 0); 203 - } else { 204 - spin_unlock_irq(&midi->open_lock); 195 + scoped_guard(spinlock_irq, &midi->open_lock) { 196 + snd_emu10k1_intr_disable(emu, midi->rx_enable); 197 + midi->midi_mode &= ~EMU10K1_MIDI_MODE_INPUT; 198 + midi->substream_input = NULL; 199 + if (midi->midi_mode & EMU10K1_MIDI_MODE_OUTPUT) 200 + return 0; 205 201 } 206 - return err; 202 + return snd_emu10k1_midi_cmd(emu, midi, MPU401_RESET, 0); 207 203 } 208 204 209 205 static int snd_emu10k1_midi_output_close(struct snd_rawmidi_substream *substream) 210 206 { 211 207 struct snd_emu10k1 *emu; 212 208 struct snd_emu10k1_midi *midi = (struct snd_emu10k1_midi *)substream->rmidi->private_data; 213 - int err = 0; 214 209 215 210 emu = midi->emu; 216 211 if (snd_BUG_ON(!emu)) 217 212 return -ENXIO; 218 - spin_lock_irq(&midi->open_lock); 219 - snd_emu10k1_intr_disable(emu, midi->tx_enable); 220 - midi->midi_mode &= ~EMU10K1_MIDI_MODE_OUTPUT; 221 - midi->substream_output = NULL; 222 - if (!(midi->midi_mode & EMU10K1_MIDI_MODE_INPUT)) { 223 - spin_unlock_irq(&midi->open_lock); 224 - err = snd_emu10k1_midi_cmd(emu, midi, MPU401_RESET, 0); 225 - } else { 226 - spin_unlock_irq(&midi->open_lock); 213 + scoped_guard(spinlock_irq, &midi->open_lock) { 214 + snd_emu10k1_intr_disable(emu, midi->tx_enable); 215 + midi->midi_mode &= ~EMU10K1_MIDI_MODE_OUTPUT; 216 + midi->substream_output = NULL; 217 + if (midi->midi_mode & EMU10K1_MIDI_MODE_INPUT) 218 + return 0; 227 219 } 228 - return err; 220 + return snd_emu10k1_midi_cmd(emu, midi, MPU401_RESET, 0); 229 221 } 230 222 231 223 static void snd_emu10k1_midi_input_trigger(struct snd_rawmidi_substream *substream, int up) ··· 243 261 unsigned char byte; 244 262 245 263 /* try to send some amount of bytes here before interrupts */ 246 - spin_lock_irq(&midi->output_lock); 247 - while (max > 0) { 248 - if (mpu401_output_ready(emu, midi)) { 249 - if (!(midi->midi_mode & EMU10K1_MIDI_MODE_OUTPUT) || 250 - snd_rawmidi_transmit(substream, &byte, 1) != 1) { 251 - /* no more data */ 252 - spin_unlock_irq(&midi->output_lock); 253 - return; 264 + scoped_guard(spinlock_irq, &midi->output_lock) { 265 + while (max > 0) { 266 + if (mpu401_output_ready(emu, midi)) { 267 + if (!(midi->midi_mode & EMU10K1_MIDI_MODE_OUTPUT) || 268 + snd_rawmidi_transmit(substream, &byte, 1) != 1) { 269 + /* no more data */ 270 + return; 271 + } 272 + mpu401_write_data(emu, midi, byte); 273 + max--; 274 + } else { 275 + break; 254 276 } 255 - mpu401_write_data(emu, midi, byte); 256 - max--; 257 - } else { 258 - break; 259 277 } 260 278 } 261 - spin_unlock_irq(&midi->output_lock); 262 279 snd_emu10k1_intr_enable(emu, midi->tx_enable); 263 280 } else { 264 281 snd_emu10k1_intr_disable(emu, midi->tx_enable);
+20 -38
sound/pci/emu10k1/emupcm.c
··· 319 319 unsigned int end_addr, 320 320 struct snd_emu10k1_pcm_mixer *mix) 321 321 { 322 - spin_lock_irq(&emu->reg_lock); 322 + guard(spinlock_irq)(&emu->reg_lock); 323 323 snd_emu10k1_pcm_init_voice(emu, evoice, w_16, stereo, 324 324 start_addr, end_addr, 325 325 &mix->send_routing[stereo][0], ··· 329 329 start_addr, end_addr, 330 330 &mix->send_routing[2][0], 331 331 &mix->send_volume[2][0]); 332 - spin_unlock_irq(&emu->reg_lock); 333 332 } 334 333 335 334 static void snd_emu10k1_pcm_init_extra_voice(struct snd_emu10k1 *emu, ··· 725 726 struct snd_emu10k1_pcm_mixer *mix; 726 727 bool w_16 = snd_pcm_format_width(runtime->format) == 16; 727 728 bool stereo = runtime->channels == 2; 728 - int result = 0; 729 729 730 730 /* 731 731 dev_dbg(emu->card->dev, 732 732 "trigger - emu10k1 = 0x%x, cmd = %i, pointer = %i\n", 733 733 (int)emu, cmd, substream->ops->pointer(substream)) 734 734 */ 735 - spin_lock(&emu->reg_lock); 735 + guard(spinlock)(&emu->reg_lock); 736 736 switch (cmd) { 737 737 case SNDRV_PCM_TRIGGER_START: 738 738 snd_emu10k1_playback_prepare_voices(emu, epcm, w_16, stereo, 1); ··· 753 755 snd_emu10k1_playback_mute_voices(emu, epcm->voices[0], stereo); 754 756 break; 755 757 default: 756 - result = -EINVAL; 757 - break; 758 + return -EINVAL; 758 759 } 759 - spin_unlock(&emu->reg_lock); 760 - return result; 760 + return 0; 761 761 } 762 762 763 763 static int snd_emu10k1_capture_trigger(struct snd_pcm_substream *substream, ··· 764 768 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream); 765 769 struct snd_pcm_runtime *runtime = substream->runtime; 766 770 struct snd_emu10k1_pcm *epcm = runtime->private_data; 767 - int result = 0; 768 771 769 - spin_lock(&emu->reg_lock); 772 + guard(spinlock)(&emu->reg_lock); 770 773 switch (cmd) { 771 774 case SNDRV_PCM_TRIGGER_START: 772 775 case SNDRV_PCM_TRIGGER_RESUME: ··· 824 829 } 825 830 break; 826 831 default: 827 - result = -EINVAL; 832 + return -EINVAL; 828 833 } 829 - spin_unlock(&emu->reg_lock); 830 - return result; 834 + return 0; 831 835 } 832 836 833 837 static snd_pcm_uframes_t snd_emu10k1_playback_pointer(struct snd_pcm_substream *substream) ··· 917 923 u64 mask; 918 924 int result = 0; 919 925 920 - spin_lock(&emu->reg_lock); 926 + guard(spinlock)(&emu->reg_lock); 921 927 switch (cmd) { 922 928 case SNDRV_PCM_TRIGGER_START: 923 929 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: ··· 944 950 if (result == 0) { 945 951 // The extra voice is allowed to lag a bit 946 952 snd_emu10k1_playback_trigger_voice(emu, epcm->extra); 947 - goto leave; 953 + return 0; 948 954 } 949 955 950 956 snd_emu10k1_efx_playback_stop_voices( ··· 966 972 epcm->resume_pos = snd_emu10k1_playback_pointer(substream); 967 973 break; 968 974 default: 969 - result = -EINVAL; 970 - break; 975 + return -EINVAL; 971 976 } 972 - leave: 973 - spin_unlock(&emu->reg_lock); 974 977 return result; 975 978 } 976 979 ··· 1336 1345 #endif 1337 1346 runtime->hw.formats = SNDRV_PCM_FMTBIT_S32_LE; 1338 1347 } else { 1339 - spin_lock_irq(&emu->reg_lock); 1348 + guard(spinlock_irq)(&emu->reg_lock); 1340 1349 runtime->hw.channels_min = runtime->hw.channels_max = 0; 1341 1350 for (idx = 0; idx < nefx; idx++) { 1342 1351 if (emu->efx_voices_mask[idx/32] & (1 << (idx%32))) { ··· 1346 1355 } 1347 1356 epcm->capture_cr_val = emu->efx_voices_mask[0]; 1348 1357 epcm->capture_cr_val2 = emu->efx_voices_mask[1]; 1349 - spin_unlock_irq(&emu->reg_lock); 1350 1358 } 1351 1359 err = snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS, 1352 1360 &hw_constraints_efx_capture_channels); ··· 1529 1539 if (bits == 9 || bits == 11 || bits == 13 || bits == 15 || bits > 16) 1530 1540 return -EINVAL; 1531 1541 1532 - spin_lock_irq(&emu->reg_lock); 1542 + guard(spinlock_irq)(&emu->reg_lock); 1533 1543 change = (nval[0] != emu->efx_voices_mask[0]) || 1534 1544 (nval[1] != emu->efx_voices_mask[1]); 1535 1545 emu->efx_voices_mask[0] = nval[0]; 1536 1546 emu->efx_voices_mask[1] = nval[1]; 1537 - spin_unlock_irq(&emu->reg_lock); 1538 1547 return change; 1539 1548 } 1540 1549 ··· 1674 1685 { 1675 1686 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream); 1676 1687 struct snd_emu10k1_fx8010_pcm *pcm = &emu->fx8010.pcm[substream->number]; 1677 - int result = 0; 1688 + int result; 1678 1689 1679 - spin_lock(&emu->reg_lock); 1690 + guard(spinlock)(&emu->reg_lock); 1680 1691 switch (cmd) { 1681 1692 case SNDRV_PCM_TRIGGER_START: 1682 1693 /* follow thru */ ··· 1696 1707 #endif 1697 1708 result = snd_emu10k1_fx8010_register_irq_handler(emu, snd_emu10k1_fx8010_playback_irq, pcm->gpr_running, substream, &pcm->irq); 1698 1709 if (result < 0) 1699 - goto __err; 1710 + return result; 1700 1711 snd_emu10k1_fx8010_playback_transfer(substream); /* roll the ball */ 1701 1712 snd_emu10k1_ptr_write(emu, emu->gpr_base + pcm->gpr_trigger, 0, 1); 1702 1713 break; ··· 1709 1720 pcm->tram_shift = 0; 1710 1721 break; 1711 1722 default: 1712 - result = -EINVAL; 1713 - break; 1723 + return -EINVAL; 1714 1724 } 1715 - __err: 1716 - spin_unlock(&emu->reg_lock); 1717 - return result; 1725 + return 0; 1718 1726 } 1719 1727 1720 1728 static snd_pcm_uframes_t snd_emu10k1_fx8010_playback_pointer(struct snd_pcm_substream *substream) ··· 1755 1769 runtime->hw = snd_emu10k1_fx8010_playback; 1756 1770 runtime->hw.channels_min = runtime->hw.channels_max = pcm->channels; 1757 1771 runtime->hw.period_bytes_max = (pcm->buffer_size * 2) / 2; 1758 - spin_lock_irq(&emu->reg_lock); 1759 - if (pcm->valid == 0) { 1760 - spin_unlock_irq(&emu->reg_lock); 1772 + guard(spinlock_irq)(&emu->reg_lock); 1773 + if (pcm->valid == 0) 1761 1774 return -ENODEV; 1762 - } 1763 1775 pcm->opened = 1; 1764 - spin_unlock_irq(&emu->reg_lock); 1765 1776 return 0; 1766 1777 } 1767 1778 ··· 1767 1784 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream); 1768 1785 struct snd_emu10k1_fx8010_pcm *pcm = &emu->fx8010.pcm[substream->number]; 1769 1786 1770 - spin_lock_irq(&emu->reg_lock); 1787 + guard(spinlock_irq)(&emu->reg_lock); 1771 1788 pcm->opened = 0; 1772 - spin_unlock_irq(&emu->reg_lock); 1773 1789 return 0; 1774 1790 } 1775 1791
+4 -7
sound/pci/emu10k1/emuproc.c
··· 537 537 unsigned int reg, 538 538 unsigned int chn) 539 539 { 540 - unsigned int regptr, val; 540 + unsigned int regptr; 541 541 542 542 regptr = (reg << 16) | chn; 543 543 544 - spin_lock_irq(&emu->emu_lock); 544 + guard(spinlock_irq)(&emu->emu_lock); 545 545 outl(regptr, emu->port + iobase + PTR); 546 - val = inl(emu->port + iobase + DATA); 547 - spin_unlock_irq(&emu->emu_lock); 548 - return val; 546 + return inl(emu->port + iobase + DATA); 549 547 } 550 548 551 549 static void snd_ptr_write(struct snd_emu10k1 *emu, ··· 556 558 557 559 regptr = (reg << 16) | chn; 558 560 559 - spin_lock_irq(&emu->emu_lock); 561 + guard(spinlock_irq)(&emu->emu_lock); 560 562 outl(regptr, emu->port + iobase + PTR); 561 563 outl(data, emu->port + iobase + DATA); 562 - spin_unlock_irq(&emu->emu_lock); 563 564 } 564 565 565 566
+33 -87
sound/pci/emu10k1/io.c
··· 30 30 31 31 unsigned int snd_emu10k1_ptr_read(struct snd_emu10k1 * emu, unsigned int reg, unsigned int chn) 32 32 { 33 - unsigned long flags; 34 33 unsigned int regptr, val; 35 34 unsigned int mask; 36 35 ··· 37 38 if (!check_ptr_reg(emu, regptr)) 38 39 return 0; 39 40 40 - spin_lock_irqsave(&emu->emu_lock, flags); 41 - outl(regptr, emu->port + PTR); 42 - val = inl(emu->port + DATA); 43 - spin_unlock_irqrestore(&emu->emu_lock, flags); 41 + scoped_guard(spinlock_irqsave, &emu->emu_lock) { 42 + outl(regptr, emu->port + PTR); 43 + val = inl(emu->port + DATA); 44 + } 44 45 45 46 if (reg & 0xff000000) { 46 47 unsigned char size, offset; ··· 60 61 void snd_emu10k1_ptr_write(struct snd_emu10k1 *emu, unsigned int reg, unsigned int chn, unsigned int data) 61 62 { 62 63 unsigned int regptr; 63 - unsigned long flags; 64 64 unsigned int mask; 65 65 66 66 regptr = (reg << 16) | chn; 67 67 if (!check_ptr_reg(emu, regptr)) 68 68 return; 69 69 70 + guard(spinlock_irqsave)(&emu->emu_lock); 70 71 if (reg & 0xff000000) { 71 72 unsigned char size, offset; 72 73 ··· 78 79 mask <<= offset; 79 80 data <<= offset; 80 81 81 - spin_lock_irqsave(&emu->emu_lock, flags); 82 82 outl(regptr, emu->port + PTR); 83 83 data |= inl(emu->port + DATA) & ~mask; 84 84 } else { 85 - spin_lock_irqsave(&emu->emu_lock, flags); 86 85 outl(regptr, emu->port + PTR); 87 86 } 88 87 outl(data, emu->port + DATA); 89 - spin_unlock_irqrestore(&emu->emu_lock, flags); 90 88 } 91 89 92 90 EXPORT_SYMBOL(snd_emu10k1_ptr_write); ··· 92 96 { 93 97 va_list va; 94 98 u32 addr_mask; 95 - unsigned long flags; 96 99 97 100 if (snd_BUG_ON(!emu)) 98 101 return; ··· 100 105 addr_mask = ~((emu->audigy ? A_PTR_ADDRESS_MASK : PTR_ADDRESS_MASK) >> 16); 101 106 102 107 va_start(va, chn); 103 - spin_lock_irqsave(&emu->emu_lock, flags); 108 + guard(spinlock_irqsave)(&emu->emu_lock); 104 109 for (;;) { 105 110 u32 data; 106 111 u32 reg = va_arg(va, u32); ··· 112 117 outl((reg << 16) | chn, emu->port + PTR); 113 118 outl(data, emu->port + DATA); 114 119 } 115 - spin_unlock_irqrestore(&emu->emu_lock, flags); 116 120 va_end(va); 117 121 } 118 122 ··· 121 127 unsigned int reg, 122 128 unsigned int chn) 123 129 { 124 - unsigned long flags; 125 - unsigned int regptr, val; 130 + unsigned int regptr; 126 131 127 132 regptr = (reg << 16) | chn; 128 133 129 - spin_lock_irqsave(&emu->emu_lock, flags); 134 + guard(spinlock_irqsave)(&emu->emu_lock); 130 135 outl(regptr, emu->port + PTR2); 131 - val = inl(emu->port + DATA2); 132 - spin_unlock_irqrestore(&emu->emu_lock, flags); 133 - return val; 136 + return inl(emu->port + DATA2); 134 137 } 135 138 136 139 void snd_emu10k1_ptr20_write(struct snd_emu10k1 *emu, ··· 136 145 unsigned int data) 137 146 { 138 147 unsigned int regptr; 139 - unsigned long flags; 140 148 141 149 regptr = (reg << 16) | chn; 142 150 143 - spin_lock_irqsave(&emu->emu_lock, flags); 151 + guard(spinlock_irqsave)(&emu->emu_lock); 144 152 outl(regptr, emu->port + PTR2); 145 153 outl(data, emu->port + DATA2); 146 - spin_unlock_irqrestore(&emu->emu_lock, flags); 147 154 } 148 155 149 156 int snd_emu10k1_spi_write(struct snd_emu10k1 * emu, ··· 150 161 unsigned int reset, set; 151 162 unsigned int reg, tmp; 152 163 int n, result; 153 - int err = 0; 154 164 155 165 /* This function is not re-entrant, so protect against it. */ 156 - spin_lock(&emu->spi_lock); 166 + guard(spinlock)(&emu->spi_lock); 157 167 if (emu->card_capabilities->ca0108_chip) 158 168 reg = P17V_SPI; 159 169 else { 160 170 /* For other chip types the SPI register 161 171 * is currently unknown. */ 162 - err = 1; 163 - goto spi_write_exit; 172 + return 1; 164 173 } 165 174 if (data > 0xffff) { 166 175 /* Only 16bit values allowed */ 167 - err = 1; 168 - goto spi_write_exit; 176 + return 1; 169 177 } 170 178 171 179 tmp = snd_emu10k1_ptr20_read(emu, reg, 0); ··· 183 197 } 184 198 if (result) { 185 199 /* Timed out */ 186 - err = 1; 187 - goto spi_write_exit; 200 + return 1; 188 201 } 189 202 snd_emu10k1_ptr20_write(emu, reg, 0, reset | data); 190 203 tmp = snd_emu10k1_ptr20_read(emu, reg, 0); /* Write post */ 191 - err = 0; 192 - spi_write_exit: 193 - spin_unlock(&emu->spi_lock); 194 - return err; 204 + return 0; 195 205 } 196 206 197 207 /* The ADC does not support i2c read, so only write is implemented */ ··· 199 217 int timeout = 0; 200 218 int status; 201 219 int retry; 202 - int err = 0; 203 220 204 221 if ((reg > 0x7f) || (value > 0x1ff)) { 205 222 dev_err(emu->card->dev, "i2c_write: invalid values.\n"); ··· 206 225 } 207 226 208 227 /* This function is not re-entrant, so protect against it. */ 209 - spin_lock(&emu->i2c_lock); 228 + guard(spinlock)(&emu->i2c_lock); 210 229 211 230 tmp = reg << 25 | value << 16; 212 231 ··· 245 264 dev_err(emu->card->dev, "status=0x%x, reg=%d, value=%d\n", 246 265 status, reg, value); 247 266 /* dump_stack(); */ 248 - err = -EINVAL; 267 + return -EINVAL; 249 268 } 250 269 251 - spin_unlock(&emu->i2c_lock); 252 - return err; 270 + return 0; 253 271 } 254 272 255 273 static void snd_emu1010_fpga_write_locked(struct snd_emu10k1 *emu, u32 reg, u32 value) ··· 456 476 457 477 void snd_emu10k1_intr_enable(struct snd_emu10k1 *emu, unsigned int intrenb) 458 478 { 459 - unsigned long flags; 460 479 unsigned int enable; 461 480 462 - spin_lock_irqsave(&emu->emu_lock, flags); 481 + guard(spinlock_irqsave)(&emu->emu_lock); 463 482 enable = inl(emu->port + INTE) | intrenb; 464 483 outl(enable, emu->port + INTE); 465 - spin_unlock_irqrestore(&emu->emu_lock, flags); 466 484 } 467 485 468 486 void snd_emu10k1_intr_disable(struct snd_emu10k1 *emu, unsigned int intrenb) 469 487 { 470 - unsigned long flags; 471 488 unsigned int enable; 472 489 473 - spin_lock_irqsave(&emu->emu_lock, flags); 490 + guard(spinlock_irqsave)(&emu->emu_lock); 474 491 enable = inl(emu->port + INTE) & ~intrenb; 475 492 outl(enable, emu->port + INTE); 476 - spin_unlock_irqrestore(&emu->emu_lock, flags); 477 493 } 478 494 479 495 void snd_emu10k1_voice_intr_enable(struct snd_emu10k1 *emu, unsigned int voicenum) 480 496 { 481 - unsigned long flags; 482 497 unsigned int val; 483 498 484 - spin_lock_irqsave(&emu->emu_lock, flags); 499 + guard(spinlock_irqsave)(&emu->emu_lock); 485 500 if (voicenum >= 32) { 486 501 outl(CLIEH << 16, emu->port + PTR); 487 502 val = inl(emu->port + DATA); ··· 487 512 val |= 1 << voicenum; 488 513 } 489 514 outl(val, emu->port + DATA); 490 - spin_unlock_irqrestore(&emu->emu_lock, flags); 491 515 } 492 516 493 517 void snd_emu10k1_voice_intr_disable(struct snd_emu10k1 *emu, unsigned int voicenum) 494 518 { 495 - unsigned long flags; 496 519 unsigned int val; 497 520 498 - spin_lock_irqsave(&emu->emu_lock, flags); 521 + guard(spinlock_irqsave)(&emu->emu_lock); 499 522 if (voicenum >= 32) { 500 523 outl(CLIEH << 16, emu->port + PTR); 501 524 val = inl(emu->port + DATA); ··· 504 531 val &= ~(1 << voicenum); 505 532 } 506 533 outl(val, emu->port + DATA); 507 - spin_unlock_irqrestore(&emu->emu_lock, flags); 508 534 } 509 535 510 536 void snd_emu10k1_voice_intr_ack(struct snd_emu10k1 *emu, unsigned int voicenum) 511 537 { 512 - unsigned long flags; 513 - 514 - spin_lock_irqsave(&emu->emu_lock, flags); 538 + guard(spinlock_irqsave)(&emu->emu_lock); 515 539 if (voicenum >= 32) { 516 540 outl(CLIPH << 16, emu->port + PTR); 517 541 voicenum = 1 << (voicenum - 32); ··· 517 547 voicenum = 1 << voicenum; 518 548 } 519 549 outl(voicenum, emu->port + DATA); 520 - spin_unlock_irqrestore(&emu->emu_lock, flags); 521 550 } 522 551 523 552 void snd_emu10k1_voice_half_loop_intr_enable(struct snd_emu10k1 *emu, unsigned int voicenum) 524 553 { 525 - unsigned long flags; 526 554 unsigned int val; 527 555 528 - spin_lock_irqsave(&emu->emu_lock, flags); 556 + guard(spinlock_irqsave)(&emu->emu_lock); 529 557 if (voicenum >= 32) { 530 558 outl(HLIEH << 16, emu->port + PTR); 531 559 val = inl(emu->port + DATA); ··· 534 566 val |= 1 << voicenum; 535 567 } 536 568 outl(val, emu->port + DATA); 537 - spin_unlock_irqrestore(&emu->emu_lock, flags); 538 569 } 539 570 540 571 void snd_emu10k1_voice_half_loop_intr_disable(struct snd_emu10k1 *emu, unsigned int voicenum) 541 572 { 542 - unsigned long flags; 543 573 unsigned int val; 544 574 545 - spin_lock_irqsave(&emu->emu_lock, flags); 575 + guard(spinlock_irqsave)(&emu->emu_lock); 546 576 if (voicenum >= 32) { 547 577 outl(HLIEH << 16, emu->port + PTR); 548 578 val = inl(emu->port + DATA); ··· 551 585 val &= ~(1 << voicenum); 552 586 } 553 587 outl(val, emu->port + DATA); 554 - spin_unlock_irqrestore(&emu->emu_lock, flags); 555 588 } 556 589 557 590 void snd_emu10k1_voice_half_loop_intr_ack(struct snd_emu10k1 *emu, unsigned int voicenum) 558 591 { 559 - unsigned long flags; 560 - 561 - spin_lock_irqsave(&emu->emu_lock, flags); 592 + guard(spinlock_irqsave)(&emu->emu_lock); 562 593 if (voicenum >= 32) { 563 594 outl(HLIPH << 16, emu->port + PTR); 564 595 voicenum = 1 << (voicenum - 32); ··· 564 601 voicenum = 1 << voicenum; 565 602 } 566 603 outl(voicenum, emu->port + DATA); 567 - spin_unlock_irqrestore(&emu->emu_lock, flags); 568 604 } 569 605 570 606 #if 0 571 607 void snd_emu10k1_voice_set_loop_stop(struct snd_emu10k1 *emu, unsigned int voicenum) 572 608 { 573 - unsigned long flags; 574 609 unsigned int sol; 575 610 576 - spin_lock_irqsave(&emu->emu_lock, flags); 611 + guard(spinlock_irqsave)(&emu->emu_lock); 577 612 if (voicenum >= 32) { 578 613 outl(SOLEH << 16, emu->port + PTR); 579 614 sol = inl(emu->port + DATA); ··· 582 621 sol |= 1 << voicenum; 583 622 } 584 623 outl(sol, emu->port + DATA); 585 - spin_unlock_irqrestore(&emu->emu_lock, flags); 586 624 } 587 625 588 626 void snd_emu10k1_voice_clear_loop_stop(struct snd_emu10k1 *emu, unsigned int voicenum) 589 627 { 590 - unsigned long flags; 591 628 unsigned int sol; 592 629 593 - spin_lock_irqsave(&emu->emu_lock, flags); 630 + guard(spinlock_irqsave)(&emu->emu_lock); 594 631 if (voicenum >= 32) { 595 632 outl(SOLEH << 16, emu->port + PTR); 596 633 sol = inl(emu->port + DATA); ··· 599 640 sol &= ~(1 << voicenum); 600 641 } 601 642 outl(sol, emu->port + DATA); 602 - spin_unlock_irqrestore(&emu->emu_lock, flags); 603 643 } 604 644 #endif 605 645 606 646 void snd_emu10k1_voice_set_loop_stop_multiple(struct snd_emu10k1 *emu, u64 voices) 607 647 { 608 - unsigned long flags; 609 - 610 - spin_lock_irqsave(&emu->emu_lock, flags); 648 + guard(spinlock_irqsave)(&emu->emu_lock); 611 649 outl(SOLEL << 16, emu->port + PTR); 612 650 outl(inl(emu->port + DATA) | (u32)voices, emu->port + DATA); 613 651 outl(SOLEH << 16, emu->port + PTR); 614 652 outl(inl(emu->port + DATA) | (u32)(voices >> 32), emu->port + DATA); 615 - spin_unlock_irqrestore(&emu->emu_lock, flags); 616 653 } 617 654 618 655 void snd_emu10k1_voice_clear_loop_stop_multiple(struct snd_emu10k1 *emu, u64 voices) 619 656 { 620 - unsigned long flags; 621 - 622 - spin_lock_irqsave(&emu->emu_lock, flags); 657 + guard(spinlock_irqsave)(&emu->emu_lock); 623 658 outl(SOLEL << 16, emu->port + PTR); 624 659 outl(inl(emu->port + DATA) & (u32)~voices, emu->port + DATA); 625 660 outl(SOLEH << 16, emu->port + PTR); 626 661 outl(inl(emu->port + DATA) & (u32)(~voices >> 32), emu->port + DATA); 627 - spin_unlock_irqrestore(&emu->emu_lock, flags); 628 662 } 629 663 630 664 int snd_emu10k1_voice_clear_loop_stop_multiple_atomic(struct snd_emu10k1 *emu, u64 voices) ··· 700 748 unsigned short snd_emu10k1_ac97_read(struct snd_ac97 *ac97, unsigned short reg) 701 749 { 702 750 struct snd_emu10k1 *emu = ac97->private_data; 703 - unsigned long flags; 704 - unsigned short val; 705 751 706 - spin_lock_irqsave(&emu->emu_lock, flags); 752 + guard(spinlock_irqsave)(&emu->emu_lock); 707 753 outb(reg, emu->port + AC97ADDRESS); 708 - val = inw(emu->port + AC97DATA); 709 - spin_unlock_irqrestore(&emu->emu_lock, flags); 710 - return val; 754 + return inw(emu->port + AC97DATA); 711 755 } 712 756 713 757 void snd_emu10k1_ac97_write(struct snd_ac97 *ac97, unsigned short reg, unsigned short data) 714 758 { 715 759 struct snd_emu10k1 *emu = ac97->private_data; 716 - unsigned long flags; 717 760 718 - spin_lock_irqsave(&emu->emu_lock, flags); 761 + guard(spinlock_irqsave)(&emu->emu_lock); 719 762 outb(reg, emu->port + AC97ADDRESS); 720 763 outw(data, emu->port + AC97DATA); 721 - spin_unlock_irqrestore(&emu->emu_lock, flags); 722 764 }
+5 -9
sound/pci/emu10k1/memory.c
··· 261 261 int size; 262 262 struct list_head *p, *nextp; 263 263 struct snd_emu10k1_memblk *deleted; 264 - unsigned long flags; 265 264 266 - spin_lock_irqsave(&emu->memblk_lock, flags); 265 + guard(spinlock_irqsave)(&emu->memblk_lock); 267 266 if (blk->mapped_page >= 0) { 268 267 /* update order link */ 269 268 list_move_tail(&blk->mapped_order_link, 270 269 &emu->mapped_order_link_head); 271 - spin_unlock_irqrestore(&emu->memblk_lock, flags); 272 270 return 0; 273 271 } 274 272 err = map_memblk(emu, blk); ··· 287 289 } 288 290 } 289 291 } 290 - spin_unlock_irqrestore(&emu->memblk_lock, flags); 291 292 return err; 292 293 } 293 294 ··· 421 424 { 422 425 struct snd_util_memhdr *hdr = emu->memhdr; 423 426 struct snd_emu10k1_memblk *blk = (struct snd_emu10k1_memblk *)memblk; 424 - unsigned long flags; 425 427 426 428 guard(mutex)(&hdr->block_mutex); 427 - spin_lock_irqsave(&emu->memblk_lock, flags); 428 - if (blk->mapped_page >= 0) 429 - unmap_memblk(emu, blk); 430 - spin_unlock_irqrestore(&emu->memblk_lock, flags); 429 + scoped_guard(spinlock_irqsave, &emu->memblk_lock) { 430 + if (blk->mapped_page >= 0) 431 + unmap_memblk(emu, blk); 432 + } 431 433 synth_free_pages(emu, blk); 432 434 __snd_util_mem_free(hdr, memblk); 433 435 return 0;
+2 -6
sound/pci/emu10k1/p16v.c
··· 342 342 343 343 static void snd_p16v_intr_enable(struct snd_emu10k1 *emu, unsigned int intrenb) 344 344 { 345 - unsigned long flags; 346 345 unsigned int enable; 347 346 348 - spin_lock_irqsave(&emu->emu_lock, flags); 347 + guard(spinlock_irqsave)(&emu->emu_lock); 349 348 enable = inl(emu->port + INTE2) | intrenb; 350 349 outl(enable, emu->port + INTE2); 351 - spin_unlock_irqrestore(&emu->emu_lock, flags); 352 350 } 353 351 354 352 static void snd_p16v_intr_disable(struct snd_emu10k1 *emu, unsigned int intrenb) 355 353 { 356 - unsigned long flags; 357 354 unsigned int disable; 358 355 359 - spin_lock_irqsave(&emu->emu_lock, flags); 356 + guard(spinlock_irqsave)(&emu->emu_lock); 360 357 disable = inl(emu->port + INTE2) & (~intrenb); 361 358 outl(disable, emu->port + INTE2); 362 - spin_unlock_irqrestore(&emu->emu_lock, flags); 363 359 } 364 360 365 361 static void snd_p16v_interrupt(struct snd_emu10k1 *emu)
+2 -6
sound/pci/emu10k1/voice.c
··· 77 77 int snd_emu10k1_voice_alloc(struct snd_emu10k1 *emu, int type, int count, int channels, 78 78 struct snd_emu10k1_pcm *epcm, struct snd_emu10k1_voice **rvoice) 79 79 { 80 - unsigned long flags; 81 80 int result; 82 81 83 82 if (snd_BUG_ON(!rvoice)) ··· 86 87 if (snd_BUG_ON(!channels)) 87 88 return -EINVAL; 88 89 89 - spin_lock_irqsave(&emu->voice_lock, flags); 90 + guard(spinlock_irqsave)(&emu->voice_lock); 90 91 for (int got = 0; got < channels; ) { 91 92 result = voice_alloc(emu, type, count, epcm, &rvoice[got]); 92 93 if (result == 0) { ··· 112 113 } 113 114 break; 114 115 } 115 - spin_unlock_irqrestore(&emu->voice_lock, flags); 116 116 117 117 return result; 118 118 } ··· 121 123 int snd_emu10k1_voice_free(struct snd_emu10k1 *emu, 122 124 struct snd_emu10k1_voice *pvoice) 123 125 { 124 - unsigned long flags; 125 126 int last; 126 127 127 128 if (snd_BUG_ON(!pvoice)) 128 129 return -EINVAL; 129 - spin_lock_irqsave(&emu->voice_lock, flags); 130 + guard(spinlock_irqsave)(&emu->voice_lock); 130 131 do { 131 132 last = pvoice->last; 132 133 voice_free(emu, pvoice++); 133 134 } while (!last); 134 - spin_unlock_irqrestore(&emu->voice_lock, flags); 135 135 return 0; 136 136 } 137 137