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

ALSA: hda/core: Use guard() for mutex locks

Replace the manual mutex lock/unlock pairs with guard().

Only code refactoring, and no behavior change.

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

+27 -51
+2 -6
sound/hda/core/bus.c
··· 87 87 int snd_hdac_bus_exec_verb(struct hdac_bus *bus, unsigned int addr, 88 88 unsigned int cmd, unsigned int *res) 89 89 { 90 - int err; 91 - 92 - mutex_lock(&bus->cmd_mutex); 93 - err = snd_hdac_bus_exec_verb_unlocked(bus, addr, cmd, res); 94 - mutex_unlock(&bus->cmd_mutex); 95 - return err; 90 + guard(mutex)(&bus->cmd_mutex); 91 + return snd_hdac_bus_exec_verb_unlocked(bus, addr, cmd, res); 96 92 } 97 93 98 94 /**
+2 -4
sound/hda/core/component.c
··· 69 69 70 70 dev_dbg(bus->dev, "display power %s\n", str_enable_disable(enable)); 71 71 72 - mutex_lock(&bus->lock); 72 + guard(mutex)(&bus->lock); 73 73 if (enable) 74 74 set_bit(idx, &bus->display_power_status); 75 75 else 76 76 clear_bit(idx, &bus->display_power_status); 77 77 78 78 if (!acomp || !acomp->ops) 79 - goto unlock; 79 + return; 80 80 81 81 if (bus->display_power_status) { 82 82 if (!bus->display_power_active) { ··· 99 99 bus->display_power_active = 0; 100 100 } 101 101 } 102 - unlock: 103 - mutex_unlock(&bus->lock); 104 102 } 105 103 EXPORT_SYMBOL_GPL(snd_hdac_display_power); 106 104
+10 -13
sound/hda/core/device.c
··· 147 147 err = device_add(&codec->dev); 148 148 if (err < 0) 149 149 return err; 150 - mutex_lock(&codec->widget_lock); 151 - err = hda_widget_sysfs_init(codec); 152 - mutex_unlock(&codec->widget_lock); 150 + scoped_guard(mutex, &codec->widget_lock) { 151 + err = hda_widget_sysfs_init(codec); 152 + } 153 153 if (err < 0) { 154 154 device_del(&codec->dev); 155 155 return err; ··· 166 166 void snd_hdac_device_unregister(struct hdac_device *codec) 167 167 { 168 168 if (device_is_registered(&codec->dev)) { 169 - mutex_lock(&codec->widget_lock); 170 - hda_widget_sysfs_exit(codec); 171 - mutex_unlock(&codec->widget_lock); 169 + scoped_guard(mutex, &codec->widget_lock) { 170 + hda_widget_sysfs_exit(codec); 171 + } 172 172 device_del(&codec->dev); 173 173 snd_hdac_bus_remove_device(codec->bus, codec); 174 174 } ··· 411 411 * Serialize against multiple threads trying to update the sysfs 412 412 * widgets array. 413 413 */ 414 - mutex_lock(&codec->widget_lock); 414 + guard(mutex)(&codec->widget_lock); 415 415 nums = snd_hdac_get_sub_nodes(codec, codec->afg, &start_nid); 416 416 if (!start_nid || nums <= 0 || nums >= 0xff) { 417 417 dev_err(&codec->dev, "cannot read sub nodes for FG 0x%02x\n", 418 418 codec->afg); 419 - err = -EINVAL; 420 - goto unlock; 419 + return -EINVAL; 421 420 } 422 421 423 422 err = hda_widget_sysfs_reinit(codec, start_nid, nums); 424 423 if (err < 0) 425 - goto unlock; 424 + return err; 426 425 427 426 codec->num_nodes = nums; 428 427 codec->start_nid = start_nid; 429 428 codec->end_nid = start_nid + nums; 430 - unlock: 431 - mutex_unlock(&codec->widget_lock); 432 - return err; 429 + return 0; 433 430 } 434 431 EXPORT_SYMBOL_GPL(snd_hdac_refresh_widgets); 435 432
+2 -4
sound/hda/core/ext/controller.c
··· 300 300 unsigned long codec_mask; 301 301 int ret = 0; 302 302 303 - mutex_lock(&bus->lock); 303 + guard(mutex)(&bus->lock); 304 304 305 305 /* 306 306 * if we move from 0 to 1, count will be 1 so power up this link ··· 331 331 bus->codec_mask = codec_mask; 332 332 } 333 333 334 - mutex_unlock(&bus->lock); 335 334 return ret; 336 335 } 337 336 EXPORT_SYMBOL_GPL(snd_hdac_ext_bus_link_get); ··· 342 343 struct hdac_ext_link *hlink_tmp; 343 344 bool link_up = false; 344 345 345 - mutex_lock(&bus->lock); 346 + guard(mutex)(&bus->lock); 346 347 347 348 /* 348 349 * if we move from 1 to 0, count will be 0 ··· 368 369 } 369 370 } 370 371 371 - mutex_unlock(&bus->lock); 372 372 return ret; 373 373 } 374 374 EXPORT_SYMBOL_GPL(snd_hdac_ext_bus_link_put);
+11 -24
sound/hda/core/regmap.c
··· 425 425 static int reg_raw_write(struct hdac_device *codec, unsigned int reg, 426 426 unsigned int val) 427 427 { 428 - int err; 429 - 430 - mutex_lock(&codec->regmap_lock); 428 + guard(mutex)(&codec->regmap_lock); 431 429 if (!codec->regmap) 432 - err = hda_reg_write(codec, reg, val); 430 + return hda_reg_write(codec, reg, val); 433 431 else 434 - err = regmap_write(codec->regmap, reg, val); 435 - mutex_unlock(&codec->regmap_lock); 436 - return err; 432 + return regmap_write(codec->regmap, reg, val); 437 433 } 438 434 439 435 /* a helper macro to call @func_call; retry with power-up if failed */ ··· 462 466 static int reg_raw_read(struct hdac_device *codec, unsigned int reg, 463 467 unsigned int *val, bool uncached) 464 468 { 465 - int err; 466 - 467 - mutex_lock(&codec->regmap_lock); 469 + guard(mutex)(&codec->regmap_lock); 468 470 if (uncached || !codec->regmap) 469 - err = hda_reg_read(codec, reg, val); 471 + return hda_reg_read(codec, reg, val); 470 472 else 471 - err = regmap_read(codec->regmap, reg, val); 472 - mutex_unlock(&codec->regmap_lock); 473 - return err; 473 + return regmap_read(codec->regmap, reg, val); 474 474 } 475 475 476 476 static int __snd_hdac_regmap_read_raw(struct hdac_device *codec, ··· 507 515 bool change; 508 516 int err; 509 517 510 - mutex_lock(&codec->regmap_lock); 518 + guard(mutex)(&codec->regmap_lock); 511 519 if (codec->regmap) { 512 520 err = regmap_update_bits_check(codec->regmap, reg, mask, val, 513 521 &change); ··· 525 533 } 526 534 } 527 535 } 528 - mutex_unlock(&codec->regmap_lock); 529 536 return err; 530 537 } 531 538 ··· 547 556 static int reg_raw_update_once(struct hdac_device *codec, unsigned int reg, 548 557 unsigned int mask, unsigned int val) 549 558 { 550 - int err = 0; 551 - 552 559 if (!codec->regmap) 553 560 return reg_raw_update(codec, reg, mask, val); 554 561 555 - mutex_lock(&codec->regmap_lock); 562 + guard(mutex)(&codec->regmap_lock); 556 563 /* Discard any updates to already initialised registers. */ 557 564 if (!regcache_reg_cached(codec->regmap, reg)) 558 - err = regmap_update_bits(codec->regmap, reg, mask, val); 559 - mutex_unlock(&codec->regmap_lock); 560 - return err; 565 + return regmap_update_bits(codec->regmap, reg, mask, val); 566 + return 0; 561 567 } 562 568 563 569 /** ··· 581 593 */ 582 594 void snd_hdac_regmap_sync(struct hdac_device *codec) 583 595 { 584 - mutex_lock(&codec->regmap_lock); 596 + guard(mutex)(&codec->regmap_lock); 585 597 if (codec->regmap) 586 598 regcache_sync(codec->regmap); 587 - mutex_unlock(&codec->regmap_lock); 588 599 } 589 600 EXPORT_SYMBOL_GPL(snd_hdac_regmap_sync);