From nobody Tue Jun 16 19:33:55 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (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 AFBB9278156 for ; Wed, 29 Apr 2026 15:43:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777477424; cv=none; b=FhsYG3+BXd+c1YxAK02RDoBAjbFFInAMcu944zZKB0sgrdlL79xDJ9vTWWXnk7YnzPF8Zfyg5dWEgXGRW52+jDMAcTOBBh2YUIUeZWBUlAQhDROkio1kxsalalTCw2zMheKgj/QqwTFnoOL/brDRSneLFojlmEJouaMdhtv2xTE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777477424; c=relaxed/simple; bh=TqdtfiFYoX22XEO3L5XtFjFN3PE6b7XMxKyU2tsWqgE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=bBYLA5eUKEI2qiPHHrFnFMGT+tXPjgvqce8yVmkB0EfvXeVlJY374WKy83zijLGTVhCIuMHnNeGVgLWnEl80sMMUzfTnEqFdqjzOsWei7DM+I+v11t7xpVVN+7OqzwqeeARBM+nS7tmabSA3CUJNH7l5NnvFIWIly3+4jRTlqEo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=Q7rAJpBG; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=EWjr6fGl; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="Q7rAJpBG"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="EWjr6fGl" Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 63TFAoqI1641662 for ; Wed, 29 Apr 2026 15:43:41 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= KPsUN03pql8MWvk74HVtLNx7Ytey3yEgsUfYvT9r7HY=; b=Q7rAJpBGAYBI884w mY7Vpt5i5eybc/qvcBoCB9VGN8uHs3h2RnT8N3hd/SRf2xJD5nij8Rnd5BOlfCak EU6z26hpYrZJVq7tJF88jNS6tvMAhCRaglWJK+ROr63rUtjF++LlyTzSPULjYZtS 6X9/aM9frlWLGkZV7kbESwvhpJ0D6TDqOqv5PLnCdTK0mktUHfBD5FZ9/WKssKIi wW0X2IZRGaQBUA7i0dOSKHAdbFDzX/twOM+YRZNrqkSQHNeZdf4/n6JlAE23JTsm fFdJBT4e6sIE6xhp5M5JVvh3PxGjbT7Zquo/aH9XjKXh6TCkonwlVvED4Nt3eHOF wqYE/g== Received: from mail-vs1-f71.google.com (mail-vs1-f71.google.com [209.85.217.71]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ducj828jt-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 29 Apr 2026 15:43:41 +0000 (GMT) Received: by mail-vs1-f71.google.com with SMTP id ada2fe7eead31-612d26038fbso13224704137.1 for ; Wed, 29 Apr 2026 08:43:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1777477421; x=1778082221; 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=KPsUN03pql8MWvk74HVtLNx7Ytey3yEgsUfYvT9r7HY=; b=EWjr6fGlGhPQbQNijojuvaRZ+OQdIM/kImhhCmXyIvPd06KhVT6lPAz/XPjb7cvuEd sI5jvs9UxJWpd9ryFAMWfoB5uL7ziovQpak7QEpm/NN8IZfEvp9e4fMnAUGpsmcw7bzG xLZd+1NTx0/KOcyV2FYb3KCvw0h1+7aXVejNXg3NmRdSSMU8fsncngvUDDQwfVNOuG5z L4FJFux8NktRnIOMNWR7i+vHOUDhVnz263b+lsXhdCNSvJCpfWhzc8lkv/WKlFLkuknv X9opJ4wYZTtjNds0r7SHHaHMch/4/gKTdi4YeCZK7AjxTvSHJHntsvLd6J78r9Ix0kcg yVtQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777477421; x=1778082221; 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=KPsUN03pql8MWvk74HVtLNx7Ytey3yEgsUfYvT9r7HY=; b=Ypl3MH1bnWfSEnd9pt7SbxGQxUT/yPELutInx+5q5iX2oIKdfaA+5xqDJ6M6zkfYLU GuI3iz1PowgZ+UyXouBlqaReLuIYkYLe3BqLd0gb3BXB965aN/tDnj8ZHBeFzsDqsfgb PbKYjfYq5srTnQusWYNTHkY0hvP+RH415xV7uJ9CDsZzFWRaQEO0cYrjJGsjly/hS5lr GenCiZiCOY2b+y+pui9HyZ0ER16Bf4lyZI7gg3UsblEeaEBFScDuWa/Fs3sZrvx802fK NpedlT8thRPhFqRZxHMxMdpVrQfqOOXGFLxdHTTHgvCwj7u2JLVGWkayAFuNWCh9eMM9 sE+Q== X-Gm-Message-State: AOJu0YzTLbJ24o8Wmy2HLkwe/IIvl7yc0Ezs50r0gf7FjqX0773K0G69 kCQUOgih2hoVmMBTik8Taja9/BFwRt4zVW8AmOde9gHPxLok6nWS9YquNqYDCGlQWvYiTBRY4Er COGGF2XmUFKY7C+8u4pWBxGOKUKXlWDhnF6Q7omUVZp+Y0A1HwYXKonDhVewUOUZwv2U= X-Gm-Gg: AeBDieuNTE4YkwEF5dkCvDdLUg7TE6N7dDKTj3E4Hubf8Vo6GM8J4bSaEYFeTr3tym0 jsLB2yA+fny98yR2tz/TyWsqUhd6jTYcKq2V0MUM5h4UzMeHKWDaNLGUNyZ4HhY677i9/nqhPmJ m5Ien64XiUMIXjD0sytI6tVRH9DItwCCyBGUNrAZVSxToXggWLKvnLXQVdygevf+Y5o85QPGlZP QIr4i8zEj/H4dE8A936OSFRAfGi7ivBXFMAoih1zvpYn8oWEtgCyViY2p1hiFlzsfVuLoTsOWaO 3jHtT3OFbjRuSPpH9mBUzt4aMkSZNjy21bwLaG0lifi2PSdbUycInillHYjKQmDNuD4ola1FrT0 eFtvDKjJ8Q78FOeaQomSZx/ZocbbK/3akyrw47mF1x1aaGiPteToMbOmr9SWJoQ== X-Received: by 2002:a05:6102:2c14:b0:610:a908:84a2 with SMTP id ada2fe7eead31-6280a3ae4b6mr4546798137.17.1777477421053; Wed, 29 Apr 2026 08:43:41 -0700 (PDT) X-Received: by 2002:a05:6102:2c14:b0:610:a908:84a2 with SMTP id ada2fe7eead31-6280a3ae4b6mr4546762137.17.1777477420540; Wed, 29 Apr 2026 08:43:40 -0700 (PDT) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:e9c0:e45a:1dbc:c82a]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-447b3d481b2sm6837552f8f.4.2026.04.29.08.43.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 08:43:39 -0700 (PDT) From: Bartosz Golaszewski Date: Wed, 29 Apr 2026 17:43:16 +0200 Subject: [PATCH v3 1/9] nvmem: remove unused field from struct nvmem_device 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: quoted-printable Message-Id: <20260429-nvmem-unbind-v3-1-2a694f95395b@oss.qualcomm.com> References: <20260429-nvmem-unbind-v3-0-2a694f95395b@oss.qualcomm.com> In-Reply-To: <20260429-nvmem-unbind-v3-0-2a694f95395b@oss.qualcomm.com> To: Srinivas Kandagatla , Bartosz Golaszewski , Johan Hovold Cc: linux-kernel@vger.kernel.org, brgl@kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=800; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=TqdtfiFYoX22XEO3L5XtFjFN3PE6b7XMxKyU2tsWqgE=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBp8icgZ+uFHIPz1ERFoMG6/koaPLNEDarwgNELk XKWXg5N7EOJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCafInIAAKCRAFnS7L/zaE w5jvEACAE2kNFFe0qt0R4iWsOukwgjxuv0+2VcRjXZdsSdAOof+M+ROmXNyIuo7p+Zil37m+y+w 6JYkGA/dX2gDt7FokPXXHlXjLcAoXYiX/UU81PM3TqlBq6ySifwmDNMc2PpZTvnEAGtKPBWBXbd niESE53L3EoW6iadPh/jIrZ/91ondhebFTXbyltrYwegTfctMr+tzy7ReBsPoZpcYWOduwN150H o/MDjSLqJuoLJD1Og8BX8D/wb37zaUYnuMY3F8bsSq35RO6WR6RKqvfqkmNahV6kM3Kh/qy5xYE e6zZBM+7mXs7I4KQoFkdlDba6XMt/mXtG5i+VAKdb65Obt0V9L8MwnwkrgECJhRT++PMgJjzBuA Ct/BDOG9/1/AH8kQaU2T0a18lxtCumE0Evgrx+ksdwNTnfQVQ/WkNx437mJV/XNdZDeQDiYw+mw YRmCPGbJxokDjgrYC3TfwHzN6oWkwcPTPs9BgpS34/KVRqKPs2ZhNg9e0vs0rL991ORRaW7C5LH I+E+I0u0E7ZvzK1mboQYXit+sIscP5u0SQ0tJV/hDwg+ZW/zhyHnTUndRicjK5qb3hGikshdR1k 7kxftw/mqpRDFgDxx4avriMGez5GgDt2L9XxXCQ5bZeo8Qq5p/JIIO3w5an8pvFY2bm7i0vmYDm Drw9lywzWcTpYGQ== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-ORIG-GUID: 3F9gOokdTI0q7Upa7L6Jf03xIR_LqCL5 X-Authority-Analysis: v=2.4 cv=RI6D2Yi+ c=1 sm=1 tr=0 ts=69f2272d cx=c_pps a=P2rfLEam3zuxRRdjJWA2cw==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yx91gb_oNiZeI1HMLzn7:22 a=EUspDBNiAAAA:8 a=aHI-_EDh-lyTn7-jaGAA:9 a=QEXdDO2ut3YA:10 a=ODZdjJIeia2B_SHc_B0f:22 X-Proofpoint-GUID: 3F9gOokdTI0q7Upa7L6Jf03xIR_LqCL5 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDI5MDE1NyBTYWx0ZWRfXxXnJkHVQLoVD WgBDxqvmJWkH9H0KeIVYKwR5+kPPgeyLeUOT2Nqm6g3h8Ip/KzcBpTBw81LqBLte0f4/pZ/Nts6 1NH/jXJqyINTJCPzRN5vhe11H9h15cnOXXdeLmSKlvF7ctGlJO65/yLfbZI20w6ni1Ca1IvznSb SgsS3YOaJhHg1hcYhRyvP9NJiXu2wn8lopk4czm9yjWgQ3+clp3iAnWemtYhaN3jcIm2ppqSOWb cfsywP0aox2LcfH4FGoC0LxJDYaYNGhOeXlWhcg0JAiaLbCjJQ3udBzDhEPEdDnjjXlVy/IvFLp 5ChFX9Omqg6QMud2FmOhecNdC419ZC6TddPOp7mBcFVoVetVI61Ujnif6y6a2swrvuoUWWWoGpe L+gieNh6r7sosKomih7sTRIKvx891iESAS7AQ8cnNXledtoBQCWkRrm3vYOQokiXBgwzcVPiZ3s oq/MylWF3KAUd39Bynw== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-04-29_01,2026-04-28_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 priorityscore=1501 malwarescore=0 suspectscore=0 lowpriorityscore=0 adultscore=0 clxscore=1015 impostorscore=0 bulkscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604200000 definitions=main-2604290157 The node list_head in struct nvmem_device was added accidentally by commit ec9c08a1cb8d ("nvmem: Create a header for internal sharing") and is unused so remove it. Fixes: ec9c08a1cb8d ("nvmem: Create a header for internal sharing") Signed-off-by: Bartosz Golaszewski --- drivers/nvmem/internals.h | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/nvmem/internals.h b/drivers/nvmem/internals.h index 18fed57270e5e3391cf24d5e49836121a53a8cd6..7cbc55f40259fc4315c41979ad8= bf75c36bcb056 100644 --- a/drivers/nvmem/internals.h +++ b/drivers/nvmem/internals.h @@ -10,7 +10,6 @@ struct nvmem_device { struct module *owner; struct device dev; - struct list_head node; int stride; int word_size; int id; --=20 2.47.3 From nobody Tue Jun 16 19:33:55 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (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 9AEA33803DD for ; Wed, 29 Apr 2026 15:43:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777477426; cv=none; b=BboGh2yqzARBss8pJFDBcKK+ren29pUyVO20kf/ABn/dil0KO/t3Pam2Q16QmLTK9NekvQRrDLY5wU333APIV8SmZu9Sla0wKAFZMRyTdzhy2sj60gVkE5NFDCjgJHwNJIzp6DkB/rpi6BGPRKITb6/RtctmSV3Sf0bUTeT5qGk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777477426; c=relaxed/simple; bh=C0zgzZxnwzsebtmDbC3OLg6KtiEpAE2UgKpe/JRPQuk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=bAWT+AEjK+XfBW3KmhDHGhqRMixVyLtVDu1dzSwlvaVMGsGM1kyYOFt9eKojAkTiCZGQfP/SKhQmHNCMIVzMl0k58yLJ4OqejXzLPkm+dC9FW8tqOUX9f8Ir12fTshfVjvbLn28WQeCoxTfd8CvZWqT7dLXTccY5ZaZgj255dUA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=eTkdQxh6; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=O+4DNYfR; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="eTkdQxh6"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="O+4DNYfR" Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 63TF5AHr3752381 for ; Wed, 29 Apr 2026 15:43:43 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= p6QaK0go3rlqLUpg2+QxwNxHX//2VqR3f9dfj28hq6I=; b=eTkdQxh609736zTU F2EmFTysbSjvwvKd4Fq6QMHaMf0JP4mm/onxHf8L4VzMFt8gWyERkjCR543p3OO/ qeuiYc+NOTxAqFO0QjpFHa4T4wCfJFZx7YM7mk8I+xKdhpHs73Dl70dGz1RSk5Nc nH4kTjTA5/jkuzfzVyke5Y3b3kKQAU7vnFCW0zEy6b8m2CrUzvXzGVFD2DD8+6KA cHfIRi3xAOBEib9PCWyS062XN8mTsjkiybcUprV+yOwEd/CiBEGV3w8/dxToUW5X Ge+9X/6UGytFopcomx2N8nJd2QSrQVHXjO2v2mVeMbZDAmNt3ECWmLwOCQymkkx1 5cty1w== Received: from mail-qt1-f200.google.com (mail-qt1-f200.google.com [209.85.160.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4duch1j8kd-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 29 Apr 2026 15:43:43 +0000 (GMT) Received: by mail-qt1-f200.google.com with SMTP id d75a77b69052e-50fbc49bef6so5044811cf.0 for ; Wed, 29 Apr 2026 08:43:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1777477423; x=1778082223; 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=p6QaK0go3rlqLUpg2+QxwNxHX//2VqR3f9dfj28hq6I=; b=O+4DNYfRyhMj0h2v6XPliBS+W2EGj9EbG8A6MgIsJ/Rj8h+SEPe1TUCaKX4YGDuCfm 5h9SDdKJJJJXntm6eyer9ZDjz55rLTPJi1QrpXipd8xeKYe40gLxk38rbnLxGR/Frbdn RieB4tXhTroxz2GOw5B555rYY1JAsgNbyxzFBqpVtOEpqR1SH1zXoqkbJsi86XeoQkXr mwUocIUpDtpRMQ71+t/NZ7OJpIUjsSOVA6qRiJqAZPiZLyF32C9mA3on404kXnjsB17b OoCjn4uFSFmYlGq885taNr5Ps6AhKr8YrQWJCWAwsU+pFJ2zuD134TadcV/5jbCPMRhz gPJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777477423; x=1778082223; 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=p6QaK0go3rlqLUpg2+QxwNxHX//2VqR3f9dfj28hq6I=; b=hTUwwEsTvCdTUtBr3Wh8VOHcx1ygQOObZNFmVgxyJjR+dWpJG1pznHOlRPb5zJBKl3 Hb262PDiVh7FSMbuhQ2XAEOd0gsB+8xX0u+0guV6VHMMQFxfTogNuVjq9UEYqpeo3iJ1 EzraHc57flPPa5Do56OKp9H8GSchpc4O6eS7C00cyVtiLUGewiP8yOFXFbdgb7j7jmji XSwjuKf1ox1nHtcX2rKRwEgow3YsgimluLCXA/1fvETF40KqGwOIFBl22HbwFoJRRDFS RjhTa4SPyyNLCzUOdyvjBPz3K/qsPLILmzjNeOuyqdIelMOloOQUi3UNKDSD9NS5DMgz NHkQ== X-Gm-Message-State: AOJu0YwkSmnUisTi2z+kjKgA0WMn0l0muF+I8wiR13p7sZVPKt5gxLcm HZUc+K+DLOMdZ6y6heCXMju3r43zbfrlQJj2hB3PZrw8zPeYmzeGLt6alfhD3rpcprjuuqReLHA N2H55FFLZvnmcazXNqKxzTeURD9ZiOzcyKmXJu6Nk78qSPTGHCDzd0Vn6qOcdAMjmVbA= X-Gm-Gg: AeBDieu0Pdv58RX9PxvWTYnAE7EsBRM31XdJwQlF4dXdKkHjmAa9BsxbQ7CB5AnwjML esmNOBF6i2YK3G8387/FwBEJ+s4QMcPoo+fKojJMPBc7qssk/g3Ln2hTQeD1L+ncIGuR4rFSZUo PWJJT5H4Jwt2ANUuVPXRwhDjE5B1wYHIlxYOamG2fVZO2CQX6oiKW5FKUzD6rbuFlyC0OydwB+z kX5D3belZgItDS61GM2NXNG141lpzMmzrIm8nadpX14YD6txea7ReSZ5GJiqVUT6EzomFwQNc4L 1nUuwsbrFf7YHHKMBA11MNRCA82/yKr2WMqfg7foMrtJzLrhz9W2l99aP4Y22b0KvlOskGeeHQr /phhhqz6sERmBoRWjauWAvgJ6eCSAYA2G+dJDNhb+NqeaWAVG2fOrGvXwu9qgBg== X-Received: by 2002:a05:622a:356:b0:509:3c8c:23f7 with SMTP id d75a77b69052e-51018a47f1fmr62481361cf.30.1777477422216; Wed, 29 Apr 2026 08:43:42 -0700 (PDT) X-Received: by 2002:a05:622a:356:b0:509:3c8c:23f7 with SMTP id d75a77b69052e-51018a47f1fmr62481041cf.30.1777477421801; Wed, 29 Apr 2026 08:43:41 -0700 (PDT) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:e9c0:e45a:1dbc:c82a]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-447b3d481b2sm6837552f8f.4.2026.04.29.08.43.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 08:43:41 -0700 (PDT) From: Bartosz Golaszewski Date: Wed, 29 Apr 2026 17:43:17 +0200 Subject: [PATCH v3 2/9] nvmem: return -EOPNOTSUPP to in-kernel users on missing callbacks 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: quoted-printable Message-Id: <20260429-nvmem-unbind-v3-2-2a694f95395b@oss.qualcomm.com> References: <20260429-nvmem-unbind-v3-0-2a694f95395b@oss.qualcomm.com> In-Reply-To: <20260429-nvmem-unbind-v3-0-2a694f95395b@oss.qualcomm.com> To: Srinivas Kandagatla , Bartosz Golaszewski , Johan Hovold Cc: linux-kernel@vger.kernel.org, brgl@kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2777; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=C0zgzZxnwzsebtmDbC3OLg6KtiEpAE2UgKpe/JRPQuk=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBp8ichgOqg7NkELcEM1MF9XXjfw74pEbKupI4uB lveWJH5D/2JAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCafInIQAKCRAFnS7L/zaE ww1AD/44KGzZ6+hd1Gq3jJIf/2CQooFI36NovNa9MAr/zLnbvB5ct9vTyl5KUA/BapQdMWozc/7 kiH7fR5IMqawDtDFbNMdmMT1XDyiSUocBfHE6qlwbCTOjQ1R8Pvx96Rvpj3oplRZg3sjnXU+9Ek 8uXRgL1TxZOseZ+2R7sn7iZoNVSm/g6ial+Laf/BdGo8+Nid+mzh3uBMEyIPqt0obB047jn+Gzy a6tA8ycAo9Y0wLR4EbJRNxt3x9TJRhXrdZMQ3PF1RztlXApkFh38NrcpVLe+Ht1CPmmGtC6N9Bv FhQyEdCAAlsm/AgtKO5GXXL8lbxYcfH2mYANT1HfFce1eh5ARCQ/g6BgGGPTUM9RR5ZSZOQyssi z/sWmIxJZNw0cho8699xwi68Tvu/zCI2/959DGhylxtngXf/LmEDDtVbSnxMpuHoJL7ZknOVrb2 9koz5Hbpbv4+Bau1sJuZjBXVcs3ukIKjcxnd7qx2Nqx1z5XOmC/YuRzupcVn0dtcvbQnBVlVifj 3xF8MYlH5aW03bRNLskf8kB1s/JKfuB/y5bNvGzvQZmuq8sxu4TKIn6wBnNtheHholKfr3xZ6BK e49QCzwBDmwLYRbGu4/HW3gQL5ZQnzmHdCwgheAcRcrcuVxGK2RN/QAN01vklRp5bVnQvJp83O6 zdObl/Ov300doBw== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Authority-Analysis: v=2.4 cv=arGCzyZV c=1 sm=1 tr=0 ts=69f2272f cx=c_pps a=JbAStetqSzwMeJznSMzCyw==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_glEPmIy2e8OvE2BGh3C:22 a=EUspDBNiAAAA:8 a=LUxqvIJpbuPLPFPBBP0A:9 a=QEXdDO2ut3YA:10 a=uxP6HrT_eTzRwkO_Te1X:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDI5MDE1NyBTYWx0ZWRfX4g5k3vTHablH gacdfmJ3eitaUcoVrLIqMhKcJ4JPDVw2hiWFthXslJ0zgRH2yKUF8W7iADBpRJXSor459/mTwMO 9ZLe5eXuFMXBvHuaAQFU6APYiqx8+tuTGBzt5IrTRXgAk1yfEpRtfbTPXrlZPYi8YhQtArReJYO JcK3yu4fBhFDINl4GAr0Q5t/OBuTWGE2LazDePb3l4eW+kSN3D1hwinh9fuIielAYXS9kmmZhgj w39ajNyZlG/z6XL4mIr0gks0OIfeKnTtdutxAIZLUhtRBLR1WBcv/qjeS5t4fvI71vP6yaep0o1 2Ft7xPVI4AjdmIlMv8teqMlKa79QFfPc5Tl0XSZb+PnrzUAzysD3xVWbxJ7JcRGqR38adinSDpc bCruwGG+P+C0si36sOo7/OR0li/YHYOSd/JF9jrjB4vZclopJd1k9DQoCbG119X+n6FMaC8Do3b kBfmFFXUL/+8exbzHhA== X-Proofpoint-GUID: 8jrxcLwlgKsf27j2BS828CUZANfdpIYs X-Proofpoint-ORIG-GUID: 8jrxcLwlgKsf27j2BS828CUZANfdpIYs X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-04-29_01,2026-04-28_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 bulkscore=0 clxscore=1015 adultscore=0 impostorscore=0 spamscore=0 suspectscore=0 priorityscore=1501 lowpriorityscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604200000 definitions=main-2604290157 __nvmem_reg_read/write() currently return -EINVAL if the relevant callback is not present. User-space helpers again check the presence of the callbacks to see if they should return -EPERM. Ahead of adding SRCU synchronization: change the error code returned to in-kernel users to -EOPNOTSUPP which is more indicative of the actual reason for the failure. Move these checks into the higher-level nvmem_reg_read/write() functions to avoid calling into nvmem_access_with_keepouts() unnecessarily. Remove the checks from the sysfs attribute callbacks as these are not visible without the required callbacks. Signed-off-by: Bartosz Golaszewski --- drivers/nvmem/core.c | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index 311cb2e5a5c02d2c6979d7c9bbb7f94abdfbdad1..c18c7bb94a13b20ad27ec452a2b= 9fe80c2a4f843 100644 --- a/drivers/nvmem/core.c +++ b/drivers/nvmem/core.c @@ -55,10 +55,10 @@ static BLOCKING_NOTIFIER_HEAD(nvmem_notifier); static int __nvmem_reg_read(struct nvmem_device *nvmem, unsigned int offse= t, void *val, size_t bytes) { - if (nvmem->reg_read) - return nvmem->reg_read(nvmem->priv, offset, val, bytes); + if (!nvmem->reg_read) + return -EOPNOTSUPP; =20 - return -EINVAL; + return nvmem->reg_read(nvmem->priv, offset, val, bytes); } =20 static int __nvmem_reg_write(struct nvmem_device *nvmem, unsigned int offs= et, @@ -66,14 +66,14 @@ static int __nvmem_reg_write(struct nvmem_device *nvmem= , unsigned int offset, { int ret; =20 - if (nvmem->reg_write) { - gpiod_set_value_cansleep(nvmem->wp_gpio, 0); - ret =3D nvmem->reg_write(nvmem->priv, offset, val, bytes); - gpiod_set_value_cansleep(nvmem->wp_gpio, 1); - return ret; - } + if (!nvmem->reg_write) + return -EOPNOTSUPP; + + gpiod_set_value_cansleep(nvmem->wp_gpio, 0); + ret =3D nvmem->reg_write(nvmem->priv, offset, val, bytes); + gpiod_set_value_cansleep(nvmem->wp_gpio, 1); =20 - return -EINVAL; + return ret; } =20 static int nvmem_access_with_keepouts(struct nvmem_device *nvmem, @@ -231,11 +231,7 @@ static ssize_t bin_attr_nvmem_read(struct file *filp, = struct kobject *kobj, =20 count =3D round_down(count, nvmem->word_size); =20 - if (!nvmem->reg_read) - return -EPERM; - rc =3D nvmem_reg_read(nvmem, pos, buf, count); - if (rc) return rc; =20 @@ -264,11 +260,10 @@ static ssize_t bin_attr_nvmem_write(struct file *filp= , struct kobject *kobj, =20 count =3D round_down(count, nvmem->word_size); =20 - if (!nvmem->reg_write || nvmem->read_only) + if (nvmem->read_only) return -EPERM; =20 rc =3D nvmem_reg_write(nvmem, pos, buf, count); - if (rc) return rc; =20 --=20 2.47.3 From nobody Tue Jun 16 19:33:55 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (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 5A595381AE3 for ; Wed, 29 Apr 2026 15:43:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777477429; cv=none; b=PFYCl0UXsLYpTQFzZz3409pP7XW6GsEe0Vj9SfNje33aojTY+PMyWMWeMLiddc5XP+XoXNINGvThkxGmu7s0NsChLv5WCMHmP+kDvN45cDnQbNnH1liG9BxBNdwbKW9CXZRFCXw5NSp2laZKzKec094fUrDVTA7HZ+MJov9tFCI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777477429; c=relaxed/simple; bh=yD3N0cYcmQAzbGD78GtKBQ9bc7aSvwfTcCxmV/LtyDM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lBS5knZrC8dZVWG4V3MXpm6fQYjNv+xL4dokMSccXR15lb8MiMx1zkdCCGc6H76HsNQLZcbhzrT3KZJScvzAeFkdO70tryTwOAcLhK+VfIgJ3+PVMPTqRj5iwWNYEcsxgc7cryXNvZovBi6fmlstSXbb6Z6G4dNQVoxNmWBQe4Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=YC2UAXpR; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=JrUs7cUA; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="YC2UAXpR"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="JrUs7cUA" Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 63TFAgvY3067082 for ; Wed, 29 Apr 2026 15:43:44 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= RkvyX2A5HBGUs77rprhwxQ7sgit2vdJpqOUIWDmp7cw=; b=YC2UAXpReVXQSbxD uNB+nzxKZxuJS8EzMaP/2BxevuAEviwhYFDvweG4cM2ayCH1qXMnRSmHJwON/B6W /h2aL9LqYOmZi8ZiqDqX8AZ/6q4xWKx8Z/4RWuBI6WCIgJkIV6TeeE6ytFyLF0RD b2TvCEoBqf3fCSsNa57mxyYeVDwU55Ua6t8aYFTGvxzuHOQWimWXT/zSnFJ0d8eV dFiQ5z65f7G+BNYhv4A4Hlgr4ZNsU2xz1svlghdVt4Tc6OA8l0Fp7vF2VUu+qcMD j+1LyJzrFrC1r5t7VKfwMb74wkjQC3f1xb2+oidQ9j5irAOCb1Pgdh84mPt9h6GU +6whjA== Received: from mail-qt1-f199.google.com (mail-qt1-f199.google.com [209.85.160.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4du7sxb8aw-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 29 Apr 2026 15:43:44 +0000 (GMT) Received: by mail-qt1-f199.google.com with SMTP id d75a77b69052e-50fb007bc36so6234441cf.3 for ; Wed, 29 Apr 2026 08:43:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1777477424; x=1778082224; 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=RkvyX2A5HBGUs77rprhwxQ7sgit2vdJpqOUIWDmp7cw=; b=JrUs7cUANCEbZ7+qkF00lgsRVov5nmlCe1jFQgcrSmZfihG3Z4g9EV2z8Jf+sfFPR1 P9Bphc7MjA9XwYu0HuruQYhM606iN2BGdpnAkzUAIFL6+E8v02RcxIaP64F1fJvC12/o i92OwoS+2M982Ri2pkvnEhoNhUL2VrHvo/hLlSv9UPaOKAKqU1cHp7O2fTai7hV79qzx ct5W5kFjjVGY0CpyAd4uU5HIvqeHx1df1pnJHs/6QCsn46x92/jahjUMD5dHAW2bAr7m OILPv3H0TYZc+oaFn31XEMDJD05eOeKBPGHdx+B47rjnxeypOUAbD+THuFrhR0IWBq2D Z4rA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777477424; x=1778082224; 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=RkvyX2A5HBGUs77rprhwxQ7sgit2vdJpqOUIWDmp7cw=; b=FzAJ31Qmr54SLwuZvQRIvRAPonnUG+mtVVNevd0U8vvLoKV9gbZCWzygfq9xAiKvYV aBnuA4wbB6YE3zQBiiPxAW0NOSWIVAZcvGpU2O9+b5P9gryYMfljy3JXNLcMirKdIApj ceQBBXv9hB+jUMB2rApao6Yqy65NhjNEl3pKppzkZQ2F+49WwJDpkiWMtnjdxD8Ocali 3Y2mJKO7KgkQ+y+t3Vb7u0bls8nhrLoph6WGay8OqDi3u2SUW2o8EscacrmELT0c/61u EcKf4LsHS2KBzHYSXdH38p5J7mTlUelT84GwR3j7p69yGuoZJWoFQDJNus2oUq79xsYi Su8g== X-Gm-Message-State: AOJu0Yx8dYtLB4zSr+8thWOukmBF6klkCfPdgBxBQT7oJmSpw2VyWkOo 5ubuoKLRasC/iOGYdFmxZlTdgK27ju1TNmLmfifwhJRHwRE12VxXbYLLTmkM19SqJT0eX8tAMcp r1V5NgZfn4Mxkyi7a+6gKsJ6Fly+Om0po1v696oofwK+42naRdFjFO7fGzzGKtTdiABI= X-Gm-Gg: AeBDiescIqTuQZkqdBsBahdM8H+LZqO+c6AF5Bl59Rvx/0SH7zxf7ryaEJmPWkMvZaq xtKE7gNqefbFNV5d5RZjzh6AL2eJ32F1rXbBVu4OzlVCeelHgy4mmJ09ercwI4gLgq+O2RaUcAY gAI5ky3AlHR+Y4YPBkexMzH/IPBkuLw65r8/1U+D4JJ0FbtvpwmNAA3igGmlGlz0CgazrFmXLQx aQF2QoaHIcxkz/jyj+hgiIxp7pCiIRxRVXRS/PCUBURYX115sMtQnpvMvDewBUBMigi97juyCW/ DYMRys0XfhXtVpKYSodji8a6W3KRf9IbNOfQMUTrzJuFkDI02lfBfc4wcfvFvhnzrNqWpZ5TJHd ZK56fz5ME7/vKM+Jm+NNDdnOcOulzVla+mAMeWxeNJWf8jT8zP1JWADOMTyilpQ== X-Received: by 2002:ac8:5854:0:b0:50e:5935:d4e with SMTP id d75a77b69052e-5101893a16dmr63552821cf.2.1777477423852; Wed, 29 Apr 2026 08:43:43 -0700 (PDT) X-Received: by 2002:ac8:5854:0:b0:50e:5935:d4e with SMTP id d75a77b69052e-5101893a16dmr63552431cf.2.1777477423424; Wed, 29 Apr 2026 08:43:43 -0700 (PDT) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:e9c0:e45a:1dbc:c82a]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-447b3d481b2sm6837552f8f.4.2026.04.29.08.43.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 08:43:42 -0700 (PDT) From: Bartosz Golaszewski Date: Wed, 29 Apr 2026 17:43:18 +0200 Subject: [PATCH v3 3/9] nvmem: check the return value of gpiod_set_value_cansleep() 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: quoted-printable Message-Id: <20260429-nvmem-unbind-v3-3-2a694f95395b@oss.qualcomm.com> References: <20260429-nvmem-unbind-v3-0-2a694f95395b@oss.qualcomm.com> In-Reply-To: <20260429-nvmem-unbind-v3-0-2a694f95395b@oss.qualcomm.com> To: Srinivas Kandagatla , Bartosz Golaszewski , Johan Hovold Cc: linux-kernel@vger.kernel.org, brgl@kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1432; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=yD3N0cYcmQAzbGD78GtKBQ9bc7aSvwfTcCxmV/LtyDM=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBp8iciCabcnf4TAH2hn8KWmI3VNf5jNgUEy6Sjj L2NzCJbhKuJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCafInIgAKCRAFnS7L/zaE w6i0EAChbZoG89H30qGwBwSJ9VBJ7pq+dAYhSEok2lTf84JeoR7ImByz4mUGfeiMj+CKW1Wn0hl FgHsNNi5s9lrH3MDcmFKAcTRGgMh1z+GHV8N7ncYmx+NMwgnxSQiez2fYc3nus7w5kJ0qUKUavf +DI3p24/wZgX0mGkzzTeLn/ACpkCnR/nTNTQ5AAJWmbpc/1XUWaawF7jD6C7C1uKR1Kgfls12fU fVpxGwcLrC9NeBHjkKACHtCJJEomTsf/iMcd8wVwq1E2GjFH6TkfQSY85lBx9KhO7FvuyLMH7WB QoLTukQwPbTK9CW1vgj9PF5PSX4D99f+9KOmMWHlxJmJPJN5eRckWMsvvLQFE1fDiIl18VzQw+A d1HBzhpcWTVKGDbCWMiWfofEdDqzyiejzUs58hlUzf2/OmkWPOsOhgLUL4CGR2dCXuIwknTktfC 6dHE34pLKuu+VgX6vPzJ7RK444K0RpFGPnkaRiloubTwvD4N4KvLAI22iH0Hi/R6tl1md1BkXPJ +D8789HVunSNtyx1bUKB+/nqhee/68tZyp/fWJwLevxSBMn1REgoe1nPFJHjmfggMGM7boqnsab FdnN5pgNdONB1dB5xHPIKPTCj2xoEbQAgvM/aUREfwKtrbmeKilidnN8/eIHpzMLExdLF+ICJW1 OTGYH/9WDU0IceA== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-GUID: snMu87AM078QEsmAruaYbX4gcVDqx1nH X-Authority-Analysis: v=2.4 cv=eeANubEH c=1 sm=1 tr=0 ts=69f22730 cx=c_pps a=WeENfcodrlLV9YRTxbY/uA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=gowsoOTTUOVcmtlkKump:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=ii2iuPLuu9iRZ_mRmhMA:9 a=QEXdDO2ut3YA:10 a=kacYvNCVWA4VmyqE58fU:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDI5MDE1NyBTYWx0ZWRfX/PLJpluOtfZ0 O2r7lt9f3ZiWDoYVuY1kaGtaMPXOOPArl2JKeLJl6KURw1JInua9Gdxn/XaH+wImMhuhJdNc5Le FxtLxRFpgihvjDnB9fsOPha2GiBfesEEgZaM9fB8uvb2bXe5aNredxuYCV0JEPtkEpQAuw7UkDH y9MeWQsHa6pknWVTlDLCSa9htSONJdXOEI17ELRQUFVJT9R2AZ2uymb/vV7JNBRio863QHylwHW xJtq1FsUk4kUCg+VijHVjlu4rguv9H+fMi3EXeSkd4jL6VKT/fsWxapQnGILc4DOEko0E40lUaU OEqlXNAOBOjbFQQbnqqQqqgCi8UTU0o9jlyeznFq2A3OHGDbwM8y+RQf7e3e5Do43gdcgkv81om 55sam2SF/06AcJGcuusePVQLTyY8QetINp/tTpuYFc1qEygr+Xfh0/BsG3yOveDaJ670nonYKQ9 +cgLyTNow71fQ66QWFg== X-Proofpoint-ORIG-GUID: snMu87AM078QEsmAruaYbX4gcVDqx1nH X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-04-29_01,2026-04-28_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 adultscore=0 clxscore=1015 malwarescore=0 impostorscore=0 phishscore=0 suspectscore=0 lowpriorityscore=0 bulkscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604200000 definitions=main-2604290157 GPIO setters now return integer values and can indicate failures in lower abstraction layers. Check the return values of gpiod_set_value_cansleep() calls in nvmem core. Reviewed-by: Johan Hovold Signed-off-by: Bartosz Golaszewski --- drivers/nvmem/core.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index c18c7bb94a13b20ad27ec452a2b9fe80c2a4f843..61f7484f96f3a89450686745c1e= fad8fc24c667e 100644 --- a/drivers/nvmem/core.c +++ b/drivers/nvmem/core.c @@ -64,16 +64,22 @@ static int __nvmem_reg_read(struct nvmem_device *nvmem,= unsigned int offset, static int __nvmem_reg_write(struct nvmem_device *nvmem, unsigned int offs= et, void *val, size_t bytes) { - int ret; + int ret, written; =20 if (!nvmem->reg_write) return -EOPNOTSUPP; =20 - gpiod_set_value_cansleep(nvmem->wp_gpio, 0); - ret =3D nvmem->reg_write(nvmem->priv, offset, val, bytes); - gpiod_set_value_cansleep(nvmem->wp_gpio, 1); + ret =3D gpiod_set_value_cansleep(nvmem->wp_gpio, 0); + if (ret) + return ret; =20 - return ret; + written =3D nvmem->reg_write(nvmem->priv, offset, val, bytes); + + ret =3D gpiod_set_value_cansleep(nvmem->wp_gpio, 1); + if (ret) + return ret; + + return written; } =20 static int nvmem_access_with_keepouts(struct nvmem_device *nvmem, --=20 2.47.3 From nobody Tue Jun 16 19:33:55 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (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 0A2E2381AE7 for ; Wed, 29 Apr 2026 15:43:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777477430; cv=none; b=aN0EYpcUbWTRXD9GOOIWDR+IHUzcnfxPHvxJ17doO950jq1zYw/qoEPLDg9dkF7V9iemMITGC8uzg7a5xOx3JPOH9bE24ptYFnWakp9SwGEexWPm6pKuVUmzq6zMtNiFmmui7LBZBrAnnAU7XHsQSWPJHgZirXrlbjkHZqAf9iM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777477430; c=relaxed/simple; bh=7OWSKFora/JgRpwn3Sl8HqHFJ3EbESBfThaQbaLHvQk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=d5OVn5I7GsVa6rgeHmqp+hVHnRgLoeB36F6Ux4r2/m0/VdaFTM2aU/4qT5+HTD1DSFQxucj3+iAyy/DsqUBXP5oI4B2bevpulrwYTCM87kjNUl+n142qRUb0rl7327yfGbAZCoHJcDbueNWxabmgBfWqVYcq/6K1ImtJxhlTL+w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=Ez7MOYBh; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=RDopKekz; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="Ez7MOYBh"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="RDopKekz" Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 63TFKVS32095179 for ; Wed, 29 Apr 2026 15:43:46 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= FLHk9Fdq6J5XlOf7czVfxn8rUJ9n3BNxHbsNsqib0gI=; b=Ez7MOYBh7zhDOvfO GG2hKlZfrR/MktLbjau8yoVN5i33JeRvnhH7xlGR2a68TZEnYDE+CRN4EE8vqPKG ighUfVl8GlnWC5T8TPfBRVw3k1CPOeWh1+wSRqCP97SgyWqqqCLKeVf+vL2KxFlt i+FLrpbpHwQphLmjZxLW+kzgHNFCjVi7oUE6E6qfUkZHUK3URO57ZBox7u4eGMqR Yj0qArBFIemOZ/QzMLG4S9PcrTO5bBd7BgSe3ls3/i/Pcybb8WEi1dQEYrmCtopB u11F9BEO+guMtejVz0q5uk6bo5l84lx51GcHKUsaKRF2aljGw8Ra8fivitmVQWTT tG6bHg== Received: from mail-vs1-f71.google.com (mail-vs1-f71.google.com [209.85.217.71]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4dudh3t16f-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 29 Apr 2026 15:43:45 +0000 (GMT) Received: by mail-vs1-f71.google.com with SMTP id ada2fe7eead31-6130270a5f1so17765545137.1 for ; Wed, 29 Apr 2026 08:43:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1777477425; x=1778082225; 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=FLHk9Fdq6J5XlOf7czVfxn8rUJ9n3BNxHbsNsqib0gI=; b=RDopKekzaK4b7EC/rekF4YUL1BdPw1gk5lQ1e2saJOyDjdnlPPBKZpJ1TXz0/57BBt ffZU/9EctoV2IysFZH1AdllPyRaLlQ/dQzIvU08ew4DLGjSIC/9FlLH4iVucg+cT1A3W cPCcq6yVAS+rf7sRWBueP0PIGWhlmjHGT2zKuflBqdOGzg0mfNSPQHR9E4ORMx44IH7B 2BdfSOgvPCkkgva6iynhrVWkfk6spQxwVbLGLdPwwxZzTKqrVETIPDXM4pDYRkiUTRLI cy3KzLSfnjFW0E0CRYYcQnRt9eGob2N5n7cPilP+1LC9Hvs8atTDBVw9shqrF9MHLLcz y/6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777477425; x=1778082225; 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=FLHk9Fdq6J5XlOf7czVfxn8rUJ9n3BNxHbsNsqib0gI=; b=ZcfbO5wN0iimulZdSmXXFlqmOqXSRsaybM7iB+tJa1sv0Fz6uMtGeEef9+w6Kt+Clc QE50V72QNjG5kOIfUNh6dWj9jhGudo22Tn0aUIUdtYPrw8GIsqxJu2BvYAoYbn1wjVj6 5rsNM3h8ANYFf932gXNb4I8xc/QPxGSwpYSSTgMsGjfykI6g+nZELMwYPTMRt6/AJTEd iEMwKiEyff2PD3MfZbxNxFipcxlGYalI1JpaXpogePssZG+9WUmKSZYKAczy+IHzR7ng yblwL9vqp+zgpltwcGsVazmAkJnyVMbFSiaoKtvgxav0NdSDbSSklKCHtbbdqgGZw6qm wuew== X-Gm-Message-State: AOJu0YzZDM8aZI1UX06OtxT4hhENk0Jd6A8X9+SFH1Q2JSrSghFJoZwA pvjoEtozB61/Wm2hB8jNre9V+D0PGehwNlmW6eTF02MRfYxChrR2bx3azz6UbClYgX98amS4fYv FrcptZ+3uQ2Y445kbk7I7lvwKrWYiJH35cSU6umCqxKbeeEko3GVegTTeQ+k0AiB8QV0= X-Gm-Gg: AeBDies+JaWc/xXRQ40DH3YKDNRXEW1aR6TXa7TQrWU+1NPKNn9vikmcxgCkQhqfXh7 8je5h6bsNOQ94whjBPp9eQzdqmP4eBmEYvzfoCsvtAvfqyHu6qdDBIWG4cSL+nvYtV/3r5vO6N2 UyJb56OSS38wT3l2ArpFJR3vaQcCCzbrgx6lGuervcX/zUNtY0W2jI9ncLjAbBNJLWQxZuM59YN uuxO+9lqyBFwLeGD/R75LFcY9mLb58m+pJXwkH+K8Lk6U77PWxGFoqYqDjqsB6fqFcOxBcXQq0d 9RisaMNAwZLIfStJwv8lGxe5G/GMiHxkMq+F5ERZQ919jm+M6fSPQOe8KJacJ+yFSh+joZ3TCV7 ij58ihmlB+XcRfRL12ZFHYwAowNRPKGAxhXcTiSZhjZDcXfnaoUpsW5YRehX5iA== X-Received: by 2002:a05:6102:8501:20b0:62a:1bba:64ee with SMTP id ada2fe7eead31-62a1bba6fffmr901081137.6.1777477425367; Wed, 29 Apr 2026 08:43:45 -0700 (PDT) X-Received: by 2002:a05:6102:8501:20b0:62a:1bba:64ee with SMTP id ada2fe7eead31-62a1bba6fffmr901044137.6.1777477424751; Wed, 29 Apr 2026 08:43:44 -0700 (PDT) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:e9c0:e45a:1dbc:c82a]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-447b3d481b2sm6837552f8f.4.2026.04.29.08.43.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 08:43:43 -0700 (PDT) From: Bartosz Golaszewski Date: Wed, 29 Apr 2026 17:43:19 +0200 Subject: [PATCH v3 4/9] nvmem: simplify locking with guard() 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: quoted-printable Message-Id: <20260429-nvmem-unbind-v3-4-2a694f95395b@oss.qualcomm.com> References: <20260429-nvmem-unbind-v3-0-2a694f95395b@oss.qualcomm.com> In-Reply-To: <20260429-nvmem-unbind-v3-0-2a694f95395b@oss.qualcomm.com> To: Srinivas Kandagatla , Bartosz Golaszewski , Johan Hovold Cc: linux-kernel@vger.kernel.org, brgl@kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=6918; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=7OWSKFora/JgRpwn3Sl8HqHFJ3EbESBfThaQbaLHvQk=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBp8icjReE+l5ztCd7sNPs8n7DTg5tNOMt0N0WhP EA1R/RCSZyJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCafInIwAKCRAFnS7L/zaE w+wMEACix2fVkLB7I3IyijhDg01DgYr5l5z2mUVcqxVbWNVNrpq1Gr4kC6JCtb+4HjFudM7brNH GlLUj+xq88ahbTILUZoU5AujhMUWQld9stRr7eotN79MQo0xT984eWzRCZ1EXETJKBAW7h6po+h cMzajSRPcDhDoavgF7mkXDbvfjmLGW/Pk190TW/SUwc6MrJcIPks8jb77nBovmo3YNZpmMevD0D 8jO+tuHCG1KpLmqnqA/MCb1IcfcLlvrK+JM/VZ3HH/+OWly6eT4wxJykIBeh42+NLqIypCso2WP gmOcW3D2QvWpJAPwJN4+HfOW1DTwTn09Dquc4r7aGp59yutouEuyjahZ9jt/SQIw0K74zicBtqf vBTgElFFPs0CVPP6Zl766Kha7nIdNPyMlYn1RgmaMKen+R4PdSOBkxL2k+YZHdoD4EhgEuQL2T4 Vvd6ZQZ4Yw3D06ge4qGaXaYyzDGcg6gZV5MrW/uDm/zkSFOskuVtn5O/eu6FLpJRVjHOdiv9mop QUDbBejCizpzgP/kzywzkWUiNjdHAeclfNZ6ZzJQjzNHlnY8lX66WKNpCsL3rOYW/hk/HpMfHaS 7zrM0M/qCEvaMfIxtuw6JLgzw60nrsMW06OnVXs5Aojm/YEwQflf9FE9seTDFfmOTiSYdGliKze Vy5kITLYUSRiT4A== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-GUID: Zcs_x1f-v6R8d22Q5N6fgXs2ECEGHwMk X-Authority-Analysis: v=2.4 cv=A4dc+aWG c=1 sm=1 tr=0 ts=69f22732 cx=c_pps a=P2rfLEam3zuxRRdjJWA2cw==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=EUspDBNiAAAA:8 a=uP1ucDPQAAAA:8 a=-rJ4p0UJwyiPJ0m2jL8A:9 a=QEXdDO2ut3YA:10 a=ODZdjJIeia2B_SHc_B0f:22 a=9a9ggB8z3XFZH39hjkD6:22 X-Proofpoint-ORIG-GUID: Zcs_x1f-v6R8d22Q5N6fgXs2ECEGHwMk X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDI5MDE1NyBTYWx0ZWRfXwA76M3xB7ruV nCwaF+9sKP0hczbmsH7kqOFNpVvZAZ8NSYgkmputm4yA4bXtzAkpDxgdego/t0bJKpexm/4f7BS oudXR7Wob98Ddj1xTveTo8O6qdriFx/PaZrP/ZbVqe5Kjkfb53sVl72MkiHyMUcWvS29KhtxSC6 iaMzlFp5bSOlsYxV0KBUTZ5jTJuGaPakakk+egaSqS5I9nBVGW4yPKlPfNCjnbavdayP+qUd6sN TjzWmNOSMb+hmJt/2heVyqlbZRgahVvIYVCSWaQhTktSn3uzcAz2/jRMqgOq0s3sK2DlZTZ9zqX /8umcG/g73S+GqPmI9LDUnS/PbQ52OYiThKIsp3ciddEeO+HaY5dD6Kcuqv0Vd8D5hjJB5+obCM fehZtpERHgmabCbgopIwYdihmk+iwWTZMWOn6Y6XG9wxyr2u5EOUUUNuEezyQOkI5VGrJxLxb7I vbziW8tKpndV4NHhqCw== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-04-29_01,2026-04-28_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 spamscore=0 suspectscore=0 malwarescore=0 lowpriorityscore=0 priorityscore=1501 phishscore=0 bulkscore=0 impostorscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604200000 definitions=main-2604290157 Use lock guards from cleanup.h to simplify locking. While at it: add the missing mutex.h include. Signed-off-by: Bartosz Golaszewski --- drivers/nvmem/core.c | 88 ++++++++++++++++++++++--------------------------= ---- 1 file changed, 37 insertions(+), 51 deletions(-) diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index 61f7484f96f3a89450686745c1efad8fc24c667e..d6c62b3a527d3412a990ca143be= e3209ff28d18d 100644 --- a/drivers/nvmem/core.c +++ b/drivers/nvmem/core.c @@ -6,6 +6,7 @@ * Copyright (C) 2013 Maxime Ripard */ =20 +#include #include #include #include @@ -13,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -462,27 +464,23 @@ static int nvmem_populate_sysfs_cells(struct nvmem_de= vice *nvmem) const struct bin_attribute **pattrs; struct bin_attribute *attrs; unsigned int ncells =3D 0, i =3D 0; - int ret =3D 0; + int ret; =20 - mutex_lock(&nvmem_mutex); + guard(mutex)(&nvmem_mutex); =20 if (list_empty(&nvmem->cells) || nvmem->sysfs_cells_populated) - goto unlock_mutex; + return 0; =20 /* Allocate an array of attributes with a sentinel */ ncells =3D list_count_nodes(&nvmem->cells); pattrs =3D devm_kcalloc(&nvmem->dev, ncells + 1, sizeof(struct bin_attribute *), GFP_KERNEL); - if (!pattrs) { - ret =3D -ENOMEM; - goto unlock_mutex; - } + if (!pattrs) + return -ENOMEM; =20 attrs =3D devm_kcalloc(&nvmem->dev, ncells, sizeof(struct bin_attribute),= GFP_KERNEL); - if (!attrs) { - ret =3D -ENOMEM; - goto unlock_mutex; - } + if (!attrs) + return -ENOMEM; =20 /* Initialize each attribute to take the name and size of the cell */ list_for_each_entry(entry, &nvmem->cells, node) { @@ -495,10 +493,8 @@ static int nvmem_populate_sysfs_cells(struct nvmem_dev= ice *nvmem) attrs[i].size =3D entry->bytes; attrs[i].read =3D &nvmem_cell_attr_read; attrs[i].private =3D entry; - if (!attrs[i].attr.name) { - ret =3D -ENOMEM; - goto unlock_mutex; - } + if (!attrs[i].attr.name) + return -ENOMEM; =20 pattrs[i] =3D &attrs[i]; i++; @@ -508,13 +504,10 @@ static int nvmem_populate_sysfs_cells(struct nvmem_de= vice *nvmem) =20 ret =3D device_add_group(&nvmem->dev, &group); if (ret) - goto unlock_mutex; + return ret; =20 nvmem->sysfs_cells_populated =3D true; =20 -unlock_mutex: - mutex_unlock(&nvmem_mutex); - return ret; } =20 @@ -552,9 +545,8 @@ static const struct bus_type nvmem_bus_type =3D { static void nvmem_cell_entry_drop(struct nvmem_cell_entry *cell) { blocking_notifier_call_chain(&nvmem_notifier, NVMEM_CELL_REMOVE, cell); - mutex_lock(&nvmem_mutex); - list_del(&cell->node); - mutex_unlock(&nvmem_mutex); + scoped_guard(mutex, &nvmem_mutex) + list_del(&cell->node); of_node_put(cell->np); kfree_const(cell->name); kfree(cell); @@ -570,9 +562,8 @@ static void nvmem_device_remove_all_cells(const struct = nvmem_device *nvmem) =20 static void nvmem_cell_entry_add(struct nvmem_cell_entry *cell) { - mutex_lock(&nvmem_mutex); - list_add_tail(&cell->node, &cell->nvmem->cells); - mutex_unlock(&nvmem_mutex); + scoped_guard(mutex, &nvmem_mutex) + list_add_tail(&cell->node, &cell->nvmem->cells); blocking_notifier_call_chain(&nvmem_notifier, NVMEM_CELL_ADD, cell); } =20 @@ -722,14 +713,14 @@ nvmem_find_cell_entry_by_name(struct nvmem_device *nv= mem, const char *cell_id) { struct nvmem_cell_entry *iter, *cell =3D NULL; =20 - mutex_lock(&nvmem_mutex); + guard(mutex)(&nvmem_mutex); + list_for_each_entry(iter, &nvmem->cells, node) { if (strcmp(cell_id, iter->name) =3D=3D 0) { cell =3D iter; break; } } - mutex_unlock(&nvmem_mutex); =20 return cell; } @@ -1115,11 +1106,11 @@ static struct nvmem_device *__nvmem_device_get(void= *data, struct nvmem_device *nvmem =3D NULL; struct device *dev; =20 - mutex_lock(&nvmem_mutex); - dev =3D bus_find_device(&nvmem_bus_type, NULL, data, match); - if (dev) - nvmem =3D to_nvmem_device(dev); - mutex_unlock(&nvmem_mutex); + scoped_guard(mutex, &nvmem_mutex) { + dev =3D bus_find_device(&nvmem_bus_type, NULL, data, match); + if (dev) + nvmem =3D to_nvmem_device(dev); + } if (!nvmem) return ERR_PTR(-EPROBE_DEFER); =20 @@ -1329,7 +1320,7 @@ nvmem_cell_get_from_lookup(struct device *dev, const = char *con_id) =20 dev_id =3D dev_name(dev); =20 - mutex_lock(&nvmem_lookup_mutex); + guard(mutex)(&nvmem_lookup_mutex); =20 list_for_each_entry(lookup, &nvmem_lookup_list, node) { if ((strcmp(lookup->dev_id, dev_id) =3D=3D 0) && @@ -1337,11 +1328,9 @@ nvmem_cell_get_from_lookup(struct device *dev, const= char *con_id) /* This is the right entry. */ nvmem =3D __nvmem_device_get((void *)lookup->nvmem_name, device_match_name); - if (IS_ERR(nvmem)) { + if (IS_ERR(nvmem)) /* Provider may not be registered yet. */ - cell =3D ERR_CAST(nvmem); - break; - } + return ERR_CAST(nvmem); =20 cell_entry =3D nvmem_find_cell_entry_by_name(nvmem, lookup->cell_name); @@ -1357,7 +1346,6 @@ nvmem_cell_get_from_lookup(struct device *dev, const = char *con_id) } } =20 - mutex_unlock(&nvmem_lookup_mutex); return cell; } =20 @@ -1371,18 +1359,16 @@ static void nvmem_layout_module_put(struct nvmem_de= vice *nvmem) static struct nvmem_cell_entry * nvmem_find_cell_entry_by_node(struct nvmem_device *nvmem, struct device_no= de *np) { - struct nvmem_cell_entry *iter, *cell =3D NULL; + struct nvmem_cell_entry *cell; =20 - mutex_lock(&nvmem_mutex); - list_for_each_entry(iter, &nvmem->cells, node) { - if (np =3D=3D iter->np) { - cell =3D iter; - break; - } + guard(mutex)(&nvmem_mutex); + + list_for_each_entry(cell, &nvmem->cells, node) { + if (np =3D=3D cell->np) + return cell; } - mutex_unlock(&nvmem_mutex); =20 - return cell; + return NULL; } =20 static int nvmem_layout_module_get_optional(struct nvmem_device *nvmem) @@ -2117,10 +2103,10 @@ void nvmem_add_cell_lookups(struct nvmem_cell_looku= p *entries, size_t nentries) { int i; =20 - mutex_lock(&nvmem_lookup_mutex); + guard(mutex)(&nvmem_lookup_mutex); + for (i =3D 0; i < nentries; i++) list_add_tail(&entries[i].node, &nvmem_lookup_list); - mutex_unlock(&nvmem_lookup_mutex); } EXPORT_SYMBOL_GPL(nvmem_add_cell_lookups); =20 @@ -2135,10 +2121,10 @@ void nvmem_del_cell_lookups(struct nvmem_cell_looku= p *entries, size_t nentries) { int i; =20 - mutex_lock(&nvmem_lookup_mutex); + guard(mutex)(&nvmem_lookup_mutex); + for (i =3D 0; i < nentries; i++) list_del(&entries[i].node); - mutex_unlock(&nvmem_lookup_mutex); } EXPORT_SYMBOL_GPL(nvmem_del_cell_lookups); =20 --=20 2.47.3 From nobody Tue Jun 16 19:33:55 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (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 83D13371CE3 for ; Wed, 29 Apr 2026 15:43:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777477431; cv=none; b=cez0QAjroaEa2h/2M7nLcVGH7I50M+5xxg8+txU5NVvDCixmVqTYOy0sWtVv1dLQmA8ftjqcgfMvreEKXM1OpK99vH4/vVyj+gWTmfdR2Y7vRGMLekT+W2M/yHokrJwoFnWBI5AUAILYK0LPZhE5UMSq86TH0/opWhLgAiIsLhI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777477431; c=relaxed/simple; bh=6uzO5c/vnXQq7ok9oylOcCu9yXiAc5gVszkHwsCu24I=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=oHsNcp8uN6JCOpKjL++b91Mlc2E09TNNlHztACp5i7ERT4Qp/wUjohn/pxnD4imCUOfkaDtkKxXmqO1jYrfsnf6nRJiYe152z2Uz/YiKLlaFRV4rWUSCRBjltw9wye+SBjrrgu8CoOUt0aKxdKT1tiJyuPiTUVmwyF3bUI2ng94= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=AYupMHC7; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=HXy8o7r8; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="AYupMHC7"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="HXy8o7r8" Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 63TFILl41728584 for ; Wed, 29 Apr 2026 15:43:47 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= 8qHyF02mW7FGGLG/ddkk/kF/a5cWORIIRnYeEp05p9A=; b=AYupMHC7AHK8Hzqt cVjKvZVdKta/x8aVWvMXbi3G3rlh1/gGG5S2J7mRUZMwi3wjTLDUEQtGyvDEmhjI +e2Tc3gaNKqsdrVSVR/n4tuKh7S+PrBKo/oYWdzgd8R40opfS5q+rpfaBWS5dUI7 N23e54jKCpRkC5AtPIsa3qaCSR1/w3x516mC5rwkutpB1HfnJVEMkFKhlMpmT28e wRaOi9L6WLWnC729YvnRssaDdAXlCg5v79dDpQZw/I4h6tBWqoLu0c2cHEFaP0BU iyNBYVVZPO4exi07h6f4iecCirLD+CP+dhbS6mNqd6Q4BCuzpyLM75GM/SLtDiQp s6X03A== Received: from mail-ua1-f72.google.com (mail-ua1-f72.google.com [209.85.222.72]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4due5ksr3b-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 29 Apr 2026 15:43:47 +0000 (GMT) Received: by mail-ua1-f72.google.com with SMTP id a1e0cc1a2514c-9568c49aa10so7493418241.1 for ; Wed, 29 Apr 2026 08:43:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1777477426; x=1778082226; 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=8qHyF02mW7FGGLG/ddkk/kF/a5cWORIIRnYeEp05p9A=; b=HXy8o7r8SX+MlEjuYLZBao943AB2jIIX4w4W8ZztGekMaqne8ud7AigXuSBEWoG06F St3vQv0ufaSO6zFePBNmhu9ZOGQRrBRQPMN9Aod9g4bG0pMtVVYy7f95EToGbpo9XrF8 0UVR4IyiIGheDRObzyQsAEJS/1YW164kKLNHhc5svNv3UrVCyUAL600E60re3FHT18+9 if72CEQyE29wHriQhba4EuwD+Kg3gjKd4rijHcqyjjpUeGcyMI9tfFwwXERhYYslGRgF 1Cc/Zj8zGsR4PZWhRcmZTktEcbbb1zmga6+ItT1Am6vOQBo7XkZIa/sIBczshB5P557Z QIgQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777477426; x=1778082226; 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=8qHyF02mW7FGGLG/ddkk/kF/a5cWORIIRnYeEp05p9A=; b=l+Zy3Sl+yQLtzr0iEtSLYIdNK5gEY+oeiyzJOenP7DdT9VkjuudoSdlDHX/SEBBPkK gq8ZwMQXFkQZ1ty0AHhjS7EnbU+7rVbnEtqzeYiMaS3eDhTeom7CcGxOg+MWNgA3z7p8 Cb7da2JI6plt6tMAD0NwLDevh/yfUuu4exxiPGKTnGbKfdiXu6h3ruh4MsjyDPlKImeO csldIMdqpqrc29VgwwvABSzVw/Y0hZ552XUQNb07WNphhTivRUInU+BEOXpsIpWmedEL J8gEtIvjRw1hGMWIAjahm/3v/td1C4djFSz8BP7vBWBjtqVqiX1klr7/5l76asRLM0dy JOwA== X-Gm-Message-State: AOJu0YxEBiMcw4sr3HA64Wmlo+fs7HZznPC/22vmAi19HRf51wn4fHzs 3yLv13nD0GHr+4oBaQEjjZDK5ITHoLGDOKe2MRWhpV1LrH7F7CM5LWlhCAX6KaJOOO8d96qOgPR dSKdz/IY1Z3qg+klSDfGaeG9eWV4Ajn2xajsjZH/4HheleNAHgYpaNjqKFDuZrk2JkjQ= X-Gm-Gg: AeBDievIxeqIXOQoz4ASp13DyoMnnMTyK2ouceZ1m8xl4hOoyC+upt2uKbWJLXOvvLY OXUaaK/3Vb9tjpsg4DwT7TXFKiSe6Iy3axm+Y7aCX3HINkbCebMnnyRuAs3hzIWwyj3D8c69Enn +Fv07VezYT2JJx4JvaVQFW58oIfoPc+gxe0ZvJxei5ZaucVtU/d67Q//Ja6lbenwjij/ScH0Nfj ylKCnADM2WLu1bMsL1my1g9yyjneYkFy9+tK4mr1lNV4JSDtza7GW2YIKjJjLA+ZwjNVk2OhH9p XebjK2bhFvOTyJWySPRCwNQPHr5UsiDYkZVm0JrW/yvp2SJ81H57tN+/AIMRr1ALA3u0efVa7ao PccqsBx02DDd16RhUL8ZCfGQgKOrxHN1lirGI2RVn0Z+hUoQ7aIxq6/kMxv+o5Q== X-Received: by 2002:a05:6102:3909:b0:618:284b:c95c with SMTP id ada2fe7eead31-6280a4b2846mr4143777137.14.1777477426542; Wed, 29 Apr 2026 08:43:46 -0700 (PDT) X-Received: by 2002:a05:6102:3909:b0:618:284b:c95c with SMTP id ada2fe7eead31-6280a4b2846mr4143725137.14.1777477426055; Wed, 29 Apr 2026 08:43:46 -0700 (PDT) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:e9c0:e45a:1dbc:c82a]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-447b3d481b2sm6837552f8f.4.2026.04.29.08.43.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 08:43:45 -0700 (PDT) From: Bartosz Golaszewski Date: Wed, 29 Apr 2026 17:43:20 +0200 Subject: [PATCH v3 5/9] nvmem: remove unneeded __nvmem_device_put() 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: quoted-printable Message-Id: <20260429-nvmem-unbind-v3-5-2a694f95395b@oss.qualcomm.com> References: <20260429-nvmem-unbind-v3-0-2a694f95395b@oss.qualcomm.com> In-Reply-To: <20260429-nvmem-unbind-v3-0-2a694f95395b@oss.qualcomm.com> To: Srinivas Kandagatla , Bartosz Golaszewski , Johan Hovold Cc: linux-kernel@vger.kernel.org, brgl@kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5144; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=6uzO5c/vnXQq7ok9oylOcCu9yXiAc5gVszkHwsCu24I=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBp8iclFUnDPyWlWuJ1jfqgKlwU93E2RK8aMMrtP BvM7P4wUEKJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCafInJQAKCRAFnS7L/zaE w48HEACXe64y8SAUmQlHb4hiLcEwqhASklg2Iz8GJpCux49fgGb2dG88PGkkovanWjYGK1z/u2i tPhoKLR1RJsDtHIFhvq+F5RjyzlRBTsIS9IFXf4Z2fd1ItIBKMyrpTMkpSRmCpE7kMitypgKIg7 g3BtAHDRV2vknr3So8mlYupZtnmfgWBNJtjYQimVkROlr5XPG1tvH0OvinreJQlBqI4UiySyPkE nhUtdqdCSy0v19/o5d9MaoIdMAmGKIJBdhJBlKvFSKn6VJduvK9vdTcpQ7mRRcCdpAoWL7+gydz 9nXKlkXFzdVPwnwUryzsdOQTEmcOxy3X6MVp/s+C8W6tfxPTl6qptPsnfNRoVDU/CWqJin3m0uY 9ZFbvPhHrFHPGNWBaTQISLS86AI3WJtEtM3I/g5Bt1gDd6oVzdAoECq6OB8EdJl7x59lC/g9qYL hWnCaIZAHR71iW029/kuj0GYQhD5XZmucPV+4UJ/Ra1SYFFlQL9yO6NcNA20zayDOmJCRt+Vmsx 7Hc7x+JhMmxtoNdRBxlDxYJqtOanqrDwjYttTJGIYmFJ4EkMYGxuMYVZN/Ydn4rsp4qTEDmXDR0 gF7fv/TrvDIfLddUwfxyFOhS0buuYHZL8Ux0TU4R7Dc091J0WK4DrfG5exj1OeFBrYFPPaUhRXH Nrov4X4PskLAJ7Q== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDI5MDE1NyBTYWx0ZWRfXzAIf9qzcQoeN Kjf0txNYbns5i5e6uGPp5gD2wXuTfIrgNW4YlJPWvWifNXpqZMIzS7ATi+SVgsuVJiDc77uldcQ ITEQfWKgjHDBs0Zr4LXNU69kZJbGZNK55kY4U0B9c13oh/8Le2Nx1mKnoTOvLoQmdVlWiU06nW2 Gop7zbUgXTdVrhXyBN/HRG5TETrv7rj744hnGike+f+XV+9UxSkwGf+euSN9maIRrPEdX9g/T30 NdA/YALK34GiLXte8/++1WNFURthi0EldvbA8TRQD+HN9lkGDQb9Xi+RG6ow+Sh4itcHOlVWC8x jnXjc9a4gNlu9RhLeXks0KrNYTSUwKg8u3bUEKa6iSHb1Gn9McVNtIvWynp8AaE0zGcN3AJw1ru p40hjNnpb78fc1ChfoktP1OYCC7uiHOt5fv6iuxb2nxsKh0RX7UN3tj9QMO6J5DywIcHftrEA2t Ds43WWf9/cto/fEdEzQ== X-Proofpoint-GUID: HfWi9oLicUuUeO-t3U6_q1J7T0lvfZz_ X-Proofpoint-ORIG-GUID: HfWi9oLicUuUeO-t3U6_q1J7T0lvfZz_ X-Authority-Analysis: v=2.4 cv=CL4amxrD c=1 sm=1 tr=0 ts=69f22733 cx=c_pps a=ULNsgckmlI/WJG3HAyAuOQ==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=3WHJM1ZQz_JShphwDgj5:22 a=EUspDBNiAAAA:8 a=SMy0nb2-HfDU0vXix7YA:9 a=QEXdDO2ut3YA:10 a=1WsBpfsz9X-RYQiigVTh:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-04-29_01,2026-04-28_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 phishscore=0 adultscore=0 suspectscore=0 lowpriorityscore=0 impostorscore=0 spamscore=0 clxscore=1015 malwarescore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604200000 definitions=main-2604290157 __nvmem_device_put() is wrapped by nvmem_device_put() but there's no extra functionality offered by the latter so just fold one into the other. There's still the corresponding __nvmem_device_get() so in order to keep things symmetrical: rename it to nvmem_device_match() to better reflect its functionality and not confuse users by its presence in the absence of the similarly prefixed put() counterpart. Signed-off-by: Bartosz Golaszewski --- drivers/nvmem/core.c | 35 +++++++++++++++-------------------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index d6c62b3a527d3412a990ca143bee3209ff28d18d..bca2cce793451bb46ede9e672de= c6ec20f369fd8 100644 --- a/drivers/nvmem/core.c +++ b/drivers/nvmem/core.c @@ -1100,7 +1100,7 @@ struct nvmem_device *devm_nvmem_register(struct devic= e *dev, } EXPORT_SYMBOL_GPL(devm_nvmem_register); =20 -static struct nvmem_device *__nvmem_device_get(void *data, +static struct nvmem_device *nvmem_device_match(void *data, int (*match)(struct device *dev, const void *data)) { struct nvmem_device *nvmem =3D NULL; @@ -1128,13 +1128,6 @@ static struct nvmem_device *__nvmem_device_get(void = *data, return nvmem; } =20 -static void __nvmem_device_put(struct nvmem_device *nvmem) -{ - put_device(&nvmem->dev); - module_put(nvmem->owner); - kref_put(&nvmem->refcnt, nvmem_device_release); -} - #if IS_ENABLED(CONFIG_OF) /** * of_nvmem_device_get() - Get nvmem device from a given id @@ -1159,7 +1152,7 @@ struct nvmem_device *of_nvmem_device_get(struct devic= e_node *np, const char *id) if (!nvmem_np) return ERR_PTR(-ENOENT); =20 - nvmem =3D __nvmem_device_get(nvmem_np, device_match_of_node); + nvmem =3D nvmem_device_match(nvmem_np, device_match_of_node); of_node_put(nvmem_np); return nvmem; } @@ -1187,7 +1180,7 @@ struct nvmem_device *nvmem_device_get(struct device *= dev, const char *dev_name) =20 } =20 - return __nvmem_device_get((void *)dev_name, device_match_name); + return nvmem_device_match((void *)dev_name, device_match_name); } EXPORT_SYMBOL_GPL(nvmem_device_get); =20 @@ -1203,7 +1196,7 @@ EXPORT_SYMBOL_GPL(nvmem_device_get); struct nvmem_device *nvmem_device_find(void *data, int (*match)(struct device *dev, const void *data)) { - return __nvmem_device_get(data, match); + return nvmem_device_match(data, match); } EXPORT_SYMBOL_GPL(nvmem_device_find); =20 @@ -1247,7 +1240,9 @@ EXPORT_SYMBOL_GPL(devm_nvmem_device_put); */ void nvmem_device_put(struct nvmem_device *nvmem) { - __nvmem_device_put(nvmem); + put_device(&nvmem->dev); + module_put(nvmem->owner); + kref_put(&nvmem->refcnt, nvmem_device_release); } EXPORT_SYMBOL_GPL(nvmem_device_put); =20 @@ -1326,7 +1321,7 @@ nvmem_cell_get_from_lookup(struct device *dev, const = char *con_id) if ((strcmp(lookup->dev_id, dev_id) =3D=3D 0) && (strcmp(lookup->con_id, con_id) =3D=3D 0)) { /* This is the right entry. */ - nvmem =3D __nvmem_device_get((void *)lookup->nvmem_name, + nvmem =3D nvmem_device_match((void *)lookup->nvmem_name, device_match_name); if (IS_ERR(nvmem)) /* Provider may not be registered yet. */ @@ -1335,12 +1330,12 @@ nvmem_cell_get_from_lookup(struct device *dev, cons= t char *con_id) cell_entry =3D nvmem_find_cell_entry_by_name(nvmem, lookup->cell_name); if (!cell_entry) { - __nvmem_device_put(nvmem); + nvmem_device_put(nvmem); cell =3D ERR_PTR(-ENOENT); } else { cell =3D nvmem_create_cell(cell_entry, con_id, 0); if (IS_ERR(cell)) - __nvmem_device_put(nvmem); + nvmem_device_put(nvmem); } break; } @@ -1438,7 +1433,7 @@ struct nvmem_cell *of_nvmem_cell_get(struct device_no= de *np, const char *id) } } =20 - nvmem =3D __nvmem_device_get(nvmem_np, device_match_of_node); + nvmem =3D nvmem_device_match(nvmem_np, device_match_of_node); of_node_put(nvmem_np); if (IS_ERR(nvmem)) { of_node_put(cell_np); @@ -1448,14 +1443,14 @@ struct nvmem_cell *of_nvmem_cell_get(struct device_= node *np, const char *id) ret =3D nvmem_layout_module_get_optional(nvmem); if (ret) { of_node_put(cell_np); - __nvmem_device_put(nvmem); + nvmem_device_put(nvmem); return ERR_PTR(ret); } =20 cell_entry =3D nvmem_find_cell_entry_by_node(nvmem, cell_np); of_node_put(cell_np); if (!cell_entry) { - __nvmem_device_put(nvmem); + nvmem_device_put(nvmem); nvmem_layout_module_put(nvmem); if (nvmem->layout) return ERR_PTR(-EPROBE_DEFER); @@ -1465,7 +1460,7 @@ struct nvmem_cell *of_nvmem_cell_get(struct device_no= de *np, const char *id) =20 cell =3D nvmem_create_cell(cell_entry, id, cell_index); if (IS_ERR(cell)) { - __nvmem_device_put(nvmem); + nvmem_device_put(nvmem); nvmem_layout_module_put(nvmem); } =20 @@ -1580,7 +1575,7 @@ void nvmem_cell_put(struct nvmem_cell *cell) kfree_const(cell->id); =20 kfree(cell); - __nvmem_device_put(nvmem); + nvmem_device_put(nvmem); nvmem_layout_module_put(nvmem); } EXPORT_SYMBOL_GPL(nvmem_cell_put); --=20 2.47.3 From nobody Tue Jun 16 19:33:55 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (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 80C46381B0D for ; Wed, 29 Apr 2026 15:43:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777477439; cv=none; b=PUvqu5webjsEd7vAp5eAnDVhYWCzwkywlXCCAr++L128/T62E/ojtEvA5eJLcecKn4z1KXA44zYWRtzh6NUlCY12bBdccAVi6ohtaQCGmDLob0PgiflDvh+GUWOAJlYS5hhb3Ehb4wVXFYksufI7bvrMNcLZfyD638s1xs/f4E8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777477439; c=relaxed/simple; bh=jsug+Y09XZlkvTamN3ahaEVBTj9TqJtY4YU5YQYegn4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=bC9P5XnCAYm0OlkQ2+BsPVKdo1TscihqRnoDoIqtjs4yMLx9soUS90ooG/6Z1UJEhnjSuxW7u+BDyFDMvaPPMeMnpiNyoJeDYfRlV8evRdiyb43EJKUrkOtNHKzS1hjHO06/WNdOwS8g1vnJEMNEch4RuiAI2JSQYzuDJzi5v/c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=WIiDpzDl; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=JfriCxn6; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="WIiDpzDl"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="JfriCxn6" Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 63TCM1uJ2485210 for ; Wed, 29 Apr 2026 15:43:49 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= u2Stv53JCIIR1m+8FHqA3ncouBn3DLNgZtRvVete0xc=; b=WIiDpzDluTVs4th1 t4QYsmGkMGIKFbt037kvISzYmLw0DmbNRc9zvY0hEj3cCJDYHpGOKlHgxFfF3TXd 45kBat9IcDCbTK3AuWN3s5HdO0XbeVEed90rR7yc8LkzVT4S2E2FbGPu3K7+dDpZ SAHQOpWA/WsZtdC4/IkM6DVMVErq3Yw6JFdU12RUgRPebwKYMvhn1Z2zIeQXShfA qtz9p4Z95ErxddYH5eLh5drTl1VFFlm8beOFS5BiRWP8a3V4P9Qz0DzpR7jjjP34 U2qOxiK4R6EMjB4nglM6iok3fjZTZpi5ATXRXelDyuPXnoWzJ4xafrQDTAH6BU7P so6QgQ== Received: from mail-qt1-f200.google.com (mail-qt1-f200.google.com [209.85.160.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4duhx90qy4-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 29 Apr 2026 15:43:49 +0000 (GMT) Received: by mail-qt1-f200.google.com with SMTP id d75a77b69052e-50d826ed6f9so21470981cf.1 for ; Wed, 29 Apr 2026 08:43:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1777477428; x=1778082228; 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=u2Stv53JCIIR1m+8FHqA3ncouBn3DLNgZtRvVete0xc=; b=JfriCxn6i7VmV1nGS4JaRscKxTFgEFTvaiNwh4K5mh4/ReCoXoLfCvBsTHi79veaEl B4I0vq3En2ZbB+GoLUElZtttECSsyvj5Sf6a8FEw5wi2tl2kSgVjLAGm/YdRY4evjUoS xPD8xWdDgth8RnidvBiTS9HYo3osGLIop6zGZqwx6VQGCw1Q9YUX9RRaAPAu8rP9sbVF 6NjCvjMtsB7Cq48I2kEtQCH3IaAXE4VBgeYVAjdnohnY8UNZy+6m8U8Cm8Cg9SoohO7M CCI2LxFe8ww7aME2Pht2oMM98rQKTG0J002r44MInTRJ5rcim0oFduI5wx6AGk6pjqj3 W2/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777477428; x=1778082228; 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=u2Stv53JCIIR1m+8FHqA3ncouBn3DLNgZtRvVete0xc=; b=nFlBQmXB4hDu9VqhksDyT8VNZuAXaPBa57U89uhj201sluP7dSqSwxzY2vJCHJ9nt1 R4JLhbi+Y1X4tIPuVElNKbpAkWIY6mKtgkouaOD1vrxPAEBD8QN8quTkGt5Jgm2SwTSS 4V2LozYTnm9xXwW0xunRSZKO80fyNemIiTTqybTvWYi/1Ure5S56JS8+b7wTjYbrnwfR qK4kSnoZM/I6p9+0KG5StEcjmjF4v6IX+lKz0iOfOdWxf/mA7T1MyNPves69coWU5zDW X+uHBjN/DB7ilg7SlUIjXq/cQ218MxiYa4DNn4iA5VLtDwmuIOuuiqp05DaPB2nMoMM0 8ReA== X-Gm-Message-State: AOJu0YzBuksWw8VRKBD1acjw1P2ER4ppK+fh281tzg82CI78W3NK0Dpd pX6E083f1vPAgiB9E9ulU39iS5uL6OlppbVkbUIZ4TsDIsm8E3QeEMDa/ojstfvSD4urPn5fCjI kGjqjkh+o6ST3oIFxpdj8JAUl7O0N3NCdUVcrEYaeAzR9Kj2qjMrf03a3fTirF5ICQYc= X-Gm-Gg: AeBDiesZBL4l34pBVmPJ1wdix2HnS2VUHNmbNaxvjbIFYHwTYzlUMr4C0pwsWV701Q+ ES5wftrYl4NcMfP5Srnu5fReqTEFRPxPzT5MWoygVGlPNnSX2eDdl9GpNjLFzLT9gVJ6QUOyinG 5chKSuFGT8DDZsd0T2sbDiHv7KiZJ9jkNW4i/yjWGSQBQXTdVFByLyev8Y9+sycpJQjjNYP3P9I s0FIk/HdBOGhZszOTqs7pamUWL6P1DS2Xqnt92B0p9RHIVKNxjQxiXF1d6/QfIPZ6xfpu1VqwIe 8t4nDcpSeyJmuXkGA702dPEammLIZpgLAsx9x2IchBTC1xwj30BWiMH4giJ7r5EOKZotPwcy5Ns 6BPuaEddgrTgS9BkdrRwwzvLB6hJmko+Z9dLnfNTIA9ZZtdMWNynJ3dODxaz3rw== X-Received: by 2002:a05:622a:15d3:b0:50f:c278:c007 with SMTP id d75a77b69052e-510199fc38emr48826421cf.2.1777477428480; Wed, 29 Apr 2026 08:43:48 -0700 (PDT) X-Received: by 2002:a05:622a:15d3:b0:50f:c278:c007 with SMTP id d75a77b69052e-510199fc38emr48826011cf.2.1777477428016; Wed, 29 Apr 2026 08:43:48 -0700 (PDT) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:e9c0:e45a:1dbc:c82a]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-447b3d481b2sm6837552f8f.4.2026.04.29.08.43.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 08:43:46 -0700 (PDT) From: Bartosz Golaszewski Date: Wed, 29 Apr 2026 17:43:21 +0200 Subject: [PATCH v3 6/9] nvmem: split out the reg_read/write() callbacks out of struct nvmem_device 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: quoted-printable Message-Id: <20260429-nvmem-unbind-v3-6-2a694f95395b@oss.qualcomm.com> References: <20260429-nvmem-unbind-v3-0-2a694f95395b@oss.qualcomm.com> In-Reply-To: <20260429-nvmem-unbind-v3-0-2a694f95395b@oss.qualcomm.com> To: Srinivas Kandagatla , Bartosz Golaszewski , Johan Hovold Cc: linux-kernel@vger.kernel.org, brgl@kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5856; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=jsug+Y09XZlkvTamN3ahaEVBTj9TqJtY4YU5YQYegn4=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBp8icm3xpKX0Lc3E9snCwMnKBWmCJd0XRYDGnT0 Gp2IDzIyRyJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCafInJgAKCRAFnS7L/zaE w94kD/9e5OSWiWk3camxe8bBhKLb4gZpOL5dctK0bVj/ZsRTosW+/QKGE8kb5H/f1BBo9jV2L6M LIo7lQfTw/rISA2l2Jw80qjYMqbKowhlo1J/3zKGM8FAxU2mSTTa8Rk3Yjh4GJ6CT+07iorWDQR hZOD0GqUDOlLwrMzuKb7gynAkpgW3L/PLpG4z1avSOWbXLi7g05JtUnJJgvGGbWXo+C5Hr55OId N/qDubgyZF8+0X1Ana7dn48D5Zb10CxFyQszjllBbYJvZD0w1zOaXt5fNQx299Pf60l8n3f+/en ELYLJ1r/o9ur7r+8KQLcgFIgeQJ2Nkz/f23JS6lwr/shKUuM//fuFI13RU6FaII7RNdf35lzCfz GiyBtBQLEz4nI/ZRI0HEnkQoquXWgDLwfi0OUAQTYh/7adnhGshOk5334/yLzISua2ExHLXIkcC jC2PMIfnu2KJH+jhVPInv7reuDgo3ZJEzWhwnJUgSg+DOALca4DAVoJ9OxYitqGH2eP6/2i1w/5 CCu4picgJ/1XnIiO7jG0+sQRxP35rF+OyoKPixSD51p9YkfVYuXubmsWWQT0fJD8r2laz422X3T RZwTmnK6sL7wxNGotVsRGTR+yqrPgGJLd8WeRoJuvDWltJc2uqDII4QanxCoKaTD2MMzb+xt+VY oVhDq8vZ4MkcUDA== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDI5MDE1OCBTYWx0ZWRfXw7p9GfoO/suk FyFWHwl3R0ebGit9DHnyaP9qUmDkVQzGcCgQplIvn8K9PIXW4Nq/sV7P809fnALlEjneU8UWOg+ 8IeGwgw9hSWy870N4wkiLXZD1m7qbHvgiSiHtm9iczi1jFVCSbR1tg9G3dNm4SxQuo/gQK7BB2K /ek6iWue4LWVb2XKep/zJ6a+kYRMqBxXMuStuy8MldrAQYp/e1iaCyOB9viFjQA72ZLff6ZgA5f 0wO6HeGclVoE7zAeGPthnOMBIfedadJgxTfe9Hof0vHPUS0OWiX9lLZvU4otFW8u79oZnWXiZfu G1q2TaJK6HnLuoccN+jwsCCZZFu9RXERdYGi1Ii/lOkabSv5t5B0MnADdhrkhEz1bRXcFsMGQ47 BzJHVcSiEFDzoj0NTckNK6kekTEzMzhXqzVT8Odh6SdLuj8VmgasgC5txZPx5l1MR3oy5w22/iq qbtxXS4G3DHB3clkMfA== X-Proofpoint-ORIG-GUID: R77CVTZLXjLMhQv7YmxSrSv240G0utv3 X-Authority-Analysis: v=2.4 cv=O5oJeh9W c=1 sm=1 tr=0 ts=69f22735 cx=c_pps a=JbAStetqSzwMeJznSMzCyw==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=EUspDBNiAAAA:8 a=IQ43IFojRXP4T6AthesA:9 a=QEXdDO2ut3YA:10 a=uxP6HrT_eTzRwkO_Te1X:22 X-Proofpoint-GUID: R77CVTZLXjLMhQv7YmxSrSv240G0utv3 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-04-29_01,2026-04-28_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 clxscore=1015 adultscore=0 phishscore=0 suspectscore=0 impostorscore=0 bulkscore=0 priorityscore=1501 lowpriorityscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604200000 definitions=main-2604290158 The reg_read/write() fields of struct nvmem_device point to memory owned by the nvmem provider. They must not be dereferenced after the provider is unregistered. Ahead of protecting against accesses to invalid memory with SRCU, move the callbacks into a separate structure the address of which is stored in nvmem_device. Signed-off-by: Bartosz Golaszewski --- drivers/nvmem/core.c | 37 +++++++++++++++++++++++++++---------- drivers/nvmem/internals.h | 9 +++++++-- 2 files changed, 34 insertions(+), 12 deletions(-) diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index bca2cce793451bb46ede9e672dec6ec20f369fd8..83ef4858939c471daabd4641f97= 46d92b43daf5d 100644 --- a/drivers/nvmem/core.c +++ b/drivers/nvmem/core.c @@ -57,25 +57,28 @@ static BLOCKING_NOTIFIER_HEAD(nvmem_notifier); static int __nvmem_reg_read(struct nvmem_device *nvmem, unsigned int offse= t, void *val, size_t bytes) { - if (!nvmem->reg_read) + struct nvmem_operations *ops =3D nvmem->ops; + + if (!ops->reg_read) return -EOPNOTSUPP; =20 - return nvmem->reg_read(nvmem->priv, offset, val, bytes); + return ops->reg_read(nvmem->priv, offset, val, bytes); } =20 static int __nvmem_reg_write(struct nvmem_device *nvmem, unsigned int offs= et, void *val, size_t bytes) { + struct nvmem_operations *ops =3D nvmem->ops; int ret, written; =20 - if (!nvmem->reg_write) + if (!ops->reg_write) return -EOPNOTSUPP; =20 ret =3D gpiod_set_value_cansleep(nvmem->wp_gpio, 0); if (ret) return ret; =20 - written =3D nvmem->reg_write(nvmem->priv, offset, val, bytes); + written =3D ops->reg_write(nvmem->priv, offset, val, bytes); =20 ret =3D gpiod_set_value_cansleep(nvmem->wp_gpio, 1); if (ret) @@ -280,6 +283,8 @@ static ssize_t bin_attr_nvmem_write(struct file *filp, = struct kobject *kobj, =20 static umode_t nvmem_bin_attr_get_umode(struct nvmem_device *nvmem) { + struct nvmem_operations *ops =3D nvmem->ops; + umode_t mode =3D 0400; =20 if (!nvmem->root_only) @@ -288,10 +293,10 @@ static umode_t nvmem_bin_attr_get_umode(struct nvmem_= device *nvmem) if (!nvmem->read_only) mode |=3D 0200; =20 - if (!nvmem->reg_write) + if (!ops->reg_write) mode &=3D ~0200; =20 - if (!nvmem->reg_read) + if (!ops->reg_read) mode &=3D ~0444; =20 return mode; @@ -322,6 +327,7 @@ static umode_t nvmem_attr_is_visible(struct kobject *ko= bj, { struct device *dev =3D kobj_to_dev(kobj); struct nvmem_device *nvmem =3D to_nvmem_device(dev); + struct nvmem_operations *ops =3D nvmem->ops; =20 /* * If the device has no .reg_write operation, do not allow @@ -330,7 +336,7 @@ static umode_t nvmem_attr_is_visible(struct kobject *ko= bj, * can be forced into read-write mode using the 'force_ro' * attribute. */ - if (attr =3D=3D &dev_attr_force_ro.attr && !nvmem->reg_write) + if (attr =3D=3D &dev_attr_force_ro.attr && !ops->reg_write) return 0; /* Attribute not visible */ =20 return attr->mode; @@ -531,6 +537,7 @@ static void nvmem_release(struct device *dev) =20 ida_free(&nvmem_ida, nvmem->id); gpiod_put(nvmem->wp_gpio); + kfree(nvmem->ops); kfree(nvmem); } =20 @@ -891,6 +898,7 @@ EXPORT_SYMBOL_GPL(nvmem_layout_unregister); =20 struct nvmem_device *nvmem_register(const struct nvmem_config *config) { + struct nvmem_operations *ops; struct nvmem_device *nvmem; int rval; =20 @@ -904,8 +912,15 @@ struct nvmem_device *nvmem_register(const struct nvmem= _config *config) if (!nvmem) return ERR_PTR(-ENOMEM); =20 + ops =3D kzalloc_obj(*ops); + if (!ops) { + kfree(nvmem); + return ERR_PTR(-ENOMEM); + } + rval =3D ida_alloc(&nvmem_ida, GFP_KERNEL); if (rval < 0) { + kfree(ops); kfree(nvmem); return ERR_PTR(rval); } @@ -931,6 +946,10 @@ struct nvmem_device *nvmem_register(const struct nvmem= _config *config) INIT_LIST_HEAD(&nvmem->cells); nvmem->fixup_dt_cell_info =3D config->fixup_dt_cell_info; =20 + ops->reg_read =3D config->reg_read; + ops->reg_write =3D config->reg_write; + + nvmem->ops =3D ops; nvmem->owner =3D config->owner; if (!nvmem->owner && config->dev->driver) nvmem->owner =3D config->dev->driver->owner; @@ -940,8 +959,6 @@ struct nvmem_device *nvmem_register(const struct nvmem_= config *config) nvmem->root_only =3D config->root_only; nvmem->priv =3D config->priv; nvmem->type =3D config->type; - nvmem->reg_read =3D config->reg_read; - nvmem->reg_write =3D config->reg_write; nvmem->keepout =3D config->keepout; nvmem->nkeepout =3D config->nkeepout; if (config->of_node) @@ -967,7 +984,7 @@ struct nvmem_device *nvmem_register(const struct nvmem_= config *config) goto err_put_device; =20 nvmem->read_only =3D device_property_present(config->dev, "read-only") || - config->read_only || !nvmem->reg_write; + config->read_only || !ops->reg_write; =20 #ifdef CONFIG_NVMEM_SYSFS nvmem->dev.groups =3D nvmem_dev_groups; diff --git a/drivers/nvmem/internals.h b/drivers/nvmem/internals.h index 7cbc55f40259fc4315c41979ad8bf75c36bcb056..070eef89ffca78fe033aaaada0f= 91c257fe2f166 100644 --- a/drivers/nvmem/internals.h +++ b/drivers/nvmem/internals.h @@ -7,6 +7,12 @@ #include #include =20 +/* Hold pointers to callbacks owned by the nvmem provider module. */ +struct nvmem_operations { + nvmem_reg_read_t reg_read; + nvmem_reg_write_t reg_write; +}; + struct nvmem_device { struct module *owner; struct device dev; @@ -26,10 +32,9 @@ struct nvmem_device { struct nvmem_cell_info *cell); const struct nvmem_keepout *keepout; unsigned int nkeepout; - nvmem_reg_read_t reg_read; - nvmem_reg_write_t reg_write; struct gpio_desc *wp_gpio; struct nvmem_layout *layout; + struct nvmem_operations *ops; void *priv; bool sysfs_cells_populated; }; --=20 2.47.3 From nobody Tue Jun 16 19:33:55 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (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 6C26D37F8C5 for ; Wed, 29 Apr 2026 15:43:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777477438; cv=none; b=hfkKPcgHSXM/JzTUxRtbKOuAHeooiMUd6L6W5E9c/nXH6ZxWuWurVIGD1jG/qKD1GmECFhTU8az+L8PffsokqQYe3vTQU1G2S67KMgpYzAz+uBZwViqLO75GD5UOjI9ppd6I486WvBJDFIG4Z9e5v99HOrYRVj9pWM874nviyTs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777477438; c=relaxed/simple; bh=KZCWEvO63oX1FsDdFQQdyHnksuMOPYlcREE3/YRGNHE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=KM+8nEXwdgNNnQRnOsBYYM4ZpvwVIIMt9VtGg0G5D6NxMjE70cRPc3WdVg89fP8pUKmRPA3lVf2oS4ZcmZZquRhQrKBfR9MxXxYMOavHsf7TqWqa7N+vhnbZnEwHVv3y6lxRnHwPlDpiyWr16+vGdbftvfg6L7veXVvqwn0G6BI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=OK5exfgc; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=G4VsPLNV; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="OK5exfgc"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="G4VsPLNV" Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 63TFabuL1721209 for ; Wed, 29 Apr 2026 15:43:51 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= Vlf4PlfS5tzFdpwjI53mxhIfEkjVjBfwJFd4T/6BeLw=; b=OK5exfgc21fRZg8N 50Dl1tWtvNwtONEuKwpoHNIiOjyOyN+B6upfWtNBK1/X76QrCjCzSrkfYUo+fL5i ZYHfutYPdlQsTol+0a5Z0W7O4v9pQj8qRWqDIGhn+uXC6mn2KEsCqxvcVP824ilv TiyHTlUG4slIvfoX1TXrvODY8Gb5Qjonqn5n7nSMoterEXPYgjPNiiSJsSKS8COu Y4jC7P7kt+jruTFq66mVyqe0UOsm5j1Mb21HkMA/odfwmakBkcKcP4vZ+aWq1V7x KY5caRfY6tZgTQq/NahHrp95Jx4/p6nt83CzXo4LJcI5+yX1y5zFFWMj19M7E5is 7CzcNQ== Received: from mail-vk1-f200.google.com (mail-vk1-f200.google.com [209.85.221.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4dua732r0f-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 29 Apr 2026 15:43:50 +0000 (GMT) Received: by mail-vk1-f200.google.com with SMTP id 71dfb90a1353d-5662a21d35bso26042644e0c.2 for ; Wed, 29 Apr 2026 08:43:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1777477430; x=1778082230; 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=Vlf4PlfS5tzFdpwjI53mxhIfEkjVjBfwJFd4T/6BeLw=; b=G4VsPLNVuq79AwxWii3tu2uLH80x4e1KOmlEGXvfza75VH1zvadUWXtfenJY2XGeOg 8leP7PFPMTe4gkYOfmEmLMZgTrmwhyIbIc07QEABJruZn71vOjOrvX21rugr9pK6kpAP TGJyiv1Ih634qeiqL8S7KL3+qImMaMAiZiyp8LVRWWlR2AS0mppoJJqa6jTHXu4cXwOq A6DowrqsyDiRFFK3YcTYwGE0zetULlyuPBu89Ghft+iSwjb/J75COmpaxtbn8PoViCSb Y0YLvfpbAAHsBKAYCYuU1D83Rniw+KZ9PPNVR6ok2cb64QxRJWQvXP+bmSP8uGnVe9bb h3yA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777477430; x=1778082230; 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=Vlf4PlfS5tzFdpwjI53mxhIfEkjVjBfwJFd4T/6BeLw=; b=dF74flSM7udJFhnt4iYiH3vAG9mfWtwA7dEv3b0VqT+5qmErW1Idht1WPnTY+YshN5 9d0VyN97HBGar0/o17M/xXJHWGUFx4XbeYW2yiLLQTbli00CP1fo2wscQM8kU4KnwEHh Nu0xKlU0xjzdiLOpOJ/+nreipmZZvWcaah2qF83Gq0+X6s7m/lEQRd7WAaWzpkaojzzz RxojXJEdM9s813yboome5T79cF7AEdgjZpQYv8ceOA4aRs6rtk7SHib4KOqFSZqb035Y 45IuSXCYGUJIprWHw03VFaaA3Dueqh700sUA50saH/IPLnXax1lawSoZyJpYSxiWpZBu 9YsQ== X-Gm-Message-State: AOJu0YzpNVH37Jku+O9/SyQUMkljaV8zZq/6VMA+28gAZ5UwHwBEpg3e 1cyumBlYQuE2vMsIx/ahdAfB4XW0nhhlwB9kEcMC/xb/nbAbt31psU2FCRdws1nGrl49ktcOO2W UBkqDAudj1Ksfid4ZOWnKWZ0Hj/Sze0xe40GMJscezNk4nR1ntJNMzowQwccUzgy+9kc= X-Gm-Gg: AeBDieuRq3ktl8wqcD9laRL/Sxj5GviC48NT7CAh2hwqaXASkHx5LYOpSsNEvL3a4CB BYeZc3qRSHMt7ogALTuCGhZyqIbFKGh7p8waWEyYyMeZvlUVkvQQjvlNmrtzHt8PsDSquwBq/IQ +vWqT82CCZwJl+vx1L7o+BQKQB0CyO2asyP4BEbXi5BHy5ScdQCUOTOvO3UtZqCi4oX4YGLLChA d1YZejYjVbS3vYzZ6+9yp4GXkFdkVMGpGxFusx9AZjHNh2KA7G8NbxSBO/AynMbYNjHXQTWGk9X ROFvVOcc3ubv3CdQitCz4/F79ZruRFkz/cnALbZV9VGicbZmXmGU1Y1Pbwc10pus2rAcPhGyyT7 nvPgOxJrYzyUjlfchIeeMo3m1WLA1ZyDtvcLO4zGU3uQN4DJnZFTKLqO1R5x0Aw== X-Received: by 2002:a05:6102:1609:b0:605:218d:ae0f with SMTP id ada2fe7eead31-6280a9b9ae0mr4402872137.18.1777477429934; Wed, 29 Apr 2026 08:43:49 -0700 (PDT) X-Received: by 2002:a05:6102:1609:b0:605:218d:ae0f with SMTP id ada2fe7eead31-6280a9b9ae0mr4402827137.18.1777477429518; Wed, 29 Apr 2026 08:43:49 -0700 (PDT) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:e9c0:e45a:1dbc:c82a]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-447b3d481b2sm6837552f8f.4.2026.04.29.08.43.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 08:43:48 -0700 (PDT) From: Bartosz Golaszewski Date: Wed, 29 Apr 2026 17:43:22 +0200 Subject: [PATCH v3 7/9] nvmem: simplify nvmem_sysfs_remove_compat() 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: quoted-printable Message-Id: <20260429-nvmem-unbind-v3-7-2a694f95395b@oss.qualcomm.com> References: <20260429-nvmem-unbind-v3-0-2a694f95395b@oss.qualcomm.com> In-Reply-To: <20260429-nvmem-unbind-v3-0-2a694f95395b@oss.qualcomm.com> To: Srinivas Kandagatla , Bartosz Golaszewski , Johan Hovold Cc: linux-kernel@vger.kernel.org, brgl@kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2068; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=KZCWEvO63oX1FsDdFQQdyHnksuMOPYlcREE3/YRGNHE=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBp8icnvL0B2hP8hr/x8g5DPP115aLzQQPnH0b1q lsgbZHtTJOJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCafInJwAKCRAFnS7L/zaE wxucEAC70VEkgOfOfzuhRG0ENw0kXdjjgBOc0CrKDC+ycbL4LYLo61blmB2NhsRJj1ppIEKSwGU 5nMGjdq3zybPnNSFqX6gOwSct5y1pe1eDZvKFcv3bdCAtIdH0GcyMDx+4/nf8EfapEE75fQA/P7 ExQjP7tI5Wvl3MSa6g2FzF5bJVsKmPnJaaS4AS26RK/pONHygTEzdU1Ox7SSSBViwtmzSah+uFT 45IDQdzGKpQGz2GDAnNctRLTBxSuehc292GTUOd7/7GP1btJU7OFDo7lt+l2s3lW7KhnfZIBacX lbsofGZPhDJ7fBISG73KmpytYa47ak7Cf7whGD9nqy6u7wlUj/qoTa48YN0UapS1Y9BBJXE0ffu Zwm/9FJo2qqKE91DyITvthoa4CwYy8STXLJW/8a1babNuuFZP7jjm1OjkLoRY2c+Sqoufw7J3bD SC2Z1Wvat1NbmM3kH1F40xxqyxkpseNSfKX1mJwNpyl0mQJWYdaD37kfoJs/GeS4YRvP4vVwfHy ny3lS7hhPjUqYpf/7YOi87OCXCApySuIm0PzB9nxthvs1UNWRHFpOaWjT7VNv+a/uk5agdoEcBj fyF5igKvGhZO55+pMrRKAXZ5JRjkU8iFV3T+2BEKo3KIBk2JVphePJlXpzMja4HRnLqFbv3bklD qOkfoVSH/cXETow== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Authority-Analysis: v=2.4 cv=XtvK/1F9 c=1 sm=1 tr=0 ts=69f22736 cx=c_pps a=wuOIiItHwq1biOnFUQQHKA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=DJpcGTmdVt4CTyJn9g5Z:22 a=EUspDBNiAAAA:8 a=vscgUUECmMDzLPOjfHYA:9 a=QEXdDO2ut3YA:10 a=XD7yVLdPMpWraOa8Un9W:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDI5MDE1NyBTYWx0ZWRfX2sJqGARzhDH6 YimPenbBklFnxkogO9KAXlorqT5OiWsxJ8GtP/LVSOzWcnGdq4IN0lUXTKgcaLOZvuHwSbmn/Km mQG4MphUAyfgDNmYF8wd28XeEGREmkJUUxg01cZ6cKCKfoHSevlsEOy6E77fS8Y8JV23wap7DnG Lxo4DkKHzr/NrO2N8GA9UmVMgJ1bavw0dImRcFFlobGqFrCa7RRpxds0N+huWmD17QTa0ZldPGZ IBHcgKHjyJOWZ7fNBPt2Zfi4rwGGvEccUt9/ofJJFXpUHRuohqLNoQBykJ0vcvjQSObfrVbjqvw oeygCPfYbjvQsuFEzpbWqMAuQe1i5WTCToDvOc+LyACVnDkV2pC0EkL/yKLFGTi2DELFHHbNamB WfFr/uESFdKquSHN0j2i7dDQB+yXjndI3TR3npF3aRHhsr+WILZQ99BWKNPE/e1nn33oV31AMFb lc9apu82sxsGmHLkMhg== X-Proofpoint-GUID: g1iT1x1nWAjizqEP510_yUOpRuxErVAj X-Proofpoint-ORIG-GUID: g1iT1x1nWAjizqEP510_yUOpRuxErVAj X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-04-29_01,2026-04-28_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 lowpriorityscore=0 clxscore=1015 spamscore=0 bulkscore=0 adultscore=0 impostorscore=0 phishscore=0 priorityscore=1501 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604200000 definitions=main-2604290157 There's no need for the config argument in nvmem_sysfs_remove_compat(). Once the compat attribute is registered, that information is carried in nvmem_device::flags. Rework the code to always query that field and drop the second argument. Signed-off-by: Bartosz Golaszewski --- drivers/nvmem/core.c | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index 83ef4858939c471daabd4641f9746d92b43daf5d..32fe048a4a9152b7a5ec465ae5b= bf04e30319554 100644 --- a/drivers/nvmem/core.c +++ b/drivers/nvmem/core.c @@ -454,10 +454,9 @@ static int nvmem_sysfs_setup_compat(struct nvmem_devic= e *nvmem, return 0; } =20 -static void nvmem_sysfs_remove_compat(struct nvmem_device *nvmem, - const struct nvmem_config *config) +static void nvmem_sysfs_remove_compat(struct nvmem_device *nvmem) { - if (config->compat) + if (nvmem->flags & FLAG_COMPAT) device_remove_bin_file(nvmem->base_dev, &nvmem->eeprom); } =20 @@ -524,8 +523,7 @@ static int nvmem_sysfs_setup_compat(struct nvmem_device= *nvmem, { return -ENOSYS; } -static void nvmem_sysfs_remove_compat(struct nvmem_device *nvmem, - const struct nvmem_config *config) +static void nvmem_sysfs_remove_compat(struct nvmem_device *nvmem) { } =20 @@ -1046,8 +1044,7 @@ struct nvmem_device *nvmem_register(const struct nvme= m_config *config) device_del(&nvmem->dev); err_remove_cells: nvmem_device_remove_all_cells(nvmem); - if (config->compat) - nvmem_sysfs_remove_compat(nvmem, config); + nvmem_sysfs_remove_compat(nvmem); err_put_device: put_device(&nvmem->dev); =20 @@ -1063,8 +1060,7 @@ static void nvmem_device_release(struct kref *kref) =20 blocking_notifier_call_chain(&nvmem_notifier, NVMEM_REMOVE, nvmem); =20 - if (nvmem->flags & FLAG_COMPAT) - device_remove_bin_file(nvmem->base_dev, &nvmem->eeprom); + nvmem_sysfs_remove_compat(nvmem); =20 nvmem_device_remove_all_cells(nvmem); nvmem_destroy_layout(nvmem); --=20 2.47.3 From nobody Tue Jun 16 19:33:55 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (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 2811B3845C9 for ; Wed, 29 Apr 2026 15:43:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777477440; cv=none; b=J75z+rklJEY3NRf8e6QzVZl4SiL659+ZY8qCopNEftGwZkQlMh6Rlf5afSXwH8uJTOsG+vHQYGtCKywQt/EN3sPCcN8SAG2BEqqOu6fxuAPfJuh8s7XqWp2RIncvBiy/jUDefZwTR2K6HsiuLiOsvuxfXzKsQMDlHdcmvW9eqEg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777477440; c=relaxed/simple; bh=FBSzacBacZXWrP090z+AhdVbxQ8fM1ULKOpRS4p42Co=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=RUz+wmP9VwkX0EwxTfA7RhdXmY4NPQg6XHEqXKdeTSHAhZUasSJuxV/YUxYOdPdJow57mBMjJ7CKhG3sxCT/Y0Zb1J3yO3Mpc9OG4TfpiZUfA99vZNa/fvOkQcU6b6eBw/1ZH1V+guyGYkmxgb09Yy7oj6KVjACVc53CKu0as2M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=SxeBz7Y3; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=d/YW0J1Z; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="SxeBz7Y3"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="d/YW0J1Z" Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 63TFG6oV2889782 for ; Wed, 29 Apr 2026 15:43:53 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= wDTPW9Lzf9f3QH3dx1ugRZu6zRIdBZHVrPxgQ+2kI/M=; b=SxeBz7Y3NZCM/Opa yx1SlJ65KixOOk1B5xwgw/cUxG18cXwfS9Hm7r7zebBXE+5DswUjLywRBTHEuUCf YiuQ7ztLPA7Q1DBUyj+P2m99NPLghxGMWnyNznF239WyDIUt/q/gTlBlRzCm2JT4 3q7gkekjSN10Neg34IxacYprhDSZL5D3yuALwUCEiDFAYGYBbn1EHysERvNubrir YmF1Wccpyra3ZyaGvsEUtJaX5u+hiEDqxmRvata8FEqbEuxmGrGcnbaFL3luz12s ix/2DMG8YmnfLNBKLs92q8cZHbhQkd/1SM1kI1Qq87XX168QTztEXECV1mTtrMQB YRwQgA== Received: from mail-qt1-f199.google.com (mail-qt1-f199.google.com [209.85.160.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4du0wqckcq-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 29 Apr 2026 15:43:53 +0000 (GMT) Received: by mail-qt1-f199.google.com with SMTP id d75a77b69052e-50e136aff17so229471041cf.3 for ; Wed, 29 Apr 2026 08:43:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1777477432; x=1778082232; 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=wDTPW9Lzf9f3QH3dx1ugRZu6zRIdBZHVrPxgQ+2kI/M=; b=d/YW0J1ZGgY/K2UwKhgo1YIFcLgJxfFvvucTS3VVh2VS1BzSYTxdX3iTze1hRZBhBL swZAPpxpK+MtSjGTwsfQBLUsLoWu5p0aiCxeHYwsuqgvC1wUCCNc7p4/N+blhLM3u6FV GrzTDRA//ogjCJNH0fpsQ9fHEmiYevVdquGw0Ah3TdzsRvCEATXze38G/+Fvqmtl/a6b pV3zu6vV6koWhPgtgQinam6dfY/n5uVlVE8NOm6deN7E1DMoPKuxFc+TXy7Y4wZoIVrp dwqBHM6w6vmwYYKhTf7m2RFD7YEa8SWilq790QNgdJILU9ikfqIZUEgRuCZjqVpjD0gp 6aJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777477432; x=1778082232; 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=wDTPW9Lzf9f3QH3dx1ugRZu6zRIdBZHVrPxgQ+2kI/M=; b=VBAY3qxmpAcd0o/5eVIR9d58ce55CIF47jkNwlvwpNB3PaDCqm9TmOxd5X76z6s9Qm UCFE2D93/OgVd3ldjw1yhtL7HwO3sgolVUcMO7Tbysdt71wYGB9uBJI6oxDrNbULOp64 w1bsOeGXjmFN7Ddeo46gUcWscfYWO4KGxYyj2UoYot5sZJ4kkkDQw/rCdOaK2PPLojs4 iJoeIBHujmiShkw4KT4G6QFIa/3C84pBnmPnt25nKNRJ/iWwLT8Sofbceac4qcvw9NT4 FMw2NHW4+movSYVkxOjCfWGusqemszQhJ79YbnUxgYvI+NAmVXFbaHz4VVExY58NL8Gz TdHQ== X-Gm-Message-State: AOJu0Yyr7lRD7L4eAItX5thj1kI7DPeuNP6lO/8DE46QxwO0xItwEtKv jdG39849+qG3tDL1dMe3A5GU4kutHCtpwi8V5KYxWFynrCceil2lL9DXlJXBgA6ffhGOJ8ARYFB He8vN30Pv41Th2n/ZMKATKjQ4AGyrYQ097tdo8PPz/WXdBcgkwiyHT3jsFm9d5Nv/ZdakKVxMTu U= X-Gm-Gg: AeBDieu2aRBfBmD8NMupRNkwvj7qiFojyyuQABZ01wad3nXXaDCD8amCR8644OU3cAR /eqA786KQ2BfcXbMCNoc3PubvurWIGOdGqO/PrJE41HJmGbq+WSLAzcAyEnGRwCXLwwJDaXZYyC sjqI8eguoIyhRDSJGHz+HSlvmKhCmjhpbMYR73Y5N90QcYTvYQE5FrwAtymajyYL+TPn54PQRGz ABDSHMveigeGjZQ5I6uEK1NpewxNXeAaQpMH3AZjnJ8OR12CVd5SpkxaMGHD8S36vqndyBsG+Md LcC8JLsgdNYfQFxYGl2MUHD2JNPxtuZBw41GOa0olzCW1Py1PF/Xc+3FFcQ0ePMj/OH9K5J5zmB ogSwzoe0/vtTEvC4IG4cFI8RotzmZ+Yn+y6HS1cyUf24nEKv9/ovE+4+/tyPYmA== X-Received: by 2002:a05:622a:4c0a:b0:50f:bb77:a084 with SMTP id d75a77b69052e-510189c04famr66269781cf.25.1777477431932; Wed, 29 Apr 2026 08:43:51 -0700 (PDT) X-Received: by 2002:a05:622a:4c0a:b0:50f:bb77:a084 with SMTP id d75a77b69052e-510189c04famr66269151cf.25.1777477431319; Wed, 29 Apr 2026 08:43:51 -0700 (PDT) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:e9c0:e45a:1dbc:c82a]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-447b3d481b2sm6837552f8f.4.2026.04.29.08.43.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 08:43:50 -0700 (PDT) From: Bartosz Golaszewski Date: Wed, 29 Apr 2026 17:43:23 +0200 Subject: [PATCH v3 8/9] nvmem: remove duplicated reference counting 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: quoted-printable Message-Id: <20260429-nvmem-unbind-v3-8-2a694f95395b@oss.qualcomm.com> References: <20260429-nvmem-unbind-v3-0-2a694f95395b@oss.qualcomm.com> In-Reply-To: <20260429-nvmem-unbind-v3-0-2a694f95395b@oss.qualcomm.com> To: Srinivas Kandagatla , Bartosz Golaszewski , Johan Hovold Cc: linux-kernel@vger.kernel.org, brgl@kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5375; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=FBSzacBacZXWrP090z+AhdVbxQ8fM1ULKOpRS4p42Co=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBp8icoHCPn4JP86Vxz8WsLYeDYLHwcz5mQf63uZ V0pG+MOhJ+JAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCafInKAAKCRAFnS7L/zaE w3b2D/9nQYlrddhxkk8qywNh53VpqA5GyYpFpSMl0phowhL2M+3/cpWx5t/LwPWpmA+DcdRw7fh Z+R9KE0RrljzCwE7Erzq7f92KMjrkWXmyzyAGUc38DBHYNkoQqpwKw90iZQMk2Rz45WbjlI8ogC Tepc3NS/gp/8URfCxqz89m5dlxzax+l4VZfEvft26181oYYVx0mqyNXRGVKaltHinAPlw4ky62/ kf8NJ5DB7B50ora5ke4tbSBvYZ1m/RX7FYb7D6UrcSIDhlqs/1Y3dT8WQhzdWfTnvVMgwUYE+Mg tAfJOCBeQDWZgmFQ08b5kDvZJvnkvK3dzaO7qZ8fVATkZ7h2+bEd4+8Ln7ZbWaxJ4rXsjLsiIi1 FSuaswJXqxzStuvFkhsrLG5HzOob17W1cdbvcGxjlNF21J3AZ3GXKs8q6hG2PrBmM42cWSJeIpb en0PsUCe2nsnuv34IQbXoR6q5WQi6MXAJbUUIfZ/bwq6KuQZCTmwMYFMSC+3c243zjKnDIDSOsC XW71x5Zde+EGOXfKQT6PliMIma/xRbyFoZJ5NyseqyORgQZXA4UEB6zSC75592PVvVR7ApY852B Cs+GkXAl1g5mUyXEA3JugZ3hAQ0kB3XnRKsEs4TmxWJuv8lvJLE0UETvupkzN6i8TvJLJxpk3Uk uACATlrw2U4jb2w== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-GUID: GCzDsXH8ox2VVXJCMzJhJP-gp0ZbGACd X-Proofpoint-ORIG-GUID: GCzDsXH8ox2VVXJCMzJhJP-gp0ZbGACd X-Authority-Analysis: v=2.4 cv=BfDoFLt2 c=1 sm=1 tr=0 ts=69f22739 cx=c_pps a=WeENfcodrlLV9YRTxbY/uA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=EUspDBNiAAAA:8 a=IOj402APi-VxR199s-4A:9 a=QEXdDO2ut3YA:10 a=kacYvNCVWA4VmyqE58fU:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDI5MDE1NyBTYWx0ZWRfX2X2J1+8W6SCc k6jukn4OOQJecvmeiADY8T1Hlc6xPCm3EoMK1mJL/TgQ42CZtHax/r5XbkK0uPTgTXUj1abJfmp jHYMFhys58aVUNAuu/s4UROYRZldgz34De9BR0lozGM3KFDpG6RW2IhwZ9yjm9HOnyhLi6k8y5j ORmZlvvNzS2LW8+9gTtiJ7/JezmPn+qV778MCvtZOEOXoKDv/w6nnzho4HlXhJhpmOqWqGTDkRz WjYAAlCbXqoH+eTlnW6oX3yf7SU/p+G7lvW2NiJwkIMfazK32o1abJHD2EicRY3snmKwt//CCoy kYWe3gEjnaWOVx4tl0IE97JxwEFcSWQd66799tikZv+GyDsVN2szWht+rUVip7y4qzPbza8iB// VB9gjcp/+WukVXKWXufgCBmdpXvJlsyA4tM1IMCmjyDHDPa0Ky+PTMoVYBEhfD5Qz0v4hqg9rj/ sRbAVzTXjAreIeBLdwQ== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-04-29_01,2026-04-28_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 priorityscore=1501 impostorscore=0 malwarescore=0 lowpriorityscore=0 bulkscore=0 adultscore=0 phishscore=0 spamscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604200000 definitions=main-2604290157 Commit c1de7f43bd84 ("nvmem: use kref") introduced reference counting with kref to an already reference counted nvmem_device structure. We only need one refcount so use the one provded by device's kobject and drop the kref field from struct nvmem_device. Signed-off-by: Bartosz Golaszewski --- drivers/nvmem/core.c | 77 +++++++++++++++++++------------------------= ---- drivers/nvmem/internals.h | 1 - 2 files changed, 31 insertions(+), 47 deletions(-) diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index 32fe048a4a9152b7a5ec465ae5bbf04e30319554..590d880ede944670c09dd62b394= 626a959e5cdd1 100644 --- a/drivers/nvmem/core.c +++ b/drivers/nvmem/core.c @@ -529,24 +529,6 @@ static void nvmem_sysfs_remove_compat(struct nvmem_dev= ice *nvmem) =20 #endif /* CONFIG_NVMEM_SYSFS */ =20 -static void nvmem_release(struct device *dev) -{ - struct nvmem_device *nvmem =3D to_nvmem_device(dev); - - ida_free(&nvmem_ida, nvmem->id); - gpiod_put(nvmem->wp_gpio); - kfree(nvmem->ops); - kfree(nvmem); -} - -static const struct device_type nvmem_provider_type =3D { - .release =3D nvmem_release, -}; - -static const struct bus_type nvmem_bus_type =3D { - .name =3D "nvmem", -}; - static void nvmem_cell_entry_drop(struct nvmem_cell_entry *cell) { blocking_notifier_call_chain(&nvmem_notifier, NVMEM_CELL_REMOVE, cell); @@ -565,6 +547,25 @@ static void nvmem_device_remove_all_cells(const struct= nvmem_device *nvmem) nvmem_cell_entry_drop(cell); } =20 +static void nvmem_release(struct device *dev) +{ + struct nvmem_device *nvmem =3D to_nvmem_device(dev); + + gpiod_put(nvmem->wp_gpio); + nvmem_device_remove_all_cells(nvmem); + ida_free(&nvmem_ida, nvmem->id); + kfree(nvmem->ops); + kfree(nvmem); +} + +static const struct device_type nvmem_provider_type =3D { + .release =3D nvmem_release, +}; + +static const struct bus_type nvmem_bus_type =3D { + .name =3D "nvmem", +}; + static void nvmem_cell_entry_add(struct nvmem_cell_entry *cell) { scoped_guard(mutex, &nvmem_mutex) @@ -940,7 +941,6 @@ struct nvmem_device *nvmem_register(const struct nvmem_= config *config) goto err_put_device; } =20 - kref_init(&nvmem->refcnt); INIT_LIST_HEAD(&nvmem->cells); nvmem->fixup_dt_cell_info =3D config->fixup_dt_cell_info; =20 @@ -1003,24 +1003,24 @@ struct nvmem_device *nvmem_register(const struct nv= mem_config *config) if (config->cells) { rval =3D nvmem_add_cells(nvmem, config->cells, config->ncells); if (rval) - goto err_remove_cells; + goto err_remove_compat; } =20 if (config->add_legacy_fixed_of_cells) { rval =3D nvmem_add_cells_from_legacy_of(nvmem); if (rval) - goto err_remove_cells; + goto err_remove_compat; } =20 rval =3D nvmem_add_cells_from_fixed_layout(nvmem); if (rval) - goto err_remove_cells; + goto err_remove_compat; =20 dev_dbg(&nvmem->dev, "Registering nvmem device %s\n", config->name); =20 rval =3D device_add(&nvmem->dev); if (rval) - goto err_remove_cells; + goto err_remove_compat; =20 rval =3D nvmem_populate_layout(nvmem); if (rval) @@ -1042,8 +1042,7 @@ struct nvmem_device *nvmem_register(const struct nvme= m_config *config) #endif err_remove_dev: device_del(&nvmem->dev); -err_remove_cells: - nvmem_device_remove_all_cells(nvmem); +err_remove_compat: nvmem_sysfs_remove_compat(nvmem); err_put_device: put_device(&nvmem->dev); @@ -1052,21 +1051,6 @@ struct nvmem_device *nvmem_register(const struct nvm= em_config *config) } EXPORT_SYMBOL_GPL(nvmem_register); =20 -static void nvmem_device_release(struct kref *kref) -{ - struct nvmem_device *nvmem; - - nvmem =3D container_of(kref, struct nvmem_device, refcnt); - - blocking_notifier_call_chain(&nvmem_notifier, NVMEM_REMOVE, nvmem); - - nvmem_sysfs_remove_compat(nvmem); - - nvmem_device_remove_all_cells(nvmem); - nvmem_destroy_layout(nvmem); - device_unregister(&nvmem->dev); -} - /** * nvmem_unregister() - Unregister previously registered nvmem device * @@ -1074,8 +1058,12 @@ static void nvmem_device_release(struct kref *kref) */ void nvmem_unregister(struct nvmem_device *nvmem) { - if (nvmem) - kref_put(&nvmem->refcnt, nvmem_device_release); + blocking_notifier_call_chain(&nvmem_notifier, NVMEM_REMOVE, nvmem); + + nvmem_sysfs_remove_compat(nvmem); + nvmem_destroy_layout(nvmem); + + device_unregister(&nvmem->dev); } EXPORT_SYMBOL_GPL(nvmem_unregister); =20 @@ -1136,8 +1124,6 @@ static struct nvmem_device *nvmem_device_match(void *= data, return ERR_PTR(-EINVAL); } =20 - kref_get(&nvmem->refcnt); - return nvmem; } =20 @@ -1253,9 +1239,8 @@ EXPORT_SYMBOL_GPL(devm_nvmem_device_put); */ void nvmem_device_put(struct nvmem_device *nvmem) { - put_device(&nvmem->dev); module_put(nvmem->owner); - kref_put(&nvmem->refcnt, nvmem_device_release); + put_device(&nvmem->dev); } EXPORT_SYMBOL_GPL(nvmem_device_put); =20 diff --git a/drivers/nvmem/internals.h b/drivers/nvmem/internals.h index 070eef89ffca78fe033aaaada0f91c257fe2f166..60daa79c404dc915872481bd3b0= 2de2258d33406 100644 --- a/drivers/nvmem/internals.h +++ b/drivers/nvmem/internals.h @@ -19,7 +19,6 @@ struct nvmem_device { int stride; int word_size; int id; - struct kref refcnt; size_t size; bool read_only; bool root_only; --=20 2.47.3 From nobody Tue Jun 16 19:33:55 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (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 EAF74278156 for ; Wed, 29 Apr 2026 15:43:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777477442; cv=none; b=b2jVd+on5BafcTwwTAHWxvdodn+AElq9DnqgQFNvX5chW4FO8eIfXUn6TtK5IBi893nBk/y5oxazCtXpp2yTWcaB1+E0X+HB6Ny3riMNbyKvgw2LXMQP1EPm9dR3TeRgajXAaPXjTkdDenACqKX2B7i4bLi401ExMy2l5A4UIz8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777477442; c=relaxed/simple; bh=JkRbAkosbYwXMjVGmb7/jsp15VRJKDjiXWv7ws34qbo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Qdf+V0Xjnr9sHb3sjRHwKSuQTpm/DgXch2VPKwGh7PAqFj2fuAqqguIy77MYZi05bRNTl1vp/T98HNQZzecMv0X+2SjZp8s5ZxGdutH1809WayozaizIHoSswnvUpvF5WwkiacfPkPqHRjIcs+RjtVktXMriQWHMyRb/zSBn2fU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=kanHa1Gy; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=X7kgqEq6; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="kanHa1Gy"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="X7kgqEq6" Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 63TFXCjJ2094157 for ; Wed, 29 Apr 2026 15:43:54 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= Rjr1K2IITtSw1gXFkf9e6YRr+JYnJ9C8AOEcRn4gPxQ=; b=kanHa1Gylu0gC6F2 QYF+54OR1nA88TkUdKx/EnFerdy7sopLWwA6fhJS/lCoYiRWEpzaLXrp3epW5uyI HCQAwAo5JYOD8M1kgDr//W+KHISodKKNu/u3gUMek33X1edhzY/i6E3TyI+dFyM1 SC0Tf1XBfrFF3EHDd8AP2m31kNhF3S+sKC4RUsMipZTFKYJstqlj2wNnk1f5J1tc shRRZDi6uKuIZQqeXuYdsKtar6jyxwSMf70/PlNF3R4MwJJAWod7/1d1cOPkYsxO oAUdITVE9o5VAd3LwwtmyiAoS7dOPcuc4B9dePCFlk1K/zbxX9aEUMG4B6Rj25y7 fCE6ug== Received: from mail-vs1-f69.google.com (mail-vs1-f69.google.com [209.85.217.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4dudh3t172-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 29 Apr 2026 15:43:54 +0000 (GMT) Received: by mail-vs1-f69.google.com with SMTP id ada2fe7eead31-6104087f037so5812322137.0 for ; Wed, 29 Apr 2026 08:43:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1777477434; x=1778082234; 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=Rjr1K2IITtSw1gXFkf9e6YRr+JYnJ9C8AOEcRn4gPxQ=; b=X7kgqEq6NKP0yDnJtXKy/GpjOfTaONJB5ITeH+kC4AJkTs3bmsMupnaAFPt7+QI6HD AEmfMhUIhnZC78iYqocMqdXzS6I90ZaIarugY/YjukfdOkPlwNsriDVbtL9e7yqJUNtb +ITpq+0jMJjgj4YplEQPSlS5EM8xW/SSNv0yj7u9VxScArLwydGR7u7U4sZYKyDCoBOP t61mY4pj62tEQ5aMjlkLINOzPMwFNEBRxHB+SEGw8nhnCuvwoNrOcGvnC8331JW/lqqe DciVBe89fRVfJOPpnX1ke4ue2EF3Z3lBaiOg7En9W0CsWM6GHJ+n2w11wPftDgyfYHV6 2lww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777477434; x=1778082234; 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=Rjr1K2IITtSw1gXFkf9e6YRr+JYnJ9C8AOEcRn4gPxQ=; b=BBl8EZ0kjZvxB63d4Kv243hmf+sWdm9eJ0ImiBGNkuLiE8erz7f+CKLhUoLVU3nchI YGvqL8hD544ghCF/3ZbCWQl4tlHPTyOb3Xc42Z4ulhPu4cwKTAYjDN4HK7+ASsgZgR1C iP9HGXda8RB7ouHOJ1+0qr+XJp19ycYsUsQ1gPalczk1QQzgc3gMErnYr2N5XlXSlRc+ IniYpfXB7RM8UzBzOyJ6PCjo5ANsijmAxMGrSMnXYN/C0rwkuys44zUa6sG/JQKGoaSH R9EPThomOusVKWsL0TH5QRAda08ApFm47ZzYs7WdwcD0xTHfNiftPVCzwI0wrvQ6Lew9 ft7Q== X-Gm-Message-State: AOJu0YzEnq6Gr75yvVT0cmBmlKvIOjB7v9V/QYtbwmJZjh9D3R0HWf// bF+8ZVIrvlHS4bhGZuBtTsO+cZ2xcxmrdezA35ctLy384fwLNzAK3t9RQo5EOwGAxBzIFSQDn4V tzaCPG/Cin3E5v2lhpuXRdn9e1m/0kJOUfNPdCUC3kRc9k+NNBemIAC0GgHI9TloTAxo= X-Gm-Gg: AeBDietGANWL00mQLt+s56926mwXGmUPfuQoy2ddcsdnrW8L2LWUUSecaHXGsNihqCf J/NpJ+Y1YqDvoZFI2DT9IDmVsmgqAe4RnctEd8ld8mOxmhTXQVeBp78jttIgIG3/Z4flBpi+zrH dOsWWoC/zOBtR8/aZFBw5cX7ilKbL1bj/TGT8D9mFcAnsYwskYE0aOkyJ0yfNgJ/IWfVpWMw19t hZ4AWQzoyDX9jGPnQ/ZHkt61odKu7m5ocIuOqvQ8hOTa7bwx/s4WNOQAL8UYB52qjjlRzBsQ3Hf vTTPdCKN+MNLtZ61mNZ+qeTkKFneo/MsonWlxed8mjiqEQkO/8QYo4uIPyIsxV1Ef+tdb3OQvMz Knf0osuDEfd+ou1c4KdEFVjrtrkSZJsliTXRDE9wsg7KwMEgnHCBXB/t++7SJsg== X-Received: by 2002:a67:e705:0:b0:611:a5b6:f4d6 with SMTP id ada2fe7eead31-6280a3a7e53mr4275915137.18.1777477433686; Wed, 29 Apr 2026 08:43:53 -0700 (PDT) X-Received: by 2002:a67:e705:0:b0:611:a5b6:f4d6 with SMTP id ada2fe7eead31-6280a3a7e53mr4275879137.18.1777477433090; Wed, 29 Apr 2026 08:43:53 -0700 (PDT) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:e9c0:e45a:1dbc:c82a]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-447b3d481b2sm6837552f8f.4.2026.04.29.08.43.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 08:43:52 -0700 (PDT) From: Bartosz Golaszewski Date: Wed, 29 Apr 2026 17:43:24 +0200 Subject: [PATCH v3 9/9] nvmem: protect nvmem_device::ops with SRCU 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: quoted-printable Message-Id: <20260429-nvmem-unbind-v3-9-2a694f95395b@oss.qualcomm.com> References: <20260429-nvmem-unbind-v3-0-2a694f95395b@oss.qualcomm.com> In-Reply-To: <20260429-nvmem-unbind-v3-0-2a694f95395b@oss.qualcomm.com> To: Srinivas Kandagatla , Bartosz Golaszewski , Johan Hovold Cc: linux-kernel@vger.kernel.org, brgl@kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5572; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=JkRbAkosbYwXMjVGmb7/jsp15VRJKDjiXWv7ws34qbo=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBp8icpIZcF77wcdloJAEKzOd7m+WjOP1lNwdAxR ECSCXrSxtuJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCafInKQAKCRAFnS7L/zaE wwI5D/4lPWJtKjTiS9RCerF4uCfBd9CYPr2HCsgQht9Ky7CRp4xgr7NIsfV9C4C0kC2c5aKzuwm 00kgxDZazF5kPBLYc575T9ILt0Sov2+xHGgvEdQctmqBcjTuaTWHwW+UXrO1hbHgyNk4tcc2ZHj MSMwV+YFgheSpH4tf/GuBtxqLhxV0Ne7hMsJiIT09EOamkM39xxHcjTFGymj4oexMqtHAk8QZBK kLkX5ttS8Aqz4RI5bxklgpZUim3MmZ1E0t9aDFqNn4Vc85KMFUTg2NO12iPMwRmUM3I5pNhIuAx +t9kwamDqqTtvgsRgNt52PvV3o+lzJxmNWsmh/g4OYLcq7UIoNySIgxOlQTdOI7D/BXOoDqhpDv 3E7LG1Y4HOU9DHnF+p/CvrBR33KWTj7KxzQCWzkPtjdGDPLo5ck8DshMwFC14tKcJPljJY6g8Qd Hrd2QCMlyEFXgXsG6XD9U3mZrbHqOvTZTA2pMujmRETUJn/KWFpSUfps782HYsC6fk1i20LMM/W OlvkdOsClkCsD8QBxi3UHUZEXzLqk2lECH65bd4KttbEpgP5TRdr6A8G5dHtHTzySmZaFxUo0K3 8HXRTW6hsJRwvJOX4jpB9tgNRhsWrxYr/QWwDbtKgLDBH1VFUpAHMTrXS50j0oflQlntIb97NkS 976yw/N9veZWpXw== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-GUID: z-uFJXVfBg2SpeN9REYHNuWcBCyki5Tg X-Authority-Analysis: v=2.4 cv=A4dc+aWG c=1 sm=1 tr=0 ts=69f2273a cx=c_pps a=5HAIKLe1ejAbszaTRHs9Ug==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=EUspDBNiAAAA:8 a=ydBWjX_Uc0Q5hLJtmLYA:9 a=QEXdDO2ut3YA:10 a=gYDTvv6II1OnSo0itH1n:22 X-Proofpoint-ORIG-GUID: z-uFJXVfBg2SpeN9REYHNuWcBCyki5Tg X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDI5MDE1NyBTYWx0ZWRfX0oUvztzUQwYY 1U89CxSP8L7si2HaUDRmO6XZQzE/sijxfCWarfU6HAwDL0Xhm30c8mAisaNn5myRW4DOWTLEebo PBvoB7Tlc1etq2LN1DMY0vrDR+voDEI5JQazRiW3UUgkgt7XQi8TAdNObznSy6dZNz8SOLdEXAa cyq5xlbQjt0f3Wild5R4Lb8gkLVZeRtRXEzrTgfnrf0hAXjH+xYpq8Q/DJZDQ4W0Yt34JQ+NzpZ uEIxoIiDhr/JttWQkxpiS6Ae1rMNr9Iy4yUsWypsDpOdWnlf0ylXuS8Bsk3R77pF0u6JzIGLP4v XzzLhWnPQhYLlX/KMdkdhG1UUWovfiognrk/CuckHUmkLwhdbBdFXpRRD2OI2TM/Jcmjqs15sHT g9jIuYkekbXRFSpymjFk8ERLW0NXitvGeEkY+tZbFsZv8QfO14CT6gXH1solsFurSgAgPXzrpDM gn9eZr1tk2ENHOIaYvg== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-04-29_01,2026-04-28_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 spamscore=0 suspectscore=0 malwarescore=0 lowpriorityscore=0 priorityscore=1501 phishscore=0 bulkscore=0 impostorscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604200000 definitions=main-2604290157 With the provider-owned data split out into a separate 'ops' structure, we can now protect it with SRCU. Protect all dereferences of nvmem->ops with an SRCU read lock. Synchronize SRCU in nvmem_unregister() after setting the implementation pointer to NULL. This has the effect of numbing down the device after nvmem_unregister() returns - it will no longer accept any consumer calls and return -ENODEV. The actual device will live on for as long as there are references to it but we will no longer reach into the consumer's memory which may be gone by this time. Nvmem cell entries are destroyed in .release() now as they may be still dereferenced via the nvmem_cell handles after nvmem_release(). The actual calls will still go through SRCU and fail with -ENODEV if the provider is gone. Signed-off-by: Bartosz Golaszewski --- drivers/nvmem/core.c | 42 ++++++++++++++++++++++++++++++++++++------ drivers/nvmem/internals.h | 4 +++- 2 files changed, 39 insertions(+), 7 deletions(-) diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index 590d880ede944670c09dd62b394626a959e5cdd1..9ec2d831ece6e51f918b5a815e4= 5db346f30be7f 100644 --- a/drivers/nvmem/core.c +++ b/drivers/nvmem/core.c @@ -57,7 +57,12 @@ static BLOCKING_NOTIFIER_HEAD(nvmem_notifier); static int __nvmem_reg_read(struct nvmem_device *nvmem, unsigned int offse= t, void *val, size_t bytes) { - struct nvmem_operations *ops =3D nvmem->ops; + struct nvmem_operations *ops; + + guard(srcu)(&nvmem->srcu); + ops =3D rcu_dereference(nvmem->ops); + if (!ops) + return -ENODEV; =20 if (!ops->reg_read) return -EOPNOTSUPP; @@ -68,9 +73,14 @@ static int __nvmem_reg_read(struct nvmem_device *nvmem, = unsigned int offset, static int __nvmem_reg_write(struct nvmem_device *nvmem, unsigned int offs= et, void *val, size_t bytes) { - struct nvmem_operations *ops =3D nvmem->ops; + struct nvmem_operations *ops; int ret, written; =20 + guard(srcu)(&nvmem->srcu); + ops =3D rcu_dereference(nvmem->ops); + if (!ops) + return -ENODEV; + if (!ops->reg_write) return -EOPNOTSUPP; =20 @@ -283,7 +293,7 @@ static ssize_t bin_attr_nvmem_write(struct file *filp, = struct kobject *kobj, =20 static umode_t nvmem_bin_attr_get_umode(struct nvmem_device *nvmem) { - struct nvmem_operations *ops =3D nvmem->ops; + struct nvmem_operations *ops =3D rcu_dereference_raw(nvmem->ops); =20 umode_t mode =3D 0400; =20 @@ -327,7 +337,7 @@ static umode_t nvmem_attr_is_visible(struct kobject *ko= bj, { struct device *dev =3D kobj_to_dev(kobj); struct nvmem_device *nvmem =3D to_nvmem_device(dev); - struct nvmem_operations *ops =3D nvmem->ops; + struct nvmem_operations *ops =3D rcu_dereference_raw(nvmem->ops); =20 /* * If the device has no .reg_write operation, do not allow @@ -554,7 +564,7 @@ static void nvmem_release(struct device *dev) gpiod_put(nvmem->wp_gpio); nvmem_device_remove_all_cells(nvmem); ida_free(&nvmem_ida, nvmem->id); - kfree(nvmem->ops); + cleanup_srcu_struct(&nvmem->srcu); kfree(nvmem); } =20 @@ -930,6 +940,18 @@ struct nvmem_device *nvmem_register(const struct nvmem= _config *config) nvmem->dev.bus =3D &nvmem_bus_type; nvmem->dev.parent =3D config->dev; =20 + /* + * Must happen before we assign the release() callback in + * device_initialize(). + */ + rval =3D init_srcu_struct(&nvmem->srcu); + if (rval) { + ida_free(&nvmem_ida, nvmem->id); + kfree(ops); + kfree(nvmem); + return ERR_PTR(rval); + } + device_initialize(&nvmem->dev); =20 if (!config->ignore_wp) @@ -947,7 +969,8 @@ struct nvmem_device *nvmem_register(const struct nvmem_= config *config) ops->reg_read =3D config->reg_read; ops->reg_write =3D config->reg_write; =20 - nvmem->ops =3D ops; + rcu_assign_pointer(nvmem->ops, ops); + nvmem->owner =3D config->owner; if (!nvmem->owner && config->dev->driver) nvmem->owner =3D config->dev->driver->owner; @@ -1046,6 +1069,7 @@ struct nvmem_device *nvmem_register(const struct nvme= m_config *config) nvmem_sysfs_remove_compat(nvmem); err_put_device: put_device(&nvmem->dev); + kfree(ops); =20 return ERR_PTR(rval); } @@ -1058,10 +1082,16 @@ EXPORT_SYMBOL_GPL(nvmem_register); */ void nvmem_unregister(struct nvmem_device *nvmem) { + struct nvmem_operations *ops; + blocking_notifier_call_chain(&nvmem_notifier, NVMEM_REMOVE, nvmem); =20 + ops =3D rcu_replace_pointer(nvmem->ops, NULL, true); + synchronize_srcu(&nvmem->srcu); + nvmem_sysfs_remove_compat(nvmem); nvmem_destroy_layout(nvmem); + kfree(ops); =20 device_unregister(&nvmem->dev); } diff --git a/drivers/nvmem/internals.h b/drivers/nvmem/internals.h index 60daa79c404dc915872481bd3b02de2258d33406..17418fd0dcc92b101b56082fc15= d74042386107d 100644 --- a/drivers/nvmem/internals.h +++ b/drivers/nvmem/internals.h @@ -6,6 +6,7 @@ #include #include #include +#include =20 /* Hold pointers to callbacks owned by the nvmem provider module. */ struct nvmem_operations { @@ -16,6 +17,7 @@ struct nvmem_operations { struct nvmem_device { struct module *owner; struct device dev; + struct srcu_struct srcu; int stride; int word_size; int id; @@ -33,7 +35,7 @@ struct nvmem_device { unsigned int nkeepout; struct gpio_desc *wp_gpio; struct nvmem_layout *layout; - struct nvmem_operations *ops; + struct nvmem_operations __rcu *ops; void *priv; bool sysfs_cells_populated; }; --=20 2.47.3