From nobody Sat Apr 18 11:08:29 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 25CD634FF47 for ; Mon, 23 Feb 2026 10:57:55 +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=1771844277; cv=none; b=FGcUjyA5Z8ymx+D1nmE3+jrAy5cUOQoNEpTWOJVuHWm/4wGr0c13xyG8qiX9scW/eCW0W0quOYFtCPaufd1czIqS/v/J9KwG8zDOgyDK6tTaCOYAs/g05LjqQbun3CUN6wKmRR2+RKnzvfiNghoJzHDaqoAzNqZOv3zgYeEd+6o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771844277; c=relaxed/simple; bh=nhsVq7ucNcJyu7YlIpffF8eK9nbGHQ38DrSujIdQy2I=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=P1OjpMvWntujEeXFEPkitBsXY5gQh/ihx3K278xy+C7NPh/fqyBjXgpLZxUzdr0IlKCEy0n1ueuDQvnEm0xKj7zP1Rg40xvcnd+L0f6m+aJzZeZiee5qpMi5psEYuYzm9xM5HprZJJnUlMHr6H3BvDqkVL4Shtz8emzOaKRkIu4= 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=c35MwKvP; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=PwPNVPi6; 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="c35MwKvP"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="PwPNVPi6" 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 61N6UdqF1217262 for ; Mon, 23 Feb 2026 10:57:55 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= KVFB3LLQhfo4v4TcPXldiuGo0IIPaR1L6cUODWKeqG4=; b=c35MwKvP+qd7FjDH f8LQl3Bw98I4JAvNPTfixJ7UtewHCmOxFj7ALqzGN1fy+Ys3r/bsm6cuedK+8nkA ChcqYtRakHwmU4g+krlRvSl8M7mVvAPlhZZWivBtM2uEiAEq2UZYYISvRXfHZqHQ Ri0RRl5RwtTHE+4aZ0XfzZZMtfCeuhoRI54OsW5yhCogYolTpOEj6PR/FfzFTvdt 1sMeOAUNd1EUzNajG16962jWM3Rq7YogPdM+pLP6iviSvHTFfCsuSCT9/aByXq02 bwEC53N8xNBQ1Bv4S7lBFfvOhAhUcbd9B/0DyD7iNBhsVXGa2cGw7jSoemwAVuXt 0ixq5A== Received: from mail-qk1-f197.google.com (mail-qk1-f197.google.com [209.85.222.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cf5vgvge0-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 23 Feb 2026 10:57:55 +0000 (GMT) Received: by mail-qk1-f197.google.com with SMTP id af79cd13be357-8cb403842b6so4596474985a.1 for ; Mon, 23 Feb 2026 02:57:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1771844274; x=1772449074; 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=KVFB3LLQhfo4v4TcPXldiuGo0IIPaR1L6cUODWKeqG4=; b=PwPNVPi6JdUMdJA+I2HRUa46MF0Dm9QbLXWVaPMD/41FR8/b0dYSlX9qXba6G1mDHp QMqmQJJV/PNHdcP0Es8vM8SScdIf1Q0bNsXVtI2vO9Sgdw7Ph0NsOr0qFXH24ZhG3GUN ia12eIPxpThUHQwxQxMbw/8gcnSSvuiRYdnUNkGpGE6FGWQtxVtaDgAoBy3J1U2YzhTW V7XbIMA+ubr2CIWNvsTiLTsjnTYSFt281g8FKK56Gi1mv+DBl3rAOIs3s8nyK3OHJXyS kY1KKZkX5f3mkR6raobuggo2+xebjFV38+HMYt1ORcN4OknXLjiR2o+rCiF5P9h8CPB4 QZaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771844274; x=1772449074; 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=KVFB3LLQhfo4v4TcPXldiuGo0IIPaR1L6cUODWKeqG4=; b=ShWufAihrNk+ndhTGmnftG48Y9nXK13Gn1/vqDlHXRvU6VY8bkrIeuItgrXJpMZR/m Nae0C4ZYB8JHn6s1Tt1LcehhhP3oiCMxiX/zlAxWaZUtigHfjSPVOrzZuQeIZpcufAM3 N2+H1doLlNhJVlQKMf/ZcDmXUhsDKzlm2b6eMG6/wVilGuLnpTOdEoIZ41KhNP0noqjJ 7eLbeOd1i0kK2bx7VZE5IRLUCi+tC9xjiR/5JdSJGc+3tJydg+jFaTtrHlU8vJA0Ifcg Ztl0kJXh1n6XfM9UjjTBKHns6nQN+xzFpYyXUPYMjWPEgYy70L3AuU/a6HbnF58wT+Hs VO9w== X-Gm-Message-State: AOJu0YzkT1Z5PpzaRBxAyTcPtpEl4YWaBRyM9uLDA+SGRtDMTJRk0rMH x+ghTyg9K54o2HQx5WNukUFfON/7oAp+zFyuGxp29OViyX8TKFZQk5/LqX5p7BcMXM06uYhPZOd 7IU5ku7zfJUQN7bD1JWQ+USWzvnPBYvPQgSi4nIFNlsGxzPKk/M4EDVteuqNrczdypBQ= X-Gm-Gg: AZuq6aJOdoPVpHz1HYYtLl9cmCEa4hclMh4rAM28wyTpcbRfxX5GeSTxoEwVc90aFEr FWLi22B0cmRNKBNXTIywUm0UhTmA/6ZScdKPLNGjqCY4s1bLpw1dou6s2FHCIAQjKXN9rkhqB7+ 6+W1XNssBJ96jluDtEIQRiuyWm9ZhqEFBs90DC5/VY77tI0cNPw+XLPfNyD5qMKsYNDA2Ex5Iyk JuGhc3Z5fq0IVzNsNGm+TOF7N7NHSSiJAa12O8FitqrBtQjNxjuJmLM4FPM75/jZ21ke5vweoiT Rh1dyGZYIytiXV85gcr4EUw/s6xoIWAFqAo3SCzrY5tYQqODsW77atdqKjipT2FKUm/z/1fmdjk mdH/UJ8wNveMBgbqvaknTLdCcYnCeGoRhYfq9A4Oe7hhzm6vIPrui X-Received: by 2002:a05:620a:4486:b0:8ca:305b:7481 with SMTP id af79cd13be357-8cb8ca7afa1mr1034350085a.61.1771844274510; Mon, 23 Feb 2026 02:57:54 -0800 (PST) X-Received: by 2002:a05:620a:4486:b0:8ca:305b:7481 with SMTP id af79cd13be357-8cb8ca7afa1mr1034348885a.61.1771844274103; Mon, 23 Feb 2026 02:57:54 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:bd71:422c:5e83:8b37]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43970c00c18sm18120002f8f.14.2026.02.23.02.57.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Feb 2026 02:57:53 -0800 (PST) From: Bartosz Golaszewski Date: Mon, 23 Feb 2026 11:57:02 +0100 Subject: [PATCH v2 1/7] 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: <20260223-nvmem-unbind-v2-1-0df33a933dca@oss.qualcomm.com> References: <20260223-nvmem-unbind-v2-0-0df33a933dca@oss.qualcomm.com> In-Reply-To: <20260223-nvmem-unbind-v2-0-0df33a933dca@oss.qualcomm.com> To: Srinivas Kandagatla , Bartosz Golaszewski 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=627; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=nhsVq7ucNcJyu7YlIpffF8eK9nbGHQ38DrSujIdQy2I=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpnDKo2cpMmTYSQKuzRRCVzvq3Xwlsb2GHr3jiQ KNhl/bBHw6JAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaZwyqAAKCRAFnS7L/zaE w23lEAC8ZYiEGCFOhcoGdQ3S26nMVKFCw6e2qKxRLR7eH3TD8a5rwPJ/0LBqENhVpJLNV8p2fJS qnJyzUBLToxYaEzouWyZGv2g40Ww/eB3a1tdlYPGd7HGAxcSXoyYkmvArglqgZATaBmfq96cSxc JFDtl9BWEdknTOru8uzhiP8RLCicDDkrZBZ43IeyhdQpdYMRsozKraQV+UwVjVpZAciky6h7RBd 7jIp5rprik0mnjObS0PPugIPU26hHWoT0C43sikN6ReSxVfyD3J6QvlH58BKuR1/RnYuqG+8NbG MVAap2ZZN59ySun/8avYJ8AgaEOP83c1+ixRrsNqt5AjfddvqA19EYOSFTtARk5Aq5nhMGiptTi asswev4pXvzdqoYDfbK2pJT3/1OCmv2zzJisAIvWVlCsdt/IabElZLLo6D9YDZzdDvBt0wTq15S noNXzPNF5uc9dNI6yFFVKYK4EZBLyZ4X8F/bGFmqtwJ2auhUXG7a0M+AmAq2C/SPAtTKodXy+M4 68Di9Vzco6JCgEpNv7CnQIMV2ow0HYWh3gidPRqQ3OmkfIMxYiytUi7BFll8oPHIr02GNRAvU1G OwHYshK7im8Nb7Rn7BoNM1lIVpptgcjCx5R4M+8BeC4opc6RqeUw19KZd88Wfu3on9c6RAEQ9F2 ydEcbjFRQ2eEYrA== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjIzMDA5NCBTYWx0ZWRfXzhWT3e4ErfgA NUGX7uR7a4kAf45R6+TikTD+qxsHrA+3/aEzsuLp1eyZ3FHodOqvu1XtAJwKS0G9O5KdFC3Tjrt 9wy5440brEbF1yNFzqdvD0WSMaV4mRzM8eAQfI1YgyDP7KmGsVn+R4+XBGJy6zs5agzRDL0V5Ry Vc0hi8vllmjtC/PhOSqFTPAAaKt4M8WnCadOCdwCwpSYcxUDIB411y5Xv1R4XUEvshpA7Hf74tA NEDTz9XSNbM9MHcfkKqlDWALnj9IbNC0PzaLFfLJvi6Le7E457KCMoWsCu02scdNAyklSjr1p2J xxI912GMRUbpLzk1bwJeLZUIH+D0JJe+q9jHOBD/1a88p+qp6eMXik0IumeL0LLqJrFVRuL7usQ puyU7g8exJWH48R14cGXl9OylbL74mjsRzPs2RAvrkvz8MCRIxLsQYVC9hhqNkt0gybY4Bd4yDF QEmy5ykl3Ktxgs+gcsw== X-Authority-Analysis: v=2.4 cv=W+A1lBWk c=1 sm=1 tr=0 ts=699c32b3 cx=c_pps a=50t2pK5VMbmlHzFWWp8p/g==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=EUspDBNiAAAA:8 a=stNq5eDsATFt7Ar7Hy4A:9 a=QEXdDO2ut3YA:10 a=IoWCM6iH3mJn3m4BftBB:22 X-Proofpoint-GUID: UAS0uVGG6-S_h2h4f6Tmys1n9Kk3YYSz X-Proofpoint-ORIG-GUID: UAS0uVGG6-S_h2h4f6Tmys1n9Kk3YYSz X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-23_02,2026-02-20_04,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 lowpriorityscore=0 phishscore=0 suspectscore=0 spamscore=0 bulkscore=0 adultscore=0 priorityscore=1501 clxscore=1015 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2602230094 The node list_head in struct nvmem_device is unused. Drop it. 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 Sat Apr 18 11:08:29 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 713F4360751 for ; Mon, 23 Feb 2026 10:57:57 +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=1771844278; cv=none; b=fSzwHPNnVaffN5rikswTdPhcgJsEWH3WvdG2c2rBQQe4K4kgis8fNFBycLqtnG8LOTfGUpDfUHGy/0yitWdoZIMt9bHxPikrFyLP3JwjEoh+/VVmWIEFokTS+X4PAK+/ue/RUZQ9fSh7MLGQOP/ldapG1WdnA5mm/uD7GhSalPw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771844278; c=relaxed/simple; bh=+nk0zqEXRtWTFEcBezA2NF762YohjLOZpAiO63L4OZk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=KQqHQ4rR38ZA7ItGSEe9OTI8ok0yEMIM2yb5uwpQNQlGSdpMUf3wa5opnP782XOQuVMkC2Y3HVPbjJADbVQP5ht2CKFw2te+WJ8/K12ZTOLW0ORDyOajc4ndOaBsO2/jnEZktIbXk6XI3drlrzhrIHI1cM2xAoe7dunDF0kQZAM= 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=G30+pnd7; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=XGnaCOgh; 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="G30+pnd7"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="XGnaCOgh" 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 61N9oofK2783699 for ; Mon, 23 Feb 2026 10:57:57 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= v6t/kIGkz1spavzDz1IjVV+f0Kkjf8oUKB5O1Sgr+3Y=; b=G30+pnd7RIZSElDV wNkMTQEbLvcUIaeaXKTd/Y9WV4DkY1jl42MaTuPIL97i4A8I089kv3/t6CsS5/pP sT6uHtEpKizjTqWC4uyzocnDOGD3WxV1O9G/tiIIITPN1/5LGNowbAC2p1YbH7q5 XDz0a/0FlalNztpux657ycR4l7r85jheGXVATIelk8ux7qX0EbCe9939uU7rXS3o 3qRhC3YiMzH7tOJs9ytL+2LOkw3yfQLsWjhDJzo9xwkBxHz3pFvxhNnOJzrtO5vb z9pa/xDJE+Q8SRDojL/DJLxid6caHErDgg/HHi4uUF51Vo7dRblDAYsfTZPZJ+qz jqHe+A== Received: from mail-qk1-f200.google.com (mail-qk1-f200.google.com [209.85.222.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cf5vgvge4-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 23 Feb 2026 10:57:56 +0000 (GMT) Received: by mail-qk1-f200.google.com with SMTP id af79cd13be357-8c70ed6c849so3925126785a.1 for ; Mon, 23 Feb 2026 02:57:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1771844276; x=1772449076; 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=v6t/kIGkz1spavzDz1IjVV+f0Kkjf8oUKB5O1Sgr+3Y=; b=XGnaCOghV5MYG7RAo+EG+iL9CJMrOWzPq3c71rvwgz7UFZv3uhon9oyW7mOY7qd/Iz 1BcrKUUOZEQaNNLu81iFKnaRJnfyFRkZO5VkatzQ2hk7MZPpg/O5A5O0LIhmO9994IKe 8pqT2QZk93BwNKUg2UFw5DDn27zgnrVcudTdoZzysQKYjvahkRafSEeFHYGFqZpf+thZ Z4j4PJoyLkCitT3RkHQdFiW+h/wXq68KkIFLWQ7X9/sk8lXSiJWpSM160TMcHdOlxoy8 p/M4IJBybE5VtvJJg0M4p9L2ji1QwB+mAZLwxZ7y3fJwDgCjHv8hkDKJQ4ICPUy2kDlQ vFKA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771844276; x=1772449076; 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=v6t/kIGkz1spavzDz1IjVV+f0Kkjf8oUKB5O1Sgr+3Y=; b=Y7/4xXG2ZXUHHBUlFhRXEwP/WXGA317Z+XPlVVb0pNjElxxokQ+7+Ng4JGG6RzSbGN YC6hj3BQNAqfjzs2vRRablV3QuJcbsPsd0XGXKGkdK4qGVOWBjA0M4k4StJCfjW9SjaT 50yiyTHNuEOWcBUz3mkvu/LegFpRqela8f38W1N+Ff5C+Ae8yV0q6sFXWh0ZMr78VupV w0xxcjS6MPG1U006LfQOvFlwLq0BDqO3s7gtZT4nTEfGCXbKihhzvX2KxwZ1wGBy8BUG hbPhJkqx+/czMiRmqp9behi20UCzI4CMBdE4EmTmyBB16z1/5jtKkGrQxIfwhCVUdYHh M/8A== X-Gm-Message-State: AOJu0YyXAAmmUF6B8khaNYho+tUVkitJ4C6E61ejc6WoIHLBzveDYja6 kHkdtuP2l1Dy3ShAQniQPWBAMdboyTMv8ZPE0CpnrFZp/qL5jf3S33kI/JEeYpW0L/p9q29jMgK zzJJ+zxvYFWGdzmU84W4/wNi6KEkR8zSiWkMsl2rTxDlAKH8Q9/ctT2IUeoBeEeNvvlk= X-Gm-Gg: AZuq6aK0/p9fjGXSMHOMfZdSi3vy2DYzXd72rso/ABRyWz4UezoIcdwEU+mWWLwjVpY eUVSinIkk3NVM8ZEwfYfS1w43pGlMtH9pmAX/x9osJUvsAnFAtAt6CzOkQn6iiv4KhptMpn449z YZ7mqUjHQ/WjUFYUS3ktHEuruTHM6macekgvtHQe0R4qe/tGe9MCcuVs750txGl26JKt+UGLj8C 4eOhlo33jsGX7lYGivZVVOYEgRHpVt9/tyNSqDGEiHOCdFK8d29N9DKWGiaFkBOB0rUGccWjnBf vzNMTHA8IYrfzRBe08qiAwMMb+k7peoqEPFn7e4FMOxmbcCaj6Yzr5MxUJWRgKoUgmB969e1lew sqyvtJeQ/hityAY64JgJHMgEwElcJaoP4k/cf4SABtDnmabLLpcxO X-Received: by 2002:a05:620a:319b:b0:8c6:b45b:9e2e with SMTP id af79cd13be357-8cb8ca65f49mr880593885a.38.1771844275811; Mon, 23 Feb 2026 02:57:55 -0800 (PST) X-Received: by 2002:a05:620a:319b:b0:8c6:b45b:9e2e with SMTP id af79cd13be357-8cb8ca65f49mr880592185a.38.1771844275309; Mon, 23 Feb 2026 02:57:55 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:bd71:422c:5e83:8b37]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43970c00c18sm18120002f8f.14.2026.02.23.02.57.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Feb 2026 02:57:54 -0800 (PST) From: Bartosz Golaszewski Date: Mon, 23 Feb 2026 11:57:03 +0100 Subject: [PATCH v2 2/7] 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: <20260223-nvmem-unbind-v2-2-0df33a933dca@oss.qualcomm.com> References: <20260223-nvmem-unbind-v2-0-0df33a933dca@oss.qualcomm.com> In-Reply-To: <20260223-nvmem-unbind-v2-0-0df33a933dca@oss.qualcomm.com> To: Srinivas Kandagatla , Bartosz Golaszewski 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=2920; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=+nk0zqEXRtWTFEcBezA2NF762YohjLOZpAiO63L4OZk=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpnDKpmcaBWn50J3WDnPBwKIcXmGpZnq5oj+fW4 cT7WX21mOCJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaZwyqQAKCRAFnS7L/zaE wzEBD/95zvi1r7sRbL4qeObb5sE4VS16yWo7yaoTBIHpU843KZo0YEZq8a4Y1jyUxRklqdxIIeK EFAtwemEZM8T5Xyi0/RbcsLK+rBxpMq5SUFu4o7kFyjeZyjtb6rTEnLS3V+fx2zaVhSIcay88LX 0BpDDwt1i4Y6nr1lQ6TdJakLVY9VT/o96pF2I+r7TFJBOQsZUvDFr6eF3i7dtocIMFDimtKLXn9 xSyzM23ls7HPL3f1bNDfUfZWbbatc2WqrRmVt4+dwaoo1wCq+9cqipKkuRGIFzQRaswAbhOCmrP Gv66CMC7gj2DiDG4xmuTYNsCCdyrVY73oIDp/LThJwZN28iDV6a3Vmxftkzd/aW2AjK+FwYRxsy +Y3BeLan1sMhe3pus0P77PVaNzc/WEb4dlEfjji5nL6z2hwpXBFyuXLPo6wiuaxbH2EmxMIIKAd iGS5UIdo59/p4oYhOM/kIQZFeuJ2V5Pd6hggqgfYGf5czIGQjddjtIQ3kbTRvsSnFpv4cZanYeD p0JsRzO8Yb6lx06xgiro7wuW7mUpXJLvADMx0EdfEo1zgM/kuvX7sjxRMRvJgSQXHjgWTyhSVyo 4XGy5NVTM0JdykwJCPcvO4ke31ujeCLWsdvDvqrT3xGmXYhF7POevuD5QSak9lv8LPrrikOczzT u7yA9MYCvgc0i0Q== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjIzMDA5NCBTYWx0ZWRfX+fZvYcOzIlsg Uvx7AmfVnlkjOx8bTOwxe3mfx4WPgrOQzqRqJY2zsyPi/MRihOw7/QSqggop+NuBFAUcdCYN32J d3xP500KL1Lmr7jDD8/bQiPLttvCVBj2Bamz4XmP34rLgfj5r6TZ3UqeHmZVZpSb2wiU7babteT BrC5ksxC6/Kp4Krrj84vw8UfME1AGuvyTghzfbHT1Npj9fj2+9J90FSEXUTmr+kVaDkj6EHuV2+ wNKnhLBzBghubuYr9h98udi6LfOZX+PfENqwLaFiNNYDqPvHuJ0+ofmmsEuje0/OuHJZ131GZ2D PnFjzIdAIMqLHmwB4xnSEpdVfD5I4JW46Yjf6Cnfd2kil/p3jtgbogJg7ceKr6QmLVbMXrMcOXn YZhJHia9KQBr40XNTAf01yN7Jx4xI2xxd/Znp1OaKXwYnHq6Kq9x6CinfXJ1lkDFLru22vF375v H2QSPq57U7QTVFzwPfg== X-Authority-Analysis: v=2.4 cv=W+A1lBWk c=1 sm=1 tr=0 ts=699c32b4 cx=c_pps a=hnmNkyzTK/kJ09Xio7VxxA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=EUspDBNiAAAA:8 a=fMUuWMZ6TpuTS4Z4e9kA:9 a=QEXdDO2ut3YA:10 a=PEH46H7Ffwr30OY-TuGO:22 X-Proofpoint-GUID: 1qIktQlSWwQZV4SeM59yrpUjbVCM65ZS X-Proofpoint-ORIG-GUID: 1qIktQlSWwQZV4SeM59yrpUjbVCM65ZS X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-23_02,2026-02-20_04,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 lowpriorityscore=0 phishscore=0 suspectscore=0 spamscore=0 bulkscore=0 adultscore=0 priorityscore=1501 clxscore=1015 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2602230094 __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 as well as allows us to translate it easily to -EPERM in sysfs callbacks without having to dereference the callback pointers. This will allow us to limit the number of SRCU critical sections in the follow-up commits. Signed-off-by: Bartosz Golaszewski --- drivers/nvmem/core.c | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index 311cb2e5a5c02d2c6979d7c9bbb7f94abdfbdad1..14f583e466c8d95690539bd886f= d0c2fdd440998 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,13 +231,12 @@ 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) + if (rc) { + if (rc =3D=3D -EOPNOTSUPP) + rc =3D -EPERM; return rc; + } =20 return count; } @@ -264,13 +263,15 @@ 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) + if (rc) { + if (rc =3D=3D -EOPNOTSUPP) + rc =3D -EPERM; return rc; + } =20 return count; } --=20 2.47.3 From nobody Sat Apr 18 11:08:29 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 A9BC73612EF for ; Mon, 23 Feb 2026 10:57:58 +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=1771844279; cv=none; b=PLDf6c/SNz2VN9fK/Wn0dJSnYIjEt6vu9CimByyZ1xUyyYEbCzYu69H+2WzxHhOMzbPw0HD7pF29tKs58VSduqFI9sDqtkL4gr/XrfCuhOm2YnoFtYtQw/EyQ99YD7AIi4ixFh2Gw3L+S813q4jYCBFg7iMSGM2IYO63zovh2w4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771844279; c=relaxed/simple; bh=mGzJzyIKxNS5t3nGvi38gjDDAEPc8ifJxKU5wQBfOf4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=q3rLmZReNKxVov2vmhepwTx1ab+566kHjxX3Pf/lsk/VnZhcmKbRjWOgvgyKERUg/YXKQq1UcSyQ2F/iIqMkTenxj6GT2u4YQCg1FL154Nj5zbJJksTV5trgX++LH0m4NRDOXW7fKUYPvDF00nrTq44M206zUB70FmloOBr4jBE= 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=FObrvSFh; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=EdQeBjZp; 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="FObrvSFh"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="EdQeBjZp" 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 61NA8Ev72565272 for ; Mon, 23 Feb 2026 10:57:58 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= agC/kjbE73M+Z8wiAl9vb91FGbgjM3TwVypA0iNDKm8=; b=FObrvSFhXSpU7d7r +I3AaS7vhDdQRuic7pWMf0/IfVPRBEshQkCNLz9vcw9J5YMjuNhcPUYbnmA1X5Fj rsOMEcG4iFUicO5DqTLX9DRhTXFXwKQR94fz7ZXFCFfB4tAVMzE4tr+vuGpaBVNv 1VrGp1/Wi9SPafrRjCJKG4cLBRCW1al4jSDzwhCqZnaP9x/itTxVulQQUdeVYToV XU+S2KzOCdsSZZ5wM1HlJF3ty0UWurTV2MwwUZXDC/Irzj4zRPR2HeqS1YcIpQbi u9MxzzVK/Yrzke4DK+bp+tixJvs+r3goDHEOSJ2ImRGPL+27YZ2NujjizuzAbEvW gzbS+Q== Received: from mail-qk1-f198.google.com (mail-qk1-f198.google.com [209.85.222.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cf5wyvek7-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 23 Feb 2026 10:57:57 +0000 (GMT) Received: by mail-qk1-f198.google.com with SMTP id af79cd13be357-8cb3a2eb984so1335053085a.0 for ; Mon, 23 Feb 2026 02:57:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1771844277; x=1772449077; 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=agC/kjbE73M+Z8wiAl9vb91FGbgjM3TwVypA0iNDKm8=; b=EdQeBjZpzXef7zhiD2laGngRk4hvKe19AUOSoAOgqQwDkEd1FezVhHTMah1yCciEnP DQqHmnJHAmXKGX3Mos8VbvoKhHAS+GU4UTFe8VmUpHN3vgscC3q0ji90ZHqbenBmjgYG UkDez/QUhgb3C7nf6HrqPtZeiEQKHZLJHj755+2VthUvl3luDiZsZMoMgNX+F3ABLQdM Oh2efX5TI+bHupAOv0fPjuNzOCEfJq0cQzwZE+cgKzpR4fgRSIyjOgkzEMxtRTw3z3KG EoNw5YgXxiys/sBzbpbdKkfOBYTpPQm9PSaArDeWofnNZHqLn/pMI83+mPgbmn96Yvbt 82eQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771844277; x=1772449077; 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=agC/kjbE73M+Z8wiAl9vb91FGbgjM3TwVypA0iNDKm8=; b=aIC+GdaRG/tNuENfTLfNe8xVGP5gmzUSRocs8AUQHGEU08nYxi2I43FbnfSC1hpHwv SPFS738TxkaOdgtPuGga8l+jKoCwEhDGyF82lDskTKelDk+kt0Xl8u4WgSysuWAg7X/9 YCcupd7cqS98aBScfMQ72L/qJaOdDIiatJ2gRJrY/IQhEjF8dlEo2qWJIgH9EylcBkD8 ZYa1V6pI47pDmFww4MHJhvMnnigmBtzGdG7QFeSKTzXanHr7RPXNbyw+Ts4VO1lEutje +mB3EjfUSCVaWzqWgRLdXL2oSpCr3xy8wmHnq+AvqYq025HCwADoVtdsPG6db6OtF/sN P/4w== X-Gm-Message-State: AOJu0YwYmoqjiplXl0g0NkvOPtFdMMYGT18zR6Kntfv46+YVrnYWZf3R I1XPI86XtCaWeBFBn78J9hUU9hqkRiLeZ0IBV+2VVW9cDs5iMr+qCSTid/Yvet78fDRRLMu/mhK C7EjTRAWBVuiqz817qekghgmDjSFby3aTJ4NfFnrmeKKvOsgYjzNAEGSbamzri4bTgHs= X-Gm-Gg: AZuq6aIGO+kgp9Yw1SXnqQD1pBcoXGHhyl9Y9qo/Jt3wdHgZOtb//4w3Re5XNV3JA0V jhpq8yWDHhD8LByqng912Et01ta2G8mNZAiThOC+9cFErL6o5orQkWCRhEBXRl3r7JeIhkJebUI 0zKK98jjpjmkalztUAPTcLbG9Fa7WlkKwcSNDus4MNA0RK62PtWg/OSreVoms8Tsascv9+sS6/e 1Ihm86f7xDSyQOkyyTTv4wmdEub5daTEknHhUhf0BKBeUJln/kagofYy1FhTstKDNb4VOG+wCXN GTFcwfMijnVlEBvot06Fk3FkVzjLIZeuszCGgUSk+lFV+4f+NR7TlKH1h++TosycNLPTPL5oTKT tBRSWvH5mEZQ132Z/7SBo+B700xd1W6+ZBLtiPeyKnFueFBJ8Bbir X-Received: by 2002:a05:620a:1a8b:b0:8b0:f04c:9f0f with SMTP id af79cd13be357-8cb8ca7fee0mr1067590485a.63.1771844277000; Mon, 23 Feb 2026 02:57:57 -0800 (PST) X-Received: by 2002:a05:620a:1a8b:b0:8b0:f04c:9f0f with SMTP id af79cd13be357-8cb8ca7fee0mr1067589085a.63.1771844276617; Mon, 23 Feb 2026 02:57:56 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:bd71:422c:5e83:8b37]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43970c00c18sm18120002f8f.14.2026.02.23.02.57.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Feb 2026 02:57:56 -0800 (PST) From: Bartosz Golaszewski Date: Mon, 23 Feb 2026 11:57:04 +0100 Subject: [PATCH v2 3/7] 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: <20260223-nvmem-unbind-v2-3-0df33a933dca@oss.qualcomm.com> References: <20260223-nvmem-unbind-v2-0-0df33a933dca@oss.qualcomm.com> In-Reply-To: <20260223-nvmem-unbind-v2-0-0df33a933dca@oss.qualcomm.com> To: Srinivas Kandagatla , Bartosz Golaszewski 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=1386; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=mGzJzyIKxNS5t3nGvi38gjDDAEPc8ifJxKU5wQBfOf4=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpnDKqYwEKSD3IA+M4hOWgDs1mCDqzMfDduEjmC +cFzh8ci/qJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaZwyqgAKCRAFnS7L/zaE w1D8EACb3UUV6DmZBXF0fz10K0RTxCY39ovAB5JReZFHhe0jGHR6NGM57hz2NnOkJ2nPsFrD8RB RAnXbDlL5HWAJHnihRYPs6gRewrlK3OWRdYWY9r8u5xI5aDb0zdRE7bHMmSBfmEmfULFYFVf/26 WRoZ62DvtVCugobDHHJLszolHkeKcTDrLlxdqTR35OXRStlyjPdQo20yTNhTASNtNDs+bg26boa a+K59QrliJplL6A88AuOGMaFIFFE6ikkHtJv12nTcwkQz2OrgngD0ueDLa6y6m5DSH5yFhBWTde n3BMw5V0p5KXRcAu8dOKnxi4usCZq3oygXsk7T8dh0PLYDjxhCVlmPsthC9Rrq2u2WFgbXhLL0v KFy3JKn+a/aSPMrsePmLi1V5HeZlSvb7I2waUBKC2ZwLiP2+bljz0vvkcHuQTaj5C5MtpvkLFl8 FzZ/lB8c/up++MNZ0s3nuRkCEbhm21Knbc5pMY4Qv8uOC7yYsxHPbclJbGZtxI90oHtvhw33LeG OCGElGzxbeqS9Fk97pmn1XVaTkNe/XNtSHEiWfWlLcsRP7hgmCxq03DAkaVfcORqRprnobE6uo5 SiA1mw26m0XMp6NSqVhHvalY7M26kyfG4MVWa7z21o34yPZLY7yvzKLCfag3MgBnQys91BehSUM 6L5KUraCrjohO/Q== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjIzMDA5NCBTYWx0ZWRfXxH0ZOpGhmLnv S2SK2nXb0SLfeylN6D10f0Vr+PJDGnz4ruigi4y6Y/OYiLyaudi4MiDN36HT6N/QY+lT2vD1n4k rx5Vkc+CmEhsRQUIoLuC57kgQPZdXbtJ9to7/wvHRFM9EWoH02cQqc80cnc7xzuXW/VC3LZFUkF vEnkDNfbv/y8R2iZ3wj7iM3SUgI67TT5aDoWTrut4Ci1uIo7D3swVYoBsHKd4osP1QX+KFehUJ+ 3OXdMkMUaHyLh2vHvPFbCoE0petkbYq68jB0lxt+Sx9kjMGRPkbPHD/L/GQm47nK36+xR7icOE0 t6l1Tlg0k5VwyZ8f7WetI5O6SNM2LNNTQiuL3u20tEFqEJqrRCmIT1FuYII6merRCbW14nle6CO 5j6YFmYIO7mZoT/qVif7eiEHBIwBxd6aiRne0XaIj9NraelecWohJHNZzHZ0ZBRd2hNCO8Y3u38 yZ1XZeEJ3e3uJI51wrg== X-Authority-Analysis: v=2.4 cv=UO/Q3Sfy c=1 sm=1 tr=0 ts=699c32b5 cx=c_pps a=qKBjSQ1v91RyAK45QCPf5w==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=EUspDBNiAAAA:8 a=ii2iuPLuu9iRZ_mRmhMA:9 a=QEXdDO2ut3YA:10 a=NFOGd7dJGGMPyQGDc5-O:22 X-Proofpoint-GUID: vnyk0PxGAMxplVWDrmVXjXZ7EUa8PuDJ X-Proofpoint-ORIG-GUID: vnyk0PxGAMxplVWDrmVXjXZ7EUa8PuDJ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-23_02,2026-02-20_04,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 spamscore=0 lowpriorityscore=0 adultscore=0 impostorscore=0 malwarescore=0 priorityscore=1501 bulkscore=0 phishscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2602230094 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. Signed-off-by: Bartosz Golaszewski Reviewed-by: Johan Hovold --- 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 14f583e466c8d95690539bd886fd0c2fdd440998..924e2e247ac1ad426d73310f102= 4000ca64e0471 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 Sat Apr 18 11:08:29 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 42DE2361646 for ; Mon, 23 Feb 2026 10:58:00 +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=1771844281; cv=none; b=tIkf/pjJrBXooSCakRV0R+FWDXj8qjjSIQvRSeygsqdvcnZgS2rOknODOU0Y8SzDHsml8jd5aeNAjWAoaCuygKIPnt2hitAYzcaAD8Mqp1VOIRxcPdbqeIXEPrkeVmqZdav+6RErY9TU1wkdGmqz5HqMV/lAiCpT3F6ve2TANGM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771844281; c=relaxed/simple; bh=ykJxCO5E3C4rLvQUHj8cBmllgqzoa7atFqjHJqnF08Q=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=oTVpIW646ONX8ByoJijnGKitGMVmSfV0AMeGrCoZhVPMS8vfCYy9W0LHhotsgYzp2VntHOauQUyxEM+EUorhL/XWG97lQxocdcnOH6y8R7EiSu4HQ/Urvqe1T/9aibzjgH5q4vPRTnzgT59qvEtmdkIyiS6Wc6Hjx/BtG38K47w= 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=GKbNCrUD; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=VcDWwkOC; 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="GKbNCrUD"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="VcDWwkOC" 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 61NA2WBF2570444 for ; Mon, 23 Feb 2026 10:57:59 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= gpubd5YMntLes45xNFw/jUH52Ohlh5F86xtCr6wE4hg=; b=GKbNCrUD37d/jcWF BDhg91NqRjhbLi5nmmhMlT5ARl5ph7rgx50NfCMT1b9aZBmHhwmJ3qhcxyU4xerQ pcZ6H4/X9mZhQMw257egnvBLEaiYjxJWzw/b6ppwrggksQKksMJC07sE+5g7nQg8 97waYdusqyrCHrt9THYeoLGpj+Ab2dui/lTxL9irN0tL1KP+1mBwE7a4UT1K8HnF BY7B3pSxGbpncD7MjcbosaKI57fRsrk9SrchJCIybZ131YC/TxaKnR9Ubn0O7+M1 AKODeKf8RXPNDu/+YDVg3T+rflBFXu0eqExO+U+rHbDPo56F91PLKx9hUBYDHzPI xfIEMw== Received: from mail-qk1-f198.google.com (mail-qk1-f198.google.com [209.85.222.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cf5vgvge8-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 23 Feb 2026 10:57:59 +0000 (GMT) Received: by mail-qk1-f198.google.com with SMTP id af79cd13be357-8c71156fe09so3806160885a.0 for ; Mon, 23 Feb 2026 02:57:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1771844278; x=1772449078; 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=gpubd5YMntLes45xNFw/jUH52Ohlh5F86xtCr6wE4hg=; b=VcDWwkOCLEfDtapZI5+OgP0qXov+lMgiyuiUP5Iy9VzwCx5eiG/t7CIZpLs+SMupa2 MVv4TQk+qXdKjWhK2/kKK9uOAphzsM1tFctX/Mdp20xZ5NtTtnI3/NzDTHBZlgcYIaBT c44exDGwRzV8CCk6/EuKucbAdTh9q2i4Y91h4uh+H/JSyGx42qTIk+fHCTX5FPLKtzLi LgS7Ns46TYbw9Sgh72d2jfWAIWIgfJl5J+Op4k+33mL8xB8JmKOO0WEuWh9xBTefzNGy wVZX4bCWDAG+WVnPfdj3PL1dqBHg56gLWeVHUoPOfNpOZROLWQVBUYzf4IfB22jJIfHP tMIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771844278; x=1772449078; 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=gpubd5YMntLes45xNFw/jUH52Ohlh5F86xtCr6wE4hg=; b=e+Qaloj640+gbrHywJAYhc6dmq3Gfjjy6IGwCL5ollWqCCZ0wk7Y+zpqzeYH5CQ69m od83fAEqjYOIS8BnClYjn9UxUin5FJH30W6nibKstPKQ/gafAjDO11yMqbFelyS9iaIs 0wT8RrAoJfQ2TT7joaH//0xRMI/lGXywJi4DuIBj0RBs4rhkE1cMMjz4NM5+68zA9Xzj APDqhkPphWgehHj+iLeo5gAkAVJyyVioVvRKpCnJc7WASb4BvR+KUVzBlie08+olNt1d hXeSKBsJoRwX+qTePQhE1fp9tcg/zc5km6Fe1qFNXyv8IxE+K7J9ixS96/aVSKtQP5Yg VaVQ== X-Gm-Message-State: AOJu0YyyB+XZ+PBosDqHunzIw8r2uGufwbpeyR0AGOuhRRf5ofDFIUEq DvwVMz9xETlexf4NIl3gq76OdJilmyhFeBTdEL4gCuywjTnPasZlfvuHzfpYzxQPIREsLk7iRKc 3ULVmENIJtFG295R3L6me7YZmsGQpbkwg+GBkvx6H9JIQV+U1SLv+YisYXGB1YJuCz76fZC7yjZ 4= X-Gm-Gg: AZuq6aKmkT8MDFFO8BYaIJ3PWoeB8AHiMzt0sJwdc7q8JYfqDmOzz1eDAvce4SiGMNL lpRjg20c7Md7yyU3Ca5LYOYvxfhPPL3Z7pVcRRGlYS6NSzQ/7Kg0ZE6zhJICGeGKzl/8ojfX52S BGMUscnEGhbxOLOUl8UUh29YVsltPUXGq0caQTObndrvm/BwdhtUvhz4wk5oGFIDnCOQAcaLBup O0zbDu6O1rrym/U0BPQmk3qXtTDY4M5dZ/+3aM2UPcHIBrICu55MUSBAimLF+UecsRt7dXyxajK S4SX3WELl/mFVIFCiT9IRjfhY9bq+ggOcUVt0LpvDgZEfyolwg5XJT8vy66rViE9RkXrvRDrstG mmYBbShSa1jNv12v5uzqESPEYwKkMe+qPpsGS/Eh+21kqz0nLsKLj X-Received: by 2002:a05:620a:25ce:b0:8cb:72b2:2a05 with SMTP id af79cd13be357-8cb8c9d1e5emr934475585a.2.1771844278244; Mon, 23 Feb 2026 02:57:58 -0800 (PST) X-Received: by 2002:a05:620a:25ce:b0:8cb:72b2:2a05 with SMTP id af79cd13be357-8cb8c9d1e5emr934474285a.2.1771844277812; Mon, 23 Feb 2026 02:57:57 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:bd71:422c:5e83:8b37]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43970c00c18sm18120002f8f.14.2026.02.23.02.57.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Feb 2026 02:57:57 -0800 (PST) From: Bartosz Golaszewski Date: Mon, 23 Feb 2026 11:57:05 +0100 Subject: [PATCH v2 4/7] 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: <20260223-nvmem-unbind-v2-4-0df33a933dca@oss.qualcomm.com> References: <20260223-nvmem-unbind-v2-0-0df33a933dca@oss.qualcomm.com> In-Reply-To: <20260223-nvmem-unbind-v2-0-0df33a933dca@oss.qualcomm.com> To: Srinivas Kandagatla , Bartosz Golaszewski 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=6574; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=ykJxCO5E3C4rLvQUHj8cBmllgqzoa7atFqjHJqnF08Q=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpnDKrs+19Is7QbydQ7D9iFFzi55Achklj4Be1d nAG8wD+ScmJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaZwyqwAKCRAFnS7L/zaE w1lED/4p4gGvPbnYcCSSwgKL89+REzByRI2ipTL50vErp+p67DAecZNWEuId66dZjcx0RRSV+kr NR36fybt0d7zsY/1OXjgxMRFtrsfWJnXHrqoYVaKVc9PfoZ6LNemX5mCbT1VMwunZFKPD69Q1wu 7vUMP6XFY2e9QAzdXyyvAyRi1DdVaOFowvmd2Lfpk/Q71/fg5CeF4+Bgf44b15iCYg90HWLsufu 2V9U0LZw7SjJDzHfCl2zG25oRj5WMpXi9UrDX3SM5/RUx7nsRL0xRerVhtj/k9n08C6pcsFl4hP GmZ8hCAQ6dzddRsfFX3uHtMEzLLsBSMp5+TruR/3yGL9qyqF5yx1mCTUw7seyWsFMUlbmVvHvPO X6hvE3ef9pov0A7G5qw9RKblWRFMXQFVdbeuQ3NNiQzbfTzFrg8ntH3VEBuZcOTFE0msav0hF7Q Tb0Fsma0H5hPBbRiXeA+jaP9OapdIlsWv7he+J0/ULEUGBry6eXPRt8UZ6HKegwXa2t6l+6zYJS eJIEV4ZIZX7sUGSowmoOZOM/9dro5IG72TFvPf4ylUitXANnnYooFlcKWObkvjVaFGzTUtl5/K2 zCGPjBndyyXEYLG+dpmoqpHSlUbwvKfSzB/andf1QZUH4DN8MGc3w6zKRgATWrKFBjewkx0uJQc WeukaPv0UZttZcw== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjIzMDA5NCBTYWx0ZWRfX4Ajwf+mZKzcl VUu7LoX31JdehdaCloKx08mCB3Z84kBW+a9gErseS4+BQu2GB21jSCByUG6c9ZdxxZFUCwQn4oT jIaYJ65TqyAJ1kJQDDyD9RmynAdlnnfbgr/j/7llXZiJQXNmYW1pl+AUz8LLUaY3v85x9NviLBb RZ7myS+S9PIkiXx0pTC8umKfC2IomIp63tPuKOQXxZtwz1vBvuaj7qlW91fScdD6nS7nnSGoX29 p9xGRp/x4trJZu6/yU8oUXaZb9Tv8Q1vSiNE9zakr6q6V2IwOcyd0YeQW+60GYctdY4a7ssV9VA WxkTYvw9BQeAhwSS2M8j/0Q9O+bTMsTUh4wlWRUCriXXKH+MlJat6rsUJDS8xzubQLrHaK+3Wxn eCyfXEGoPeKzOhHA6dog+9ZCs6ihaPsK7k/EO7oW7l0eWX46O0qTeiZSq5Oh0uIl8dCJ2pgycpi vYZZ3MvIsCM8KF9MvZQ== X-Authority-Analysis: v=2.4 cv=W+A1lBWk c=1 sm=1 tr=0 ts=699c32b7 cx=c_pps a=qKBjSQ1v91RyAK45QCPf5w==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=EUspDBNiAAAA:8 a=uP1ucDPQAAAA:8 a=-rJ4p0UJwyiPJ0m2jL8A:9 a=QEXdDO2ut3YA:10 a=NFOGd7dJGGMPyQGDc5-O:22 a=9a9ggB8z3XFZH39hjkD6:22 X-Proofpoint-GUID: oCyrqa0aefyZwxYxd55BHqT5yUAXzKYB X-Proofpoint-ORIG-GUID: oCyrqa0aefyZwxYxd55BHqT5yUAXzKYB X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-23_02,2026-02-20_04,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 lowpriorityscore=0 phishscore=0 suspectscore=0 spamscore=0 bulkscore=0 adultscore=0 priorityscore=1501 clxscore=1015 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2602230094 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 | 76 ++++++++++++++++++++++--------------------------= ---- 1 file changed, 32 insertions(+), 44 deletions(-) diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index 924e2e247ac1ad426d73310f1024000ca64e0471..42827ba2146ce9ba07716ac5973= 327da6e9426da 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 @@ -468,27 +470,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) { @@ -501,10 +499,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++; @@ -514,13 +510,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 @@ -558,9 +551,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); @@ -576,9 +568,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 @@ -728,14 +719,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; } @@ -1121,11 +1112,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 @@ -1335,7 +1326,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_mutex); =20 list_for_each_entry(lookup, &nvmem_lookup_list, node) { if ((strcmp(lookup->dev_id, dev_id) =3D=3D 0) && @@ -1343,11 +1334,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); @@ -1363,7 +1352,6 @@ nvmem_cell_get_from_lookup(struct device *dev, const = char *con_id) } } =20 - mutex_unlock(&nvmem_lookup_mutex); return cell; } =20 @@ -1379,14 +1367,14 @@ nvmem_find_cell_entry_by_node(struct nvmem_device *= nvmem, struct device_node *np { 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 (np =3D=3D iter->np) { cell =3D iter; break; } } - mutex_unlock(&nvmem_mutex); =20 return cell; } @@ -2123,10 +2111,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_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 @@ -2141,10 +2129,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_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 Sat Apr 18 11:08:29 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 BAA6F361641 for ; Mon, 23 Feb 2026 10:58:00 +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=1771844283; cv=none; b=Fif5JIZpG4kw0LVoHZQJbid7IodF/ZLvFjNsQ6X+QshYG+vg6V5uKIucqcE1vE64O6h2lmQvdd3x2SvFU7acfL6NXIvNwcSerIy/dz3iIuDNERj+Mc3ppEgh8pVpT4nfncBZqO1EnxP3KMPaYE6d51egcD5gPJ6MxJWGBVeZmLw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771844283; c=relaxed/simple; bh=O6KnheLxNXNr7Yefw3yOtHx8EuLujSVOw4DHMD6meBs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nJOo2UOeGdNtrsKqujrnwDJqIaRA+MuKQFsLMlSC/npbvuEitjU+O9Rg8lXyZNmJkkyDfN5I3Mxtt9ostlrNodKQFqrjE7bZKIALW3ROhDk2wATgHrmt8Sze1rMvan6pbOLj6e80dmof/+psPG6KqaInWc7LkwXNZqc0g44CSDg= 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=E1pY/f9r; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=EH5ImODr; 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="E1pY/f9r"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="EH5ImODr" Received: from pps.filterd (m0279863.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 61N9i89j1754162 for ; Mon, 23 Feb 2026 10:58:00 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= xzvA+Cqq6/Dp64nx2BQf92SFvmvzz8gdWnA5C8+/n0Y=; b=E1pY/f9rUAO1oMXx GP7BzDoFvPrJ6vADdiqmkVHYtfuwOkZ2JAIP3kNCIO0OYUu18qp0D2lfCuBkWoy1 rVJQXIvtIt5zEOvZlN9qyPePOaZOqvPzRX2t7iJswDfthC/AA5Vmv4WwR/FlamdV 9xPxp9RM+nLzup47A7ZD4EnqWnCftbjn4i4kgNPmGBB/d/hzCZIqchrpV55CvsjE V/lpUeAiqm9vUwbqaAN9WdbB1rEc/zfLL3rCKeun7wNdowjBFs+v5Q9po/w27IJG XHCHFPhsuIh17XVTWzwXamU+xWsZvLNiDvUCsiAc/c2hMkmZ3NIKaaK9EftHbFBe JW75dg== Received: from mail-qk1-f199.google.com (mail-qk1-f199.google.com [209.85.222.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cf5wavfb7-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 23 Feb 2026 10:58:00 +0000 (GMT) Received: by mail-qk1-f199.google.com with SMTP id af79cd13be357-8c70d16d5a9so3736204485a.3 for ; Mon, 23 Feb 2026 02:57:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1771844279; x=1772449079; 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=xzvA+Cqq6/Dp64nx2BQf92SFvmvzz8gdWnA5C8+/n0Y=; b=EH5ImODrOXz6Lch5wTvrXyIFFlSQQveGmvrAMTPWpERzkjwd/V2e99G2urAyjy0PXO PICyNqX0kgDuQ4NyTS9q0hhOJLTHXvE/ZCNg6C0dzn6K89UCh0qAFT5IvYg2XOKeNmyn ExDFVJvEHJxTBPGvRejPbkAPorieahbDLeNHTA57MBH4wLQusdjWn4c9S4G6uRpZA1N+ ghx4Z0SuzOOO16t5x3gBX+qXv04m3736pjpwZIemF2e7fRn5mo0FqW+0jl30XacJb3+r 5tYknwmOM33MYPN8sA9MYJJMug2xwE27RGThN67AW/lkhjM5qbEmC/rfGtHEmpp/k03j bmWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771844279; x=1772449079; 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=xzvA+Cqq6/Dp64nx2BQf92SFvmvzz8gdWnA5C8+/n0Y=; b=lZjz3IscKNcPSIsotv6Tuh+FTrh5abFqwPJ2iEeMF0aNWc04bl5TE3Fwb3uxzqUe3v Q4SL8h1EmMd79jeC4evmULnQhx+tT5MglpUvP03lwsC3X0eNKVhXmLgPUrZKNNyW809J AhrzduQWn6xq6860T8PNQd5EM4zyaAgculuML5kla2oVIgwIFtm692lZeZYF+lrZL/FC qdfAPX8cJMJy7tFuxQsWW+nk5D2zQ0vo0GyM+zknIx+XFPXwiyJkyI+sqWaz5h20F/Wg LGwvjJXXEH8FGB3Z0c8gsFYCAj5153iW9P5vJnf1AjF18GyMnnu8lE8wtrJdQi9C1/L+ ChsQ== X-Gm-Message-State: AOJu0Yx0gGXS5EQQMPE44NFzDbOp9EkWHFOSk6zCJqlt4Prt8asouBI9 7ci4+d0qkg2kex386izQvvh519Ug7aqkHUpWo4gP2SoCFmWEagftcB9mRHKabz3M5CuKZdKfcfQ lx5XzdOH8hNoWyuHF1kNbpUfuqBmjdCiovoqy0W29tYZlEEBUkGq8/97RIQxn4mzst4I= X-Gm-Gg: AZuq6aJVQMRkZ6Cuiz4NmMwRvi96bc0eSxhFGtCXZjHvo+yEWWSDPlIordAAWgdzgcH 3J8y6naH7K+mT7oks8HGm9wgECD4DJaxUibZgzgMkA8s1WJdRsCRdKRzSKbDsxRVkPFvV+dB50n y1ERvq2UTwZyrEwDoDdwIVXXl3F/Fvb1bew95U6zIBnrLXVR6/ugChav1kift0R9Ea1uyCTgCix F1rZK3VHC6P3GqH5a8wLzkHKsdT+IKoG09TmHOv84OOjs9eudaCkBA0DRXWiAwqFcWH68BW/yAw x+yJVU/8GyJJWwidyeFcNMY9H19WX37f9MU0eTle2vHZbdV9mIKnIYhCL+9Yj/0zbYXLkiBb1QC a5jrx1qyOf7yMwca2+evFnkWrirtU7acZEpWEf6agUukPdO0Ouadh X-Received: by 2002:a05:620a:f07:b0:8ca:1240:4991 with SMTP id af79cd13be357-8cb8ca7223dmr938268685a.45.1771844279213; Mon, 23 Feb 2026 02:57:59 -0800 (PST) X-Received: by 2002:a05:620a:f07:b0:8ca:1240:4991 with SMTP id af79cd13be357-8cb8ca7223dmr938267585a.45.1771844278709; Mon, 23 Feb 2026 02:57:58 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:bd71:422c:5e83:8b37]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43970c00c18sm18120002f8f.14.2026.02.23.02.57.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Feb 2026 02:57:58 -0800 (PST) From: Bartosz Golaszewski Date: Mon, 23 Feb 2026 11:57:06 +0100 Subject: [PATCH v2 5/7] 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: <20260223-nvmem-unbind-v2-5-0df33a933dca@oss.qualcomm.com> References: <20260223-nvmem-unbind-v2-0-0df33a933dca@oss.qualcomm.com> In-Reply-To: <20260223-nvmem-unbind-v2-0-0df33a933dca@oss.qualcomm.com> To: Srinivas Kandagatla , Bartosz Golaszewski 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=2822; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=O6KnheLxNXNr7Yefw3yOtHx8EuLujSVOw4DHMD6meBs=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpnDKsnuZvMCflu23/5edHIPKJO6lVsUlbiGNuA D53rxNX2dSJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaZwyrAAKCRAFnS7L/zaE w3jCEACBURTczxA32fBRVaMpwUY1GnMtuNBgc5ROo+wqDsO9CnnfAtsET81uMx/8hAdSckv4uNM Zyua8EVq/JdRW8LSlui5vUTEHQNi/A7HFx0S8GZDgFuqjaQ9i8655+CXW83fYrV/3FV/VaxQDdU Wu3LBmD44NJcVkCthDKR9YeL46g0bFQyuQBypS6YPlyEP86mBVpg6NfjHNm2doXIHKaVOzWCLUn jZz1qM+TcL74LpFyZMSIMYK7yT5wMfVDWWjwOdCA0Hmhg8YtIzmxLlzVS60A6U1mMQqCQAVO4OV syirVP9niYHAO7Tj+nCEiTNzYK76MP9YqQddfxPaz9HmlcoAXd2GEMeZU0/YcNn1VVV8PdZNElu 10I58osG3zK2cGclUwhy27fEwJABdgLQAeShGJWqv7pMu3FSZN7v7TD0X5+pLuTfywwroN2Pk4M 7Yng7k/m0VoCVPvinlYobdP9/g7iyJ99TjHPDqcm59U6VrmDiiV4DHEzSQhjKhPD7GhTiD/dO9d 20f6dUidHRkwh/k6+34JQGxOEowkqo0YTzWY+msIzp75u13Sn9hXH7qE3sPfO+s6H2B4oscXASB wXyCd6irY0V1pdJcD5uENnWrrxrUgVuJ7ADUVdJnhm9J6j673g8Ir8mXlG15OBlaSlgI2Y5MZLC NX42t2kObf8es4Q== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Authority-Analysis: v=2.4 cv=KJVXzVFo c=1 sm=1 tr=0 ts=699c32b8 cx=c_pps a=HLyN3IcIa5EE8TELMZ618Q==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yOCtJkima9RkubShWh1s:22 a=EUspDBNiAAAA:8 a=ePmvc8VEzdrDOxTP0soA:9 a=QEXdDO2ut3YA:10 a=bTQJ7kPSJx9SKPbeHEYW:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjIzMDA5NCBTYWx0ZWRfX14LkS1KQVKNS 9O7OJPVbl18GJ1SWMBz2tO2V1Sl+nmOgMARhBvaABZnAO1t9Di+cf5ZYoKaCLU817iXZXklrdt3 HqoFIhMbJWCZOC7w2J2ZMBoa5DzveoQIMuahnKZhQYX2OZ1iBHxR2qKUd54d+04iXWvLymVmT8M tb9g7w9ESa8gphbZN8CEISas92mOkk7B4m8ELKyXhMI9C7uJUlwSXH5oQqEpA3BbPWTZd23oxeS leOyUNURKoPY8KIH2nLZhQKrsl6FMSwfR0ksFtoSLqsMkUlmJCOFtUHnRFkO4qVm01dWQU3NIw3 grihwR8KOwPRE4QJTyEvvSbKuehzdfiLyEHSfy7HY6+aID/f3laVxkleBOviL/L/zzpAmfL1f3t QkZ9sbd1s7q9A4J2pLmNo916zMXFJWGAVGLyzQeSQ4rQGRO8uITFhcHD06TsCQ01MWOidEDKEyU Z6bEYZNZ3OHqgeEk5Ig== X-Proofpoint-ORIG-GUID: tKHIc7vUuIJUhuM_7nN6rTazFJ7woFS6 X-Proofpoint-GUID: tKHIc7vUuIJUhuM_7nN6rTazFJ7woFS6 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-23_02,2026-02-20_04,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 phishscore=0 bulkscore=0 lowpriorityscore=0 priorityscore=1501 clxscore=1015 spamscore=0 malwarescore=0 adultscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2602230094 __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. Signed-off-by: Bartosz Golaszewski --- drivers/nvmem/core.c | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index 42827ba2146ce9ba07716ac5973327da6e9426da..30aee8089f1dc65b1fa07dac8fb= 35e1dbbcd0ce7 100644 --- a/drivers/nvmem/core.c +++ b/drivers/nvmem/core.c @@ -1134,13 +1134,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 @@ -1253,7 +1246,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 @@ -1341,12 +1336,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; } @@ -1456,14 +1451,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); @@ -1473,7 +1468,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 @@ -1588,7 +1583,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 Sat Apr 18 11:08:29 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 3B2E136164D for ; Mon, 23 Feb 2026 10:58:02 +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=1771844283; cv=none; b=Z3vvs+XOqRAC/NWcGir5JbLRB3PEWAdSA9JzePzLWqYgldwbPJkdsutIMuuMmam3R2Cz+rSxZUWwfa58Jr3+i3gW487y5ifltnbwkWbWqPNTu9ASBXmlqAQppExWf3ooIWj2UyABtv97EACaf13R1bgPc1NyCyPGcc8OPQtQFcA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771844283; c=relaxed/simple; bh=ooRoVE8/bILcm+MLgn4kEI6KarMtJzqF2BVfN0w3RDY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CYxhMp0rQCCIEwxXlF/OGbtS6yvQAxDZ5PAqGKYkzBhio0PnIAlLZ0JFvIfNVoq5Tq6RVQuu/M+u83S4IG/wdsjg/DDjo58KfP/yiKT8nZIZvy1u+cGibjQ+t8q+mH+UG4XtwYDaSQrSRED21e9m8ptGx/oZGnjA/wU8uTcPbTQ= 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=SmHTvxIf; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=aOpdeBfj; 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="SmHTvxIf"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="aOpdeBfj" 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 61N9GlVW2299144 for ; Mon, 23 Feb 2026 10:58:01 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= /IUSxpB/fzCFagSR5Ntc0ttYUMp4h/8G2XGZIXSm/hc=; b=SmHTvxIf55lK8z8F /jEL8K4bxRpWf6j6Kklvo6v+n2bc78Rbm/+fd2rZ6Ff7W94kdIw4X9Wb0kSwFqXk vpqps+0/OuBAaFx3kecCqz/A6SD9huMMQGxg7fZlEVpv1QFxZIToPg60hrf6ers/ uwjoWobH33bZgUax8nwEBqx+XJYJu9q9ao1v0aimN+xmCRFj9I7Gy65QFs7rtByq Wc2/xrFG5fHBKb6kDsN5hbmd/7S6pQf5HXNzC30Saun2h4jZmhH2UwYJxU+C6QzR oa8uvvw//p2qJrUvfj+DwPyVNBl73u+sWOZceffDhOz4Rc6Eksv2e4axqamWe5xG N4cnYA== Received: from mail-qk1-f200.google.com (mail-qk1-f200.google.com [209.85.222.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cf5wyveka-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 23 Feb 2026 10:58:01 +0000 (GMT) Received: by mail-qk1-f200.google.com with SMTP id af79cd13be357-8cb390a0c4eso1227556085a.1 for ; Mon, 23 Feb 2026 02:58:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1771844280; x=1772449080; 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=/IUSxpB/fzCFagSR5Ntc0ttYUMp4h/8G2XGZIXSm/hc=; b=aOpdeBfj+RqGLowUQkFuV7PddQCw7UHHdY+f5SqpWEJT6kIbchs4tTyGwqKMdJPXtI DpFyfP3pDVezgImMNdLE+Fc6JsJI0QShhfSXxYtPf3za1DheB+UOx1MdpIkDTM3x+q4x wPnTrTYIAICva2mPvvxjMlK/QUu5b0PFJw83B4vvz5YyOXvp1QXjAlSFnIEkL1zauZpl SFzDQ++8XoRKZjA2PEKb6RtOnwu4gjhQEHI+XVA6Q74N2eBjsfjCFejCfqCBUorO18vg X5/sXvcoQriC0kMGGX2QlDGqovPqUIcuigPuGS2uNeHAirgndxROqfaM7hcDC1VhA3VD JJXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771844280; x=1772449080; 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=/IUSxpB/fzCFagSR5Ntc0ttYUMp4h/8G2XGZIXSm/hc=; b=o5HuqxfNIDRwe0fOksXxPgHAZQlhlb9G0AL4tHmHLFwwT2SaP6vpljvlSeutohvyqE 6VVgfTWoFUz+bY8UIZTtdYRW3pmHLALjy+N43fZ203o0uocgH7KXgNM7ckkm++LRtIDG 9VBZbjy/LcVVBy91RTGJw1JTLIt1a7nfOLJt/gb8GzCanQKIfPGM2Stkq9tw1FSWouMS 7VavROGU1BZCH8BJVoUVA1VOn5EBOoz76lb1X8lCftUohdsezeV1sC73iPRMdorSvFcY QIHHW0k5k8ASK9///n+euS9BNfT5LOXcmYWatg1n2ulLYF3th9prj64lql8LYIq7KWxc bBOg== X-Gm-Message-State: AOJu0Yw0rtEMMGMlX5SG6cKtvjPCMseHxuSZF+aaKHa5hLyK62AAJHPY FqqdL4/39/oSFIjbJ+XXFcpErjRPbUWSx1w8Z3f/ek7Jtxb3rlYYcGjgiUFeEpvCW85ARE8tH7r pXHy8WmOxYZucPnyvG9miuqGRQlD8FS3DgrGRymzOSVFwh0lYR2JuisQ5nWwq4y6hrp8= X-Gm-Gg: AZuq6aIUf9LHNStzJ/uXcglnHRWRUN18QQA+f6LMMlLhvpqSMyRhmdUBdaA8Lul7GPA t2s25hXTtu4YNzXR3vcuEKBZqOjWlRIWY/9DMbC5+QzQqybIH5oTHlmaNSOUddr+h1jMb9lhSWG 8NQp8RdLKmJCHx7nLokLGlEZvRcmzEUWReUtYF8lnSwTjbzu4ets6SRwVT95B7TOg13xLSj1xW3 caIRwg4bi4dqTAYkJWeYV6wT9aUTcB+5+84AnWnu9+7x0+MD8wlakcVtzlzvHPPQJgRNE6h6cne rsbSKEFaATs/AADyT+svSzboEm5GZrD73pifUilcMOrDMlAdzPSL0m5imVS2p/DsPCp+m57p8pA GTuE2/EdZsdAd8xAXDjJ02CnaRja6665I1sFS7GaUwp/astFxzWLd X-Received: by 2002:a05:620a:1a8b:b0:8cb:4128:ec45 with SMTP id af79cd13be357-8cb8ca7fdf2mr967169085a.66.1771844280300; Mon, 23 Feb 2026 02:58:00 -0800 (PST) X-Received: by 2002:a05:620a:1a8b:b0:8cb:4128:ec45 with SMTP id af79cd13be357-8cb8ca7fdf2mr967168285a.66.1771844279886; Mon, 23 Feb 2026 02:57:59 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:bd71:422c:5e83:8b37]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43970c00c18sm18120002f8f.14.2026.02.23.02.57.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Feb 2026 02:57:59 -0800 (PST) From: Bartosz Golaszewski Date: Mon, 23 Feb 2026 11:57:07 +0100 Subject: [PATCH v2 6/7] nvmem: split struct nvmem_device into refcounted and provider-owned data 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: <20260223-nvmem-unbind-v2-6-0df33a933dca@oss.qualcomm.com> References: <20260223-nvmem-unbind-v2-0-0df33a933dca@oss.qualcomm.com> In-Reply-To: <20260223-nvmem-unbind-v2-0-0df33a933dca@oss.qualcomm.com> To: Srinivas Kandagatla , Bartosz Golaszewski 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=6031; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=ooRoVE8/bILcm+MLgn4kEI6KarMtJzqF2BVfN0w3RDY=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpnDKtRQy4J5fNjL9C7g/gz3ZmuBJMROiFdrxY3 v94J/YWrleJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaZwyrQAKCRAFnS7L/zaE w3XZD/9nMPcaJOO3DgAcjOuqO4SoSzEObuA5F3zZ6iwQgAepGua6XninhG21RVCwJNDOess03is qTlxQJhg+v4Ub38b6nEwrQW5UdbxaVZvJ0XVBvFRyYSPL3TE+yjkKup3cAM5k03+sbHxkjCjrnr c4guJ5rdrQTFLlFVebgUDerCZhXd21mQuSVabqz1lMQ0XATLcbLLJ21unWb7H9NTnaU9lZWOqWk aJddqLfeEWkNo/E+UxEJGnflkzty/8JDudZRWxN1SzowdGiPe+sfTcsvMRcfJiDUeIM5vJQeOyV 4en3w6Vnu3NZKqUMJNk3+ThHReuHHUSjgrW3aNUTPr5hCN6+tZvvkJCaOjBdAFedBitTXD0eZmd njTJ3ziO3mXGxVhbyk31ZB8dq7KNwbB+AFyGtDsuoM27KxORtci64o169sRUS7qdCoD01PuWsnx 0rMXDRDeAl9xKQjLyRM06dt0gUYFfuO3ASR8UZXfWCFxbEp2l/3EKyHE+P2uCx8I7qCqYD917Qz yLqY0wHB10XGgyrgxs9nBFh72bsqVa5E5ZHprwRwrA2NPXhUfuC6wuaQSQfMrZmDrjLvWqS6lE+ MaIsutHxSEZE+7yNBQ+mga+sxwSOHku8VKDjRD4S5lsY11gxf1j+YNNh5SoA2u7z454SAP+Pixn vXWV6f6m04JPQPw== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjIzMDA5NCBTYWx0ZWRfXwf/SOfodAmsH lFXf0RhJxw0Ei0zXGVK9FTNKt/OiVPST5tzqLowE3BNo8SEzrcbIAGyuLM/ml50yje7QD9W7ZAz 7XPxUQUodh3Y705HpmJ8Az+Z8y5p4unwTlR+uOb0ZCCI/20IOWrJlW2bcxgTUv3/GxPdnno+Hzc X8QcaFcZcR4BIZUU4/3ZRMtXpIUMMLDkXn9WrcxaPybMIX2aLW9Zeh6uZBJH6VZWDg+kXrbOIbZ RmTsZh4juFYGpTT4pBFH7dUgqDev+Z4Hh9pWpSSOaGcI0phS+FM50Phr4jFyR6Tuc1X5Y/2OyjH /nFgX+2gjNeWikzJ00dwsxPEWJjl+KoJKV6IdNbnKD9ejaoDFpLQqW/ZnwLo2vKDxVmrxDXSBQv UjKVaehY4k9sVvVrdJJPvzwf5eUG8RmTbTVbM6PcHzyAurxmCVKAcFotTwgvyEgOtjOgBFnZsWV hgkTJJ8Hg75Qd1wglDg== X-Authority-Analysis: v=2.4 cv=UO/Q3Sfy c=1 sm=1 tr=0 ts=699c32b9 cx=c_pps a=hnmNkyzTK/kJ09Xio7VxxA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=EUspDBNiAAAA:8 a=pIqL1rwnkotILNDKPM8A:9 a=QEXdDO2ut3YA:10 a=PEH46H7Ffwr30OY-TuGO:22 X-Proofpoint-GUID: FlD4XUJQ2sj946oK13qA0V1w_QVojoGQ X-Proofpoint-ORIG-GUID: FlD4XUJQ2sj946oK13qA0V1w_QVojoGQ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-23_02,2026-02-20_04,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 spamscore=0 lowpriorityscore=0 adultscore=0 impostorscore=0 malwarescore=0 priorityscore=1501 bulkscore=0 phishscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2602230094 Data owned by the nvmem provider must not be part of the reference-counted struct nvmem_device. Ahead of protecting that data with SRCU, move it into a separate structure the address of which is stored in nvmem_device. Signed-off-by: Bartosz Golaszewski --- drivers/nvmem/core.c | 39 ++++++++++++++++++++++++++++----------- drivers/nvmem/internals.h | 14 +++++++++++--- 2 files changed, 39 insertions(+), 14 deletions(-) diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index 30aee8089f1dc65b1fa07dac8fb35e1dbbcd0ce7..9ff97330682975ef724b542fee6= 089fa7cd5414a 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_impl *impl =3D nvmem->impl; + + if (!impl->reg_read) return -EOPNOTSUPP; =20 - return nvmem->reg_read(nvmem->priv, offset, val, bytes); + return impl->reg_read(impl->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_impl *impl =3D nvmem->impl; int ret, written; =20 - if (!nvmem->reg_write) + if (!impl->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 impl->reg_write(impl->priv, offset, val, bytes); =20 ret =3D gpiod_set_value_cansleep(nvmem->wp_gpio, 1); if (ret) @@ -286,6 +289,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_impl *impl =3D nvmem->impl; + umode_t mode =3D 0400; =20 if (!nvmem->root_only) @@ -294,10 +299,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 (!impl->reg_write) mode &=3D ~0200; =20 - if (!nvmem->reg_read) + if (!impl->reg_read) mode &=3D ~0444; =20 return mode; @@ -328,6 +333,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_impl *impl =3D nvmem->impl; =20 /* * If the device has no .reg_write operation, do not allow @@ -336,7 +342,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 && !impl->reg_write) return 0; /* Attribute not visible */ =20 return attr->mode; @@ -537,6 +543,7 @@ static void nvmem_release(struct device *dev) =20 ida_free(&nvmem_ida, nvmem->id); gpiod_put(nvmem->wp_gpio); + kfree(nvmem->impl); kfree(nvmem); } =20 @@ -898,6 +905,7 @@ EXPORT_SYMBOL_GPL(nvmem_layout_unregister); struct nvmem_device *nvmem_register(const struct nvmem_config *config) { struct nvmem_device *nvmem; + struct nvmem_impl *impl; int rval; =20 if (!config->dev) @@ -910,8 +918,15 @@ struct nvmem_device *nvmem_register(const struct nvmem= _config *config) if (!nvmem) return ERR_PTR(-ENOMEM); =20 + impl =3D kzalloc_obj(*impl, GFP_KERNEL); + if (!impl) { + kfree(nvmem); + return ERR_PTR(-ENOMEM); + } + rval =3D ida_alloc(&nvmem_ida, GFP_KERNEL); if (rval < 0) { + kfree(impl); kfree(nvmem); return ERR_PTR(rval); } @@ -937,6 +952,11 @@ 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 + impl->priv =3D config->priv; + impl->reg_read =3D config->reg_read; + impl->reg_write =3D config->reg_write; + + nvmem->impl =3D impl; nvmem->owner =3D config->owner; if (!nvmem->owner && config->dev->driver) nvmem->owner =3D config->dev->driver->owner; @@ -944,10 +964,7 @@ struct nvmem_device *nvmem_register(const struct nvmem= _config *config) nvmem->word_size =3D config->word_size ?: 1; nvmem->size =3D config->size; 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) @@ -973,7 +990,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 || !impl->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..05197074799ff3e2a6720f65528= 78a9e1354a5c3 100644 --- a/drivers/nvmem/internals.h +++ b/drivers/nvmem/internals.h @@ -7,9 +7,20 @@ #include #include =20 +/* + * Holds data owned by the provider of the nvmem implementation. This goes + * away immediately the moment nvmem_unregister() is called. + */ +struct nvmem_impl { + nvmem_reg_read_t reg_read; + nvmem_reg_write_t reg_write; + void *priv; +}; + struct nvmem_device { struct module *owner; struct device dev; + struct nvmem_impl *impl; int stride; int word_size; int id; @@ -26,11 +37,8 @@ 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; - void *priv; bool sysfs_cells_populated; }; =20 --=20 2.47.3 From nobody Sat Apr 18 11:08:29 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 2FBC4361640 for ; Mon, 23 Feb 2026 10:58:03 +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=1771844284; cv=none; b=HNNwedve9dhHaF45uaPii/l4SEXAJVgpBv9ykszwxV3Nw5EaZjvwgLFPytra06vqYNH4EmgtqiSF0PrMHq1M1c/PcX9FmHSy1Gky6/uwNriQGpgj2p84QQ1fnGliVvjYhBYFFJ9Ho6A8S/0h0QOi79N/KxH0bZEGemuzczh++Fs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771844284; c=relaxed/simple; bh=zVasZljh3xnjiCR3b/CBSwA5o+gxDn0uCcEsXA6fYTM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=STSTPf5INhLflZzomqNdScS+Naz+iXscwVjBwiHrRpGBSCTaf1+GtXxr4260qJshgHosFcuV7AxFpTClyKZMsHf3nAUVbvvyKR1Um+LcFkW1c2Dx9F6zvMhLoVm8EYSae7JvaY1Es/sPbMQt3rKeVACBnbO9cTQ1cCBqZtCQZJ8= 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=jkRYZdRL; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=KZoND2k2; 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="jkRYZdRL"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="KZoND2k2" Received: from pps.filterd (m0279863.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 61N9s4DO2001244 for ; Mon, 23 Feb 2026 10:58:02 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= 1NEpixV2Iw6Z3EhLtd6F7csj4AhOgi1LKFmxR1LHcUo=; b=jkRYZdRLTFxpAmQ9 SfR2WQR1L5azqThsKMfsLRtGG0BagStFQixWjUyJsW0qfZAYq7jaytnLPYZxxaYS S/74RIm54nXTGPUAN2+B+sn3345rREe99Bss+xGoWZvEYPKBOIdykWqd7HwjKe8K Q3qrxbM0K5nrT5KBC/2QMC/dx4TweCxbmmJOXkZsrEeLT5fyMXzvNFwty420qxuU 7isl4fn97YXCKIKMq+hURgAtrcS30gxnt4+esxxIw2vOov3UUD68NJTZDODtGcik IuTSvnMJ/gT4cMWNjuaqWlt6PiWfgIKuLvrFYMKQTZT0c1ynxAl38cjT+TzMmDWK SuqhTg== Received: from mail-qk1-f199.google.com (mail-qk1-f199.google.com [209.85.222.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cf5wavfbc-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 23 Feb 2026 10:58:02 +0000 (GMT) Received: by mail-qk1-f199.google.com with SMTP id af79cd13be357-8cb5359e9d3so4263409685a.2 for ; Mon, 23 Feb 2026 02:58:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1771844281; x=1772449081; 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=1NEpixV2Iw6Z3EhLtd6F7csj4AhOgi1LKFmxR1LHcUo=; b=KZoND2k2zd/6rJZobw7Rw3BLqgbToM9lYHURczU33v/joVmOq2dTAtkAO2aED2IiRj lBQ/6uIeY1233GATo+zy6Nrbrou6c5ofgRMXAWGL0VkdjBrudXfKBEHZj1FL/KWIUqGN 09hbx9/k+wKAEBSdg4lijyWuczf2Gi/9i232ZASg8LISMGv4iVBZDtWwjPxMG0cpJmqU HXiQomcxTfK0n4J97dYw/UKfXOohnLISzaaXk0CMjT6xW0ffHAWzwHB/lxts6OzGUS1Q d0EiHfiHLCLP3vSxiEUb/HVM2IZyYwgatYjChOQAVYT8lGDiOcF/dUqwNvBVCg6Udy1a TYYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771844281; x=1772449081; 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=1NEpixV2Iw6Z3EhLtd6F7csj4AhOgi1LKFmxR1LHcUo=; b=L1cX/XeGFlw/jW9fQXI7vblsMGb5kumIeSSHK8ZLR/tGmdK/Z16QuoOPMEtkrVJzuG RNa/3SZnqJ0eOMoRrN5eUm9veFROO9piNHCz5o6g4P8JrU1Ali/S7mztm3MFe7J8XZRY k//f7Cz1b0gUpbnoaUzlLzpMBk+1jU8tQorEWf3uKF2EOTNc4hrQ4ZgZEzaHsktrEU4x TF75Hle8W4RzJ7YxV+a5VVqOwTckWF/5iAs1r2x5zHy2bqSAjnpWxwsJ1jygKCuhGk88 2r2MBpuA23R+eRBVA+CXsMABY2eyO7O92Aogus3sowWAGjZw6mCIl6n2XZti/hN0G01t 9K0w== X-Gm-Message-State: AOJu0YxF1nCFz8Vj8d002JSD7M7XkMosyQffDMNcRhsDRzXwzTaJPJ3P gunjuc639E3KWlI4BRPYysGM+o0QTBgCtLYksAIRM9Ernk9zCOPgPTUDxC+P7e1wL53eUXD65pO dttyGGMyxCcU32/H0ZWKlv0zbfpoXA7Wg+snv+y1nALQ4XXxwgPVETjgTh0bnJOU8qw7f5ja5gJ 0= X-Gm-Gg: AZuq6aISLTEoZt5ZYkKboPqrdxTxygWGV+OBE/WA6jrFBx9ZqS15JCEfMu/pwNkUBm9 klt4T58y15yKxl7ZmyH2TncNuwXhef46Rc34WszrDvQGmS/4VpfTYMMwZU77WoRfyVc6UlbC86Z IBigC7w1KFxUQkExRbovpxTvmCN+EPK0VY8M2YjZ/j6xNqiZyb1GarvxkPGPB9eYxVqWuM5J0e/ y8WSea+hUUU7+tnDNJTMjgcq1Ac+22R+cvYBrnzOpoPixQUQbTuk0gD7q8hMEYL+tdcYf0U4+Gt tQyvpG1rkbx6NOcvobjG7mFYcylPaZVBsMiGiSc60GG/9gMaTMtakhZp4MCp9FkkP1BngnzZdtz 4kQihH73b8/YNzP3leEaWf4nEnEfb4uVrcKkFHkQKXHhZDUJvrkZQ X-Received: by 2002:a05:620a:3943:b0:8b2:2066:ffca with SMTP id af79cd13be357-8cb8cab0d39mr888794185a.82.1771844281337; Mon, 23 Feb 2026 02:58:01 -0800 (PST) X-Received: by 2002:a05:620a:3943:b0:8b2:2066:ffca with SMTP id af79cd13be357-8cb8cab0d39mr888792685a.82.1771844280881; Mon, 23 Feb 2026 02:58:00 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:bd71:422c:5e83:8b37]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43970c00c18sm18120002f8f.14.2026.02.23.02.58.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Feb 2026 02:58:00 -0800 (PST) From: Bartosz Golaszewski Date: Mon, 23 Feb 2026 11:57:08 +0100 Subject: [PATCH v2 7/7] nvmem: synchronize nvmem device unregistering 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: <20260223-nvmem-unbind-v2-7-0df33a933dca@oss.qualcomm.com> References: <20260223-nvmem-unbind-v2-0-0df33a933dca@oss.qualcomm.com> In-Reply-To: <20260223-nvmem-unbind-v2-0-0df33a933dca@oss.qualcomm.com> To: Srinivas Kandagatla , Bartosz Golaszewski 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=10275; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=zVasZljh3xnjiCR3b/CBSwA5o+gxDn0uCcEsXA6fYTM=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpnDKu55K0CBFP7YdFwNXYyVZlptvkOMJfmLEkn G7fIhOG71KJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaZwyrgAKCRAFnS7L/zaE w5EgD/9zRULbDPORWxSqPirTumCsUN4T8j1S96kJZxcu29+2HfYPZhaNfwxBxxJDj09gNDbpel/ eiZ8xGIRjpLbbktBVoV76fxSIQKliVSK7aQVS94+mr8aSjriI0D2W9JoIcFqnqVfMljguS0LWqH bWHT03BfuBgAyA6MsQHAMvdoepr0EePhMoMp8q0tNFFDueLqpvsaUTA/FjLm+jaAJ77G5doNVg+ VRD/0kf2B/mN6K8G+o1C667MvMmkRcfva8rhONfT278I7SXHgy0F5fe1tfFbtu830pnS4ISkMPc CORYaOziX9IXQyTpEJQQrfu1BxHDkIns9NSWCyqwx3ZUgR3mJyWoSH6wpODV+vRXphhHOx9MD7o j9I0BEHoNxx8vYtEauEoH1E31y8WXVLbB34w00/P/agCX+5T5eGvyhhouwertp4P6FFF6LfOVk9 XR7+NRuoFHAcMeluHZDxxR3+0X3qjhpIYAbRJhb4bgsGe7BnRH2JhZHwUUBEOX3olTGu1iiwf3d a//LBVbqnjRH6dWPV3cAzOSytcGV3uTeReyM/bhqW/ZWBVZd8wIuLbTKdkAKSZp8HVnnRgMkbHe srtn+ypob82RsGtwAUDNsqScyFiLejCWwyGABhA1GXf+yhc69g27MYqTn2H2oRjXyZLi68S7ELQ HEqZlc5dwbA87xw== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Authority-Analysis: v=2.4 cv=KJVXzVFo c=1 sm=1 tr=0 ts=699c32ba cx=c_pps a=HLyN3IcIa5EE8TELMZ618Q==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yOCtJkima9RkubShWh1s:22 a=EUspDBNiAAAA:8 a=ZcM4VTEW66qICm1TBvkA:9 a=QEXdDO2ut3YA:10 a=bTQJ7kPSJx9SKPbeHEYW:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjIzMDA5NCBTYWx0ZWRfXyO4wRmElutOa jCb3Zex/1cxeKC/XiZr7a2bTRRz5DhTgP8F58pCNny0ELEszjD5pFcQywX9MLGFinDVLUChZxVs 169IQtyrrv+hhB4+XIVZ3g96oZbQ/RpH/LnwQBEnxC3zKko6oIWaBS9gqKG3lVJFElsqjbxWRCL taymJCzX/HdmcZSVi423ScD+j7KC+4+gZiTn5Z4FFyPTuqYEpMYCyDtPxsLq5ZqKHbja2YShsa7 nGdhQyaWt/S3yn+nyZVen1I0JQznvGDveheGooam3rvsW0s5Byj7AT/h/3ot85vIXXa+e4Z/rUy WE84xSTkI3aaIhLGtfvDvOVrfNmALVfPMumOPlPT34gQl0YVcBsuS/3KRLeTcCp+JUN9Bs9VwmO Gt1y0BcEbA4p+QjAa4Zeulooxb/YpUWqAjRMLOOweo/W0QE3GJwa1hPe+4feqF8tuwx7Uu2Tl9V Wt99yU9La0Lwz/F1ALA== X-Proofpoint-ORIG-GUID: Q2TNlLvQHJlD28Q8WrSFy-D-cCLai1qW X-Proofpoint-GUID: Q2TNlLvQHJlD28Q8WrSFy-D-cCLai1qW X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-23_02,2026-02-20_04,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 phishscore=0 bulkscore=0 lowpriorityscore=0 priorityscore=1501 clxscore=1015 spamscore=0 malwarescore=0 adultscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2602230094 With the provider-owned data split out into a separate structure, we can now protect it with SRCU. Protect all dereferences of nvmem->impl 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. The change has the added benefit of dropping the - now redundant - reference counting with kref. We are left with a single release() function depending on the kobject reference counting provided by struct device. 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 | 140 ++++++++++++++++++++++++++----------------= ---- drivers/nvmem/internals.h | 5 +- 2 files changed, 82 insertions(+), 63 deletions(-) diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index 9ff97330682975ef724b542fee6089fa7cd5414a..f80a1ec501d574cb0c3114c6341= fd0f05d00a543 100644 --- a/drivers/nvmem/core.c +++ b/drivers/nvmem/core.c @@ -12,7 +12,6 @@ #include #include #include -#include #include #include #include @@ -57,7 +56,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_impl *impl =3D nvmem->impl; + struct nvmem_impl *impl; + + guard(srcu)(&nvmem->srcu); + impl =3D rcu_dereference(nvmem->impl); + if (!impl) + return -ENODEV; =20 if (!impl->reg_read) return -EOPNOTSUPP; @@ -68,9 +72,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_impl *impl =3D nvmem->impl; + struct nvmem_impl *impl; int ret, written; =20 + guard(srcu)(&nvmem->srcu); + impl =3D rcu_dereference(nvmem->impl); + if (!impl) + return -ENODEV; + if (!impl->reg_write) return -EOPNOTSUPP; =20 @@ -289,10 +298,14 @@ 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_impl *impl =3D nvmem->impl; - + struct nvmem_impl *impl; umode_t mode =3D 0400; =20 + guard(srcu)(&nvmem->srcu); + impl =3D rcu_dereference(nvmem->impl); + if (!impl) + return 0; + if (!nvmem->root_only) mode |=3D 0044; =20 @@ -333,7 +346,12 @@ static umode_t nvmem_attr_is_visible(struct kobject *k= obj, { struct device *dev =3D kobj_to_dev(kobj); struct nvmem_device *nvmem =3D to_nvmem_device(dev); - struct nvmem_impl *impl =3D nvmem->impl; + struct nvmem_impl *impl; + + guard(srcu)(&nvmem->srcu); + impl =3D rcu_dereference(nvmem->impl); + if (!impl) + return 0; =20 /* * If the device has no .reg_write operation, do not allow @@ -460,10 +478,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 @@ -530,31 +547,12 @@ static int nvmem_sysfs_setup_compat(struct nvmem_devi= ce *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 #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->impl); - 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); @@ -573,6 +571,26 @@ 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_sysfs_remove_compat(nvmem); + nvmem_device_remove_all_cells(nvmem); + ida_free(&nvmem_ida, nvmem->id); + cleanup_srcu_struct(&nvmem->srcu); + 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) @@ -948,7 +966,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 @@ -956,7 +973,12 @@ struct nvmem_device *nvmem_register(const struct nvmem= _config *config) impl->reg_read =3D config->reg_read; impl->reg_write =3D config->reg_write; =20 - nvmem->impl =3D impl; + rval =3D init_srcu_struct(&nvmem->srcu); + if (rval) + goto err_put_device; + + rcu_assign_pointer(nvmem->impl, impl); + nvmem->owner =3D config->owner; if (!nvmem->owner && config->dev->driver) nvmem->owner =3D config->dev->driver->owner; @@ -1011,24 +1033,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_put_device; } =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_put_device; } =20 rval =3D nvmem_add_cells_from_fixed_layout(nvmem); if (rval) - goto err_remove_cells; + goto err_put_device; =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_put_device; =20 rval =3D nvmem_populate_layout(nvmem); if (rval) @@ -1050,33 +1072,14 @@ struct nvmem_device *nvmem_register(const struct nv= mem_config *config) #endif err_remove_dev: device_del(&nvmem->dev); -err_remove_cells: - nvmem_device_remove_all_cells(nvmem); - if (config->compat) - nvmem_sysfs_remove_compat(nvmem, config); err_put_device: put_device(&nvmem->dev); + kfree(impl); =20 return ERR_PTR(rval); } 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); - - if (nvmem->flags & FLAG_COMPAT) - device_remove_bin_file(nvmem->base_dev, &nvmem->eeprom); - - nvmem_device_remove_all_cells(nvmem); - nvmem_destroy_layout(nvmem); - device_unregister(&nvmem->dev); -} - /** * nvmem_unregister() - Unregister previously registered nvmem device * @@ -1084,8 +1087,17 @@ static void nvmem_device_release(struct kref *kref) */ void nvmem_unregister(struct nvmem_device *nvmem) { - if (nvmem) - kref_put(&nvmem->refcnt, nvmem_device_release); + struct nvmem_impl *impl; + + blocking_notifier_call_chain(&nvmem_notifier, NVMEM_REMOVE, nvmem); + + impl =3D rcu_replace_pointer(nvmem->impl, NULL, true); + synchronize_srcu(&nvmem->srcu); + + nvmem_destroy_layout(nvmem); + kfree(impl); + + device_unregister(&nvmem->dev); } EXPORT_SYMBOL_GPL(nvmem_unregister); =20 @@ -1146,8 +1158,6 @@ static struct nvmem_device *__nvmem_device_get(void *= data, return ERR_PTR(-EINVAL); } =20 - kref_get(&nvmem->refcnt); - return nvmem; } =20 @@ -1263,9 +1273,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 @@ -1652,6 +1661,15 @@ static int __nvmem_cell_read(struct nvmem_device *nv= mem, { int rc; =20 + /* + * Take the SRCU read lock earlier. It will be taken again in + * nvmem_reg_read() but that's alright, they can be nested. If + * nvmem_reg_read() returns -ENODEV, we'll return right way. If it + * succeeds, we need to stay within the SRCU read-critical section + * until we're done calling cell->read_post_process(). + */ + guard(srcu)(&nvmem->srcu); + rc =3D nvmem_reg_read(nvmem, cell->offset, buf, cell->raw_len); =20 if (rc) diff --git a/drivers/nvmem/internals.h b/drivers/nvmem/internals.h index 05197074799ff3e2a6720f6552878a9e1354a5c3..5afb1297a93a38e399085391130= c4df99f64af16 100644 --- a/drivers/nvmem/internals.h +++ b/drivers/nvmem/internals.h @@ -6,6 +6,7 @@ #include #include #include +#include =20 /* * Holds data owned by the provider of the nvmem implementation. This goes @@ -20,11 +21,11 @@ struct nvmem_impl { struct nvmem_device { struct module *owner; struct device dev; - struct nvmem_impl *impl; + struct nvmem_impl __rcu *impl; + struct srcu_struct srcu; int stride; int word_size; int id; - struct kref refcnt; size_t size; bool read_only; bool root_only; --=20 2.47.3