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

ALSA: emu10k1x: 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-30-tiwai@suse.de

+88 -133
+88 -133
sound/pci/emu10k1/emu10k1x.c
··· 281 281 unsigned int reg, 282 282 unsigned int chn) 283 283 { 284 - unsigned long flags; 285 - unsigned int regptr, val; 284 + unsigned int regptr; 286 285 287 286 regptr = (reg << 16) | chn; 288 287 289 - spin_lock_irqsave(&emu->emu_lock, flags); 288 + guard(spinlock_irqsave)(&emu->emu_lock); 290 289 outl(regptr, emu->port + PTR); 291 - val = inl(emu->port + DATA); 292 - spin_unlock_irqrestore(&emu->emu_lock, flags); 293 - return val; 290 + return inl(emu->port + DATA); 294 291 } 295 292 296 293 static void snd_emu10k1x_ptr_write(struct emu10k1x *emu, ··· 296 299 unsigned int data) 297 300 { 298 301 unsigned int regptr; 299 - unsigned long flags; 300 302 301 303 regptr = (reg << 16) | chn; 302 304 303 - spin_lock_irqsave(&emu->emu_lock, flags); 305 + guard(spinlock_irqsave)(&emu->emu_lock); 304 306 outl(regptr, emu->port + PTR); 305 307 outl(data, emu->port + DATA); 306 - spin_unlock_irqrestore(&emu->emu_lock, flags); 307 308 } 308 309 309 310 static void snd_emu10k1x_intr_enable(struct emu10k1x *emu, unsigned int intrenb) 310 311 { 311 - unsigned long flags; 312 312 unsigned int intr_enable; 313 313 314 - spin_lock_irqsave(&emu->emu_lock, flags); 314 + guard(spinlock_irqsave)(&emu->emu_lock); 315 315 intr_enable = inl(emu->port + INTE) | intrenb; 316 316 outl(intr_enable, emu->port + INTE); 317 - spin_unlock_irqrestore(&emu->emu_lock, flags); 318 317 } 319 318 320 319 static void snd_emu10k1x_intr_disable(struct emu10k1x *emu, unsigned int intrenb) 321 320 { 322 - unsigned long flags; 323 321 unsigned int intr_enable; 324 322 325 - spin_lock_irqsave(&emu->emu_lock, flags); 323 + guard(spinlock_irqsave)(&emu->emu_lock); 326 324 intr_enable = inl(emu->port + INTE) & ~intrenb; 327 325 outl(intr_enable, emu->port + INTE); 328 - spin_unlock_irqrestore(&emu->emu_lock, flags); 329 326 } 330 327 331 328 static void snd_emu10k1x_gpio_write(struct emu10k1x *emu, unsigned int value) 332 329 { 333 - unsigned long flags; 334 - 335 - spin_lock_irqsave(&emu->emu_lock, flags); 330 + guard(spinlock_irqsave)(&emu->emu_lock); 336 331 outl(value, emu->port + GPIO); 337 - spin_unlock_irqrestore(&emu->emu_lock, flags); 338 332 } 339 333 340 334 static void snd_emu10k1x_pcm_free_substream(struct snd_pcm_runtime *runtime) ··· 682 694 unsigned short reg) 683 695 { 684 696 struct emu10k1x *emu = ac97->private_data; 685 - unsigned long flags; 686 - unsigned short val; 687 697 688 - spin_lock_irqsave(&emu->emu_lock, flags); 698 + guard(spinlock_irqsave)(&emu->emu_lock); 689 699 outb(reg, emu->port + AC97ADDRESS); 690 - val = inw(emu->port + AC97DATA); 691 - spin_unlock_irqrestore(&emu->emu_lock, flags); 692 - return val; 700 + return inw(emu->port + AC97DATA); 693 701 } 694 702 695 703 static void snd_emu10k1x_ac97_write(struct snd_ac97 *ac97, 696 704 unsigned short reg, unsigned short val) 697 705 { 698 706 struct emu10k1x *emu = ac97->private_data; 699 - unsigned long flags; 700 707 701 - spin_lock_irqsave(&emu->emu_lock, flags); 708 + guard(spinlock_irqsave)(&emu->emu_lock); 702 709 outb(reg, emu->port + AC97ADDRESS); 703 710 outw(val, emu->port + AC97DATA); 704 - spin_unlock_irqrestore(&emu->emu_lock, flags); 705 711 } 706 712 707 713 static int snd_emu10k1x_ac97(struct emu10k1x *chip) ··· 948 966 { 949 967 struct emu10k1x *emu = entry->private_data; 950 968 unsigned long value,value1,value2; 951 - unsigned long flags; 952 969 int i; 953 970 954 971 snd_iprintf(buffer, "Registers:\n\n"); 955 972 for(i = 0; i < 0x20; i+=4) { 956 - spin_lock_irqsave(&emu->emu_lock, flags); 973 + guard(spinlock_irqsave)(&emu->emu_lock); 957 974 value = inl(emu->port + i); 958 - spin_unlock_irqrestore(&emu->emu_lock, flags); 959 975 snd_iprintf(buffer, "Register %02X: %08lX\n", i, value); 960 976 } 961 977 snd_iprintf(buffer, "\nRegisters\n\n"); ··· 1186 1206 return; 1187 1207 } 1188 1208 1189 - spin_lock(&midi->input_lock); 1190 - if ((status & midi->ipr_rx) && mpu401_input_avail(emu, midi)) { 1191 - if (!(midi->midi_mode & EMU10K1X_MIDI_MODE_INPUT)) { 1192 - mpu401_clear_rx(emu, midi); 1193 - } else { 1194 - byte = mpu401_read_data(emu, midi); 1195 - if (midi->substream_input) 1196 - snd_rawmidi_receive(midi->substream_input, &byte, 1); 1209 + scoped_guard(spinlock, &midi->input_lock) { 1210 + if ((status & midi->ipr_rx) && mpu401_input_avail(emu, midi)) { 1211 + if (!(midi->midi_mode & EMU10K1X_MIDI_MODE_INPUT)) { 1212 + mpu401_clear_rx(emu, midi); 1213 + } else { 1214 + byte = mpu401_read_data(emu, midi); 1215 + if (midi->substream_input) 1216 + snd_rawmidi_receive(midi->substream_input, &byte, 1); 1217 + } 1197 1218 } 1198 1219 } 1199 - spin_unlock(&midi->input_lock); 1200 1220 1201 - spin_lock(&midi->output_lock); 1202 - if ((status & midi->ipr_tx) && mpu401_output_ready(emu, midi)) { 1203 - if (midi->substream_output && 1204 - snd_rawmidi_transmit(midi->substream_output, &byte, 1) == 1) { 1205 - mpu401_write_data(emu, midi, byte); 1206 - } else { 1207 - snd_emu10k1x_intr_disable(emu, midi->tx_enable); 1221 + scoped_guard(spinlock, &midi->output_lock) { 1222 + if ((status & midi->ipr_tx) && mpu401_output_ready(emu, midi)) { 1223 + if (midi->substream_output && 1224 + snd_rawmidi_transmit(midi->substream_output, &byte, 1) == 1) { 1225 + mpu401_write_data(emu, midi, byte); 1226 + } else { 1227 + snd_emu10k1x_intr_disable(emu, midi->tx_enable); 1228 + } 1208 1229 } 1209 1230 } 1210 - spin_unlock(&midi->output_lock); 1211 1231 } 1212 1232 1213 1233 static void snd_emu10k1x_midi_interrupt(struct emu10k1x *emu, unsigned int status) ··· 1218 1238 static int snd_emu10k1x_midi_cmd(struct emu10k1x * emu, 1219 1239 struct emu10k1x_midi *midi, unsigned char cmd, int ack) 1220 1240 { 1221 - unsigned long flags; 1222 1241 int timeout, ok; 1223 1242 1224 - spin_lock_irqsave(&midi->input_lock, flags); 1225 - mpu401_write_data(emu, midi, 0x00); 1226 - /* mpu401_clear_rx(emu, midi); */ 1243 + scoped_guard(spinlock_irqsave, &midi->input_lock) { 1244 + mpu401_write_data(emu, midi, 0x00); 1245 + /* mpu401_clear_rx(emu, midi); */ 1227 1246 1228 - mpu401_write_cmd(emu, midi, cmd); 1229 - if (ack) { 1230 - ok = 0; 1231 - timeout = 10000; 1232 - while (!ok && timeout-- > 0) { 1233 - if (mpu401_input_avail(emu, midi)) { 1234 - if (mpu401_read_data(emu, midi) == MPU401_ACK) 1235 - ok = 1; 1247 + mpu401_write_cmd(emu, midi, cmd); 1248 + if (ack) { 1249 + ok = 0; 1250 + timeout = 10000; 1251 + while (!ok && timeout-- > 0) { 1252 + if (mpu401_input_avail(emu, midi)) { 1253 + if (mpu401_read_data(emu, midi) == MPU401_ACK) 1254 + ok = 1; 1255 + } 1236 1256 } 1237 - } 1238 - if (!ok && mpu401_read_data(emu, midi) == MPU401_ACK) 1257 + if (!ok && mpu401_read_data(emu, midi) == MPU401_ACK) 1258 + ok = 1; 1259 + } else { 1239 1260 ok = 1; 1240 - } else { 1241 - ok = 1; 1261 + } 1242 1262 } 1243 - spin_unlock_irqrestore(&midi->input_lock, flags); 1244 1263 if (!ok) { 1245 1264 dev_err(emu->card->dev, 1246 1265 "midi_cmd: 0x%x failed at 0x%lx (status = 0x%x, data = 0x%x)!!!\n", ··· 1255 1276 { 1256 1277 struct emu10k1x *emu; 1257 1278 struct emu10k1x_midi *midi = substream->rmidi->private_data; 1258 - unsigned long flags; 1259 1279 1260 1280 emu = midi->emu; 1261 1281 if (snd_BUG_ON(!emu)) 1262 1282 return -ENXIO; 1263 - spin_lock_irqsave(&midi->open_lock, flags); 1264 - midi->midi_mode |= EMU10K1X_MIDI_MODE_INPUT; 1265 - midi->substream_input = substream; 1266 - if (!(midi->midi_mode & EMU10K1X_MIDI_MODE_OUTPUT)) { 1267 - spin_unlock_irqrestore(&midi->open_lock, flags); 1268 - if (snd_emu10k1x_midi_cmd(emu, midi, MPU401_RESET, 1)) 1269 - goto error_out; 1270 - if (snd_emu10k1x_midi_cmd(emu, midi, MPU401_ENTER_UART, 1)) 1271 - goto error_out; 1272 - } else { 1273 - spin_unlock_irqrestore(&midi->open_lock, flags); 1283 + scoped_guard(spinlock_irqsave, &midi->open_lock) { 1284 + midi->midi_mode |= EMU10K1X_MIDI_MODE_INPUT; 1285 + midi->substream_input = substream; 1286 + if (midi->midi_mode & EMU10K1X_MIDI_MODE_OUTPUT) 1287 + return 0; 1274 1288 } 1289 + if (snd_emu10k1x_midi_cmd(emu, midi, MPU401_RESET, 1)) 1290 + return -EIO; 1291 + if (snd_emu10k1x_midi_cmd(emu, midi, MPU401_ENTER_UART, 1)) 1292 + return -EIO; 1275 1293 return 0; 1276 - 1277 - error_out: 1278 - return -EIO; 1279 1294 } 1280 1295 1281 1296 static int snd_emu10k1x_midi_output_open(struct snd_rawmidi_substream *substream) 1282 1297 { 1283 1298 struct emu10k1x *emu; 1284 1299 struct emu10k1x_midi *midi = substream->rmidi->private_data; 1285 - unsigned long flags; 1286 1300 1287 1301 emu = midi->emu; 1288 1302 if (snd_BUG_ON(!emu)) 1289 1303 return -ENXIO; 1290 - spin_lock_irqsave(&midi->open_lock, flags); 1291 - midi->midi_mode |= EMU10K1X_MIDI_MODE_OUTPUT; 1292 - midi->substream_output = substream; 1293 - if (!(midi->midi_mode & EMU10K1X_MIDI_MODE_INPUT)) { 1294 - spin_unlock_irqrestore(&midi->open_lock, flags); 1295 - if (snd_emu10k1x_midi_cmd(emu, midi, MPU401_RESET, 1)) 1296 - goto error_out; 1297 - if (snd_emu10k1x_midi_cmd(emu, midi, MPU401_ENTER_UART, 1)) 1298 - goto error_out; 1299 - } else { 1300 - spin_unlock_irqrestore(&midi->open_lock, flags); 1304 + scoped_guard(spinlock_irqsave, &midi->open_lock) { 1305 + midi->midi_mode |= EMU10K1X_MIDI_MODE_OUTPUT; 1306 + midi->substream_output = substream; 1307 + if (midi->midi_mode & EMU10K1X_MIDI_MODE_INPUT) 1308 + return 0; 1301 1309 } 1310 + if (snd_emu10k1x_midi_cmd(emu, midi, MPU401_RESET, 1)) 1311 + return -EIO; 1312 + if (snd_emu10k1x_midi_cmd(emu, midi, MPU401_ENTER_UART, 1)) 1313 + return -EIO; 1302 1314 return 0; 1303 - 1304 - error_out: 1305 - return -EIO; 1306 1315 } 1307 1316 1308 1317 static int snd_emu10k1x_midi_input_close(struct snd_rawmidi_substream *substream) 1309 1318 { 1310 1319 struct emu10k1x *emu; 1311 1320 struct emu10k1x_midi *midi = substream->rmidi->private_data; 1312 - unsigned long flags; 1313 - int err = 0; 1314 1321 1315 1322 emu = midi->emu; 1316 1323 if (snd_BUG_ON(!emu)) 1317 1324 return -ENXIO; 1318 - spin_lock_irqsave(&midi->open_lock, flags); 1319 - snd_emu10k1x_intr_disable(emu, midi->rx_enable); 1320 - midi->midi_mode &= ~EMU10K1X_MIDI_MODE_INPUT; 1321 - midi->substream_input = NULL; 1322 - if (!(midi->midi_mode & EMU10K1X_MIDI_MODE_OUTPUT)) { 1323 - spin_unlock_irqrestore(&midi->open_lock, flags); 1324 - err = snd_emu10k1x_midi_cmd(emu, midi, MPU401_RESET, 0); 1325 - } else { 1326 - spin_unlock_irqrestore(&midi->open_lock, flags); 1325 + scoped_guard(spinlock_irqsave, &midi->open_lock) { 1326 + snd_emu10k1x_intr_disable(emu, midi->rx_enable); 1327 + midi->midi_mode &= ~EMU10K1X_MIDI_MODE_INPUT; 1328 + midi->substream_input = NULL; 1329 + if (midi->midi_mode & EMU10K1X_MIDI_MODE_OUTPUT) 1330 + return 0; 1327 1331 } 1328 - return err; 1332 + return snd_emu10k1x_midi_cmd(emu, midi, MPU401_RESET, 0); 1329 1333 } 1330 1334 1331 1335 static int snd_emu10k1x_midi_output_close(struct snd_rawmidi_substream *substream) 1332 1336 { 1333 1337 struct emu10k1x *emu; 1334 1338 struct emu10k1x_midi *midi = substream->rmidi->private_data; 1335 - unsigned long flags; 1336 - int err = 0; 1337 1339 1338 1340 emu = midi->emu; 1339 1341 if (snd_BUG_ON(!emu)) 1340 1342 return -ENXIO; 1341 - spin_lock_irqsave(&midi->open_lock, flags); 1342 - snd_emu10k1x_intr_disable(emu, midi->tx_enable); 1343 - midi->midi_mode &= ~EMU10K1X_MIDI_MODE_OUTPUT; 1344 - midi->substream_output = NULL; 1345 - if (!(midi->midi_mode & EMU10K1X_MIDI_MODE_INPUT)) { 1346 - spin_unlock_irqrestore(&midi->open_lock, flags); 1347 - err = snd_emu10k1x_midi_cmd(emu, midi, MPU401_RESET, 0); 1348 - } else { 1349 - spin_unlock_irqrestore(&midi->open_lock, flags); 1343 + scoped_guard(spinlock_irqsave, &midi->open_lock) { 1344 + snd_emu10k1x_intr_disable(emu, midi->tx_enable); 1345 + midi->midi_mode &= ~EMU10K1X_MIDI_MODE_OUTPUT; 1346 + midi->substream_output = NULL; 1347 + if (midi->midi_mode & EMU10K1X_MIDI_MODE_INPUT) 1348 + return 0; 1350 1349 } 1351 - return err; 1350 + return snd_emu10k1x_midi_cmd(emu, midi, MPU401_RESET, 0); 1352 1351 } 1353 1352 1354 1353 static void snd_emu10k1x_midi_input_trigger(struct snd_rawmidi_substream *substream, int up) ··· 1347 1390 { 1348 1391 struct emu10k1x *emu; 1349 1392 struct emu10k1x_midi *midi = substream->rmidi->private_data; 1350 - unsigned long flags; 1351 1393 1352 1394 emu = midi->emu; 1353 1395 if (snd_BUG_ON(!emu)) ··· 1357 1401 unsigned char byte; 1358 1402 1359 1403 /* try to send some amount of bytes here before interrupts */ 1360 - spin_lock_irqsave(&midi->output_lock, flags); 1361 - while (max > 0) { 1362 - if (mpu401_output_ready(emu, midi)) { 1363 - if (!(midi->midi_mode & EMU10K1X_MIDI_MODE_OUTPUT) || 1364 - snd_rawmidi_transmit(substream, &byte, 1) != 1) { 1365 - /* no more data */ 1366 - spin_unlock_irqrestore(&midi->output_lock, flags); 1367 - return; 1404 + scoped_guard(spinlock_irqsave, &midi->output_lock) { 1405 + while (max > 0) { 1406 + if (mpu401_output_ready(emu, midi)) { 1407 + if (!(midi->midi_mode & EMU10K1X_MIDI_MODE_OUTPUT) || 1408 + snd_rawmidi_transmit(substream, &byte, 1) != 1) { 1409 + /* no more data */ 1410 + return; 1411 + } 1412 + mpu401_write_data(emu, midi, byte); 1413 + max--; 1414 + } else { 1415 + break; 1368 1416 } 1369 - mpu401_write_data(emu, midi, byte); 1370 - max--; 1371 - } else { 1372 - break; 1373 1417 } 1374 1418 } 1375 - spin_unlock_irqrestore(&midi->output_lock, flags); 1376 1419 snd_emu10k1x_intr_enable(emu, midi->tx_enable); 1377 1420 } else { 1378 1421 snd_emu10k1x_intr_disable(emu, midi->tx_enable);