From nobody Mon Feb 9 00:42:48 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 B61263644C8 for ; Fri, 16 Jan 2026 11:01:28 +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=1768561293; cv=none; b=r2RHdcIK/3jCdJ2zmJAy7cpkTjgM8o31V4nomUw2bwoXS4WC09DF1Pd8ciq8JFXQDADPrbRwC9mAJdzkrP8w46aAlEhFWfO0aFXYJ94I6JunUBk05l/s7UROkGSunWDarPWQCOXzI4/2od4PtOqV3RbayhEQkBkpA0I378/SJAw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768561293; c=relaxed/simple; bh=nhsVq7ucNcJyu7YlIpffF8eK9nbGHQ38DrSujIdQy2I=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Qc/NEHahQwyvesmm9Y8MNAoXu72uXoriBXhvF8iQyxnRuo5vGeMDEiXWa4g2Kx0wM8k65b8wqv53qmeRhUxtLY3usYOgUOhFNA1LP+dyroucUqalbrdchFCmQ3IUvJNFi+9/1KP4+XTEId+NAI/0yaerrkOMWsu5/E//neYH5L8= 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=TlxqgRVo; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=REOkHrxe; 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="TlxqgRVo"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="REOkHrxe" Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 60G8R8or1240890 for ; Fri, 16 Jan 2026 11:01:28 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=TlxqgRVo/t3CJtoX irfucJinQL98Jk177o/+HC6/vdWZEKH+RFDIf7h9iaaNuKnax2PHsGb8LvKCxlvV lSejfZv6vxsk7e8c+45Pth/j9iK3l/65cEHO9jwTRPDzBsDjRmjaXKdWJx/FA+w8 3ONXjtSDgDbOC5+Ti2tISKAOdo3cC5545vDqoOj5g6v9YJ4sEWKwuAfhZHdsm0gn Mt9QFTXUaZ/TyJpsLuqDPtYF8rmw11s5J64JHcFPYlgOgxmryuRsodPVhfaPrrEB Z8HwsAqvPgEDlfH4p/n1GWT790RFCI/3RHFx4RI1z3Zdpf56klhpBtuFaK8m978X FKJ+yA== Received: from mail-ua1-f71.google.com (mail-ua1-f71.google.com [209.85.222.71]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4bq96ssvdu-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 16 Jan 2026 11:01:28 +0000 (GMT) Received: by mail-ua1-f71.google.com with SMTP id a1e0cc1a2514c-9431a97992aso4950665241.1 for ; Fri, 16 Jan 2026 03:01:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1768561287; x=1769166087; 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=REOkHrxeI29Ro0XB+dUgGX69C+ep+dhg33cYwP833YDZOMkgFDOWEoE1DJippl8Fkl aOLXKwE1MDtCyILKFwELn/IZLtvx73PKZFpinNu+7e8QrOqdag7ER4kd7cJTezqFYWQT MreO0KlVtj4WAzgUvRH0rzZM/02OF6+IsUWfB88MLopUeyT3gv/IVes9cr7dl0GK80xc ZoXyxFv7e4iL1SHCj0sEnVZtQU/3rmcsBDDbil2z/EWTsaPGaLXjc23zevPqZs2smr7C 6UwPJBlnq3C7U6Qtybk8sR7TFFdFHZeYKrU5JB1D/rRDyVROaKwnwo801PHvPbyd3sx0 lQtA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768561287; x=1769166087; 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=P9ITaCKCDgjjn+fdndWUM82KZ7/sKM7iNOWQ4huFZD8RxckNl/6SYqu3aNnpGn9FnP K9NWYwkAXdT0E/4IEVyh8QGqyP+ZEUU23GWd0aYw7Auw5t8M2jX+aZ8BqxoQt9MpDMLX ooBFzPfFolXz292Vq/OyjRwG+mAd46unFD1D86VCtAa6zT6UcDYFX/Utks3ll+VPhYns AjkJnqjUtwqx7nLZHkbRduo5RVK3hH4qyWoQShM/xBAltNinr4NlWyMRrnm0fhYVLmOL m2XGVFQ5JqPaw3s+6NRsmEWF2YXQ88nrUoGTHbeKqNGJxFdcttOsImjg/0LyLhvydyWK 0vug== X-Gm-Message-State: AOJu0YwkY+2c5UQxwLk2+SvZJSF3tCaCkdIZJKj+q4fzoZaZguC1oGHd 7sc+jIEWa1ai/mWfH0+UIKp6dywsOZq/s2qqkURRa4Sz9vNkjZAx3mJ8g9YpeSfSoYAO3TrccAk pf37jEF3F8QKYdbHt7m7xC5sUt7lUfcbyctkGNJGcOfZ2ElDqLT6oiD4+2nyKQJPeXa8= X-Gm-Gg: AY/fxX4KR2HRkX9uWTPv+qxfU4mngaCuHt+xTeyPms+SH6VmXGV4IbkKyR3XU8h3eqZ gDtx0jO9R4Vor0DaArsOITFTW8/UL8oBnbmPSjbVQ0b03Ic3qf8YdSRmPmUb3BDNHmfy+IJmWdz f00Pcluna35lyi9oi11bv87LkX0wjUSAUZkk9GGQrOmhI4hz0NpoHdGseX7gN+9ELOEbRPVugRY AeZNQvdXvIFlBE4VOoEfZ9tKhbo28YvlfuBg8L+VrziAROwvK9VqxPgl89GVG1Jj+M4pNzm9C+s cqZ0W2u9caxjXwsPoFdGP5hEmmLkUsitfLKEgjk8zNrueDsX0VsV76n5xwj7Aoz5TwBHU4Gxrkp iOMsiqde+6bXu9cQciwD12vf9lq3oSkJ52rlgvwk= X-Received: by 2002:a05:6102:374c:b0:5ef:255a:22f1 with SMTP id ada2fe7eead31-5f1a53de7afmr937702137.17.1768561286877; Fri, 16 Jan 2026 03:01:26 -0800 (PST) X-Received: by 2002:a05:6102:374c:b0:5ef:255a:22f1 with SMTP id ada2fe7eead31-5f1a53de7afmr937684137.17.1768561286355; Fri, 16 Jan 2026 03:01:26 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:d1c:5bb0:db13:fc7d]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-47f4289b789sm93512975e9.1.2026.01.16.03.01.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 16 Jan 2026 03:01:25 -0800 (PST) From: Bartosz Golaszewski Date: Fri, 16 Jan 2026 12:01:08 +0100 Subject: [PATCH 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: <20260116-nvmem-unbind-v1-1-7bb401ab19a8@oss.qualcomm.com> References: <20260116-nvmem-unbind-v1-0-7bb401ab19a8@oss.qualcomm.com> In-Reply-To: <20260116-nvmem-unbind-v1-0-7bb401ab19a8@oss.qualcomm.com> To: Srinivas Kandagatla , Bartosz Golaszewski Cc: linux-kernel@vger.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/NoTDAcsmYgBpahp8mAFMVGTTH+amZSLfFSmLxuLSdIquLMeUy 3wZZeqU/WeJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaWoafAAKCRAFnS7L/zaE w77MEACAVgNLBMOl3OdcmqH/6+dRbEoX+11SDGSyW8z7XWsNQWd8ErcSNigIijuIgJrCjNmw66i dStyRyiSJGfxfe1vypjdnV2Eww/9Ig7ctL9CwgcIOVxueDm2V1Zt9bAddat/TLMSrAlHKu79bSc 1+JtH6Ab/mp64Whl2K2GzGj6fnHCdJ4mY+J9NNXQrxAlj13Q8ZFiRgxs3UwFth3UQINw1D+7rBX 5NY0lbX8J7s51ZamHn7TSGGxAegyI9LE2vwhUIwjq/tFWZQUbnpmphABHKlW7Yv/4eWY04Czl5v +etaEcJGv/5YXPUZLe3QIudrYzP4Dm/7y0fOMobaaW3A4EOXzDjheUOic08xXpBGxVLKiVqmIyM /SMhhpaKJZ5t4xXW3oanCzRHPCCQUeiXbqTFBkAXLzxjhSDuXEPy3LVoNxIMyiN22zlnxO31jby th78RY1SFFRzrEaHUP5PaOFK2+RJSwf9gZCdx0fwwrh6xtuJORuT01bePyUMdUVkTog6z938xIE BPML6bADVKW+clDGofHGjJxNxcf7XnuXSdPGaiHrYcmXCm8DPhsiL2CJ8Jc8NUcQ6keo7WR74uc 8GMf3n2qpwnOFvx6Ud50cnTd44i665TWnHUA0IAOCe5VvqR6U3RY/fGTjuUk5aSQkWXlyz7moRr qLEB2w7RRQP6zfQ== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-ORIG-GUID: pbbVMqraDlb9FRYPKhz_4aYY9Sjnjkwq X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE2MDA4MCBTYWx0ZWRfX+3KAJ+CxRQkJ Kst0LQIUOMoHlxfz29lOy7zqqHR6XEaS5e/mplnIiUeH673IHmXkHwCY5bv4cgd4c9rr4rVHkdF 2LzVtoP2OyM6hDWb7WPgDyKYJrMGMxE5+n6QpO6gTt9BAgpTdMmbAHk9PWHYiXVins1NHb424Ae CXuFMnOPDmZqVABqF95lIo8BCf1OMHrGIVPuTJFdhGwnjGNe++GGM9uIY5vpRYjtWO94K8zSttT sylUraJTanQL5F2GpbGD32J1tfsEIv3CMq+E/JrtWuuGZ0ln1S7MkXOMGcsWdrHtadkhUljS/EP Vll99F+yVx+1b4kE79B5w96PfVpSOYynawDGyIczqYr3BicE+KurdyfDDRUIPqkkhG9oD2PV/hD w5XWT2f8nhZWrp/i/eGvkYmEp++L6snLFvLWj8fSTVqp3bFNA8arpeKwytYbm+2okxo8PSAjVKL 7aBGDRfI0NsdbcAnH2Q== X-Proofpoint-GUID: pbbVMqraDlb9FRYPKhz_4aYY9Sjnjkwq X-Authority-Analysis: v=2.4 cv=M9tA6iws c=1 sm=1 tr=0 ts=696a1a88 cx=c_pps a=KB4UBwrhAZV1kjiGHFQexw==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=stNq5eDsATFt7Ar7Hy4A:9 a=QEXdDO2ut3YA:10 a=o1xkdb1NAhiiM49bd1HK:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-16_03,2026-01-15_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 clxscore=1015 malwarescore=0 bulkscore=0 impostorscore=0 lowpriorityscore=0 adultscore=0 spamscore=0 phishscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2601160080 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 Mon Feb 9 00:42:48 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 56180363C5F for ; Fri, 16 Jan 2026 11:01:31 +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=1768561293; cv=none; b=CTBLPvXOETcsgCyMg0OJIdmYooyOh0aYkSEb1s2e6NStxzMi45V1OUh1eDQViYIx1sQTunu9o/Z6V5W096bGIBfHx+anwvcEtFgCMLQe6K/jj7dEdwxUzA6NDPE3u+YYO2lOS2ifEh2r56F9qNbtkBctGollsTkZdSi4o35lSc0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768561293; c=relaxed/simple; bh=d1cx1Jd/4DHrpoEbJF7oXxqIncKb9FPyclX3wr8K1fE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JlPpWtwlXcuk7PFrgUx9DXDAo3JHh5zybrkkJaTlIkMmIzZbPYeOE3j2D4hZl3JuA2IFn4KuFTxqgP8zkdITlnr6tLxxn8ZGaiEbRhP8HKx8tjB41gR+N6t4+eoVt8rUzXPaBXdhWKWDZwdldGCEqgZpmuj+3IZdZShxKr6scqA= 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=ERsjYknw; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=asnCi+EG; 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="ERsjYknw"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="asnCi+EG" Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 60G86lWK3714357 for ; Fri, 16 Jan 2026 11:01:29 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= CqdVwr7PjUV4mNOUzpcKLYJ1BwcKqgtV63blFChTZOs=; b=ERsjYknw+yyGTyvo Y2AiTPOJYIEGDpuc9QLcT201nuzTJiNJok8TN23CeZdLcuzfNhQvy+ZsXkqJUV6W LRQ4cW9EvoQ9gHFJfz9D10W4FNYkwE5ETbY+EdIkKHplCYwrHELZM1e1/b+kXqKD qM6XV2ThN+vzUSvrrqAeZGm2Smooimy04yfaIl41pAXSgFBh521IEoah1FDo7o8f K4Oqzo5daA3OWg4pcA7QcwDUEgIx4GffO2TdvkoalEjTczhX1/b3CJyQewmZrzE0 75oQPiVfL5u71C3TzRW2cFC4iMPtX7b0CQJKJf5QFmzxyaKWiRwjNirdCUG2p0sh JTtT9A== Received: from mail-qv1-f70.google.com (mail-qv1-f70.google.com [209.85.219.70]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4bq96p9vsm-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 16 Jan 2026 11:01:29 +0000 (GMT) Received: by mail-qv1-f70.google.com with SMTP id 6a1803df08f44-88fcbe2e351so74008316d6.1 for ; Fri, 16 Jan 2026 03:01:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1768561288; x=1769166088; 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=CqdVwr7PjUV4mNOUzpcKLYJ1BwcKqgtV63blFChTZOs=; b=asnCi+EGxJOeENHCULDt1+Er48reU+QBakTL67Fm/EyYlRLXKQzjnPUhJabHdST952 5dJnmUd2Qn2WK1ltGWT6Bl31oxce0MQHmql7nmFWqt0YiAINK6DRN2fIArvWHqNpb3os WYwvRgg2H5O8/Ys8Brk0JfoSndS12GrtG+z4fGbuGAm6XL+LExmLmZm2zpvakmNz995K +BGnFpTGSWV/NhVq8cks2pd7+mg6SV5tGAzBRT2TDDJnwY4u43Dbn1/dge44KZjjzLob 7Vql3aZMGhXTGAHiuTvcs0rJRJ3KnBxMRJstWSopTdIX0QgZUdn7Dy2YMnoYizxu6Nwn Yx8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768561288; x=1769166088; 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=CqdVwr7PjUV4mNOUzpcKLYJ1BwcKqgtV63blFChTZOs=; b=gDxiZ8M5c/MF96Ooocts8nxJWVCTMJfoIly2wK6iYghuQ78NgXAO30J8jAO26/Ytdi pDEACzzvujtXTe61cYkbel3x8OvFGnqxzDf8tFjkGi2xQ5wy/nvjzd1jap88hLw9A98L Houu1rjHSU3/PGXDffRy2+dhdDZte/QZsi4Ezw9WR8yYj+P/+Wj455A9WoBNqSLZy/UM ABOU0rwcs3XExCloBs1E7PqF6psiiDojHiAhfyUi6d3qNmNxw4X4VIEjiYWPOO6jGRlv 0x2freGy5tEPEFsg1G5uyVs98t5tQgflRi2zpMn3zXwrZsFqEWzPqzmcEJZHHAAvOJ+5 tpGw== X-Gm-Message-State: AOJu0YwyPx3tk3foBoqMtT8sH3NRSVgDoEEUvh11gnhp6FXMLIaI9Hjp q7PilDSbK7N5hks4v4BvEQvwFaEqTPAX1+faX29iMurWwLlmpDDCXIZEmlDwXT6g4Fvg3tK/PRQ JEbR0PDPT9J5ghbAWlxmEUPYm98ddsHlQlbxOWw4wfX4Kk9phCU7nWOdk+OLZuKDMq3s= X-Gm-Gg: AY/fxX7PK35JQN8KOYJGy4eHX+nYfN5YgEQlHKgtI5Fp5rFpSULtYnSv9BRRD15ZRuD Qnz1LNVbJWP56Az0DqBcEavOQAdgKU/3Z6Umfmnxg3XoS8j6oLdEhWsgtdbGcX4Iy+9+uJ030r2 xgI7lRyxz2UOUnBh533mczpZLO57d2POxyWvv7lngoI0VS/sxhEQ0XYiaztdAeE41uT5VspAlca IK1IUeOR5YDE+QH8sx9g2/L2lWHIZEfLLUSI7SSUhrMlL3FhDhDyIcrJ360F07HSjlexvMhLtRj 8XJkIo//eAZwoZK+rK1jWkGJMtlNlYLE5zRyf+XPYChT4FqahqaWJWazQniQ81osDVyTAm+TxtW aJ8Yk6ZaWYkThwRaLevdUiJPYYj9kTmgzsd1i+EY= X-Received: by 2002:a05:620a:254d:b0:8b2:63ae:6343 with SMTP id af79cd13be357-8c5919e232fmr843688185a.28.1768561287877; Fri, 16 Jan 2026 03:01:27 -0800 (PST) X-Received: by 2002:a05:620a:254d:b0:8b2:63ae:6343 with SMTP id af79cd13be357-8c5919e232fmr843680485a.28.1768561287263; Fri, 16 Jan 2026 03:01:27 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:d1c:5bb0:db13:fc7d]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-47f4289b789sm93512975e9.1.2026.01.16.03.01.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 16 Jan 2026 03:01:26 -0800 (PST) From: Bartosz Golaszewski Date: Fri, 16 Jan 2026 12:01:09 +0100 Subject: [PATCH 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: <20260116-nvmem-unbind-v1-2-7bb401ab19a8@oss.qualcomm.com> References: <20260116-nvmem-unbind-v1-0-7bb401ab19a8@oss.qualcomm.com> In-Reply-To: <20260116-nvmem-unbind-v1-0-7bb401ab19a8@oss.qualcomm.com> To: Srinivas Kandagatla , Bartosz Golaszewski Cc: linux-kernel@vger.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=d1cx1Jd/4DHrpoEbJF7oXxqIncKb9FPyclX3wr8K1fE=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpahp9RfFX2HQ+p0cu8IUBx3E8y81DQdNDGnkj8 5IOUhkd5HiJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaWoafQAKCRAFnS7L/zaE w33oEACK2JwBfzKxUditM2zqg/b8UYy+l/Jg4RHjjE5D8Ys/TGl3pxNMPHmkmuxYTNsrAtVbdbg K2Gnc+5BsQpNeJb5mVuUE2qjQ1lVVNR1jCnMJcbv2EiEEnS+6u8BuhjW4dS9qWeDBDon+fS8Z3C 0qfQATooWDD49y5jNriWh/VE4Ke1WOKGucz+79VM7b/kyE4a8bb4j2I71auog3c9U3hgDKwxXD0 HPNdjSap0sQjO4APSdobI1+7K42FBr7+k3eCHwO0l6DLowOxDhm1RSya6dHMj5STCWASANu36rr y5k7V8sgjyOjmjqTRjdMMvKQEfsqSMFMYDZIW35HFTXDMlr8YUvxgOwcSNDi7tMlRRgzZ1Nws7K K5jJ1Vw75QHSoRTHql/f8xe3y9bHTAzVjJSBo32FDIla7dV/HkBwoKcvbcSiTyrVsiL5CkZPmYw lgNtNwB2P67I01QYIxMPS8Jy14Lgl79ShU8vCXsX/V5RATPEbkEMElnwzYT7mGqgj9pHXSJMgkl YFAGJrDn6jzZJfpmM1CD/A/xgKWGcXAtYuabmxwHbJcU0yDTY0YBFLukZIAoTRA6XEk1W+pG1C1 cpctEOhcP4WOJaSeAAPpbDSTcVT3UK8kFjjBj6X3Q/t2M9Zc5JK3h/Ohxwmoec0G3JeUxqjp1GN BQ6qb7dzde55xuw== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE2MDA4MCBTYWx0ZWRfXwz53aELl+QtR SyUG6bwVzig6mXx1kNORpEKc5AGXOLHMRdwJJfmk9yhZQ0g3pXgu9f+tz96fBOqZ7VjP7SC2mug dhVVKzdu5bCH+bZTuscI3Ei8BBH/6DLARNSGzLGn1jcfkLZwpgn+GTeFK1/m72fwPQMnIOdm2h9 qDpMz2GTOBA00a24xu8BCifwSg3im7WVU8bC2Y2KzMufFVbmpD7HtHpCQPZsldQxqvvfQA8EqcX jmP36oIkiY+pE7nF6dEnfWqule1loHdVGHOwX8C27E5AIwlTdPXOhLgrpPtyY2d2r0vchnmz33l jIJs55SSI8zjo6ckw00KPHcxlKMD4Um0gGjRROKr638HRbm77iXf6oLoayxiVoF5+YS/BXve+3r QyzKy8JXgH68qk3DUU4V8puQKCJWLhkS6IlSmzxhNm4vGw7gm9GFojp9id+dlZ+k3Go/I20+VQP DN7qN3mtWZX4fgpwnvQ== X-Authority-Analysis: v=2.4 cv=M7ZA6iws c=1 sm=1 tr=0 ts=696a1a89 cx=c_pps a=oc9J++0uMp73DTRD5QyR2A==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=fMUuWMZ6TpuTS4Z4e9kA:9 a=QEXdDO2ut3YA:10 a=iYH6xdkBrDN1Jqds4HTS:22 X-Proofpoint-GUID: YnBjtdRAU6T0llrwT3js9djbViH5gppP X-Proofpoint-ORIG-GUID: YnBjtdRAU6T0llrwT3js9djbViH5gppP X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-16_03,2026-01-15_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 malwarescore=0 suspectscore=0 adultscore=0 spamscore=0 phishscore=0 clxscore=1015 lowpriorityscore=0 priorityscore=1501 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2601160080 __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 387c88c55259541446901f0e539bbb0dd8c4c3de..c4a5f8ef65164ef6994343e6d26= d3d302c9b00c3 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 Mon Feb 9 00:42:48 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 842CD35E546 for ; Fri, 16 Jan 2026 11:01:32 +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=1768561293; cv=none; b=Kp2WDAYK6Ssd6Q7iBPJRJAkjpagXKn2QaEjEAiFgRx7G5SAsk5ndXayJfZ3Y+tQnOJ2mVj5kQWnye+GCIh1+DVW/QBnrEvwpuhClOUssYcmCsaRqlsLcXd9XyPh0ZtI//Ej6dy2zJZw4Mx5Zo0KgvypKRU6JM2Ef0ax2AoOignE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768561293; c=relaxed/simple; bh=DBroTzEvTTv60Jmf1hJFudo/s1CU1IeoEpCPGQGOR9E=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=J0tQ/lyJ9kQnkL+COR4zFbsatpGyw0mpPO/cTl71zVjbDfllQtMcZOAzzwDuTmlbOrf51d/mT9zG+XWXfg3lJIz9/mECNeNdQHzQp0x98FO6nHYrjIQ0VzxnmHnq2MFM6gDqxHy2At3DkXrKDUT5nkjnd2bWB4hfrD1exb6PfoQ= 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=T5h4+xua; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=RdaEft1q; 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="T5h4+xua"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="RdaEft1q" 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 60G86Yta4100521 for ; Fri, 16 Jan 2026 11:01:30 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= gZNQGei6/+R4IWa9zF26FwhPVN8758eSQx0EedexqFI=; b=T5h4+xuamwwmUylz 6BF8aZr0peE/KaHyxjYGgeN502NKQGo+yNLz/vOFX7HRZZAD+IizZdF66Vun/R7A BlVFk6ccNdZRPVvV/ls650rbrxOnyxHadgcMG945EPP0DX/QppXzp+qyRmDkJQjp 9CMVWMYzeljiTuBVAAyiynOBYEdqDqG47K3b1XAT5acJqo0198R3K9pjQsSaLDKt iquTkA8dJG0hnwpaHtS/MOzKNUX1wFyqSWV9LP+OrDcL5GNaN/6kHLJ0qvNmiY9H CvE+l1B6RMUGeDvHpCeJpVQmvMmg/I+H14dNR6hGoaXQcJ5K+5wLcEe+U1I2VyDq 5WMNHw== Received: from mail-vs1-f71.google.com (mail-vs1-f71.google.com [209.85.217.71]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4bq9751v0f-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 16 Jan 2026 11:01:29 +0000 (GMT) Received: by mail-vs1-f71.google.com with SMTP id ada2fe7eead31-5ecf43202a3so1352637137.0 for ; Fri, 16 Jan 2026 03:01:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1768561289; x=1769166089; 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=gZNQGei6/+R4IWa9zF26FwhPVN8758eSQx0EedexqFI=; b=RdaEft1qnSB+Rdrq7QVuxdPFb7A/F2FTP9sSSRW3BPZG6gV/8UYetEzb6MddB+ghHA CzlKZw/hnoqhtzYu+7EoPdldOqdPhf0P3bRCAl8aFRo0bA8v/YGrnXbN33qakooT7HC8 eb6lA0ZDCWHpujJkyiGsle704yb/aLSZ3VXalg6TwtzAFSOwxJWvxSAgdjo5RJySJS5m 8ffm8jwpKOe/ZJHgckgohbNVypyOjU5oobIBwFlEPcdSEeLJx1jx36uQgFWuOCSIMJFy Drn9sQ6d0pOQBCllpzgRSlSU3oVAAeqX8HIEsJbmzwW5EHOOGPLnfnEBp9VPrhlVOtjz O3FQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768561289; x=1769166089; 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=gZNQGei6/+R4IWa9zF26FwhPVN8758eSQx0EedexqFI=; b=XOQ4wEa/qsXWX7Cb/PeUuIO3/+zZJt4pmxGk6u8w4cfWq+/88tXEEWM9bvcl4IpqQi B4gekn/8qrkgPd2TcL1gRgj6HP+/03UaGwSX+m2n19m/BL0pJ2KfcvMwHKGTYIXs/k+o 05UUPk5YMA27N7zdv352i28hRvthu7W1QQF5CLTzlUifwNpZCF2wYaqCNxycOgGKk02q CWt3+dQ1s/UGf2EfS9B41bOk7X6fdi6LfMeZ/GA/4imNWY12j+f9EKtxnu4Xnpnp59bf GjexedTjH4U3BSnQvCDKrDW169Z1EOWVpDo4BIXVule8t0pz0R+QvhyxrLZqYO91vFmn sM+Q== X-Gm-Message-State: AOJu0Yyom9DYdR6bs8G7EeajDG0WfryOMxHWrYhnuj7g65g26adwXmkD Rb+XFPIz/vgAjTCnUTMS71WQAP+oHOiUyEfBfybFLYMcSeYKERKUBQb+E84C7HQU1es71Jeq3B+ tpSXsmyE8g5haOZsXp3MnNvKM+8B5ZLsw7mgLYseorh6okEWNNVj5MvzPffzSkolMwos= X-Gm-Gg: AY/fxX4744QbNTXvf7zYHNZ6bHG1XblLJTo/lG/oxkmlN+ysHvkSAYIdivGf+uEhZcO 3vodyD92/1N8oM7XFvlpkZ1tv30APsSEOdLE5Y/rsR7VD88R/9SZJRfIta+po5NKpzv5FLsjY42 USYRZ9qSb3uZ6o2vWg3wnj67J7fq2TI/lQ63V7MYYinjlLENriCTyjCDaVGt/VobPFoZLR8Gv1g xmnlZRgY9mGDVyaPUyGH7E9yAdr8vIorBzCBxpV7caWlBOIJEnjP4ScadMxEPQLjg6Z+6O+1kQY 6fLs8lLLziwrd/+xydYfElB3jc3tmDgHoDasrUj3MoK4Fwse5E1UQWM/dXICX5J2Gscw0dJfnch Uc92Vx6wdeit5K/1pOqJxHXbFHANN2OMwQin6/pk= X-Received: by 2002:a05:6102:370c:b0:5ef:a52b:96ac with SMTP id ada2fe7eead31-5f1a6fcfd8cmr620613137.2.1768561288690; Fri, 16 Jan 2026 03:01:28 -0800 (PST) X-Received: by 2002:a05:6102:370c:b0:5ef:a52b:96ac with SMTP id ada2fe7eead31-5f1a6fcfd8cmr620603137.2.1768561288225; Fri, 16 Jan 2026 03:01:28 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:d1c:5bb0:db13:fc7d]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-47f4289b789sm93512975e9.1.2026.01.16.03.01.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 16 Jan 2026 03:01:27 -0800 (PST) From: Bartosz Golaszewski Date: Fri, 16 Jan 2026 12:01:10 +0100 Subject: [PATCH 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: <20260116-nvmem-unbind-v1-3-7bb401ab19a8@oss.qualcomm.com> References: <20260116-nvmem-unbind-v1-0-7bb401ab19a8@oss.qualcomm.com> In-Reply-To: <20260116-nvmem-unbind-v1-0-7bb401ab19a8@oss.qualcomm.com> To: Srinivas Kandagatla , Bartosz Golaszewski Cc: linux-kernel@vger.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=DBroTzEvTTv60Jmf1hJFudo/s1CU1IeoEpCPGQGOR9E=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpahp+4vAS0SyPRzmubfhsVwdKZ/8fT8lHNgAnO htgVp42s4eJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaWoafgAKCRAFnS7L/zaE w1PCD/41Lw2tmTpgS7kRQqQAJq6XVr+vSoWsUzbNPOYukTS/8gpgEI0Am6yUDpmhYgCQhj7FrZK hg5i3HfwcpXwpmfdxrVfa3aBwUuiqu+E+aMMj6p0Sod+tjLw+9MNhSeqYL2gd6BaSpa4pzr/dIV FKYMAt0d3Yw4+MXjIWrG1bZtsqw9bQLhWy4uqRy/K1i7hWZSjgRQVkqP/+SieTYy/at9sL3ICyp 8eFPWDTOdawN0UcoigYTdr122aqE2TvHhKeC5qPIoOrbDkUN54yvYlZZ2P6tuooqsG6FPdG+IMU QKQ1zwYV6McPBo5OlROeFuI0ijYnP9zpNe3MhAVVDHkufoHR8lgBmp6BvKqjPmdkMvlfCcIO+4u sHTifQH6MxokKJ62V1KnB7NuweUqt+q/bNdiDM2nPm9ajGXWjcTfb05ltVMdCT/DKhWKh4XUlrg alpVrtUudwCJITHpcVckoZ9ueelz1dz0Fgk36hyKLJleuL9A8ZCCHJZwaqEmko06IQzr66z2ACB YZu31goJoTR8Rv/oN4WAquhaEwf2az7JoBauPyFZifFZVarcAYh0sj1ekbkH2FpeB9+uiBuXCSP N05i+nM+TWbRsoNA2oUEDMCfw2d26slgfKwfF2byNEXCn+Dso56x+Sp3cw1zdEN+TyYOrQ8LCmt 4DlUPsrOPfd9eVQ== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE2MDA4MCBTYWx0ZWRfX+CUfp/Ed53te V13RMw63cfSuw4S9/aiorD+RlA3n+LeCwkyIpFMfbCXQtL6N4S16SSHC1iT+nGROcBSvAzJv0UJ 2hyOMbCiBo4KBOOtJNOUYNd3eEoOm8zNVcYQSXI1re2cAYMulp9yjRgdivV84vLIbp6WPdocffX SM5KSUTvQZkC8g5Ud9E9Tw0rSLpm2dJBkEaGPaU0do9NTYHzWZJE74krUD4qA/kja4xgwnnYYHQ pl2NcHu1dw/5LUD6bVfTHI23Tr3ZgvS3A6O8CfXasR7n+vtUB44wwVm+im763RsljSecUCBvx6O oH9IivhBvKOnXQ16BNYxV1DaxTH0kEJw2RWLeXVqRsshJ3cvEgQUdItqBAHMnluGsoeyF1r3ucj NCpt0aXNo6mRnNwLBTnAmhLVm8G7qEDDR6LZCC/EaKwMsgA63wUFzO1d0YL3h5k9iehC6k/wBix OOmiFbCRAP5av85WwAQ== X-Authority-Analysis: v=2.4 cv=Sv6dKfO0 c=1 sm=1 tr=0 ts=696a1a89 cx=c_pps a=P2rfLEam3zuxRRdjJWA2cw==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=ii2iuPLuu9iRZ_mRmhMA:9 a=QEXdDO2ut3YA:10 a=ODZdjJIeia2B_SHc_B0f:22 X-Proofpoint-GUID: gKhLukGL65CEEEXd6Op4p8Kv4cIMmLEp X-Proofpoint-ORIG-GUID: gKhLukGL65CEEEXd6Op4p8Kv4cIMmLEp X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-16_03,2026-01-15_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 clxscore=1015 impostorscore=0 bulkscore=0 adultscore=0 phishscore=0 spamscore=0 suspectscore=0 lowpriorityscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2601160080 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 --- 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 c4a5f8ef65164ef6994343e6d26d3d302c9b00c3..454e0645d1545602cd193f66b54= bd5c5811ca5ed 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 Mon Feb 9 00:42:48 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 4D4EF364E9D for ; Fri, 16 Jan 2026 11:01:33 +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=1768561295; cv=none; b=OwXH2Kw9bRiTQUmg5z+hSxAxBQ4pticiKG/p5Yvo9/k7l84/QnocNFCHlfH/r5DMQ32WNpMJbe/thy5W3I96sixhmiy8TsRo0Lpk/h6jdFlBicQlDnjobIDaq18U8M10uclYtGjHrZRP79L5OE3sk7tDsARC3zO2yB3jK5p17wg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768561295; c=relaxed/simple; bh=qdd81TzQGTV1ftxAN2AmJ5zQSnYHW7TGbjbFYFwB5GY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FiQ8GERPqIEXUpvaBGNrIuy0QeBjAGJAyovabWWc3YiIeCnLqZgv8bYdGa0K1hqyu/3hiXn7eOfhVDp0k3yIv2l3JyYOCYsn5s9YpBu9MNUGdkTMLAfeBcCWvU3OrLswx+8deAO7tTSkicB9nubU/jtGaYC/OxXXfTZr1wYR5Qw= 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=Hgi3QM47; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=HFsQmpo6; 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="Hgi3QM47"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="HFsQmpo6" 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 60G8Nqhj4101350 for ; Fri, 16 Jan 2026 11:01:32 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= uQrQ0ayrcTm8VLCHF2V4dD1WRxUu5hLYY1t5VNtZkms=; b=Hgi3QM47sgLwQCLa cjnCF4VyjOTiLUZbQEtoNrHtfDXCX+FISxdxmIC+1AyGCGq1yyWhRdmG0G2Ir9EZ a9/G2X/5cQvlsv1CLhm+1fQwXNzhtupiQ7btiVhyDc3TW9clXgm5Br+aDpn+C7/K 36YiUOxo/VlbstE/QOVH69lzwJ2Ot8p0ArBDDIks6EeKek1h4GxIpAEgTh0t9XyL Bd5IKOz7Kssp/YqZr00TmGJRfaQhl920w904tMpDL1dPRMsMv6dBvV5Fhi7WYtO1 IqVoKUjV+ECJzxjGPAIun3Ez554jTqZdw/pHMDHUx9Zfrekz1DImC3/KmEe4LZvb wL3BNw== Received: from mail-vs1-f69.google.com (mail-vs1-f69.google.com [209.85.217.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4bq9751v0q-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 16 Jan 2026 11:01:32 +0000 (GMT) Received: by mail-vs1-f69.google.com with SMTP id ada2fe7eead31-5ec87b2b4ddso1496387137.3 for ; Fri, 16 Jan 2026 03:01:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1768561292; x=1769166092; 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=uQrQ0ayrcTm8VLCHF2V4dD1WRxUu5hLYY1t5VNtZkms=; b=HFsQmpo6gfGsiTXZqmVaWpq8d8lYKLJWQdkG3p9mJ56+2lzbqbvcp+KRJPG0ROHq4K 9uw5l29qwUWoXKe5tN0vHZQ3eoAu85t0fOXSsLDACIwU5gn2GeHOskD6NgCMZTZ2LZY7 AbKP6b4e2j91PzvJwBZ0VOTS0XxKGSdYKsw5nm940IN3gfJ1xY+h8hG6OJsfgNI4Q6Y4 /OpoTVTkHR6AAHfhHmz2lLJuwpIP0x/++bYT+jXLqjmYFZVdERTwp1S48OyRDEHs+IQA rC5MlDttYzvZ0TBkYDX28LNCyoOAgWTFJ4Wk46ChvHZM68wK0cVwrEXILvfklCs28/A5 G57Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768561292; x=1769166092; 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=uQrQ0ayrcTm8VLCHF2V4dD1WRxUu5hLYY1t5VNtZkms=; b=vhloAivRT9aIm/sxuuESOMBXtB0Cit2mwgbglkRFGW7pfxSE4h+QxofyHrKHVamoCv oQljGXmRXul7RslEkcZjOmx/tGv4EwVFQtqWljycLUz9IdbExs6l6yE3mykp7tWMIXOX 34E62jtv6hZDPRp0Pr3c8hNdLdekAbyqkFEGf9SMzZz+0O2ytXMP5d+zXJtmb85lX1UK cQBrh9qw7LDAJMT8A0JwwPVH4c8C4qr+hoFMLOpx3HvhTjz9v5kWPsY02rTT0zvAqulv zkf8Ktpk8UxwUaqzvhQqgiTvTbUj5jsGxC0IomS/ruwdKBDzyseHA5BkFLnY0Ou3kKGA HnTA== X-Gm-Message-State: AOJu0YzxVBYwET461YCSOlg4W3Wb7jleCtI1qvnQmWZrlQZGv3dRbrKb bYXNuWOUtgIkBD8hNkNPsxkoHnMOkXaHh6BnXsSlQJr4nCqu6B81rHVUZ4VE6a6RLRm6QEs4983 xRCUFIYIvqxdz0STdNXDrkbYLPI//3SbRcbosRXUIWpjKuCIP3TSqxceXSv+F2T8dFXsGlBxxO1 4= X-Gm-Gg: AY/fxX7w9OI8YrqhJR/6yYj+kKFfs0cV+NBqAv6nTieyD5owpzx3GnKdT+2BSFT7Xxf 3sPSyghRBManvFZKG8BFgOlrEFC+LJGA+gd5hbPZncyCSA5HnlHAURn9XH9yMBFTr879ojUKkty F4b/3DIt3ZDYz795M+wiCTNn1JMWYC0Yr6b8qsPQlPU3ab7KvAkumuTaxeleCHK+ldms38aIdsb wkcvjiKMy9LqkrOgWeptlemrfRsXFE8MZfGs7Cx1GWUGvKuMyjA0c98JoP7f/mIedsxPDg1okR1 NNWrtIZFcaWZXm0nlEQD9qDV2hRkZg7H4bRgPM8SpWt0+KMaUHEVnSSd1PJWxhLt28i8hmu4Sgd hlR5/nYL4L8LF1hm4Rh2gefNcUGZwCNW2FXJFZZI= X-Received: by 2002:a05:6102:cc6:b0:5db:20ea:2329 with SMTP id ada2fe7eead31-5f1a55a32demr785052137.35.1768561290056; Fri, 16 Jan 2026 03:01:30 -0800 (PST) X-Received: by 2002:a05:6102:cc6:b0:5db:20ea:2329 with SMTP id ada2fe7eead31-5f1a55a32demr785044137.35.1768561289470; Fri, 16 Jan 2026 03:01:29 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:d1c:5bb0:db13:fc7d]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-47f4289b789sm93512975e9.1.2026.01.16.03.01.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 16 Jan 2026 03:01:29 -0800 (PST) From: Bartosz Golaszewski Date: Fri, 16 Jan 2026 12:01:11 +0100 Subject: [PATCH 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: <20260116-nvmem-unbind-v1-4-7bb401ab19a8@oss.qualcomm.com> References: <20260116-nvmem-unbind-v1-0-7bb401ab19a8@oss.qualcomm.com> In-Reply-To: <20260116-nvmem-unbind-v1-0-7bb401ab19a8@oss.qualcomm.com> To: Srinivas Kandagatla , Bartosz Golaszewski Cc: linux-kernel@vger.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=qdd81TzQGTV1ftxAN2AmJ5zQSnYHW7TGbjbFYFwB5GY=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpahp/Qw7dm2mxKUv7bSl8+T/Zb32g5MJum23eR MXk68A5qV2JAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaWoafwAKCRAFnS7L/zaE wxwhEACPiPt2oaz3LpXXXFQDtfVc7qRWWdDOGMo6acyF34FDhUW/jX6iv04MlGfxaY+mU3qDOxM 4ZW4pneRxZB8ep7zXUvikMn016bTDdLqmmbCpdY+2U2Zq8DaQ4W1rzXeC/5GLDepyarTsgpN4lT 6HbE/UV1vUvnO4VP1tdhjDL8ILnZ8aY9K/kZ5B5v+bhfjoFrOqUo03+6iys29TkKfK1iMHihJo0 bxEnhMq4gq1rkyT6OWbcgAxEMm8kyBYPDo5OMjStFQXS2dAT65cjp1wD/26Vb8mZUTB5zb6Eg0B FUar0cAntmpBZ+GFp7+cq3cXdtKLjsxxr+PKxoNffdsMkI2HwmA5t0NAb2fh2nmXe2g09HpaQzo SxPoR0t4IVnxadAGbaF2r+lRO9sQ4dcb46N7xSjaD5U5unZuAIvyKL9dmnrd/iS+dMcGjRNFJ7b 9AkfmtcdO8cDrDtcTPWIk0QM02ChGiS7N+Wu5Gp+uygVawONaYEGHV0ShT3PbdZ3dm/8U610Y+Y 6UGWeDnUztRcyRIX+iUsDrhnVr37xcFBJIpLd/K3BFtMmrxN0WBmMrytYQwjedGDVYOYcgW5QDw doFXqY38E++ywPJrHmyxtggANTLb5n4SitFOliyl7iJ/pUFmm/M/gdV2tILbzDl7RyJoG+iIGzI KWfaMLbrjXzpyXA== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE2MDA4MCBTYWx0ZWRfX/EqhsGLePqr+ glxN3WtOncyZ8GN8Pe+nN8kIh+21z/z0pRjkKY+2SaYolVJ+RgDNk+Z16R9xuPhmuhXtXeznYUg 7RN14I0NNAjt2859fq4DUNItCpCstWZJqPLdaEy97VdYn6mg6TrYVE8P06v2T7qPdLNGfl5F8Z1 eQKRI9YT86DewyAqC6dwYvUbUKaqd8ImBPSoLarOUYN7ihYxW0MGzObkoJaIR0hjLHIK0z7zUjQ DOHyX+4ZDJFxFekdjMgHWHu9ZJdG2GtOo/nkc/O4/IeDaO+pXGhlvmb2CxDRRAINWil2GuuW8ah 2+YZljiC3BVQXU+Wh3Xcxz1lOvN97f/fJytPXMN59fN0xIH/mCEWHfGHbunSwpa/VAJRrr7bSfw sz5sD/JdCQK71QbfqxZJHpebNCY0yGfCImN2MY2UlOgv5YK4o6ShQ1VeB5fYZ0jvbikqc/qP0iF 6uZLPRh6xPSDuoepU3w== X-Authority-Analysis: v=2.4 cv=Sv6dKfO0 c=1 sm=1 tr=0 ts=696a1a8c cx=c_pps a=5HAIKLe1ejAbszaTRHs9Ug==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=uP1ucDPQAAAA:8 a=-rJ4p0UJwyiPJ0m2jL8A:9 a=QEXdDO2ut3YA:10 a=gYDTvv6II1OnSo0itH1n:22 a=9a9ggB8z3XFZH39hjkD6:22 X-Proofpoint-GUID: epO3COxvSn_YchRADPpgm4E3pFfsMbWf X-Proofpoint-ORIG-GUID: epO3COxvSn_YchRADPpgm4E3pFfsMbWf X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-16_03,2026-01-15_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 clxscore=1015 impostorscore=0 bulkscore=0 adultscore=0 phishscore=0 spamscore=0 suspectscore=0 lowpriorityscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2601160080 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 454e0645d1545602cd193f66b54bd5c5811ca5ed..f045c53863aa7d55d51e44712c0= 1eba97be2ac66 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; } @@ -1124,11 +1115,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 @@ -1338,7 +1329,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) && @@ -1346,11 +1337,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); @@ -1366,7 +1355,6 @@ nvmem_cell_get_from_lookup(struct device *dev, const = char *con_id) } } =20 - mutex_unlock(&nvmem_lookup_mutex); return cell; } =20 @@ -1382,14 +1370,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; } @@ -2126,10 +2114,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 @@ -2144,10 +2132,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 Mon Feb 9 00:42:48 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 46E5B364E88 for ; Fri, 16 Jan 2026 11:01:33 +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=1768561294; cv=none; b=VLDP2s+qcO+4MsuimMfXr5oVkA5VN4EGgGzqtIBQbGW1XYF/zAkoDfV5lIPpeL54c86rIOO+VzCmSI2HASAldZwfkYOw2dKiLR84PkZW2YNbn3tYgSxLL+GkerLR0kmwGl1saJ+ri6XWVdvnDsXWe9R5P5Vu5DE0gtBGrPmmiW0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768561294; c=relaxed/simple; bh=4LKHwOmzYfHLuHzhHYSO2gpR3anKz72dpgUe44Zh+gM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lMuTA0frrucj7rS3+PE7JkZUxBp41DJCHFAoUIkHGrCR7k89xdE0LR/cGBN31q7NQ2PV24heDeFQTCvgCiIc4XxgfgrKnenYD/Qra7etUQebL3bC/fQGIdcZWSlRGzkgsVVRHI0d5bCCQeMIGFSmN10Z108tZ/klFuxVWgBfPKY= 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=d0F/p8XM; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=egvRg+hI; 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="d0F/p8XM"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="egvRg+hI" 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 60G8SSNo4100790 for ; Fri, 16 Jan 2026 11:01:32 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= p6LxbEMN9y5OM/8ZgcibkGJgYRRhguBNNKwCuGjZN2g=; b=d0F/p8XMqVCKbqby +ofxxxo/AcvFq51zP9ZGDJpdbVWK1GeE88cHFj0icE1PUHaD8xDpNV6SsYBtT0AN as4mK+vvFJ5uR1EV6CtDhnEojJwBeI0qRmnsjmiv1quMtOwCZ+pyuJMZoIOdkosT w8jHr2H1iK2U3o2d/qZp+Cj1bM2ACOu9coEvI+U2fxOUONbSSrdSuMqHsY+LgJTw R4Dy3fG8tWYzYylVgh+jDPKuIh3z/OSKY9UXf8Q/eQ+oZL6X1EpAhjZboNSFh2fz cAld7uDKXmYEdpv46BrXmHdSbfRMvK25Wcc/1BS9nUddTtNHHcZ5FnkfGQlnUmYL dno1qA== Received: from mail-vs1-f72.google.com (mail-vs1-f72.google.com [209.85.217.72]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4bq9751v0m-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 16 Jan 2026 11:01:32 +0000 (GMT) Received: by mail-vs1-f72.google.com with SMTP id ada2fe7eead31-5ec9a4e6cb0so1525230137.0 for ; Fri, 16 Jan 2026 03:01:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1768561291; x=1769166091; 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=p6LxbEMN9y5OM/8ZgcibkGJgYRRhguBNNKwCuGjZN2g=; b=egvRg+hI3sHREf2OzWLshruldbK8g2LQEXhUaoF7Kj23T0mXu6R7xmoQGgWDXVktyR zqf1DgriP+zZ95/RZXclEOu6QRY2GQ1FzbLXeD5PiQU371XLCEvzGh5FRhBM9GUXgret UmtyQLOlDTbgF4UxT7gXYDGo9ugemaAmr9/OS2jRg7H31/wQQvfS7HbvutqKy0BQsT8Y 8d4nfgYNlVBsQGJdJJrx11Ex9SSg/Rr9giPkETZHskl+aMrklFr7RCI+CEgInped98kF OhMKMt9jUpUv9Bze61Voznv3ROqKKicpruUcmhGyCGCpMezFXo7HGuaDILMqVGIipKha paFA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768561291; x=1769166091; 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=p6LxbEMN9y5OM/8ZgcibkGJgYRRhguBNNKwCuGjZN2g=; b=ExSfEs1TDIzvltPjUp4HMHTtClVg0cKAEzkYS7klkxgrVJ5yNEieGIM625mk5WZU7u tv0Psh40mKgck5QzPtDZnOU64wClqp4AzVTcGOqTNKSv300tPSBRE4jsJR7ztXlz+w8+ dYyKzOVg6PUm01Qye3BVBaEm6+nK/HKa2z9oMybq8DcE+DUE+Z8uYpQpAz5mCHiWeVFf LAzE9Y+WJlhn6KMwNWn028/vALnPWLVVXRUOHqqgHDJsuD6Wm7UECz8QWma4I/hz8Lta 4IAZQrcRBkTssKulQgryA8HlS349k9jzp+SEnwuq73PUrVKdOzBAECZgftjwZ3ExGpkl Z3Aw== X-Gm-Message-State: AOJu0YwCxHIr+F603SUTS/uN710dZknrbPLx9GiU5Ck51fW4mf7E9Vhx HKnvqPtz7mPB+WMbc0mVBwafm7j38fSRoXsdOfIUfBWzaXtXp2ZgMTpCTarsGmNncGMOAfuSLyS ELgvjyi7a1yjrQFiDp7TVogwT3vHhXQfcPm4n987ZI9iGFEDDRrNBe3qsgEfbK6ZBkswnVcEDkB E= X-Gm-Gg: AY/fxX4ht2Xb0OCSVCABInOdcvoPAR5Q/jImFIHpOaQPTbhB6KikG917Qv3K3n7tTY6 X8r4BJw8ig7QQ+trHcazsr/yzi5F+Tk9iaNgdDTtyhNW7Mfti2ZCE0p0j1zTzY/gVTuYEjw0lvZ +Tfoy2Kow+l08Pnq8tT9Qg5oObugw2AM2IQm4nSy+cyH059HUqiKTRdkqk8GMtZt7T5lyPD62HI dP+63yf4eto4n0el+f9HvCLcmsZcITdGqvMxy+N05hrbhZnOsf7iqnu0iN9ty5kNGMMc5mHw+N5 lW3pe/qw3XHKZCYksXQrmQx/4cGhnnZf/Hus4Z2e63UnZoUKycG46sqy5OIv9KeIWy1I50Yl/AN uzsINO43KXIHSofipQnlij8u2vFNN6Ad13RMUmQ0= X-Received: by 2002:a05:6102:41aa:b0:5ef:2474:4cf9 with SMTP id ada2fe7eead31-5f1a55c4cc8mr722190137.36.1768561291187; Fri, 16 Jan 2026 03:01:31 -0800 (PST) X-Received: by 2002:a05:6102:41aa:b0:5ef:2474:4cf9 with SMTP id ada2fe7eead31-5f1a55c4cc8mr722186137.36.1768561290676; Fri, 16 Jan 2026 03:01:30 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:d1c:5bb0:db13:fc7d]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-47f4289b789sm93512975e9.1.2026.01.16.03.01.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 16 Jan 2026 03:01:30 -0800 (PST) From: Bartosz Golaszewski Date: Fri, 16 Jan 2026 12:01:12 +0100 Subject: [PATCH 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: <20260116-nvmem-unbind-v1-5-7bb401ab19a8@oss.qualcomm.com> References: <20260116-nvmem-unbind-v1-0-7bb401ab19a8@oss.qualcomm.com> In-Reply-To: <20260116-nvmem-unbind-v1-0-7bb401ab19a8@oss.qualcomm.com> To: Srinivas Kandagatla , Bartosz Golaszewski Cc: linux-kernel@vger.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=4LKHwOmzYfHLuHzhHYSO2gpR3anKz72dpgUe44Zh+gM=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpahqASooIgOgt2vPw+Tza4QcswXeJ0zNdm2AWA s4e/JlwOEyJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaWoagAAKCRAFnS7L/zaE w/thD/9dwSb7DOmvqwsvPWfj7GxqOD0crBOIzYflt3a2nd/1xEhWgOqtZijCfCPNQx/jBYykGCw HqpGpKIOj7TXeV46w8ieWIDsROyNZFbAGLPQeNweOwUXMO9SmFKnHpzo++1N7uF4Cw+fp+f3qYv rxinfbyVxwXZ0NqNWbxdxX1pK/lTtQPYeg5WlWVHQ4ER7390fzc/G411kpirREYwa/oXPgGfhMY kGXQvE9SuiQ78AFedLdcME4BKyZD14qDr2JyNb8wqNn6moUbNkuKqWUZtztRMn6ntoGh/4ztxBH /584+k0pvPlXaWwWeXNXqLzAAsj5MoADn/hv3AVMXkKM5STrxenIGgzi1vV4Ui+nsUK8n5y9OCR 1XVG6slcUmkNxc23WJh1KqcOibVtNq/KRIZissF0oKT1YbZTc1Otzltb82be6XLweBF86zLAO0L EwYlnftfkyauxeIT1aLj88BaKckEnnVOPGgV2nhj9PbxIfecGPQLRRQGxlqaDRLzTxqYVVwKM/m MhnjeISJnxPWgdaZb9jkyxCz7kDRje3URgEofIiBj+0HTu2shp5j4A88AGMwWmkD2z/XrEdjOBD bAgm/lUYNF2QllCcMcxWVq0uGH1LeilOyhe9VgkUWJPgN4tEW+rqCPLelHmZialM/UOKKLzCGYA ABK7kIYfews7sQw== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE2MDA4MCBTYWx0ZWRfX1ojfunQElW2M usXZlFVXwwLJPZeuMvI136ltivyoWBQ6r82v9GvoZwrW3vYjjD6ohDsVyEV7cOUCjGtvHHVXXBj q2TQ59CP7NN4PeeHaN2Xvmwm7JNYBT24FBXZ8i90CAcxjKD8dDJjmT18AJnSZE4ucO7pjuB60rh soyPj15Lim8Z0LgDCRP4pbDElgjFPfWSAnP/aXcrtfQMBVg2oCGIgkzVrHzH7w1KiV9NyY8T+Dw RR2KwYD0HwGqv1HPPD036Q7Mcg0jBEJPTjQf+JrwfAScsElVd510Ucfu2C5YK8Z7bAsp0YC6xd2 77F9bQyjv6KxJDf3xvnifbkQ2rd0Fod2Fp8pb5RtjhIXH9zppDZ8syJJ4jtqQ5H7joybuONAl7s EeztP8nI/oqrfJzYpEpHkDYdE886+c8FXgA2YMd6oWDKvWBT6gtwn13r8VUpvjij6v5lusVbw24 T+M5ZfTd04bYWuER0bA== X-Authority-Analysis: v=2.4 cv=Sv6dKfO0 c=1 sm=1 tr=0 ts=696a1a8c cx=c_pps a=DUEm7b3gzWu7BqY5nP7+9g==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=F6qhMljSegkQ5LcTVNAA:9 a=QEXdDO2ut3YA:10 a=-aSRE8QhW-JAV6biHavz:22 X-Proofpoint-GUID: 9X0QHNpjvi6YJ_DblUjEgwqAZtXLlXTo X-Proofpoint-ORIG-GUID: 9X0QHNpjvi6YJ_DblUjEgwqAZtXLlXTo X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-16_03,2026-01-15_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 clxscore=1015 impostorscore=0 bulkscore=0 adultscore=0 phishscore=0 spamscore=0 suspectscore=0 lowpriorityscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2601160080 __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 f045c53863aa7d55d51e44712c01eba97be2ac66..e3e15fa462567872718b9262a03= 9202c6961deea 100644 --- a/drivers/nvmem/core.c +++ b/drivers/nvmem/core.c @@ -1137,13 +1137,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 @@ -1256,7 +1249,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 @@ -1344,12 +1339,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; } @@ -1459,14 +1454,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); @@ -1476,7 +1471,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 @@ -1591,7 +1586,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 Mon Feb 9 00:42:48 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 60790368264 for ; Fri, 16 Jan 2026 11:01:34 +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=1768561296; cv=none; b=WE4bN3MiWaH0hljQnYYsF8ABwzKguIc8LuG8uYwpLy9A8Xrzv4HdoOozs05ZH9z2/QVJMTis0te8WGURTLjo/OEXCuJ65veeXVzDjrNMrFjeIHB7S8tu5Sjx6JYBTS52BVUz/TVUGmdggIHvI8TDVKuZxqwqlogRRMuXF5n2rMM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768561296; c=relaxed/simple; bh=g+yD8o+2gVQjUiYEpHiBQF7ASL0OkhzgVD7q84WldJQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nL0Gfzqa2MosNfBNt+daYUUXLqCyUd1HidmYBAn0QXNonAmtQcBVggOE56LUyBNkKzCEy/SCOhM9WYe2L50AxwwpmfRqZB1i1c3Y++W9/f7pol8GROF9+klZntELqJw4wUYbWdqOe5gF/Fb1GC6VVGX6UnSUAiphkoT/HrHwsB8= 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=InD9MQ6B; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=GYCJ8maF; 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="InD9MQ6B"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="GYCJ8maF" 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 60G8pA9E3596382 for ; Fri, 16 Jan 2026 11:01:33 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= ovduUETZ2fgJqjXFUzboacKNYuA1eanpnCkGfbo7VWE=; b=InD9MQ6BQI46HtMk SsAHBYRmn46PHaAX29rotkgJOBDCoqr4mCTVrzPVuRwAhxS/qjKaCbAXVjm+mAlC 3dnMlMdSzUzX8HjjPwaaw15MKZlWBtPg77xOsGik/3VXoOjAS9dMoh11OqOb6TyZ 6u1PG0hYIdvG6nnqW928H98AMJXBBYCYapm7T+/E7qC9A1zZEGYMXZSDAYlmioS8 uQpZ0oMWMMN04+7uCihSHLr+ppc0m2WZrDexmyay7xw2kTKjiGRPugHnkC9iAhiG Lg/DRx+uGwi84EA4C1EzPtf13NHDodhZq2jF6BhPfamxYXOvWz7RCVTwzmixr9JM tSwmtQ== Received: from mail-vs1-f71.google.com (mail-vs1-f71.google.com [209.85.217.71]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4bq96rsvyg-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 16 Jan 2026 11:01:33 +0000 (GMT) Received: by mail-vs1-f71.google.com with SMTP id ada2fe7eead31-5ed0924e15fso1447441137.0 for ; Fri, 16 Jan 2026 03:01:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1768561292; x=1769166092; 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=ovduUETZ2fgJqjXFUzboacKNYuA1eanpnCkGfbo7VWE=; b=GYCJ8maFXUcQuzIwW32l/rN6i9tLWLxwe1m/41mDRaUTj2fPdvCx8fMreGUs2e9/q2 /ZGoSaARoDjNQueeWoso3YyZhU4DPiHVHegUxUL4gluyp8n93PTD+sCNYuFGaKz9OBsa S5vb8Ko/W1Bwp3RseX1/3Y9BlbWlgTpzgzL33wiQ2Mv5nFq0C92rNdP3Lm94v5nf+H3C fjaZCI93IkoV41xBY9WUxKr8xfcXoR78CAS7fFO9tpg//+Xb0ryg+4mOJCuIgjykZP/Z N2iD076rIt04VLq9ZjhEd8JbOWW2yR2BGTYC/rtGiQazmKfhSb1nkzJIc+vt3Veb3o4r k8pQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768561292; x=1769166092; 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=ovduUETZ2fgJqjXFUzboacKNYuA1eanpnCkGfbo7VWE=; b=cH/W++EWtsOMfDuziHNj1Jnc/LM1zWVtRtay/8L7fAsx/LuhiRiZDzbviyrpEY+yE9 V326T9bnedP56IS6/rZCghYKWp4wKMAb8oAqwkWY5Vx2uANsfi+mdSb04z0rPIjxWSf8 +042mT4cr7ZGbYW8OfVdfsyHhZUBA8xi8MCSbSO0ZB4ry/MDJMwQncgrzGgD6efBWacI 7OiRwVV7yrIfwvQBo5vOzi+AEjezn7bIzxCMfESphb/gU9X4EOv0g0qFRhqCl1S/kbpI uaoPJiCXf9oBV0WtaxFYu+Am57sqGmOXlSXpoenNvGIJFXe/30Pfi0sEqr1a1IFQy99G j3uQ== X-Gm-Message-State: AOJu0YygIPl8LqcgEeT6LGgrFvEZnyGD015c6rnPJt1WrBy8PiirGQmK wz6FRFgSKel7plSHjwLHx+r/Jr7vAcGAEVmZtaTshYAFi/EVx2UW8ugGOsZ5bu4tNUaGoWir8W5 X8eFDANJ+OYp9GvqicJNjfrCNJHpUlV7O5lHqS2eowqJEm75mVmfUKnji661W1YBhZKwJ5G2oth w= X-Gm-Gg: AY/fxX42jSBtCtJJbrnEa8hsXJMoLshoHXWA8k6OCDqdkBrFeHt+fs6Ed/LthH/UvhM EdwA/8YwD9cOh5rWCTa48Oeu7Gq4wTJH+Oe5PrLHosoPV73VuqyYIkz+m0rOG8qIe09Lf+mWEwd rPR8hl4bqEPByAGIPPwxBIVcPduPgR38F6rvdq3gIaFKM981Hfxgm1QF4iYmpFCgUcbnupkdcSc QqiSpamDtlS0ZlS8aiKDRLH+gvo3kIYUzK0rj2ImpsKHSvtJ3QB/CtMFyWsPV4O8AJewKFfUARh T3lx7yqESVr+gCkfcN59AJXgfRpWpSehM8JSD/OASeYYY5if9IquVVYLjtGVCjAqh7Vv/A3NJfe RDd//1/Q3j/PWTKKIvtA7TGp6QR+1vaigHdPuY6Q= X-Received: by 2002:a05:6102:162a:b0:521:b9f2:a5ca with SMTP id ada2fe7eead31-5f1a538917dmr799859137.13.1768561292296; Fri, 16 Jan 2026 03:01:32 -0800 (PST) X-Received: by 2002:a05:6102:162a:b0:521:b9f2:a5ca with SMTP id ada2fe7eead31-5f1a538917dmr799846137.13.1768561291596; Fri, 16 Jan 2026 03:01:31 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:d1c:5bb0:db13:fc7d]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-47f4289b789sm93512975e9.1.2026.01.16.03.01.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 16 Jan 2026 03:01:31 -0800 (PST) From: Bartosz Golaszewski Date: Fri, 16 Jan 2026 12:01:13 +0100 Subject: [PATCH 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: <20260116-nvmem-unbind-v1-6-7bb401ab19a8@oss.qualcomm.com> References: <20260116-nvmem-unbind-v1-0-7bb401ab19a8@oss.qualcomm.com> In-Reply-To: <20260116-nvmem-unbind-v1-0-7bb401ab19a8@oss.qualcomm.com> To: Srinivas Kandagatla , Bartosz Golaszewski Cc: linux-kernel@vger.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=g+yD8o+2gVQjUiYEpHiBQF7ASL0OkhzgVD7q84WldJQ=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpahqBeuZprjD0fyFe6lKmlI4dv+UjfKJHGeiyx 3lgiUEH3NyJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaWoagQAKCRAFnS7L/zaE w1dLD/9NVg1cn3N0/c0j8CLTDTyPZUnGRz7Bum36gY47J2F++hJxmfX8HtkustupU0rQF+keDiZ cSgPwUZucj1Jk8R/WSDApvMqr/tUV6FXIYBo3L0Egg6fLumRFoEMkh9IvynCWg5pGldKis/E/E7 lk/X4A+6UPVUopI+YvMD0eD7/0VzanCqnFhzpjc1V/7XCDW6h+bX63QDctbW74QiLBfkkKYaz7X C17scm0FuqM6gJCZNqbw6RnWObVDR4Ur8KKZjXKZRIWimSThi6du+DWxFqS7zQRhkpVRscgt+J6 q40f1+4n0rJ9ldj7c8iheP+9ZkXsaetE58xPHi8/xVG0aPcGZqf/yBb6A5pQ9kyhRlCebE2UIZg VWQuQ9TffDWojUtXGjFxgJ/vssGYyhKO9VIZNmjwTQ4EwpHZ/eRPSS1o6EAmbj1Rb8y6TnGZaeA /qKqjZR3Y5YgZg0nnBQV3adN6GzjPaV8pyFt3vb/rjunhoeF7PCe8dWPOwBexIwlp7UEMMvySxz pKtufeflQkvpX1S4CriskHXjfFGvfo1hDMEjWxAqXRuVXR+95t1bpCNSt25OBtrFohKHtlsPAh1 kcKEZcHW37grfGf4UWGiLKHOitayQnjZhyU+QMW4f6hu5Uy1AHPGRiRunqMYD8L83+eofT1SEeQ l0c+/qovCjPHPSA== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE2MDA4MCBTYWx0ZWRfXyYAp5AOi6ahU isZYcvKreN59FSmrZX0n1tAmXRRtIu6rIjLXQ4dJ6S/H7GZU+wYzimXJMYVw1MXdxqAgVoHlXMr ltK/SVVzBdYFN8kWriQGPpkLg/2vBrpXUlpRMeIDkF5MPpPamb33IsGYcCDntmNzb9g6ugMM3Ox Ux79cuin2pW2S9E64fMvRcG+r6KIulnC2n9IUI7+ywZhQpXkE1HttjXW/z3srMZ3znzzQk65fj+ yj+Qwj8bdNdx2wsAQI0qYQ/+iRTLk5AkfquGx2p+zmjxPjblx3EK2eMubwNL3kwSo6shBJRzF1R g92QZGCvxBszjBUrM8lgFoikK6k1V9PvVUwWmCqTuN8f40q4cNNAdXHQkG8Tm8TJKoHcohxRzzL JSdb4uo0hWyIszkXiGnTT+EIEbLU5AZ/Pds0ZutoBdnR986k2FvYBHWi1WrKskN+RdTApIspgRT jBKXJpgDcyzgyW4V1rw== X-Proofpoint-ORIG-GUID: ggUj_eYPG8GlNOqbQftaqX41mRLJIyMF X-Proofpoint-GUID: ggUj_eYPG8GlNOqbQftaqX41mRLJIyMF X-Authority-Analysis: v=2.4 cv=TsTrRTXh c=1 sm=1 tr=0 ts=696a1a8d cx=c_pps a=P2rfLEam3zuxRRdjJWA2cw==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=pIqL1rwnkotILNDKPM8A:9 a=QEXdDO2ut3YA:10 a=ODZdjJIeia2B_SHc_B0f:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-16_03,2026-01-15_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 impostorscore=0 malwarescore=0 phishscore=0 priorityscore=1501 bulkscore=0 suspectscore=0 adultscore=0 spamscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2601160080 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 e3e15fa462567872718b9262a039202c6961deea..f6892af8ace52d033846f405272= 2289c2aa826df 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 @@ -901,6 +908,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) @@ -913,8 +921,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); } @@ -940,6 +955,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; @@ -947,10 +967,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) @@ -976,7 +993,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 Mon Feb 9 00:42:48 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 48E742D6E66 for ; Fri, 16 Jan 2026 11:01:35 +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=1768561308; cv=none; b=CwDQbAoel/Tr+9yHczyazi0e1dwwsw9i+8hq/dtYoF7pjong+tl3SDerSITiq9yv9YXkq9paQOXVurMjSr8eYC0MdmR2ZlXII7J7IEdx1Fjxw/+USfApkY8WnJMIHcWrKSrMJNkzrqEasDym8H9oIX92Lo6Z1hPVHSzWgpi9+kc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768561308; c=relaxed/simple; bh=cbd7AwwqnuTUkpz8+zWe0j58Sr2NVaIMo1YZHRMH8Xs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nE1x3DOP1YKIaR+uKFKLW7TyfW09LMK5zhWIkUg1zKYr7dofYR+uJGrocTN7xI1okD4e5eSvUmhyC7DoYsvXUR0mD7MF4qVeZEUU5V+rDideDVdS9GcFbbUbK1EB4izQFovChCBKXHR9J8RWXZJu7r1cCJZ8Mn8tuxePtK0t5RQ= 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=TUfvFCgO; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Q5yKgvTy; 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="TUfvFCgO"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Q5yKgvTy" 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 60G87M8A3596332 for ; Fri, 16 Jan 2026 11:01:34 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= q3+ApZVcjI+BZFgiz+bLack8nycUjHTjv0OpkEFL1Ks=; b=TUfvFCgOLfz8p9cX 4Hwc5MHB7Zsn3bBzqys3w2NDHm3T//z1MuvkJHZYJZOxO/RZAIfDE/QsggPcKM6P 4UISVOlYN4mMWzJKc8INSwfR3WgKIrkIWUuyFsyTaW/rlxVykBcY34eV/jjxE7pe a7BDDICGAuCroSiF+ejr+eJ3T0a/+IfZsnVJm0Kuk0m/zE5pKDOrHzwofMggrnZx 7koZdbTKcNEV55GHf2jo1iW7eYT3LqbpoDEPH9TzrtwRniyCqT/7224iajucA+QU zHnufo+DkokIItJYblVy/3Tbv9wzhi+CWvrJn116/lc6Z1JnMHzmNcBMCJBfftTO jDdh5A== 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 4bq96rsvyj-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 16 Jan 2026 11:01:34 +0000 (GMT) Received: by mail-qk1-f197.google.com with SMTP id af79cd13be357-8b2194e266aso497507385a.3 for ; Fri, 16 Jan 2026 03:01:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1768561294; x=1769166094; 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=q3+ApZVcjI+BZFgiz+bLack8nycUjHTjv0OpkEFL1Ks=; b=Q5yKgvTyoCD2EVSgw0qwZLDyn8TEgReWJBVnBjNardij8W9WJ61EYnLdHX+2DVE3m3 CH0yi6tdE3zsXCQxOIJeEZDCvTfdz16zhjAqxthKm4M/5OYPaaN1hoCcLdFkHhHffol+ yM0suZIQiUg8dSwnTPxVi1uwKG7tOQBWW3Weu5qHd0a5mxNBeSpB9JY8bd94o3uJ6C1y xzQlkGnCLHbd7Hif+ZmUk2nJpSpnN7kQTksmLLmAPPiopEY8ZySv9CCuIYBtO5NilJdD wjaQoTVbdJt20aUXtjRCkke9BEg8VS6+6yjvPjT9qRm5VHpigf3q/meS8B9r6/ganCJN mEbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768561294; x=1769166094; 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=q3+ApZVcjI+BZFgiz+bLack8nycUjHTjv0OpkEFL1Ks=; b=QRoB28hKZaXHc1jjnpS6wQH6DbC9SpWM//PDODzr93I/UG42M6898L4VyLFlX7xKWs rtjhZFzuSQvjLpOs0lgJUTMYhR4Y7KCl2nNcV6itl2mIGMuaMtx2lFE9MzAKvUQ86+At 1L8LUIuWX0LuuVb2xZpb9arnui62CkLGudTjHxWKO+PHHkT5FP9+ZIyD29jge7wkY8MR i6gP4jisnksAmyae1NWu3QysZPw/M9cnUiawS0+mYuINXJsIKNS3yDPkezigEhiXfh0D X04T92Pkt6Jp1YdBSBocIMdalnXq6fyHSMOo1t+NqvpsCbVTsS/k8GAef1/xYV//9hcd pkIg== X-Gm-Message-State: AOJu0Ywq16QNhs2mldB5tnYRU72cGDfFtRSbm7dan5puvEwEdv6lNM/5 WSLdBs4fUxzYtYBsytkS7r7+1OIvTdzZGn9/bCcy4j8K9Q31cxexPgZn+3TdjpdMWls88pb5LVC pn2R6KRUcieD2vlTI6nmcDBU0D/NU5BE063q7YTCERoS+aGrDziFXp3/m7zFeCQWlX1v74zhIIq g= X-Gm-Gg: AY/fxX4SSfhWAJZp8garA7sQQY3lKuT14GnCIDAGk2DtfhDhWcDJBPXArliXbb9VLSC XaG0wJjYKf6JtY+EIMdQcyZaY9R29vbaGazlQnsXleelBy5V//J7Wh6SP1Bvxm+3SvIM2kKWMUZ YxjDAjWD2tYtisgOIdf7sj8RBIdxkzM/JjQZvQKpUEvArSJFEpORJiGcHQdcMiRL72r+TtHxoyX /qFYsUqIO6x9vv6TvcPVDnnE3LhZFCzDOuloIYo4GfMC0YGYdTEJop32HqMhVwvsmQQsWytqFHd 5lT4+tBKSuLlkTr0nj2Hds6uprEjFU3HO2wz0LPhCLrTppjUoamsuL51Adzz44RFfNKyBsjL4FT zyzjizIC+Yk2Dewah30IaxwcsVH4jOYNhPwD3Fcs= X-Received: by 2002:a05:620a:472c:b0:8b3:c8ee:7240 with SMTP id af79cd13be357-8c6a66d21f0mr380989085a.5.1768561293182; Fri, 16 Jan 2026 03:01:33 -0800 (PST) X-Received: by 2002:a05:620a:472c:b0:8b3:c8ee:7240 with SMTP id af79cd13be357-8c6a66d21f0mr380982785a.5.1768561292589; Fri, 16 Jan 2026 03:01:32 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:d1c:5bb0:db13:fc7d]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-47f4289b789sm93512975e9.1.2026.01.16.03.01.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 16 Jan 2026 03:01:32 -0800 (PST) From: Bartosz Golaszewski Date: Fri, 16 Jan 2026 12:01:14 +0100 Subject: [PATCH 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: <20260116-nvmem-unbind-v1-7-7bb401ab19a8@oss.qualcomm.com> References: <20260116-nvmem-unbind-v1-0-7bb401ab19a8@oss.qualcomm.com> In-Reply-To: <20260116-nvmem-unbind-v1-0-7bb401ab19a8@oss.qualcomm.com> To: Srinivas Kandagatla , Bartosz Golaszewski Cc: linux-kernel@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=8594; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=cbd7AwwqnuTUkpz8+zWe0j58Sr2NVaIMo1YZHRMH8Xs=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpahqDXIcckAEtCkXWwYbEDY/7kNaps4/eRO/au JAwnqXSII+JAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaWoagwAKCRAFnS7L/zaE ww9dEACYNDHYMymXKGJIAtDCZmiDhKNCcqJc7wthIOfKxlOUfMx+VstLmcx/sWFDJcNRff+M56b inmIH7AzddAXzU1dpZjRUoNAt6fAhXC9gXXgm4R682a+vdAH6skIIw3bH+/jzNYzqH9y+wHXE3R J3crQx7tRTJgTHZEBvRFvsHQUlsXIeZkLBHxLxZDFBVzXokRHea9TM0md62vWsh5Owe1wkaPYRU TMIgB1xJxgiDLAl+PRcKpqHYRv4DOL0JJus8ejMavB93IpmxW2Pd8x8azdpzsCqNahBmcpw3cgV iBgjBmZa5e/ft5oeTW69jqPh2+AkD9zG3YqsRTIuelLpgkMKTdRyjwQUrn2uUZNF/LnZXVsJScz 5LUhx6PThOUa1FBr11n+kcyhTimTPCqdTNcCoL4Z7L8NnfKg4gWQzuk5wB0/oXoHMDsgaMzpUnM ZQ23uCJbuu9B5lTIT19FsZgLUPfyqO3wu5TOzmSA7yjzbiE0g2M4cXjNIwIL0n3EGBPsPm5qRun nE/VC+zkBs6Hk/cdNjejPEPzB3WCfd/pwNKarbh0viO5i52YOd1GPTbDW6jPGxX61pW51O2YUq9 b5XDo71vnUcTKtm3Jf8RiHaur+G9sveeZQ98SbDQyZVmcVkSiApPuXa1XxyaCj4l6uhQ3d991Fx Z/BmoN+6Sb4EL/g== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE2MDA4MCBTYWx0ZWRfX7STwzn3/YgOb SJwA65lXqKNgmS5tqVbqICONZdjjFOx+TrBf+rDdd/bCNZLj7UrOpFKt7HdqqMKCJNEvL8g/KsH tEAZMC/YWQEojypQ840MUpZehwylJz8/IXn/sz5+hnG/Lrvg0c4Z5VfNR3v6YO1UFYxgpGKxBqn jccnHFt0M4ViyMFcIsvq8cashxSyUB7NSpYXRBg6PXze0ejerpXlJtTuD3W4dSnFaptIV6tEoq9 9mLSQua2RPhXgjzA2I8BUDnf3232+oDdOs6BIfw9UFAXMXD4dcEtUEfPN+3it4FXGaqEm5ycnXT Pc+Ylsz/6w+idGdjrneKAvw9LrBfa/nx72ndlvkdFpG2PZGSxUb0WQP1xsoBVwiVouZVVB2bTCa Ug81DfK02Xa9/uQRK2pB0C+8dCPUu3XUNBTNCT5dAHqo1YZ5JflWVAMGrckyHWQO8gwQdN82QB9 iIrr8Dr8wGsNBBbKMAg== X-Proofpoint-ORIG-GUID: EZIi7L9JDjeZRbTAQncAvbUxmipL8wsF X-Proofpoint-GUID: EZIi7L9JDjeZRbTAQncAvbUxmipL8wsF X-Authority-Analysis: v=2.4 cv=TsTrRTXh c=1 sm=1 tr=0 ts=696a1a8e cx=c_pps a=50t2pK5VMbmlHzFWWp8p/g==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=4mtZ5t8G80LWl5GVAOAA:9 a=QEXdDO2ut3YA:10 a=IoWCM6iH3mJn3m4BftBB:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-16_03,2026-01-15_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 impostorscore=0 malwarescore=0 phishscore=0 priorityscore=1501 bulkscore=0 suspectscore=0 adultscore=0 spamscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2601160080 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 | 115 +++++++++++++++++++++++++++---------------= ---- drivers/nvmem/internals.h | 5 +- 2 files changed, 72 insertions(+), 48 deletions(-) diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index f6892af8ace52d033846f4052722289c2aa826df..1acc65026eb5094658e5523104c= 649a280bfc471 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 @@ -537,24 +555,6 @@ static void nvmem_sysfs_remove_compat(struct nvmem_dev= ice *nvmem, =20 #endif /* CONFIG_NVMEM_SYSFS */ =20 -static void nvmem_release(struct device *dev) -{ - struct nvmem_device *nvmem =3D to_nvmem_device(dev); - - ida_free(&nvmem_ida, nvmem->id); - gpiod_put(nvmem->wp_gpio); - kfree(nvmem->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 +573,23 @@ 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); + + nvmem_device_remove_all_cells(nvmem); + ida_free(&nvmem_ida, nvmem->id); + 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) @@ -951,7 +968,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 @@ -959,7 +975,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; @@ -1064,32 +1085,28 @@ struct nvmem_device *nvmem_register(const struct nv= mem_config *config) } EXPORT_SYMBOL_GPL(nvmem_register); =20 -static void nvmem_device_release(struct kref *kref) +/** + * nvmem_unregister() - Unregister previously registered nvmem device + * + * @nvmem: Pointer to previously registered nvmem device. + */ +void nvmem_unregister(struct nvmem_device *nvmem) { - struct nvmem_device *nvmem; - - nvmem =3D container_of(kref, struct nvmem_device, refcnt); + struct nvmem_impl *impl; =20 blocking_notifier_call_chain(&nvmem_notifier, NVMEM_REMOVE, nvmem); =20 if (nvmem->flags & FLAG_COMPAT) device_remove_bin_file(nvmem->base_dev, &nvmem->eeprom); =20 - nvmem_device_remove_all_cells(nvmem); + impl =3D rcu_replace_pointer(nvmem->impl, NULL, true); + synchronize_srcu(&nvmem->srcu); + nvmem_destroy_layout(nvmem); + kfree(impl); + gpiod_put(nvmem->wp_gpio); device_unregister(&nvmem->dev); } - -/** - * nvmem_unregister() - Unregister previously registered nvmem device - * - * @nvmem: Pointer to previously registered nvmem device. - */ -void nvmem_unregister(struct nvmem_device *nvmem) -{ - if (nvmem) - kref_put(&nvmem->refcnt, nvmem_device_release); -} EXPORT_SYMBOL_GPL(nvmem_unregister); =20 static void devm_nvmem_unregister(void *nvmem) @@ -1149,8 +1166,6 @@ static struct nvmem_device *__nvmem_device_get(void *= data, return ERR_PTR(-EINVAL); } =20 - kref_get(&nvmem->refcnt); - return nvmem; } =20 @@ -1266,9 +1281,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 @@ -1655,6 +1669,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