From nobody Sun Jul 26 01:45:53 2026 Received: from m16.mail.163.com (m16.mail.163.com [117.135.210.2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0E7773F0AA8; Fri, 10 Jul 2026 08:40:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=117.135.210.2 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783672853; cv=none; b=gXttBdQfWu9H/xNH8IbSe7mQHdcGpChq65wRVg1M4tkm+VqmsQAt3LQxEnN2j1YGcYc40/ApQwnW2Av7xX6yHGMx9MtBdPlP/ls5J3dt2uZixOAKQkQ/lkx/3eFxnMAPNk68dkihxG5lIotT2UKsXkD/mzy3zorePaYd1D5f1rI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783672853; c=relaxed/simple; bh=vjeXzvJysBNVryqHGRY2qgTAFKsmujbZx1C+wxWRg10=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=QpEOwRypByt6sIFso+ebaPHaUrlPjyYSvh+RbPKCszxqyHbx88g83aSLP3MBxpHyBwnVXeuKWlfp6RfHiKbb2SFegOqGp5OQ0jaLvn6D1Zm5d79tkVPGLCAgp1MCrLtW47oabXzBIz50QI3IgJfZLFtOCYO3vdrAYWfADKAoJwA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com; spf=pass smtp.mailfrom=163.com; dkim=pass (1024-bit key) header.d=163.com header.i=@163.com header.b=jqJpu4bb; arc=none smtp.client-ip=117.135.210.2 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=163.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=163.com header.i=@163.com header.b="jqJpu4bb" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:To:Subject:Date:Message-Id:MIME-Version; bh=B2 KzJRY0o/yxWMt8IZ4bWs1sbL8etNvXMlVnjDa1lRQ=; b=jqJpu4bbSUNZC3+fcg NETX0mMMNQZFdkwfsYST97viqAJzR27MtCpDfVXO2+GT5ZS/+MWZgdbz5Gs9CP7z bqHsgXXK5GWEfR/vG6xM+vXI+dNibfpLlOOfvzIPNGPj/f+mjqq9YHCprgbXHWcV 624OzWJ0/s/o38K92wy2r77I8= Received: from localhost.localdomain (unknown []) by gzga-smtp-mtada-g1-3 (Coremail) with SMTP id _____wAn6Ozsr1BqBwqkHg--.166S3; Fri, 10 Jul 2026 16:40:26 +0800 (CST) From: wangdich9700@163.com To: tiwai@suse.com, david.rhodes@cirrus.com, wangdich9700@163.com Cc: linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, wangdicheng Subject: [PATCH v2 1/3] ALSA: hda/cs35l41: Use scoped_guard() for fw_mutex in cs35l41_hda_bind() Date: Fri, 10 Jul 2026 16:40:07 +0800 Message-Id: <20260710084009.665814-2-wangdich9700@163.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260710084009.665814-1-wangdich9700@163.com> References: <20260710084009.665814-1-wangdich9700@163.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: _____wAn6Ozsr1BqBwqkHg--.166S3 X-Coremail-Antispam: 1Uf129KBjvJXoWxWr1rKryUGr1DGF4rKFy3Jwb_yoWrJr13pa 15XayfGrs8XF129r17JF4xZFs8uryFga15Wr1jya48Jw1SgryUJay3XF12qF1fXrZF9343 XF17trn3ZryUtr7anT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x0pigTm3UUUUU= X-CM-SenderInfo: pzdqwv5lfkmliqq6il2tof0z/xtbCvxrYKGpQr-oybQAA3l Content-Type: text/plain; charset="utf-8" From: wangdicheng The rest of the driver already uses guard()/scoped_guard() for fw_mutex. Replace the manual mutex_lock/mutex_unlock pair in cs35l41_hda_bind() with scoped_guard() for consistency. No functional changes. Signed-off-by: wangdicheng --- sound/hda/codecs/side-codecs/cs35l41_hda.c | 57 +++++++++++----------- 1 file changed, 28 insertions(+), 29 deletions(-) diff --git a/sound/hda/codecs/side-codecs/cs35l41_hda.c b/sound/hda/codecs/= side-codecs/cs35l41_hda.c index 64a5bd895fd1..818ea8e3f8d6 100644 --- a/sound/hda/codecs/side-codecs/cs35l41_hda.c +++ b/sound/hda/codecs/side-codecs/cs35l41_hda.c @@ -1482,42 +1482,41 @@ static int cs35l41_hda_bind(struct device *dev, str= uct device *master, void *mas =20 guard(pm_runtime_active_auto)(dev); =20 - mutex_lock(&cs35l41->fw_mutex); - - comp->dev =3D dev; - cs35l41->codec =3D parent->codec; - if (!cs35l41->acpi_subsystem_id) - cs35l41->acpi_subsystem_id =3D kasprintf(GFP_KERNEL, "%.8x", - cs35l41->codec->core.subsystem_id); - - strscpy(comp->name, dev_name(dev), sizeof(comp->name)); + scoped_guard(mutex, &cs35l41->fw_mutex) { + comp->dev =3D dev; + cs35l41->codec =3D parent->codec; + if (!cs35l41->acpi_subsystem_id) + cs35l41->acpi_subsystem_id =3D kasprintf(GFP_KERNEL, "%.8x", + cs35l41->codec->core.subsystem_id); =20 - cs35l41->firmware_type =3D CS35L41_HDA_FW_SPK_PROT; + strscpy(comp->name, dev_name(dev), sizeof(comp->name)); =20 - if (firmware_autostart) { - dev_dbg(cs35l41->dev, "Firmware Autostart.\n"); - cs35l41->request_fw_load =3D true; - if (cs35l41_smart_amp(cs35l41) < 0) - dev_warn(cs35l41->dev, "Cannot Run Firmware, reverting to dsp bypass...= \n"); - } else { - dev_dbg(cs35l41->dev, "Firmware Autostart is disabled.\n"); - } + cs35l41->firmware_type =3D CS35L41_HDA_FW_SPK_PROT; =20 - ret =3D cs35l41_create_controls(cs35l41); + if (firmware_autostart) { + dev_dbg(cs35l41->dev, "Firmware Autostart.\n"); + cs35l41->request_fw_load =3D true; + if (cs35l41_smart_amp(cs35l41) < 0) + dev_warn(cs35l41->dev, "Cannot Run Firmware, reverting to dsp bypass..= .\n"); + } else { + dev_dbg(cs35l41->dev, "Firmware Autostart is disabled.\n"); + } =20 - comp->playback_hook =3D cs35l41_hda_playback_hook; - comp->pre_playback_hook =3D cs35l41_hda_pre_playback_hook; - comp->post_playback_hook =3D cs35l41_hda_post_playback_hook; - comp->acpi_notify =3D cs35l41_acpi_device_notify; - comp->adev =3D cs35l41->dacpi; + ret =3D cs35l41_create_controls(cs35l41); =20 - comp->acpi_notifications_supported =3D cs35l41_dsm_supported(acpi_device_= handle(comp->adev), - CS35L41_DSM_GET_MUTE); + comp->playback_hook =3D cs35l41_hda_playback_hook; + comp->pre_playback_hook =3D cs35l41_hda_pre_playback_hook; + comp->post_playback_hook =3D cs35l41_hda_post_playback_hook; + comp->acpi_notify =3D cs35l41_acpi_device_notify; + comp->adev =3D cs35l41->dacpi; =20 - cs35l41->mute_override =3D cs35l41_get_acpi_mute_state(cs35l41, - acpi_device_handle(cs35l41->dacpi)) > 0; + comp->acpi_notifications_supported =3D + cs35l41_dsm_supported(acpi_device_handle(comp->adev), + CS35L41_DSM_GET_MUTE); =20 - mutex_unlock(&cs35l41->fw_mutex); + cs35l41->mute_override =3D cs35l41_get_acpi_mute_state(cs35l41, + acpi_device_handle(cs35l41->dacpi)) > 0; + } =20 sleep_flags =3D lock_system_sleep(); if (!device_link_add(&cs35l41->codec->core.dev, cs35l41->dev, DL_FLAG_STA= TELESS)) --=20 2.25.1 From nobody Sun Jul 26 01:45:53 2026 Received: from m16.mail.163.com (m16.mail.163.com [220.197.31.4]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 48D453F0A88; Fri, 10 Jul 2026 08:40:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=220.197.31.4 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783672849; cv=none; b=PVu3VgkEvhwPUzA0MGYLAkzNZAjx5OCKphsUoNylXD0zAiOD+WNfAkS6/KUDNNgsylRB5qUYXTlZqO9Bhiwcy5NxXuOpJiSqfzuek7rj50cJc6UH0EeW9cvl2kRgMcMPn9tnOUD0bGpE03yWg85nc80z+iPY2NUdcm/edYPZFoc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783672849; c=relaxed/simple; bh=qulgJOzogO+UC/G/OlNCEqkBZJY/Q9VNjzFQ9x/hxkM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=nwFCWLhMNa+lJo3dQPsY2A17YPZJopJiveRuFtepfWjXqempxL4k3o3SSSgBP2kXDGSI7ijMoHJn3R0jshkb8HIklorlrpuDbc68e6H4Z19HiGdsn/7QyW0qwOYV39Z4d01lnRyOMG2K+82jxaaCbYr3mD5R5tRlLLHl440/Fo0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com; spf=pass smtp.mailfrom=163.com; dkim=pass (1024-bit key) header.d=163.com header.i=@163.com header.b=HzEa0trw; arc=none smtp.client-ip=220.197.31.4 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=163.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=163.com header.i=@163.com header.b="HzEa0trw" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:To:Subject:Date:Message-Id:MIME-Version; bh=YK c7xw1ZYgEOFIA8/efahX17jcyqGbPE1YxLM6TLLNs=; b=HzEa0trwQsR95XneCN TIfVTeaXYtQd4M8BXzrKmSeU3FRJ+j12WZjdecZPvGW2WnGLOS94GkacfkgU6wVG Y/Xl3g6YRvtRV7FuKYY4uGcDVIMfrURYhziKrNXmWVmQLy1jwEprINAuf8P+qJfr 5nx8R0PQM9CrkVTbWlPxhxaMw= Received: from localhost.localdomain (unknown []) by gzga-smtp-mtada-g1-3 (Coremail) with SMTP id _____wAn6Ozsr1BqBwqkHg--.166S4; Fri, 10 Jul 2026 16:40:27 +0800 (CST) From: wangdich9700@163.com To: tiwai@suse.com, david.rhodes@cirrus.com, wangdich9700@163.com Cc: linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, wangdicheng Subject: [PATCH v2 2/3] ALSA: hda/cs35l56: Use scoped_guard() for irq_lock in cs35l56_hda_fw_load() Date: Fri, 10 Jul 2026 16:40:08 +0800 Message-Id: <20260710084009.665814-3-wangdich9700@163.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260710084009.665814-1-wangdich9700@163.com> References: <20260710084009.665814-1-wangdich9700@163.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: _____wAn6Ozsr1BqBwqkHg--.166S4 X-Coremail-Antispam: 1Uf129KBjvJXoWxtFy8Jw45Kry5Gw4xXw18Krg_yoW7CFWfpF WrJay7Gr43X3WfArZxZF4UXF1YvwsY9rZ5u340kr1rZrsxZryqvry0vFnrXFnYqrWkC3W7 ZFW7JryrJa1UKF7anT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x0zE2QDUUUUUU= X-CM-SenderInfo: pzdqwv5lfkmliqq6il2tof0z/xtbC5xzZKWpQr-yqhQAA3N Content-Type: text/plain; charset="utf-8" From: wangdicheng Replace the manual mutex_lock/mutex_unlock of irq_lock with scoped_guard(). This lets the compiler guarantee the lock is released on all exit paths, eliminating the err label that previously existed only to reach the unlock call. No functional changes. Signed-off-by: wangdicheng --- sound/hda/codecs/side-codecs/cs35l56_hda.c | 104 ++++++++++----------- 1 file changed, 51 insertions(+), 53 deletions(-) diff --git a/sound/hda/codecs/side-codecs/cs35l56_hda.c b/sound/hda/codecs/= side-codecs/cs35l56_hda.c index a0ea08eb96a9..4f74397ea06f 100644 --- a/sound/hda/codecs/side-codecs/cs35l56_hda.c +++ b/sound/hda/codecs/side-codecs/cs35l56_hda.c @@ -625,74 +625,72 @@ static void cs35l56_hda_fw_load(struct cs35l56_hda *c= s35l56) goto err_fw_release; } =20 - mutex_lock(&cs35l56->base.irq_lock); + scoped_guard(mutex, &cs35l56->base.irq_lock) { + /* + * If the firmware hasn't been patched it must be shutdown before + * doing a full patch and reset afterwards. If it is already + * running a patched version the firmware files only contain + * tunings and we can use the lower cost reinit sequence instead. + */ + if (firmware_missing && (wmfw_firmware || coeff_firmware)) { + ret =3D cs35l56_firmware_shutdown(&cs35l56->base); + if (ret) + goto err_powered_up; + } =20 - /* - * If the firmware hasn't been patched it must be shutdown before - * doing a full patch and reset afterwards. If it is already - * running a patched version the firmware files only contain - * tunings and we can use the lower cost reinit sequence instead. - */ - if (firmware_missing && (wmfw_firmware || coeff_firmware)) { - ret =3D cs35l56_firmware_shutdown(&cs35l56->base); - if (ret) - goto err; - } + ret =3D cs_dsp_power_up(&cs35l56->cs_dsp, wmfw_firmware, wmfw_filename, + coeff_firmware, coeff_filename, "misc"); + if (ret) { + dev_dbg(cs35l56->base.dev, "%s: cs_dsp_power_up ret %d\n", __func__, re= t); + goto err_powered_up; + } =20 - ret =3D cs_dsp_power_up(&cs35l56->cs_dsp, wmfw_firmware, wmfw_filename, - coeff_firmware, coeff_filename, "misc"); - if (ret) { - dev_dbg(cs35l56->base.dev, "%s: cs_dsp_power_up ret %d\n", __func__, ret= ); - goto err; - } + if (wmfw_filename) + dev_dbg(cs35l56->base.dev, "Loaded WMFW Firmware: %s\n", wmfw_filename); + + if (coeff_filename) + dev_dbg(cs35l56->base.dev, "Loaded Coefficients: %s\n", coeff_filename); =20 - if (wmfw_filename) - dev_dbg(cs35l56->base.dev, "Loaded WMFW Firmware: %s\n", wmfw_filename); + /* If we downloaded firmware, reset the device and wait for it to boot */ + if (firmware_missing && (wmfw_firmware || coeff_firmware)) { + cs35l56_system_reset(&cs35l56->base, false); + regcache_mark_dirty(cs35l56->base.regmap); + ret =3D cs35l56_wait_for_firmware_boot(&cs35l56->base); + if (ret) + goto err_powered_up; =20 - if (coeff_filename) - dev_dbg(cs35l56->base.dev, "Loaded Coefficients: %s\n", coeff_filename); + regcache_cache_only(cs35l56->base.regmap, false); + } =20 - /* If we downloaded firmware, reset the device and wait for it to boot */ - if (firmware_missing && (wmfw_firmware || coeff_firmware)) { - cs35l56_system_reset(&cs35l56->base, false); - regcache_mark_dirty(cs35l56->base.regmap); - ret =3D cs35l56_wait_for_firmware_boot(&cs35l56->base); + /* Disable auto-hibernate so that runtime_pm has control */ + ret =3D cs35l56_mbox_send(&cs35l56->base, CS35L56_MBOX_CMD_PREVENT_AUTO_= HIBERNATE); if (ret) goto err_powered_up; =20 - regcache_cache_only(cs35l56->base.regmap, false); - } + regcache_sync(cs35l56->base.regmap); =20 - /* Disable auto-hibernate so that runtime_pm has control */ - ret =3D cs35l56_mbox_send(&cs35l56->base, CS35L56_MBOX_CMD_PREVENT_AUTO_H= IBERNATE); - if (ret) - goto err_powered_up; - - regcache_sync(cs35l56->base.regmap); - - regmap_clear_bits(cs35l56->base.regmap, - cs35l56->base.fw_reg->prot_sts, - CS35L56_FIRMWARE_MISSING); - cs35l56->base.fw_patched =3D true; + regmap_clear_bits(cs35l56->base.regmap, + cs35l56->base.fw_reg->prot_sts, + CS35L56_FIRMWARE_MISSING); + cs35l56->base.fw_patched =3D true; =20 - ret =3D cs_dsp_run(&cs35l56->cs_dsp); - if (ret) - dev_dbg(cs35l56->base.dev, "%s: cs_dsp_run ret %d\n", __func__, ret); + ret =3D cs_dsp_run(&cs35l56->cs_dsp); + if (ret) + dev_dbg(cs35l56->base.dev, "%s: cs_dsp_run ret %d\n", __func__, ret); =20 - /* Don't need to check return code, it's not fatal if this fails */ - cs35l56_hda_apply_calibration(cs35l56); + /* Don't need to check return code, it's not fatal if this fails */ + cs35l56_hda_apply_calibration(cs35l56); =20 - ret =3D cs35l56_mbox_send(&cs35l56->base, CS35L56_MBOX_CMD_AUDIO_REINIT); - if (ret) - cs_dsp_stop(&cs35l56->cs_dsp); + ret =3D cs35l56_mbox_send(&cs35l56->base, CS35L56_MBOX_CMD_AUDIO_REINIT); + if (ret) + cs_dsp_stop(&cs35l56->cs_dsp); =20 - cs35l56_log_tuning(&cs35l56->base, &cs35l56->cs_dsp); + cs35l56_log_tuning(&cs35l56->base, &cs35l56->cs_dsp); =20 err_powered_up: - if (!cs35l56->base.fw_patched) - cs_dsp_power_down(&cs35l56->cs_dsp); -err: - mutex_unlock(&cs35l56->base.irq_lock); + if (!cs35l56->base.fw_patched) + cs_dsp_power_down(&cs35l56->cs_dsp); + } err_fw_release: cs35l56_hda_release_firmware_files(wmfw_firmware, wmfw_filename, coeff_firmware, coeff_filename); --=20 2.25.1 From nobody Sun Jul 26 01:45:53 2026 Received: from m16.mail.163.com (m16.mail.163.com [117.135.210.4]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 28D493F1654; Fri, 10 Jul 2026 08:40:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=117.135.210.4 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783672856; cv=none; b=Hxyjf0MKUHjejLaOsE+Nmtguuz48axtFqnlL2JXooSTl5/F87pGo1MadfunufiR0Hg2OOWv+KGxz81vnSLasKkkEbttR8KJ4P39zOW1jXyyDOmSYkVgMIQU4E2dDLnp/HS8vDYCb2eTvUvC4pgNZssgMOC60TS7x37PWa/fvMP8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783672856; c=relaxed/simple; bh=DBQwd6eVgUCN0rjT7V5Z6SU7agbYvS/ZWdiBkiJcybg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=lQnC+ApQfK1V7VFrwKBpKze1MwiD7NKkAgHrTrw+OU6qwi+Sem6xkMIua+BJUMKwuH2lEKzKHzyfyo/DUrrbCBS3X/fW2L470LfNpVUWdjzzj4fPtZ9lXu+iBu/EhQJbCz1/bkzp3tK2oePX17xgnnG3HA/oOUXth5mRb5RZzbs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com; spf=pass smtp.mailfrom=163.com; dkim=pass (1024-bit key) header.d=163.com header.i=@163.com header.b=WpIVWD06; arc=none smtp.client-ip=117.135.210.4 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=163.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=163.com header.i=@163.com header.b="WpIVWD06" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:To:Subject:Date:Message-Id:MIME-Version; bh=0V Wj7RfYSAmJyUbEPm8o5PtRCM0dcxCSmc/H+++NpOM=; b=WpIVWD06s7BEb6E0U1 mpVsaAQdI8cg4cJOm5TV9/1E6k60y8liq26nMlCIXI5D+ZbPwSs/d00w2K5RKA/H hmhoOhVoSkyuwG8BjXsFTeq1J0vSOvAtc1Puox3L73q8jocTamYG37BWgf8LO5Dp 6VNi1mZPQSe0wR67p3oYEHeu8= Received: from localhost.localdomain (unknown []) by gzga-smtp-mtada-g1-3 (Coremail) with SMTP id _____wAn6Ozsr1BqBwqkHg--.166S5; Fri, 10 Jul 2026 16:40:29 +0800 (CST) From: wangdich9700@163.com To: tiwai@suse.com, david.rhodes@cirrus.com, wangdich9700@163.com Cc: linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, wangdicheng Subject: [PATCH v2 3/3] ALSA: hda: Use scoped_guard() for open_mutex in azx_pcm_open() Date: Fri, 10 Jul 2026 16:40:09 +0800 Message-Id: <20260710084009.665814-4-wangdich9700@163.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260710084009.665814-1-wangdich9700@163.com> References: <20260710084009.665814-1-wangdich9700@163.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: _____wAn6Ozsr1BqBwqkHg--.166S5 X-Coremail-Antispam: 1Uf129KBjvJXoWxtFy8Zry3GryDXw43JFW3trb_yoWxXF18pr Wfur40k393XFn2gFn7tw1I9r1rAa4Ska15K393ta40yw13Ga4Ygryvyw109FZak3y2yF15 ZF4kX347Xr9rKF7anT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x0zRN6pQUUUUU= X-CM-SenderInfo: pzdqwv5lfkmliqq6il2tof0z/xtbC6B3ZKWpQr-2ttAAA30 Content-Type: text/plain; charset="utf-8" From: wangdicheng The companion function azx_pcm_close() already uses scoped_guard(mutex, &chip->open_mutex). Replace the manual mutex_lock/mutex_unlock pair in azx_pcm_open() with the same pattern for consistency. All goto targets are within the scoped_guard() block, avoiding the goto-jumping-out-of-scope pattern that is not recommended when using cleanup guards. No functional changes. Signed-off-by: wangdicheng --- sound/hda/common/controller.c | 158 +++++++++++++++++----------------- 1 file changed, 81 insertions(+), 77 deletions(-) diff --git a/sound/hda/common/controller.c b/sound/hda/common/controller.c index afec5c5546ec..04ae21cc5e5e 100644 --- a/sound/hda/common/controller.c +++ b/sound/hda/common/controller.c @@ -584,86 +584,90 @@ static int azx_pcm_open(struct snd_pcm_substream *sub= stream) int buff_step; =20 snd_hda_codec_pcm_get(apcm->info); - mutex_lock(&chip->open_mutex); - azx_dev =3D azx_assign_device(chip, substream); - trace_azx_pcm_open(chip, azx_dev); - if (azx_dev =3D=3D NULL) { - err =3D -EBUSY; - goto unlock; - } - runtime->private_data =3D azx_dev; - - runtime->hw =3D azx_pcm_hw; - if (chip->gts_present) - runtime->hw.info |=3D SNDRV_PCM_INFO_HAS_LINK_SYNCHRONIZED_ATIME; - runtime->hw.channels_min =3D hinfo->channels_min; - runtime->hw.channels_max =3D hinfo->channels_max; - runtime->hw.formats =3D hinfo->formats; - runtime->hw.rates =3D hinfo->rates; - snd_pcm_limit_hw_rates(runtime); - snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS); - - /* avoid wrap-around with wall-clock */ - snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_BUFFER_TIME, - 20, - 178000000); - - if (chip->align_buffer_size) - /* constrain buffer sizes to be multiple of 128 - bytes. This is more efficient in terms of memory - access but isn't required by the HDA spec and - prevents users from specifying exact period/buffer - sizes. For example for 44.1kHz, a period size set - to 20ms will be rounded to 19.59ms. */ - buff_step =3D 128; - else - /* Don't enforce steps on buffer sizes, still need to - be multiple of 4 bytes (HDA spec). Tested on Intel - HDA controllers, may not work on all devices where - option needs to be disabled */ - buff_step =3D 4; - - snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_BUFFER_BYTES, - buff_step); - snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_BYTES, - buff_step); - snd_hda_power_up(apcm->codec); - if (hinfo->ops.open) - err =3D hinfo->ops.open(hinfo, apcm->codec, substream); - else - err =3D -ENODEV; - if (err < 0) { - azx_release_device(azx_dev); - goto powerdown; - } - snd_pcm_limit_hw_rates(runtime); - /* sanity check */ - if (snd_BUG_ON(!runtime->hw.channels_min) || - snd_BUG_ON(!runtime->hw.channels_max) || - snd_BUG_ON(!runtime->hw.formats) || - snd_BUG_ON(!runtime->hw.rates)) { - azx_release_device(azx_dev); - if (hinfo->ops.close) - hinfo->ops.close(hinfo, apcm->codec, substream); - err =3D -EINVAL; - goto powerdown; - } + scoped_guard(mutex, &chip->open_mutex) { + azx_dev =3D azx_assign_device(chip, substream); + trace_azx_pcm_open(chip, azx_dev); + if (azx_dev =3D=3D NULL) { + err =3D -EBUSY; + break; + } + runtime->private_data =3D azx_dev; + + runtime->hw =3D azx_pcm_hw; + if (chip->gts_present) + runtime->hw.info |=3D SNDRV_PCM_INFO_HAS_LINK_SYNCHRONIZED_ATIME; + runtime->hw.channels_min =3D hinfo->channels_min; + runtime->hw.channels_max =3D hinfo->channels_max; + runtime->hw.formats =3D hinfo->formats; + runtime->hw.rates =3D hinfo->rates; + snd_pcm_limit_hw_rates(runtime); + snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS); + + /* avoid wrap-around with wall-clock */ + snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_BUFFER_TIME, + 20, + 178000000); + + if (chip->align_buffer_size) + /* + * Constrain buffer sizes to be multiple of 128 + * bytes. This is more efficient in terms of memory + * access but isn't required by the HDA spec and + * prevents users from specifying exact period/buffer + * sizes. For example for 44.1kHz, a period size set + * to 20ms will be rounded to 19.59ms. + */ + buff_step =3D 128; + else + /* + * Don't enforce steps on buffer sizes, still need to + * be multiple of 4 bytes (HDA spec). Tested on Intel + * HDA controllers, may not work on all devices where + * option needs to be disabled + */ + buff_step =3D 4; + + snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_BUFFER_BYTES, + buff_step); + snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_BYTES, + buff_step); + snd_hda_power_up(apcm->codec); + if (hinfo->ops.open) + err =3D hinfo->ops.open(hinfo, apcm->codec, substream); + else + err =3D -ENODEV; + if (err < 0) { + azx_release_device(azx_dev); + goto powerdown; + } + snd_pcm_limit_hw_rates(runtime); + /* sanity check */ + if (snd_BUG_ON(!runtime->hw.channels_min) || + snd_BUG_ON(!runtime->hw.channels_max) || + snd_BUG_ON(!runtime->hw.formats) || + snd_BUG_ON(!runtime->hw.rates)) { + azx_release_device(azx_dev); + if (hinfo->ops.close) + hinfo->ops.close(hinfo, apcm->codec, substream); + err =3D -EINVAL; + goto powerdown; + } =20 - /* disable LINK_ATIME timestamps for capture streams - until we figure out how to handle digital inputs */ - if (substream->stream =3D=3D SNDRV_PCM_STREAM_CAPTURE) { - runtime->hw.info &=3D ~SNDRV_PCM_INFO_HAS_WALL_CLOCK; /* legacy */ - runtime->hw.info &=3D ~SNDRV_PCM_INFO_HAS_LINK_ATIME; - } + /* + * Disable LINK_ATIME timestamps for capture streams + * until we figure out how to handle digital inputs + */ + if (substream->stream =3D=3D SNDRV_PCM_STREAM_CAPTURE) { + runtime->hw.info &=3D ~SNDRV_PCM_INFO_HAS_WALL_CLOCK; /* legacy */ + runtime->hw.info &=3D ~SNDRV_PCM_INFO_HAS_LINK_ATIME; + } =20 - snd_pcm_set_sync(substream); - mutex_unlock(&chip->open_mutex); - return 0; + snd_pcm_set_sync(substream); + return 0; =20 - powerdown: - snd_hda_power_down(apcm->codec); - unlock: - mutex_unlock(&chip->open_mutex); +powerdown: + snd_hda_power_down(apcm->codec); + } snd_hda_codec_pcm_put(apcm->info); return err; } --=20 2.25.1