From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-dy1-f171.google.com (mail-dy1-f171.google.com [74.125.82.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F0A7C3BE631 for ; Thu, 4 Jun 2026 04:48:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.171 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780548516; cv=none; b=hyc2uBrFp3OvpbxQv2phTr2pN5xOoYvY8rlB7Ttq1yP24fCuZM0J3Ro7I5XhjvYl7qdqPId/TCDNZ563rNYe2QWllBgHee1+DbzUws5i94V5K1aP4JgyN7WEKAYM7w5c0u/A36djnLOFLXqgNV4d1n2rFBxdm+dHgE1xYQS8N1s= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780548516; c=relaxed/simple; bh=bB1vYJSSsJt9BPF1zYdGfpQ7LI1f6Y1FGNnXE5Sp1sw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lCc6p3o0bFYYAxYqgg0WINqYz9A2Jx5vA/rzetOkexqyIa0pOKWCYh15e21rF3h+cP0he9tsRuXw88QY9XLcjsFaQ8bYXfE/2C+WsBtiTRn7t2dtjwQAL17As6QtV79W34Jmn1zfyY5F1+h2pSOhZOnIQMsfnYp1D00WbQwN8rQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=WtKw2geZ; arc=none smtp.client-ip=74.125.82.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="WtKw2geZ" Received: by mail-dy1-f171.google.com with SMTP id 5a478bee46e88-307631dbfedso521562eec.0 for ; Wed, 03 Jun 2026 21:48:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780548513; x=1781153313; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=UXHfUcuH10L0/6a7zR3RLI3Obf5/Gim3DEF8nv2ZMnM=; b=WtKw2geZX47homOADiYrDtK1cUZ3//WTBoYUOOrS0fT1OmE1XmkCmcnEiBnwHE+Jws 8uJqrsNqI/cFSk+scoiz7DgHef7vp2y82oFDEdDuuoV/BrLD81I6E11W8F69TB9AOazJ u1vxK+FzYe3bV1v0DsCKRRh3nz1gcqbxbWWYy7ydwImj+mKglOn5XnbmXtueQELY1eMR GVH28i3F/8Mqt7iXwmBcHAJeZVn2WA9Qh3S1v5nz1mQXRNgYNKErNmR2hx1U7SpibMCS JhKpPaTE7G5hFpTR0J9f++UTRj0fG/DboNIdv6swJ0j7BB2YJy6TPx/QAsvVJUQs0CWH N0WA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780548513; x=1781153313; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=UXHfUcuH10L0/6a7zR3RLI3Obf5/Gim3DEF8nv2ZMnM=; b=i6b34g7dh71voVCV0P7saYi+l4vC/n40ISJG1csK/53rAQoYNXMKFHqrLqjcQkbekm 4+GrYWnC0tDiLywW8L75dic5ARGC9msA1TQm1jdZ8ihF6SXpNy9ar8vfO6aeykOILl/X vo32SMAipGBDOE3HMw//ToDK25aPpqcitzacdY1cXLrJWbB3eUFUJFdHgtOKxbvJyjny MsKGXFDyqXatl63coakV1AsqDglKMU/3qTrwL7Q2P03aJpvA5ECZVoYgRnhHt+VsTe+z KwvyMPD9vTXwqMbbW1qelNCHtOLOiuKx6onkL3WKaXuExLz4njH9eS/JgmW7DrRn4F+V IT0A== X-Forwarded-Encrypted: i=1; AFNElJ/i00JRhr0S+CQKV0OapahjmzYPFl8ZaWA/QGgLlxyNoQ0dbVU2q6/KiQqlvNvmWkerT+aK9R26awkZrZc=@vger.kernel.org X-Gm-Message-State: AOJu0YyMt3UqT42aTpFYaxqocZInJ0+fReKOhKDSSydJzWl/qeLoZEX/ kWHDibNaUK6qXzm2IJpf9T6sqBrQIvWlpm3e2Xfv0XhSUXRsCRIQVbCQXlWhLPoM X-Gm-Gg: Acq92OGMbBDfnfrbtm4RMzy0cg94mbFkH9VRUh3ZyLZZ7/Q4J5uflFjBft2Q9cY24yO YhN/nt4+1uu/NM0R8BImzeBnk+jXOsHJmR+SAsa3FvxUCDx/8gJTkAWoQXetpKIjJMyUwUSeyop oK5O/be66xBYNEebeC+AX+zVPL0Wdp+8gxGzJ6ky3ihnHl1HH4dYWtPgPB0fIJDscrmwOaYwjv4 I+1Jdlcm8sCpAu1CVFSl9MMplw+lNGcvGu/hCVwwgSDz770HAMjjjiY/oBnxT+VDtOu/0m3eOlh S8EobMIzN18TXQNqU4D0djpcOPgGiMkIgFoaAdPIYKdXfK4xsymXCqamTEhzyBrS/lJ/il8OES4 bZob/OOBGAgI6Uk+ZnSRhrJh3gR2IruSzpJcxY5Ozpqj6KEtqoEtW6aDgwIYY9myldJ/4d5F7bT y+UPLTOcxgwaGdMA3YLVLms4TCnZ3rHyrlBMY17RHHVwsu7u+GWALFNpIjBkrhjQcqBa4jIvkc/ CYqE/MQSJsj X-Received: by 2002:a05:7301:9f0a:b0:2e7:c701:aa85 with SMTP id 5a478bee46e88-3074fb82479mr3992499eec.17.1780548512851; Wed, 03 Jun 2026 21:48:32 -0700 (PDT) Received: from [192.168.1.18] (177-4-161-23.user3p.v-tal.net.br. [177.4.161.23]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3074dba9d43sm3815039eec.10.2026.06.03.21.48.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Jun 2026 21:48:32 -0700 (PDT) From: =?utf-8?q?C=C3=A1ssio_Gabriel?= Date: Thu, 04 Jun 2026 01:48:13 -0300 Subject: [PATCH 2/3] ALSA: core: Add scoped cleanup helper for card references Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit Message-Id: <20260604-alsa-scoped-cleanups-v1-2-10c43152a728@gmail.com> References: <20260604-alsa-scoped-cleanups-v1-0-10c43152a728@gmail.com> In-Reply-To: <20260604-alsa-scoped-cleanups-v1-0-10c43152a728@gmail.com> To: Takashi Iwai , Jaroslav Kysela Cc: linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, notify@kernel.org, =?utf-8?q?C=C3=A1ssio_Gabriel?= X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3203; i=cassiogabrielcontato@gmail.com; h=from:subject:message-id; bh=bB1vYJSSsJt9BPF1zYdGfpQ7LI1f6Y1FGNnXE5Sp1sw=; b=owGbwMvMwCV2IdZeKur/u2bG02pJDFmKzDP+NcrrTtoxy3fdLNegYscZZ5+eiZ7+pIOj/J2Xj V5GudSRjlIWBjEuBlkxRZbVSYss93Q9uFoft8IDZg4rE8gQBi5OAZhI51OG/3n3Sq6eCf4+safY p7nb5PWSS2ZPfrzM37i28mnRTuOUXFFGhtvnUnhmJbVMzz+873CLR0O4dDvXq5Lb53srZW6LJnY 8YAYA X-Developer-Key: i=cassiogabrielcontato@gmail.com; a=openpgp; fpr=AB62A239BC8AE0D57F5EA848D05D3F1A5AFFEE83 Several ALSA paths acquire temporary card references with snd_card_ref() and release them manually with snd_card_unref(). control_led.c already defines a local cleanup helper for this pattern, while other core paths still open-code the release. Move the helper to the common ALSA core header and use it in control-layer card-reference paths. This makes the ownership rule explicit and avoids future missing-unref mistakes when adding early exits. No functional change is intended. Signed-off-by: Cássio Gabriel --- include/sound/core.h | 2 ++ sound/core/control.c | 6 +++--- sound/core/control_led.c | 11 ++++------- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/include/sound/core.h b/include/sound/core.h index 4bb76c21c956..8b2ca95d13f7 100644 --- a/include/sound/core.h +++ b/include/sound/core.h @@ -319,6 +319,8 @@ static inline void snd_card_unref(struct snd_card *card) put_device(&card->card_dev); } +DEFINE_FREE(snd_card_unref, struct snd_card *, if (_T) snd_card_unref(_T)) + #define snd_card_set_dev(card, devptr) ((card)->dev = (devptr)) /* device.c */ diff --git a/sound/core/control.c b/sound/core/control.c index 28fffbe92e66..7a8dc506221e 100644 --- a/sound/core/control.c +++ b/sound/core/control.c @@ -2291,7 +2291,6 @@ EXPORT_SYMBOL_GPL(snd_ctl_request_layer); */ void snd_ctl_register_layer(struct snd_ctl_layer_ops *lops) { - struct snd_card *card; int card_number; scoped_guard(rwsem_write, &snd_ctl_layer_rwsem) { @@ -2299,11 +2298,12 @@ void snd_ctl_register_layer(struct snd_ctl_layer_ops *lops) snd_ctl_layer = lops; } for (card_number = 0; card_number < SNDRV_CARDS; card_number++) { - card = snd_card_ref(card_number); + struct snd_card *card __free(snd_card_unref) = + snd_card_ref(card_number); + if (card) { scoped_guard(rwsem_read, &card->controls_rwsem) lops->lregister(card); - snd_card_unref(card); } } } diff --git a/sound/core/control_led.c b/sound/core/control_led.c index d92b36ab5ec6..8cbacee57ce7 100644 --- a/sound/core/control_led.c +++ b/sound/core/control_led.c @@ -240,8 +240,6 @@ static void snd_ctl_led_notify(struct snd_card *card, unsigned int mask, } } -DEFINE_FREE(snd_card_unref, struct snd_card *, if (_T) snd_card_unref(_T)) - static int snd_ctl_led_set_id(int card_number, struct snd_ctl_elem_id *id, unsigned int group, bool set) { @@ -758,18 +756,17 @@ static int __init snd_ctl_led_init(void) static void __exit snd_ctl_led_exit(void) { struct snd_ctl_led *led; - struct snd_card *card; unsigned int group, card_number; snd_ctl_disconnect_layer(&snd_ctl_led_lops); for (card_number = 0; card_number < SNDRV_CARDS; card_number++) { if (!snd_ctl_led_card_valid[card_number]) continue; - card = snd_card_ref(card_number); - if (card) { + struct snd_card *card __free(snd_card_unref) = + snd_card_ref(card_number); + + if (card) snd_ctl_led_sysfs_remove(card); - snd_card_unref(card); - } } for (group = 0; group < MAX_LED; group++) { led = &snd_ctl_leds[group]; -- 2.54.0