From nobody Sun May 24 20:35:16 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DECAC312831 for ; Thu, 21 May 2026 14:25:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779373557; cv=none; b=Kd1LkcLG8nwDoOO9NUnAUGCqhvJmId+XO0ydDtnm13ODIwruDUjMt1ohas5L4MXM4A9C5sNGsSIGuBhZilaFWSEmHz8CvpQF3Y766gWbf3sIujqrvJ4e39dX6Bxznqr+VN6n0BQd7XW/B4odnHnQMig06i0s8wF/lF9RXNQYIjM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779373557; c=relaxed/simple; bh=xudBWpbKh+co3aDuIBbv0rKdU2B9DSmcu3U2VXlWK5Q=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=WJv0kVLvYteMDJOQBkenTcV+Qi2ps9vTht4e7x+nzgvKWRth7pr8m95nIk5sRonA76/5IR0LZinixNuUpDHrfTAFaJNy4mb/Y4926df6DJXNza6+1jm2Z/vaORd1MLIAYse4KTS1YfN8ieMHpvlZPcsFTQW62OADHowrwZSa9i8= 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=F9XB55V3; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=K6w3FJZ5; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="F9XB55V3"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="K6w3FJZ5" Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 64L99ogH3343551 for ; Thu, 21 May 2026 14:25:54 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= tMQyVE88XDjrg6ahIhjPSSGPMHVTkMapw+j6m54r1kQ=; b=F9XB55V34uutEFES gHVJrtHkexKPz2SS/ikQbt2PTIqjZ0mgl21sVwqLWqARDRmxxSrSXKZRdGlLR+aN JTtMKocdIVY9wvs3IoYsLJCLasQg8+YAEen8ZDDFccrorK/qfYRMdD8BHRki2nSF QFPm3UNxcnDg+5bTaPG0HhIDkesoIuvYoFFq66zlLChr394FDAYERvAQkfFjU3Wj BH1wQao05w82gwP0Fbnu+V938/MaBWiTynDxNdfibnAvr9wqF9n1MbBQEN+wLfM3 +uqzCljUbn/0TqOUNog9nh0ptpGSLxi4111ccvKjMcitkplwxzitzXDuFhNu4UzW 86sHJQ== 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 4e9wahsrma-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 21 May 2026 14:25:54 +0000 (GMT) Received: by mail-vs1-f71.google.com with SMTP id ada2fe7eead31-639389de134so3213071137.2 for ; Thu, 21 May 2026 07:25:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1779373554; x=1779978354; 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=tMQyVE88XDjrg6ahIhjPSSGPMHVTkMapw+j6m54r1kQ=; b=K6w3FJZ5xsrow+zpSus8isplPWbYGFZsZe2QeIeoFqFHHSCCh75j3FwGJ9Xq0Gx7Nt f75XDezRUy33ysxpymxjN2pZ9tinjM154p04eo00o5LtkiC9cmeCOTc6ycfEv6RCzeRF s+ACT3IheC9kVtQugvsKY6nABqODxgBWvIwHlfEMUeJLVlAbNm95j8yz1Fws8RgTbcr7 oRfbbG+S7fuIKKwCQ6jsttbaL32eYOMBUqCjxOD2IRl8+lJeFGxrEmh5abk5YvjL3pGJ gWH/GfeQzWDQyz8QSUEzNL3CAVJDUqFrGditV/MJ64pYNY1UfGkbkcWxlMvrt6vxnaIl M7Zw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779373554; x=1779978354; 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=tMQyVE88XDjrg6ahIhjPSSGPMHVTkMapw+j6m54r1kQ=; b=bd8BEumX28ukQcZ7qeeTP2Cwi/ScwuYeN/egYk809eRAD7TJ9xkFvXjS1BqPuD5e0u kEnrCewoNDhOFqy5BMz9xDNy8oRsCzRbRvZUmU+9QUZSxRQWQi07ovtnmkV1q4OdIhtD tIWwuGVPzcXC1Y3UoRIjQ/tY7zHiI0jx6q+eNjSqSEltmJtrS0wv66ozZn/ZUNzNiq8G UQvUaGdxQNL0xYrrfkN1OfjgTKyjEPyTYiFsDVg3sg6WN+KbHkkWi0VWu1z8GlAsSpbo +m5mxT3A8xIjKamu7bAN2roylDk2Yw3HAvBWBEVUSwNNGkv59g+0Y+twDvtSKLOKNiu7 gbMw== X-Gm-Message-State: AOJu0YxBZbjTjp3aRcInNy79v/b9ST7wCXhtFUcG3rlBaS8a9fnULwgL xaiQkEu0U4HPt1SnBNliSYBnYbk0FjsNwpj0EYhayhPDHdhK2x1zVO5i/df+L/JCKwJi+NdPTgi abUe9tDltJ8mfAzc0Kvo/qeYx6FSLmb9hxtTeJjeacjlGntYEANTsIZH7wYIfgoWvhi0= X-Gm-Gg: Acq92OGR2/hI+g+//xZ7lTvowtJbwiGSOorqmRLpFEZHpP34YY4mRRk0HKTVRhnwplU JHg7WxW8yemRH/qQwabtOiUyODSiDNgSwAXMJl+HzdXYfg82HBHa4ZkoEj+yIaMBEvoJdPVuCEx qsFfpaV8rnU6e1Facwj6+5byqXU99qGuCMkk0lr/H17V0HGwgC/v6ezAZVvC8Zu7GqRFl6N/BXn uC9yvihzKq/ZDe+LRQQdVUwmUBn6E0UNrHbjJDetW3h+tI2zzg+TMfUHNdWc4/cTjgBaa4O3AXu ZIlYHspOl12q3LclcyXJIp2alpCw+BzcTvH3AJLadJzqkU4IYMbXHwjkxtZIiPv21+07xAw6BbW KSLzdpuzFi5mrs7GnspGyHceXPAZ63q4RRheFG9yP5JWNseU1x6c= X-Received: by 2002:a05:6102:5e8b:b0:650:9173:ff15 with SMTP id ada2fe7eead31-6738e3d89acmr1649218137.8.1779373554114; Thu, 21 May 2026 07:25:54 -0700 (PDT) X-Received: by 2002:a05:6102:5e8b:b0:650:9173:ff15 with SMTP id ada2fe7eead31-6738e3d89acmr1649150137.8.1779373553633; Thu, 21 May 2026 07:25:53 -0700 (PDT) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:bb10:ae82:b7c3:d15a]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4903c9abbadsm30441925e9.8.2026.05.21.07.25.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 21 May 2026 07:25:52 -0700 (PDT) From: Bartosz Golaszewski Date: Thu, 21 May 2026 16:25:34 +0200 Subject: [PATCH v4 01/10] nvmem: core: fix use-after-free bugs in error paths 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: <20260521-nvmem-unbind-v4-1-7fa136759491@oss.qualcomm.com> References: <20260521-nvmem-unbind-v4-0-7fa136759491@oss.qualcomm.com> In-Reply-To: <20260521-nvmem-unbind-v4-0-7fa136759491@oss.qualcomm.com> To: Srinivas Kandagatla , Bartosz Golaszewski , Johan Hovold , Loic Poulain Cc: linux-kernel@vger.kernel.org, brgl@kernel.org, Bartosz Golaszewski , stable@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1815; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=xudBWpbKh+co3aDuIBbv0rKdU2B9DSmcu3U2VXlWK5Q=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBqDxXksMp3ZHVWueE4feiB4n2u7T7OGH4e8hlVN CkVQW1VqDyJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCag8V5AAKCRAFnS7L/zaE w9ARD/9U2dzYoSPDwKI9qazXI+xRdkR5dBSwA0T3CelgX4mBNHtpJt1qf+DiZf9rB2wheoPvB/1 SCehWIko9Qb3UBRGjZrtRyhw5htbaJaV1u8zlrv8xnnF922BHhuhKj/jBPVUjpF1G0xvJhfmCns rgZ90KAAfw8NKK4z9pO9DY48XEPTUHiMtcw4euYbDEFazWXkFTzNm+TyQ7cL8020xsa7C4WIHqV i/wTD2xBmbMZxKhhiroUGzqv8H45FUmmF4NGUUr/SOPLbZABWdkQyRDAeq/wvxGyE1gZIckPo5V tecjpFGVozMenRi4jLB8eXybKICc8lPiEpD6TkkgDVltf1gf+WMxn7eIYQPnpPu9sTsVZeP3YoX XVqRqSFWgBLyszaWnwISWbkBnpGCurA17jcUDc2K6676hG2z5W525kliOQXNqX9Ejt+Es0ofAY+ ekdtkFPIPviU5To2XDI9Lh0WW62OUJ21gRRKx9VI3km+gH+PFUsGvxs2AOetjCs+6ggg54YfXBO axxQfYr5uMKFDuYh1Bjo67LBZuAbsBwVqdxk0FDDtSIm+X0hY29AxLOJNHcmKHoxjgzK8qEvjsJ 4etsw094lP9TblOztWGtJdhLUmhUsYy84T2Kiz0OjIkubnSTQTeL/ZehM0I5AGD25AfCHYC8eco lhp8Sjl1a6cduiw== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTIxMDE0NCBTYWx0ZWRfXx1HsJSmbUzjj OHO86w+AYi8Au7mP1CVHs3FPJOyXH4FugqxVqBOxmQL7FwUXGXJqL9Z8ZY1YiIzFcn/rcZ50hpu /U2eSj6AhU5DwB0Vtz1B+B44CrzLnoV5n9+gxr+TbE7xYbn74O9i/rkTKBM4uRrgG7ntsizExru neldpS3gAe6/atdE2SA8MdFxiuJ8zxxtaE8nSz7o16dcOCvwu6xMBoeCaqx7yt75OafQxdfFxlV hni0K67zCh4UWcHmlT+ZaJewKkQTA5o+n/3bAZfhX8IeJ8oF1tIhEpPoo4QubGUcJ/PZiMbHA+k W41fy9Fhez52O89Gh1xRhDOs+X7shSy2d35tMiP7xgKseF69BTZxgOIPSw0jAeHayE6FNSfVvxf xwTLqdVBRJePBaeATZTOM69OBPAVy6KoH4gLIYBnIBw5CLB6gTRZAFteu5Uf/JCtSD0l+itqaJ1 etDQ+zLJ2ffwR41UiRw== X-Proofpoint-ORIG-GUID: iwWScc7lZwjb8Hy4LVoycIZiDSIaIk9z X-Proofpoint-GUID: iwWScc7lZwjb8Hy4LVoycIZiDSIaIk9z X-Authority-Analysis: v=2.4 cv=H8LrBeYi c=1 sm=1 tr=0 ts=6a0f15f2 cx=c_pps a=P2rfLEam3zuxRRdjJWA2cw==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=TrVhhfAylj9VslsTBVQA:9 a=QEXdDO2ut3YA:10 a=ODZdjJIeia2B_SHc_B0f:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-21_02,2026-05-18_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 phishscore=0 adultscore=0 suspectscore=0 lowpriorityscore=0 spamscore=0 impostorscore=0 malwarescore=0 bulkscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605130000 definitions=main-2605210144 Fix several instances of error paths in which we call __nvmem_device_put() - which may end up freeing the underlying memory and other resources - and then keep on using the nvmem structure. Always put the reference to the nvmem device as the last step before returning the error code. Cc: stable@vger.kernel.org Fixes: 7ae6478b304b ("nvmem: core: rework nvmem cell instance creation") Fixes: e888d445ac33 ("nvmem: resolve cells from DT at registration time") Signed-off-by: Bartosz Golaszewski --- drivers/nvmem/core.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index 311cb2e5a5c02d2c6979d7c9bbb7f94abdfbdad1..e871181751f3c2739154b3cff27= ef9b90032e607 100644 --- a/drivers/nvmem/core.c +++ b/drivers/nvmem/core.c @@ -1468,18 +1468,16 @@ struct nvmem_cell *of_nvmem_cell_get(struct device_= node *np, const char *id) 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_layout_module_put(nvmem); - if (nvmem->layout) - return ERR_PTR(-EPROBE_DEFER); - else - return ERR_PTR(-ENOENT); + ret =3D nvmem->layout ? -EPROBE_DEFER : -ENOENT; + __nvmem_device_put(nvmem); + return ERR_PTR(ret); } =20 cell =3D nvmem_create_cell(cell_entry, id, cell_index); if (IS_ERR(cell)) { - __nvmem_device_put(nvmem); nvmem_layout_module_put(nvmem); + __nvmem_device_put(nvmem); } =20 return cell; @@ -1593,8 +1591,8 @@ void nvmem_cell_put(struct nvmem_cell *cell) kfree_const(cell->id); =20 kfree(cell); - __nvmem_device_put(nvmem); nvmem_layout_module_put(nvmem); + __nvmem_device_put(nvmem); } EXPORT_SYMBOL_GPL(nvmem_cell_put); =20 --=20 2.47.3 From nobody Sun May 24 20:35:16 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9666E3D8103 for ; Thu, 21 May 2026 14:25:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779373558; cv=none; b=MWm5V9cROr1pyfiiyB/276uJ3UMka05jZLtPCdWd+9yRDuU8UhSUjS73Xcy6MQeL6qXMcEtPG+O9D/ygdKZfYxRc89NpPssjCp/a7Nw8WF6Qx/ji/Ad6iAWWCcBQw/WiXkvKR0+KsCJXT5q9UsEd2/ZPynHMRKRNu/fTt6wE1qI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779373558; c=relaxed/simple; bh=TqdtfiFYoX22XEO3L5XtFjFN3PE6b7XMxKyU2tsWqgE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=vEu2iinvQkvDJ9dt7PkjVlDTlc1L46mjswbTPh3XMFMUBIfjKXAkfR3znvWRWikT7A69TNsFaPvYiWLAaPALr7CFxyUWwOsSssM32tpMtTZhbrhKoQmq3Q9+FgUcvqrm3wB+4Et8epgCrgLBOkxrvmPgSw+5S94q4mlwc1Kf0KA= 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=HmK9IPKX; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=j/DRJYmR; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="HmK9IPKX"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="j/DRJYmR" Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 64L99pld3451454 for ; Thu, 21 May 2026 14:25:56 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= KPsUN03pql8MWvk74HVtLNx7Ytey3yEgsUfYvT9r7HY=; b=HmK9IPKX8Rbxct6h yl+Y5Fn4dqoel1VXuNfH5wE9weVz47XFHrS/8ow/pWO65kYAN7+PHqKfd+inSFvp eLdbP6U7gpCNAE+ZfNPnuoiK8lBOhWm2qQ1sfEhwumwk/otL8TIIOgFky9BRAObY DpnGECr6GxXglloaQtEl8Suk17hfJFomFdpnwg2qujwof8S/Jra1SQHZxSEsEfeF M2T2d7dLZFCbZQhcDXBIfnG3PERd9z29fPTyHsPSKCDH2Cqs28XKhGX5MyF2YLLv nKYbWqiJfZI6gufIA4F5sHu4KNbHZ2JjRpmwL74oQprTAGYv+cuwb9ygUzPQO1/f ifFRQQ== Received: from mail-ua1-f70.google.com (mail-ua1-f70.google.com [209.85.222.70]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4e9y1h99eb-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 21 May 2026 14:25:56 +0000 (GMT) Received: by mail-ua1-f70.google.com with SMTP id a1e0cc1a2514c-95fdb602477so2559946241.0 for ; Thu, 21 May 2026 07:25:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1779373556; x=1779978356; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=KPsUN03pql8MWvk74HVtLNx7Ytey3yEgsUfYvT9r7HY=; b=j/DRJYmRzS2Ovt/sscD+nE/nrMV+fLxclJxiSHt8CUCnupPb4SDDAiq1D8eC0TP8Ax +WMfsQ2yd6WTGjFy4dSSDol5pJOu1dIZzg0Iu8EtCF9fnNMRoY1Rp89UilfXNBfeSJwK zDPJnSViExi4Xd0fvFfIJbUsCe6I3Z+GYyxOsG5WtLx8YdFfvPzmNSBGUXhakD1rLRQN nq2kzY4yzKZLbxXgpIKUCKECGr2XvaigLAQkRZmGi/EWZpEhL1uzN1pqsQyoS3qwJO84 7QyI3NkB8UzykRpwk1ohHV6ZI9rxKYECpQJ+hk9mfw5uiAnVExeSlEc5vo0XRzuR9H64 FXPw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779373556; x=1779978356; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=KPsUN03pql8MWvk74HVtLNx7Ytey3yEgsUfYvT9r7HY=; b=ofZUoOp6lksp/6Gbq+8Ac76Xf0S/HbhtBcddgzgnMItygNqdaU79zzUNKDM16xKcpx dK01qVhhzl16K8bwkUU3JCoXoQiQ1rUC1junjxkG7S+esrUcg2b5G/eTCaPLEXps7+ed s2NSOytika1QP0tDt2em08/ydi4A2hwV2SlLiOonVT7JyvYpEVwtu+6TgiZ8t0Trlp81 Xnw0BsE5dv7yeY0y0dPuCyov88tochtdo4wzWsFPOXVf5z6L8XA0AY9YXxrrvL0RUIbr lSItWRLS5aclqd6IKhZbJFbRSuRtONBnTEy5NsFvSV64qA4imQ27srU40ktLJLqVz1J9 9PUQ== X-Gm-Message-State: AOJu0Yz5v79bdGEf/iIg0UiP56rowIecLXaVH2uB4kNLCs1wM1IIEOST sxdVI7UxOA2H8VWd8VuQ+h3z60ZAr+r9FX2vIXyT+GZL5MuOaNF4Var7qy0TTD2hTHC+/K8AqTK FcBLLHjjIh1tQeDYjSx6DJQy8dn/WN+PYKXjA0+KcYNDZ0zld29bpW4/uhTzqwcrGb9c= X-Gm-Gg: Acq92OEe+m/sDG9oD/XXEmxoYy5Yg1BYWr094hDyfKxp4ZsKrAhRtsbHXi9NUctkJ3n dtOL7ZhbRhSbfISUfcqFy0rHPEvB54YmT6RZDdDZjo8wdo8scvEsNkt+29FU3mS2lN1XvYsMKKc lLPYedOA/HoGlhmnGQp/5OfNz+TmrX2RurIIAXvXVJn+ENlY+Kjikd9MvrlbrFCAED56xLUsaFC uxfiVHl98KL7Ecd5eoYGcTFKzdoePB7BaQ9s1WGZ8m5plucr8/ajkzYjNeFVUgCxLFQtBY38Wbh 9T21GW/H+8CVw5mmKa8HsWzmJUO+ABQVgg6XSqRWOGBy2zF13OCayZjX9pdPryFAH1dc5cLqxYS P6ZxXKQF32RVzXqa3CtTVfkmVsIL+aERzykeas4zbWbCqlV1yv5R7VohcmkavaA== X-Received: by 2002:a05:6102:570a:b0:636:c0c:4d91 with SMTP id ada2fe7eead31-6739cd345f1mr2073998137.28.1779373555944; Thu, 21 May 2026 07:25:55 -0700 (PDT) X-Received: by 2002:a05:6102:570a:b0:636:c0c:4d91 with SMTP id ada2fe7eead31-6739cd345f1mr2073899137.28.1779373555148; Thu, 21 May 2026 07:25:55 -0700 (PDT) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:bb10:ae82:b7c3:d15a]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4903c9abbadsm30441925e9.8.2026.05.21.07.25.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 21 May 2026 07:25:54 -0700 (PDT) From: Bartosz Golaszewski Date: Thu, 21 May 2026 16:25:35 +0200 Subject: [PATCH v4 02/10] 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: <20260521-nvmem-unbind-v4-2-7fa136759491@oss.qualcomm.com> References: <20260521-nvmem-unbind-v4-0-7fa136759491@oss.qualcomm.com> In-Reply-To: <20260521-nvmem-unbind-v4-0-7fa136759491@oss.qualcomm.com> To: Srinivas Kandagatla , Bartosz Golaszewski , Johan Hovold , Loic Poulain Cc: linux-kernel@vger.kernel.org, brgl@kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=800; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=TqdtfiFYoX22XEO3L5XtFjFN3PE6b7XMxKyU2tsWqgE=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBqDxXlLfcYYpe557s/UFrAzfnDy27Jd6ZN/aU8H zIdwLTH0ceJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCag8V5QAKCRAFnS7L/zaE w8qLD/wLHDgibtBcD0vgTYzbvxW3yrGaYwp2h1oUShNijG8OG7joM3R+sbZfCzIRc/2vPgGVhQ5 RJGgtWpSZOHHN21YE+dBlTmSckR8/lCeRBgmY3rt9tS4qxB//1IfpVoDEAxOj9I1pYNGwHH1LAw bz5y0ysJL3BsehBRB0OrrWaCf1bTyrY0H6V++ziiNDBH90ZAvISSgwlfSCjv9+tXPPrnDyqUKcu K990cEvtS2KwemFNEXWZSdlFwD4AyMJ/qgs/YjOoKh6VM6FbL8S/hWMlPl2UmFmHt8JK4WW9Fzy bemOmilzgymu79c8QBa4Z7t0GSHpF9xH26azFuNmBkf2JU7uYhVSsrOKbkNUEsxOnFPpobwTBz/ Bf7PLSUVe6plfm182k/IaCq/dshdKueA/3NlTlahUcx+IocEkuKrjtsJHDo1mR+ac7dFpYL4lkc l1Qx0h8L0wcQ6m3zIoQ59d9yt8hPPaNeElL7ohZN2qx24IePkpXzxmPaEPxPqUNBbyLF+hH/XNo 1ZJyfnn/YZE8q45rCF6CmBDnE25HjU35gyWlHGxE9IOxzrotEkBySQK6Fgtm0eS2/BxJ/07KbNs jmrXSuyng6bfyvKenBsEymCBc3T7v+HEi5K6W+UZsqfCXJoW+YX36BeLYkjuKzdDCiiwmwU0IT3 eLJmjIXNnFA7M5w== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-ORIG-GUID: hwe1DBEU65mgxkXhJAeIMsXl12issw5G X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTIxMDE0NCBTYWx0ZWRfX8bbxq6AVht5I cwlTUQRJiaZfDwOJLTE/G6rdhX7NueIDy4amIT1zVnCAWZa1ntqM/Y9cc16fYcjvAip2R3eNNMD l8B3x1BGu0FwVoA5p5oUle9TpRM+C5QdM74jhgAeuxWF0FvCWop72rOL7qa9WilLNdOZK+Ks5YC uHuvWQYky83WNs+WUYhQxOex7wcLdMxAE0nBxmfJEC4vSKRfD3L0nB9AAdSqMAhATHxVIp3YbAm 1wGcAz2PR5lzPK8YXN+IDABe+SB4cmaXZYgMUg/zhmuZcPxccyxcX5GecFVfsa7FX1TgC+nxMuQ b6Kd5m71LmCOfujI13v6uCo3Mi8GT93e13iFejg2wDrD4TcFQ+ubQ7xseVGhHO/0g3MvdW/u4LY Y6CDt+7+1vLuSy852u5/IvIhxGeiY2CQeJ0UIeYqQ1wNMDtdtEL3iBFbTYBq12vCvgPFGOI53PT muhOxwbVYgXeHZGTWZA== X-Authority-Analysis: v=2.4 cv=YfyNIQRf c=1 sm=1 tr=0 ts=6a0f15f4 cx=c_pps a=R6oCqFB+Yf/t2GF8e0/dFg==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=3WHJM1ZQz_JShphwDgj5:22 a=EUspDBNiAAAA:8 a=aHI-_EDh-lyTn7-jaGAA:9 a=QEXdDO2ut3YA:10 a=TD8TdBvy0hsOASGTdmB-:22 X-Proofpoint-GUID: hwe1DBEU65mgxkXhJAeIMsXl12issw5G X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-21_02,2026-05-18_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 bulkscore=0 priorityscore=1501 impostorscore=0 phishscore=0 lowpriorityscore=0 adultscore=0 suspectscore=0 clxscore=1015 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605130000 definitions=main-2605210144 The node list_head in struct nvmem_device was added accidentally by commit ec9c08a1cb8d ("nvmem: Create a header for internal sharing") and is unused so remove it. Fixes: ec9c08a1cb8d ("nvmem: Create a header for internal sharing") Signed-off-by: Bartosz Golaszewski --- drivers/nvmem/internals.h | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/nvmem/internals.h b/drivers/nvmem/internals.h index 18fed57270e5e3391cf24d5e49836121a53a8cd6..7cbc55f40259fc4315c41979ad8= bf75c36bcb056 100644 --- a/drivers/nvmem/internals.h +++ b/drivers/nvmem/internals.h @@ -10,7 +10,6 @@ struct nvmem_device { struct module *owner; struct device dev; - struct list_head node; int stride; int word_size; int id; --=20 2.47.3 From nobody Sun May 24 20:35:16 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 2CD733DABE3 for ; Thu, 21 May 2026 14:25: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=1779373560; cv=none; b=KQ0UFQdPJTrp3fbufrVAKpdZESGKnUSr4W+1M4BqZsrdi+ITsZCiPkeU7KvGgGOdKtDwO5Hzc47Vj/Pd7lZUeBAw/nVTgnYNmlc+mxL7lhTHgKZq2/ohsnELd0O3QvlVzmDuBAgFuR4y3iurlYKiUo3jCdX9lK8LP56JxqpSwEI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779373560; c=relaxed/simple; bh=RF7QLC3dpWqeqNwGYR5zwtThAKA0r6Qruqj6ngg8fj0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=B5U6jF3sPTuCCT1hh4JC8sgfVNHdXFnR7ZDOOdWknZZ5YZiHXIf7YEiXG2S6201TeaYD5NXqmuEP28GZQwhNaDvikUnsn4dgntGtoGAjSYdRCmnsyKKpS+VJRF94qghH/qW+l25NvIGTP4IH9yvVUH9GW99ehQ/sThm9oS9kKd4= 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=HWOBlGud; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=hYEs2aSy; 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="HWOBlGud"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="hYEs2aSy" 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 64L99u2P3772827 for ; Thu, 21 May 2026 14:25: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= wweDli+iXKrm5zb1x2Qf7TwrvyD4/BWIqGgm65k1Jrw=; b=HWOBlGudAts5tl4O sVdGxaX2/w4NJN5QrH20IfQUAOIm2H5kCoEJmkaXtcWREgMrgU6itwagvqctb5KC e0m7E1rMafipgMuaeaMUZ6Rg8TB0oapFFto0yU8ZkGkTlrds7cPyhwDIH9O2zfu4 AOkUrqG/Z9AoEA6YdGAB0LNxp7DbE4s2XBF+SjALJjImkVedGDW5Q6fKgjZugHvp vEGhwum0nU+1l9S18i3no/5dyxDjgGvOXuRHldL4q3KykeLpOpOcYWCLWAlCSTAx VesChHOSehl7LgIRz4LybwNpkKkbi9WL+vSCCkmokahgSyOGyIMgf9rzw8cPeUiS v4BtWg== 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 4e9ma43n7w-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 21 May 2026 14:25:58 +0000 (GMT) Received: by mail-ua1-f71.google.com with SMTP id a1e0cc1a2514c-95fc647f356so10061658241.3 for ; Thu, 21 May 2026 07:25:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1779373557; x=1779978357; 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=wweDli+iXKrm5zb1x2Qf7TwrvyD4/BWIqGgm65k1Jrw=; b=hYEs2aSy/RH1DFZlEC0rEQCKJJ0Q9Tkzb9ZbTn63bHqQ+BeA8tR1v2dFPt0H6w5an0 tjMYPSmzfhz+G62sZArFlQUnWoeHg96tfkNEFDbPf0+PZpmSVZkBynnSUVTry0lP5Xw/ DhWo59X0FY+7uSjl4iOHtYS84AI7z5fNSaYVdPOCXHylJ+dIKksbTqggEhqGgJzV9IBe XT8wvqLNGrPsMfiVW03ruIssIyLYOEscYiCxRTd8hZrDDfxuVr/bsy0n244Ojj1GSM6S UAKaZOVZXeKaXoj43ZqT4c3jZQM+87E7xrDBhu8DfH2hjslEU+rBGVU2DQ8/WqlPUibe GIZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779373557; x=1779978357; 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=wweDli+iXKrm5zb1x2Qf7TwrvyD4/BWIqGgm65k1Jrw=; b=BAa9cowRLMvUCS4hC6/Rp/34/Vat4yN8qWw/8SoXAzp6/LsRtSfYGnBh7Q9oQeWqyj q5p84Qg+dht6/mJB9gugN9ziTQsdsLoiMLJx9yWP0tLHG70l8n8J6iqWVUF3S/iVMn0L zlm6iNz81YzDGb7a6Yp/kTcAPcOL970nAlQ4zzKl23uHhGqu7oWM8e3csWd4E0NfaUWz tNgtx9w6ij8PvOi5UOywE8eGFw+O2IMmUpS873CF1H6Yz/olLBVx1dxejElaSF3BjnoL m8JrNAM9+KwP71NoftUCj/sjAEmrUwTCcZQKgbF76NzCJJZ4iKBvZyhBBNFA7dQpYgOb QHhg== X-Gm-Message-State: AOJu0Yx6qYT2jYA/MUSNTvGRxIbHx0NMbUnzjeQVKjuLBJn2ZAOl4sLQ mliHsURkc7PX3nzFaoYCfWBQ3yxuu6FCEsmNEXKgtTNQ2oMkV+614KXQ4n8tSr4W+JZOsm8l2Lx lPGH6foIhVKVlNjTqOFvg4PgmXFQJNA+zcBWOEnrx47VNRLAP1PbQYo5TRwY4I5sldv4= X-Gm-Gg: Acq92OHz3tAY+KbRgpjqz6XKR0LERjAMpyz9mrNRZo5WKX/kl/AXVrmA8PZQgsVvSfU yU1NDzvVpFaSMSQFkGN/bkD2FGncWJE5eIZuzYoyQWhbZRMLEOaKMIvLXc2erMNyjKnPBqLVLmu 6h8FgNGloBHxVTWw+Sr9Gkz892bTKCGze3FCycoejjEOHBc08F9qhvWsldW81uVMXxifpainYmN xYTHtVAOTiiLHOQkObiVHLQw275NoBUaIIeJb33gqfoMqmUOJMXTMrQd4hgC5f3EA4cz/pL2QxP BVSdV+SZaTesHi+9489bzxa/zFoF0SK3UsxUnuGRCtXXLBQcmWXIg7D+I0ajHYP9JF9tIZTbk9A PvnYRmK4fdg6d2Kp3Lud2nsLKXRmdvRK+PlnrqaMn8mO0bfmoMss= X-Received: by 2002:a05:6102:ccf:b0:631:ff40:22b2 with SMTP id ada2fe7eead31-6738d46a283mr1958436137.2.1779373557322; Thu, 21 May 2026 07:25:57 -0700 (PDT) X-Received: by 2002:a05:6102:ccf:b0:631:ff40:22b2 with SMTP id ada2fe7eead31-6738d46a283mr1958390137.2.1779373556733; Thu, 21 May 2026 07:25:56 -0700 (PDT) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:bb10:ae82:b7c3:d15a]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4903c9abbadsm30441925e9.8.2026.05.21.07.25.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 21 May 2026 07:25:56 -0700 (PDT) From: Bartosz Golaszewski Date: Thu, 21 May 2026 16:25:36 +0200 Subject: [PATCH v4 03/10] 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: <20260521-nvmem-unbind-v4-3-7fa136759491@oss.qualcomm.com> References: <20260521-nvmem-unbind-v4-0-7fa136759491@oss.qualcomm.com> In-Reply-To: <20260521-nvmem-unbind-v4-0-7fa136759491@oss.qualcomm.com> To: Srinivas Kandagatla , Bartosz Golaszewski , Johan Hovold , Loic Poulain 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=2819; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=RF7QLC3dpWqeqNwGYR5zwtThAKA0r6Qruqj6ngg8fj0=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBqDxXm9SuT/kxxmyGbqJLojGWnPgZR7hepU20qF jgNLIIPCjuJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCag8V5gAKCRAFnS7L/zaE w0D4EACiUxM+Ex7odgYBj/7v1Od31kypiK1paptnkogfn+RF0BJyYLjJowS4e6Y+/rCMj0hd1z5 rpkrfBPR5krjAgxkiURYJJXkz2QPGlzcgeO4Eh4sLhaogpeW8Puuvew9QtyhCzmgkoG3qus1TQz mUvgR9IVQQYqlI9YXHTADoSH084nSTGW+DgDN4cPmnVPcuUvgO0lIKsxsncO8bPot9vjWyZH3s7 hjZdZ+k4dGuqX7W5HcmX1oRtEiI3jia12n8dj7kp7RBZqdpHlbt6zQrPF24vR9YVJTDfYYnrBlr WuVDeCNi3rHWukFYVnD8jh/BGk2bGt4sVzwRzjV2a2fuaxepX3z+TodEKrKPKOm1ItQup4Vwsgm Yl1W+EfZZTgqfda+qxyrQ+HFzHfRqj2UE02VhfTwcX+bmDeOJMQJmEwSFsL0vLKP4QuHGNqRQLb wSKLTAHmD9xAXzGxrwIwCgUlyXPCLlCveTSFAH1Fdhx8B+yhw63GWsVCPKi/b8K8jFDo2n3Bsg7 ZyKHoGgGXL6f/HlsvoyseQMIltJH6b8f7Y/cT04WcZ/3AGwKkSorq2AtQa8Y4HrCQ3+OPwwH+pm okuMEQt6ro2kutElP2ka/wTn9vQS8Nv4Xju8Tjs0f/zMy3Bp9GkZZjp6nxtyAPLCbclWospWdUI B+jZ/R4o9ew+kTA== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Authority-Analysis: v=2.4 cv=K9kS2SWI c=1 sm=1 tr=0 ts=6a0f15f6 cx=c_pps a=KB4UBwrhAZV1kjiGHFQexw==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=DJpcGTmdVt4CTyJn9g5Z:22 a=EUspDBNiAAAA:8 a=fMUuWMZ6TpuTS4Z4e9kA:9 a=QEXdDO2ut3YA:10 a=o1xkdb1NAhiiM49bd1HK:22 X-Proofpoint-GUID: DdxYHDvpbWbjeOJJYXH28Nz1hNW_C0J3 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTIxMDE0NCBTYWx0ZWRfX5HbqhYkb6LRA wG2WCyLVuaSZsJHMEc7F4xAugMTuw3qy1eJJPfwGNWrRTgQyefqfam2nOzfGDbLArtpqsW8f6HJ AkS+ZX/C7VvuqX8mVcD7oyLGD1ITpny4vvSYGDKyOL640jTyFnSzluGV6RrLnhQlQ96Ph/dpFZH 23YmICI7eAMFlERROsceIwWOQuf49JIwrWu4B3B4WY3MnwDHCgPwSGoarAy1KEuNu5VYVkkYsW2 Kl9a314nnRKElJGPKFAk6BZeFtxdBIAsDIUNmDESw3YjNUHKzj6mm/Z0bLvVsWLhYoYQIaCLWVp jAl0IBvmEYOnSfjg/4TkK/WkOUGWwNVr6q9ov6RYFQoeBq9hbr0rUr1lEmu2hsXh1l7OlsZZ7eY 1liCAju0wE84e6HdIdtvArzgF21yg/x/3tcjrJqnI5afDsy0V2wLj5to6zG6iEOLya65Tn/xBUz 6cF+Xu1ZP92SyQn2/Qg== X-Proofpoint-ORIG-GUID: DdxYHDvpbWbjeOJJYXH28Nz1hNW_C0J3 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-21_02,2026-05-18_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 phishscore=0 bulkscore=0 adultscore=0 priorityscore=1501 impostorscore=0 malwarescore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605130000 definitions=main-2605210144 __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. Remove the checks from the sysfs attribute callbacks as these are not visible without the required callbacks. Signed-off-by: Bartosz Golaszewski --- drivers/nvmem/core.c | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index e871181751f3c2739154b3cff27ef9b90032e607..06d7f3d819084579434370cd12c= 6b263abff196e 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) + return -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) + return -EPERM; return rc; + } =20 return count; } --=20 2.47.3 From nobody Sun May 24 20:35:16 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CFFB23DD860 for ; Thu, 21 May 2026 14:26:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779373562; cv=none; b=kLDQI5UrZiyohdm0Rcgx06bUU7UWtZXyaLFCHmruhASmHel4jZStiJ+9HvuKQjpkzBbPby9f8+ES66QPXxHySjuXyjCZ8O/6wNbWkxTqGhG7go3tN3+FNLNyR/IbAm3UzG5avBT1euCk0zAIjuFiRqhE5qoEZnXvMCN93wbmRTc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779373562; c=relaxed/simple; bh=QqJ2lXGWEweh2aOOuwI59KOnCuRsg1zkqXgi+9+Hm0I=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Diup94wzIajMHY4zt7+vvVmVNP25SHDc2ZmR7ERYnPBuNc/UisAoGHieZCRZczwvYJQiMM0uCipqcUyVXYVxl5wS58o7vDP6TEimeRug2fbHpKr+C8Z88ZaoEtPqSgkvSEvl3uqqsxKwJZpdRw1EYIE9MAcmsote0QFNOVmIXhc= 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=E+P3BQK7; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=KBk7iqmx; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="E+P3BQK7"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="KBk7iqmx" Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 64L9A6553452608 for ; Thu, 21 May 2026 14:26: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= j//l8LhIXKiuUsuQE/OLOg9z4wTTm077JUqHJYnpL9k=; b=E+P3BQK7pKztyq1B VgonQSRkTCq9hnqi7tjyhZyrO8nrGaSoGptnfMrfwMiq4AGsQOzSF4xyQYejzspA H9xhzuoRjeTapbuTh6KKhyJ2Ku0iDn4e37ucbZCRNdMyXMcRqxaCrhrRrijtgkOs YdZj4hOfJUOVXpnDzaA9EfMUs9jtxPyulxlGn3ojhLTsEgHVS01rf1Meez3Waxna InRtLThUsiJgW/j2oaQOkgGYzHBwN0QwNHYQBR/YJyQFmdWljU3LAWe5SqTO9dxh +mjVxJyrIdzU5gfEQ7bQ6nteWoBFWxIQtwEO2QvNKhafe3o6FfeP22sOf9qgqggD OLc7/A== Received: from mail-oo1-f70.google.com (mail-oo1-f70.google.com [209.85.161.70]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4e9y1h99er-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 21 May 2026 14:25:59 +0000 (GMT) Received: by mail-oo1-f70.google.com with SMTP id 006d021491bc7-69d77a8f5caso466654eaf.3 for ; Thu, 21 May 2026 07:25:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1779373559; x=1779978359; 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=j//l8LhIXKiuUsuQE/OLOg9z4wTTm077JUqHJYnpL9k=; b=KBk7iqmxk60ecL6vMuLZ/lRwmMpB3RorYsBWvdQf51nC6jVmL2GHlKfOGeJ7nlF3i3 L10akg7f+q4gPD2QN/yXo3ozO8Jzw1sYXqLmMKLUxWtrJCsgHzmxLkYtfeki4PR8XXsm jROFHwgT58lY3QJphlbRHi0B9trsgICw8uJVjZBxv26aZ/g0rOAmbnrt/8HcsSIjNvqe oLxVfwEHgykpYKHVqDLqjyCK6Yu5C+BFRsgWVNJ8r2DGW6ZykKMK8v1fpJ1ol4h5YFaN d+ZuKznx/6jvo/QZEhb2G8WvnDgKC+uihTtlSBY3C5sb4iY+NyatZ14pWlW0zzqA6QSN bm+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779373559; x=1779978359; 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=j//l8LhIXKiuUsuQE/OLOg9z4wTTm077JUqHJYnpL9k=; b=U2EFJcaIcFwHWRiHmrOYYxqeXiskiuDlh7pMehGsR1wGAD2IFHG8DJTx6WaBLY7qXs hkRlqU5yK9RRtRQXFIhEAHHxFoVd74i4EM6rexHYycvDzZYeo5QgGefU07iUayh+eHLE n3p5c1g3qktkfeujyYilsNvM5dd08kH5oa5WBxSzVOnJ94KgxldSfecgsVn4ZQukOdgA 4dSS2Mym+wqfRuI6O/lFdTomxPpvr2zxnSjFPc+O6Il1hKGIG0XzLJnbZP0HkIpy0rf4 VWXRs/1G4t5E/4rjO9zqYtWyHm0Z80QoyGOoMqeLmqeHYGLfUuMnWCBQlpSkveYesWub KiXQ== X-Gm-Message-State: AOJu0Yz7eoY6aWQW6UHihrPHUnLh4FiZHuHOjBzDkv6frit0NynPxEue hh8kga1K+uJIvcAu/7+yhABMN0U7NkConcWmI+2WjdBatZvgLEijH2dKikJ+G4VTulKfeLVbKcB c0WMf3S9KpfhOiCL/DC1WoIjdmQMZOoZdSl/SVdJjaL7ReZRoJ2RXwlO2ywZg5GHXe0s= X-Gm-Gg: Acq92OGaIUeT5k48ra5HXts5JDw5jRvDaCZhyx3yH2BlexhrGfyom/tkXp18Wx9d13m Sc08ez4mlFhHihcQB7fSIHG8m1yPWZJ8o3/NSJCDrrGG72SHDHdVHP/3lrMREYIcvPQWSIg/Zm0 xw4l66wOKSeWRMHkBu85WIKAGqXdpDLBAfDgIgFQuovuVuP1Y13L3ayjZVad+CxvEtMq5CqEwhf oN4sA0pz+I3IPXHYwkwHWTBQPkRwEOsU0VHlTyTEB917aPBsEFk61JYrrZenBqllX+r+Y4sqb+K 6nMDz+VvgtWRbe2pfTmfDT+4Q6paIRJH5lBNVCxK9IZiOekAonXn7hGLxGmEaqUgUqe7q58QK47 otuSj7jGtN6l0YEkLCR8Co+4asSw6xi36yOR5shsTPgz+XnYwPvI= X-Received: by 2002:a05:6820:81c8:b0:694:980c:9610 with SMTP id 006d021491bc7-69d6ee42b8amr1518148eaf.21.1779373559121; Thu, 21 May 2026 07:25:59 -0700 (PDT) X-Received: by 2002:a05:6820:81c8:b0:694:980c:9610 with SMTP id 006d021491bc7-69d6ee42b8amr1518130eaf.21.1779373558746; Thu, 21 May 2026 07:25:58 -0700 (PDT) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:bb10:ae82:b7c3:d15a]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4903c9abbadsm30441925e9.8.2026.05.21.07.25.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 21 May 2026 07:25:57 -0700 (PDT) From: Bartosz Golaszewski Date: Thu, 21 May 2026 16:25:37 +0200 Subject: [PATCH v4 04/10] 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: <20260521-nvmem-unbind-v4-4-7fa136759491@oss.qualcomm.com> References: <20260521-nvmem-unbind-v4-0-7fa136759491@oss.qualcomm.com> In-Reply-To: <20260521-nvmem-unbind-v4-0-7fa136759491@oss.qualcomm.com> To: Srinivas Kandagatla , Bartosz Golaszewski , Johan Hovold , Loic Poulain 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=1426; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=QqJ2lXGWEweh2aOOuwI59KOnCuRsg1zkqXgi+9+Hm0I=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBqDxXnqEOW7hTB0ALywllcpwysG0t7ch9/Kqt+D 61U0Uqf+6eJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCag8V5wAKCRAFnS7L/zaE w74UD/4xF5B9JkK7TxoMFKbgEprddLaJqfudi+7wEXKtOEprGTQRbi/3vgLBHxn0IjI6fhaZK8Z D6tj5JlWN7O1PFpn0BdDW1UUaJA86IXox9TQsh1yKsUG4Bh26Bd5dAJZaOjp/cphaz7TVM/UrTc 74nV5MS15kUKG6luHiAVEnKSnQSYERKfyy21LWOclyqrHMqMbIV85qIY5JwuRInoL/GhPJOE9eq Jz0/XVU5G/tbzo5iJX/yKbXtjbIrBfCb95lZEramIABvyeZR5o+uGNFY0BGjEOnYMhx6DjAelFk VHsi0EUL6JW1EilAUK4BD65s9XlBRDHbs60W89DjoXtYwJBG8ZNIrXe54Zc+1L7ckVnBA2BiMKv teFfx5lqC4p2OYz8Cplq5rUIqXE7EVUPROF2X1n9DAabcYHCl6RKmJfp9YcW7GUcbJl84hSQCPn cVw6lzaRrOXkOhcTQLk4XCOFx47CBwdUfZL48ROEWZ828iRRSRnprrpE/dLiA/reny7QMt2+K7o Kzbb9Mh6UDTExLyGenOeTlm1ez2pHDHWn87hfd954ZLeM0vuHX3phjJoPQVqGb8OS8pnOllCc03 NNwovcDI8MbdOEFHXt7VH3UiaJuSNJpdfeOmJkGP5ZU5OW8qbJORGpLdbqRACI8je9AwhfsVK4n AwHIoankeZcD+Ew== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-ORIG-GUID: ww6wSA_s5OUTggthBg26_TBgIEHZaqqr X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTIxMDE0NCBTYWx0ZWRfX7V5Wqt8dn0W9 Xp3QpTVGNIMBgAmCXuxeS9vEmSHHs0qkQSd4+kk77m0qv6GAWRcVYz8HmIAgBgKvg/XvgDA5K7h PVn1a38gJKCnFtLnTgoxSQDIGqDqKu/iIab5cuGFTz2qPrRrEJEvKHQ5i/i8C/U1jzyYohjBYv9 e73Ecev6LHrAHsiGbQAs1bhuMvYfmYzIF8tgjfx0yCyLQ9WspDv+N37157GDKXdt2A0ndi+VA8t w/CoEGDq3faYCbRnkztGbKWAeYtS4OxzvSXJPTmRgVm1qRXhU5BvDcXoHdLGfeA9b39U1cZ6FHC brF3/o85nlhQMrFkFnqLwrq8kOXJ7tOfAakX9dWz7X35uNVUBPyPy7XOVOSEVXlGkBD/9gTcEsZ ImMs+17OI9tUgkIMYaBYscsWeSllH8G2xeIiPgXT/q/ukZ8nm6s4NNuWRBbn79wc0UlEaLcsvkX 9Y99lTWughITamIXIIA== X-Authority-Analysis: v=2.4 cv=YfyNIQRf c=1 sm=1 tr=0 ts=6a0f15f7 cx=c_pps a=lkkFf9KBb43tY3aOjL++dA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=3WHJM1ZQz_JShphwDgj5:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=ii2iuPLuu9iRZ_mRmhMA:9 a=QEXdDO2ut3YA:10 a=k4UEASGLJojhI9HsvVT1:22 X-Proofpoint-GUID: ww6wSA_s5OUTggthBg26_TBgIEHZaqqr X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-21_02,2026-05-18_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 bulkscore=0 priorityscore=1501 impostorscore=0 phishscore=0 lowpriorityscore=0 adultscore=0 suspectscore=0 clxscore=1015 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605130000 definitions=main-2605210144 GPIO setters now return integer values and can indicate failures in lower abstraction layers. Check the return values of gpiod_set_value_cansleep() calls in nvmem core. Reviewed-by: Johan Hovold Signed-off-by: Bartosz Golaszewski --- drivers/nvmem/core.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index 06d7f3d819084579434370cd12c6b263abff196e..bf5dde6288cfa75cab4040c6b93= e3376e87fc691 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, wr_ok; =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; + wr_ok =3D nvmem->reg_write(nvmem->priv, offset, val, bytes); + + ret =3D gpiod_set_value_cansleep(nvmem->wp_gpio, 1); + if (ret) + return ret; + + return wr_ok; } =20 static int nvmem_access_with_keepouts(struct nvmem_device *nvmem, --=20 2.47.3 From nobody Sun May 24 20:35:16 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 B30483E1718 for ; Thu, 21 May 2026 14:26: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=1779373564; cv=none; b=IEhDWD2V8bMT7PPWWjoX6Hc1T1CIMris9zipdPLzx/hRu4G4hmw+Ogp+3YXfjA2NZhCi0HFALRJ1ClHNbpQQaVXauxMK1Utoqc+vT8UItOUqjVsMnYHnMLYNEB5xwq0h5HODvkt3d84JYtjnj7FcFKxQN+WSuQFaOkM6KpC2L9I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779373564; c=relaxed/simple; bh=ZdTk1Ziexd4QriIf2QJ2Q9EoStiw8d8kyLYkSqQPIiU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FLVYpNpXT4IJCkSJTdeJtNVRrWeiIlG2M0upRCxpwgm/5VTSP/1U00kPMgayX773nv25qm659MjjBmOYoIdOFcXh8qZkRllM82uWh8SMybEmi0YysktHKdkzcSPnwdOwVN0KWdF2g22pTuwZd+kDhGWeZSNKIqJirkNaKDXBcig= 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=RVty6RUQ; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Bs7SO8Kx; 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="RVty6RUQ"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Bs7SO8Kx" 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 64L9ALKg3555946 for ; Thu, 21 May 2026 14:26: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= fL2dHwSbHszwitWCSD9mEtveo5+L6thdY8thu2dsFPs=; b=RVty6RUQzlTHOihn ZDzSVtv+m4IJU+1QaGO2ZH0LOoPeVlfBOpIeT+pulZD3L+f2IpqgYWiYHAOkEr4a zr38iDR/iNh6Odi8cMFZF/DkKFZN1RkRK5wDgtBQwXjxj47umFIRoCjKM6JRB0/J NjkbsIF223i6DaUUkdHo7s85Tz5g6bggcHuq79NNBzUV6QmC628n6rjfkBUAPBdt VEl7ZXbw8ct2hTTck2ABfMn3psWinmmYabhf2JiepFpT/RMc2SgAhMd4umnks+rt XcekjLNMCdr3oS353RT1z2r2Ip7cyLS81JPM6uw6mxx4llNoWkPSEDYBvrSk4KYl GIljWg== Received: from mail-oo1-f69.google.com (mail-oo1-f69.google.com [209.85.161.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4e9fb6myp5-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 21 May 2026 14:26:01 +0000 (GMT) Received: by mail-oo1-f69.google.com with SMTP id 006d021491bc7-69b76062cffso7905283eaf.1 for ; Thu, 21 May 2026 07:26:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1779373561; x=1779978361; 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=fL2dHwSbHszwitWCSD9mEtveo5+L6thdY8thu2dsFPs=; b=Bs7SO8Kx2G+jVh+eFyVYR25JjcbBE5oXF9AogumiaUGvtuX3ycQLvs8VpcRMbGXOhq FQOmDGUwJXbXy7I3rZAF/2chNuo8O/Czw0zK/XXN9GdPYUxj1iFzQhmcycVJ281+Dw5r 7iE5qb9SDqoq4snWbFrSgg9wLqGiFqpAk7CfEqcrQM67V/qHPsUkNsmM4HcBpU0b+/79 NUmn9Iwd7WwCYJs42YYRISRMzPeZTKnc5ylhCkfVpvV0BSLcyldW+JtYjtz2nIPzt4GF qrs/kOASejUwL42qPaGPYmOqMBvjuh6zDcTHPBR0/lzEVld4x5bLoiVJjmKFCV9XlxMG kacg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779373561; x=1779978361; 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=fL2dHwSbHszwitWCSD9mEtveo5+L6thdY8thu2dsFPs=; b=Rvk6A0puD0qOoRc5Dq3xuLpSlpUqVdS2xHs2AKrW6noCraweHYGbWOn2ZnpJuI6c24 RW02du2bAlA/YdsR+OU8nuXZQ+UDgeZhwCuTJNjHfuefDjdvKI6a797VIE5hNZ3UYqSV C2w4ZquXMk9m/09rpxskq2glC27MEOzMfBOdYY9QpEK6EnsUyBRbAyYTeF2mkmBSPLvK Yj8wEkq+762rRvrvbFwRlv1w8DH4GlWdrrz1DgrN5cfwQM4BVMHtXzFGNpHcjcV5hDwo ZmPKkEaWyiOxSq2PvrY3PkT5tUJ1B2jh3q6krN+h10ddNsxoPyqHTCgHHoV2X79Dn3KC vV9g== X-Gm-Message-State: AOJu0YxSrC/4xxlBYzxzIXCO5M0444sNTWNuUzrcvS42wRJCtgP6jUA1 KIHxZBJkbggPLU1LXGlAnMKGVgQk2p2eZVjE/MichsASXQcHEcNdiZYU7luEKuPd8Y1ZtxSlIwL BSLmeOxfX1jEXgxDwPLGycTTcO6ctYgbeYRoCoiSMLNB1GrevI2akoPNp9ETZZR6jlOQ= X-Gm-Gg: Acq92OGRqC1MELWZVE+4ov2JRE3G5apb56rkLkVUt3unmwiT0tIbYXkPXj5kKGdnasB 5Mgx2xfGIaLYC4PJAOM8/vpgmCusTEMvDBjGtKQYHQR47lEQ2FU5ipRkJvfuoqWtJ3vEsaLKJn0 i5eM+wSO7frW61VaiyqiW/9bhu6KFk6Cf5ZHhr40eyBvve3dVYVIp3u5evQxakIWi4gOA6Zrg7A SB4DJx/eG6OnA0LfkpsPnz++diSUGohIayDDYNxdHnPIWTUUVbzwI7kcB5CP4hZY8rB88mjbR8W BxU0KGFay3Mgh893lBgrBMc19hmx2o4w9lf5lVLx5zgf+icE3vipJ4+ZvwYSTtnQyfNxz45ppvT qzJTxDBCY91mK0YWHnr1uUgvsEmMplXVRNVAnPp6618V5L8Mh2YA= X-Received: by 2002:a05:6820:4790:b0:69d:7774:fae3 with SMTP id 006d021491bc7-69d7774fdafmr512843eaf.26.1779373561039; Thu, 21 May 2026 07:26:01 -0700 (PDT) X-Received: by 2002:a05:6820:4790:b0:69d:7774:fae3 with SMTP id 006d021491bc7-69d7774fdafmr512828eaf.26.1779373560572; Thu, 21 May 2026 07:26:00 -0700 (PDT) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:bb10:ae82:b7c3:d15a]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4903c9abbadsm30441925e9.8.2026.05.21.07.25.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 21 May 2026 07:25:59 -0700 (PDT) From: Bartosz Golaszewski Date: Thu, 21 May 2026 16:25:38 +0200 Subject: [PATCH v4 05/10] 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: <20260521-nvmem-unbind-v4-5-7fa136759491@oss.qualcomm.com> References: <20260521-nvmem-unbind-v4-0-7fa136759491@oss.qualcomm.com> In-Reply-To: <20260521-nvmem-unbind-v4-0-7fa136759491@oss.qualcomm.com> To: Srinivas Kandagatla , Bartosz Golaszewski , Johan Hovold , Loic Poulain Cc: linux-kernel@vger.kernel.org, brgl@kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=6918; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=ZdTk1Ziexd4QriIf2QJ2Q9EoStiw8d8kyLYkSqQPIiU=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBqDxXoiTfb8EwnK775yHx6HFIcm/PfscJ0UWpqw 53oHM0m1IGJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCag8V6AAKCRAFnS7L/zaE w7H6EAC07JM72XFbLfJIJpjIn6jge7yHWF5jRMKSVJWz7y2Vd6xS48OYFVpkGOLIoqQg268QacW d83vKGG5pLXbLVUeC3Au8wLku4ABUSAcBI3da3Hpvc2UfvhzaIrrG+kqb/cdlBAYOxTBI85BMmo HXQBrVqWjjMPe05D43d68ASpb7IuKDU4TU6Qx+L8Rv82zPCsCzf9t0OB+P85LgzM88eUOiZW2kt bHOaH/MFqZ44ruRb3G7m9emz2GAz9exVP9FaVBvlYYd33PawvKwJhyc9hDMsWKkqhXxLjOf8Gwq Nkc5W/xQN6WMtQwIAyGobn+cfiZmre/Xw0FIfhrrSsMuRIZ7P9XZIlFxukZu1ocfg36v0COV6Bg 3FONN40DAKNidWlrkjnfHSdF4HSxfUYF8leZLYW3odSFLwSee45ne0VtlT+ZSe39MzO3ZRXD9qG uDxDa9DXjg9fTBd8Aqk8RI8+ogTnR1r2NyE1tDBTNC4wKWZjz6WgtWBPWfUGmZXkkjClCBvZZ71 pPBORv7X32ch9pjr/S6OMdoh4L+h24NXzGI0xW4oS0iDH7jtWQd7hyuDhCIVU2i239EVoOWwSu3 81bQcm5n18zPFkOMtDq6wNnlGsIifSMeY61Q0mHK3yq1RFnUStyKExI+r/CQoi/ZTBppGx5lvM8 /AMw/E/M02jGyEw== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Authority-Analysis: v=2.4 cv=do/rzVg4 c=1 sm=1 tr=0 ts=6a0f15f9 cx=c_pps a=lVi5GcDxkcJcfCmEjVJoaw==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=eoimf2acIAo5FJnRuUoq:22 a=EUspDBNiAAAA:8 a=uP1ucDPQAAAA:8 a=-rJ4p0UJwyiPJ0m2jL8A:9 a=QEXdDO2ut3YA:10 a=rBiNkAWo9uy_4UTK5NWh:22 a=9a9ggB8z3XFZH39hjkD6:22 X-Proofpoint-ORIG-GUID: VDZmAOxwe1Br1P7R361SgbVCoMJ15BXm X-Proofpoint-GUID: VDZmAOxwe1Br1P7R361SgbVCoMJ15BXm X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTIxMDE0NCBTYWx0ZWRfX5yEnbIIbwgmb m4rgBMlSZcYe4BIBNRu9JwjVmzzwI9RPz7PLarW9sGFr0TJNSwzHX/rVUJBmnpCs6YacdHchxTW SBVQ1869lypvExEaLItAG9Tm1kkZbe9GrObdkgxzgY8pOI0eZiTDYS8wI39/pMf6GO9vgCma0Be VNm+iyCM7PinuBmjyhZyh7QbfRJCtfqbIWTJYs42c0tU0+fzrvF/ZFBCRZIWGO0SPDlCuPCLlLj 3T6PLD2GvtNo6jyC3IipdgRkNiY47JbR8a1BFwOX8nnklJke4n8mxBRCGsmijJO9Qy5asFbh2/f e2pL/H843UfhBizCDp1d/TCaiftOq+QG2c4tRD4SI0hqslPj6nSYVJq7aHwS3fcqEBuHw+xGI1T Y/hpGJEH7VtHMBn7N4pGn1RzO8WVb36/Zgoyiqke/IHKgab/QK5DPm3iE94b/kEBu/nSB96A0xk 070fqT4qrnqDgbbF2EA== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-21_02,2026-05-18_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 lowpriorityscore=0 bulkscore=0 suspectscore=0 clxscore=1015 spamscore=0 malwarescore=0 phishscore=0 priorityscore=1501 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605130000 definitions=main-2605210144 Use lock guards from cleanup.h to simplify locking. While at it: add the missing mutex.h include. Signed-off-by: Bartosz Golaszewski --- drivers/nvmem/core.c | 88 ++++++++++++++++++++++--------------------------= ---- 1 file changed, 37 insertions(+), 51 deletions(-) diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index bf5dde6288cfa75cab4040c6b93e3376e87fc691..623aeb9533c0124bb893d0c2295= 70e00cfa3c52a 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_lookup_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 @@ -1377,18 +1365,16 @@ static void nvmem_layout_module_put(struct nvmem_de= vice *nvmem) static struct nvmem_cell_entry * nvmem_find_cell_entry_by_node(struct nvmem_device *nvmem, struct device_no= de *np) { - struct nvmem_cell_entry *iter, *cell =3D NULL; + struct nvmem_cell_entry *cell; =20 - mutex_lock(&nvmem_mutex); - list_for_each_entry(iter, &nvmem->cells, node) { - if (np =3D=3D iter->np) { - cell =3D iter; - break; - } + guard(mutex)(&nvmem_mutex); + + list_for_each_entry(cell, &nvmem->cells, node) { + if (np =3D=3D cell->np) + return cell; } - mutex_unlock(&nvmem_mutex); =20 - return cell; + return NULL; } =20 static int nvmem_layout_module_get_optional(struct nvmem_device *nvmem) @@ -2121,10 +2107,10 @@ void nvmem_add_cell_lookups(struct nvmem_cell_looku= p *entries, size_t nentries) { int i; =20 - mutex_lock(&nvmem_lookup_mutex); + guard(mutex)(&nvmem_lookup_mutex); + for (i =3D 0; i < nentries; i++) list_add_tail(&entries[i].node, &nvmem_lookup_list); - mutex_unlock(&nvmem_lookup_mutex); } EXPORT_SYMBOL_GPL(nvmem_add_cell_lookups); =20 @@ -2139,10 +2125,10 @@ void nvmem_del_cell_lookups(struct nvmem_cell_looku= p *entries, size_t nentries) { int i; =20 - mutex_lock(&nvmem_lookup_mutex); + guard(mutex)(&nvmem_lookup_mutex); + for (i =3D 0; i < nentries; i++) list_del(&entries[i].node); - mutex_unlock(&nvmem_lookup_mutex); } EXPORT_SYMBOL_GPL(nvmem_del_cell_lookups); =20 --=20 2.47.3 From nobody Sun May 24 20:35:16 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 803FB3E2755 for ; Thu, 21 May 2026 14:26:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779373566; cv=none; b=u78W0bwGRfLR9Hid/DdMjduPi6nhUEC/ivZCPqYpRtXuzXtZ/w61DQfm8JKOvS7xzcruSkrSEec6l6vhiEK2XelgPBL1IHQhKuToWGLUihGvdBei1HkpRparbEsyGqATImBhac+cnHXFB743o0B470h0M/1fSJcpGZoBc6PifQs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779373566; c=relaxed/simple; bh=OpCqnk0au4qNbjl5FDq5/zEMy4u4lMtxcHH0/GMADGk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=aY7pl6/7s1oT36wzmnPoOeanxD00xHiWmyFGojWlXUsTurHG9jESNIh93oPH7FzTyKwzyRbbFU0XlAc7wLrKv7e9NXT1hgxS1V2UuP0bSc94dYyCjA6t0cyA4Zya+MasQpuz71ywttiqxJ2cFTl9wcD2LJY8f3O18tLxXE6NSCM= 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=iNRiXZBY; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=UELwy/lx; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="iNRiXZBY"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="UELwy/lx" Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 64L99plf3451454 for ; Thu, 21 May 2026 14:26:03 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= WKu78rcZ0TFW/Rc/isjo5OvpER4cnL06qS34VVAM7SA=; b=iNRiXZBYIJ7Vd/Ek 5wzXKh6LBM7C3gY1uvwzaHMjUMRY/csyKglwq2TvMWP3hwFveK1RbsNxwSGL/dnw sepDU+7iJ2UMONSyiKFhV6O84Kf5m8+YsbP2kdgO3fVcob12xLbC+YKD9sE2DcBm ZWVhooNif1gEDdMd2WyUGhlZ3uXL51jp3OcNKdzKuKEJobuFgsxF6gCzmDRl3qz2 bA8jnZUFBJmgwFpUaWp5DZ5LVVqrB6ndqbSA9MS2aZfjM+TAYwKEO1aV98UhFWEa 5hcxd+TReDeq0NjzvZbyP+OOzlUVWk2+0aEbE8aVfuYAXNTEKWiF+G8ER3Bmrjwy Vj7OYg== 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 4e9y1h99fn-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 21 May 2026 14:26:03 +0000 (GMT) Received: by mail-vs1-f69.google.com with SMTP id ada2fe7eead31-6312aa1d7adso4876610137.0 for ; Thu, 21 May 2026 07:26:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1779373563; x=1779978363; 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=WKu78rcZ0TFW/Rc/isjo5OvpER4cnL06qS34VVAM7SA=; b=UELwy/lx6tvKjfY0AmJi3QIkQ/WOymlLorhIe/0gTJjisHU1tCCCGeu9EVzUscVM4U 5aUtbLOVrqZmSiF4FvTg6HKQlZMg0eh6g3tSMtBzavqWAT0jzFhoj72Wpy5DIH5hB857 tDx/uWx7wCxbZrHZVdU59WJfoktZZEdFyLQfQXvIGItAQC9SvQ3viqFaCh0LcKf97+6Y wU9Ybzug2ppbzZ4ZCc3u/nFUsYUcSzNB95nXymJV+ZtlLF5btzCZiWRxvq6T4c24vbjb a2WrIF2Il9WkiRalM6S1+/r4FVb0lEd/V15BWXgnrclOtibbVQKKeC/HWPF6yzRaB473 /WJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779373563; x=1779978363; 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=WKu78rcZ0TFW/Rc/isjo5OvpER4cnL06qS34VVAM7SA=; b=btDpsUFtiil1E0u/6MiOLYCp+OPlzGmososwhWlU4EWyDWlTpo9ET/RNC1nFcf3VTv ZY0916c/o7cP3EvRYRecTfHWLX7+qtsYas/N96VRAQMJKvqiZ3fLVShuUHYhhZxZhBjx 1aMiO2ao5HxBBnWbYSNndS6/3MAbxA5KRxSWc0otZvNH792XX87DN/5t7L1MoZaU4PeQ GWiFJJOWY+/JOjE1r2+ndcWIUGq8W16cTwaygrlFiCjdDBrtzsfBDTSoku0avVlI5Z6r ys7G0NTlOeZPJo29wwiG+x1r56Wti6D8Ox9Cinbu8u5VWOvBMq1JDbqW43ZbKsrTWkSO fpnw== X-Gm-Message-State: AOJu0YyIXURzJV3g4v25Pio+LSy7ZaXnq0d8+k4JEHW5FssVwaV5daGk zueGTUakxzktJ7hGCVFBmEsHeBoV5ZBLu4SqN8mdyLmR7Os5dbP7RSpYPktzSCnvhzvIcJG1hk/ xa6oSOEeLGjGJjvwnWox746jVKqnS78wfUn3DZSz9pMyRQS7VBbuCOrdVH20bFjQPeoA= X-Gm-Gg: Acq92OEYrmlPE4pbD2MeciUKTD46JShoXdLrwlPmAgqNMnsubdh1Za0gYzy939P4W/H D8TGwlC5DQaVVAae8UctCVF4TCZHBsZdqUsabotOHrz1C4fUcHLy+ovF6HQbpgdCnv4oCrFmgK8 ANzrGsvXKAquntBRSv5VBMwPLqS6XfYhq4IOqtxvB82EjHqgfb5ajvlsM1A1pWsZhCFDOgZvSI1 BLDnnJX+R05/5283nWb0/9s4QQINqHhOqGOescdrv5lbKdM2A/W7F4bskZI8UEjsu274Hym1x1s brd1yuMrLznJZZCvKX0iGjcFmb4A+rEt8uCEVXIShpvST540/EHtZZT8/qESugy/gmVgslin0lX VQBZFWCwA6M7sDHNWQRk0J1loykxeSTG6UjnaUZj++KWqYkhHg1kBXWIvQ1alQw== X-Received: by 2002:a05:6102:4426:b0:631:ab8b:c34e with SMTP id ada2fe7eead31-6738ef6ccf2mr1748201137.11.1779373562853; Thu, 21 May 2026 07:26:02 -0700 (PDT) X-Received: by 2002:a05:6102:4426:b0:631:ab8b:c34e with SMTP id ada2fe7eead31-6738ef6ccf2mr1748142137.11.1779373562296; Thu, 21 May 2026 07:26:02 -0700 (PDT) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:bb10:ae82:b7c3:d15a]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4903c9abbadsm30441925e9.8.2026.05.21.07.26.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 21 May 2026 07:26:01 -0700 (PDT) From: Bartosz Golaszewski Date: Thu, 21 May 2026 16:25:39 +0200 Subject: [PATCH v4 06/10] 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: <20260521-nvmem-unbind-v4-6-7fa136759491@oss.qualcomm.com> References: <20260521-nvmem-unbind-v4-0-7fa136759491@oss.qualcomm.com> In-Reply-To: <20260521-nvmem-unbind-v4-0-7fa136759491@oss.qualcomm.com> To: Srinivas Kandagatla , Bartosz Golaszewski , Johan Hovold , Loic Poulain 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=5070; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=OpCqnk0au4qNbjl5FDq5/zEMy4u4lMtxcHH0/GMADGk=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBqDxXqjeNhvvLl8nLH6NDJhmm/F3TbVO7h2H+1M YMhm351FDuJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCag8V6gAKCRAFnS7L/zaE w9hXD/40XLbbGO+bNfRNJeUiB1aQvigUMr2t3mbU3oApqGIr13oUn4sdLofSNZBAF/xMx0jGeTC Z1qkp5yCDtOfIaT2JMNXZyrwLc2ojEBR0a7KJjCznFAaz/639p8DmpbpTmOJh8NlLUDjnS//5Db EaNafguYatnJHhQWhEDfgl678Si1S7Vw9BKnnvV1E3P7yiMwiDKdXzvy1i/pUjG0rtH50vSz43O KE3gJWhkuwIaBQgLfqhXXv9wgw/Fxk0Wqe1ovjloFllxhX56xEk8pzmRqnacXSL7sUuiMPI1eLR 8bHqX6ga4sI0w1gNyUxSP9dkhsC2zJyBHKl+bKubqgt9Y6u5knIMVcceo7suvhhqPSchs08ezyP I6VMwt6CIayxVMDYq5WCLgx0KWNPrkTKq41a4B95i33YcAl673A04LckYyjU15lQYPs9jUjUy/r d016FzTXMgQX03F9zoChms88qQWSlh/szasRcdE9dnevDKJyzMvqP4YVp2gUdriWjcf3sP73JlB tADZlOmAKs8/OSUUFzHjuHPni23rHTb0WBgOX3lOm+1hYCA+MRoKKqEhrKd+WNAAOV5HX4YFyPu FwaVhSQ6pyDxRupiwtT8cqRzlAld3oJZ4u4MydFocHx3o5wr5wmfyZrLmSGParbmOJ7+Y1rykOn SM+0ex5fsJE2sMQ== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-ORIG-GUID: YHZu6nmFwjpZXSOkHsurJMNI7mtAv-6L X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTIxMDE0NCBTYWx0ZWRfX9UPG6WeeuxTJ OcNJx7Z2KcKkFmRfSqxGgXraLoF41UtJCS4QIWFq7e7jHRzMpv/K2PPJwiwxotOXYqO4iw5N8bd 7OiF3PHMfb5jv5mf6SHnJsBuDtmWSLnTC/TH0F/g9JV5JRBM+rKXHWvV4XoQGJnfBP1j3OEBWm1 Dr0K6vWoeiSGM59f37U1Pt5SOoNREuRZcXF3uiMbMm0j6CduqOXRYAqqgfaSSp1UMVuD1CW2CtQ J3dJK4ugJhYCIqHrSdJDzqXS9gZKoKEMug27aMEL/ZfNMcIldOFwaqK2c7HeKz3FJune1AZHehY MHeDiO9HQSl15AONN70cu9CEXDCprs3RaoxTDR6ofsrSqzzX2IPrzpamn1BV3QAVL4KERkCibYB 0x8GWx2RusaW8vrg3kslnXUMtOuDL9uVaSfsRPRXgKi0ZeJRHLtFv3TCxzQw0wCtMPDDORnC7YX LC8QOA2OUlJpgvuTRiw== X-Authority-Analysis: v=2.4 cv=YfyNIQRf c=1 sm=1 tr=0 ts=6a0f15fb cx=c_pps a=5HAIKLe1ejAbszaTRHs9Ug==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=3WHJM1ZQz_JShphwDgj5:22 a=EUspDBNiAAAA:8 a=SMy0nb2-HfDU0vXix7YA:9 a=QEXdDO2ut3YA:10 a=gYDTvv6II1OnSo0itH1n:22 X-Proofpoint-GUID: YHZu6nmFwjpZXSOkHsurJMNI7mtAv-6L X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-21_02,2026-05-18_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 bulkscore=0 priorityscore=1501 impostorscore=0 phishscore=0 lowpriorityscore=0 adultscore=0 suspectscore=0 clxscore=1015 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605130000 definitions=main-2605210144 __nvmem_device_put() is wrapped by nvmem_device_put() but there's no extra functionality offered by the latter so just fold one into the other. There's still the corresponding __nvmem_device_get() so in order to keep things symmetrical: rename it to nvmem_device_match() to better reflect its functionality and not confuse users by its presence in the absence of the similarly prefixed put() counterpart. Signed-off-by: Bartosz Golaszewski --- drivers/nvmem/core.c | 35 +++++++++++++++-------------------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index 623aeb9533c0124bb893d0c229570e00cfa3c52a..24e079240ebbb0899d6d91f8147= 210a64d4414cb 100644 --- a/drivers/nvmem/core.c +++ b/drivers/nvmem/core.c @@ -1106,7 +1106,7 @@ struct nvmem_device *devm_nvmem_register(struct devic= e *dev, } EXPORT_SYMBOL_GPL(devm_nvmem_register); =20 -static struct nvmem_device *__nvmem_device_get(void *data, +static struct nvmem_device *nvmem_device_match(void *data, int (*match)(struct device *dev, const void *data)) { struct nvmem_device *nvmem =3D NULL; @@ -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 @@ -1165,7 +1158,7 @@ struct nvmem_device *of_nvmem_device_get(struct devic= e_node *np, const char *id) if (!nvmem_np) return ERR_PTR(-ENOENT); =20 - nvmem =3D __nvmem_device_get(nvmem_np, device_match_of_node); + nvmem =3D nvmem_device_match(nvmem_np, device_match_of_node); of_node_put(nvmem_np); return nvmem; } @@ -1193,7 +1186,7 @@ struct nvmem_device *nvmem_device_get(struct device *= dev, const char *dev_name) =20 } =20 - return __nvmem_device_get((void *)dev_name, device_match_name); + return nvmem_device_match((void *)dev_name, device_match_name); } EXPORT_SYMBOL_GPL(nvmem_device_get); =20 @@ -1209,7 +1202,7 @@ EXPORT_SYMBOL_GPL(nvmem_device_get); struct nvmem_device *nvmem_device_find(void *data, int (*match)(struct device *dev, const void *data)) { - return __nvmem_device_get(data, match); + return nvmem_device_match(data, match); } EXPORT_SYMBOL_GPL(nvmem_device_find); =20 @@ -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 @@ -1332,7 +1327,7 @@ nvmem_cell_get_from_lookup(struct device *dev, const = char *con_id) if ((strcmp(lookup->dev_id, dev_id) =3D=3D 0) && (strcmp(lookup->con_id, con_id) =3D=3D 0)) { /* This is the right entry. */ - nvmem =3D __nvmem_device_get((void *)lookup->nvmem_name, + nvmem =3D nvmem_device_match((void *)lookup->nvmem_name, device_match_name); if (IS_ERR(nvmem)) /* Provider may not be registered yet. */ @@ -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; } @@ -1444,7 +1439,7 @@ struct nvmem_cell *of_nvmem_cell_get(struct device_no= de *np, const char *id) } } =20 - nvmem =3D __nvmem_device_get(nvmem_np, device_match_of_node); + nvmem =3D nvmem_device_match(nvmem_np, device_match_of_node); of_node_put(nvmem_np); if (IS_ERR(nvmem)) { of_node_put(cell_np); @@ -1454,7 +1449,7 @@ struct nvmem_cell *of_nvmem_cell_get(struct device_no= de *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 @@ -1463,14 +1458,14 @@ struct nvmem_cell *of_nvmem_cell_get(struct device_= node *np, const char *id) if (!cell_entry) { nvmem_layout_module_put(nvmem); ret =3D nvmem->layout ? -EPROBE_DEFER : -ENOENT; - __nvmem_device_put(nvmem); + nvmem_device_put(nvmem); return ERR_PTR(ret); } =20 cell =3D nvmem_create_cell(cell_entry, id, cell_index); if (IS_ERR(cell)) { nvmem_layout_module_put(nvmem); - __nvmem_device_put(nvmem); + nvmem_device_put(nvmem); } =20 return cell; @@ -1585,7 +1580,7 @@ void nvmem_cell_put(struct nvmem_cell *cell) =20 kfree(cell); nvmem_layout_module_put(nvmem); - __nvmem_device_put(nvmem); + nvmem_device_put(nvmem); } EXPORT_SYMBOL_GPL(nvmem_cell_put); =20 --=20 2.47.3 From nobody Sun May 24 20:35:16 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 522243E558C for ; Thu, 21 May 2026 14:26:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779373567; cv=none; b=u+mQUeUf8AVfxtgNvvsS7v5KKy5RFcWD/nTZuuYmxAwt78yXFzjUIRAY7LwyWhbaGYLGAIcsdS2wlGRStZ08Rv8D+QlUyXshI3mqtBrTn+DljXiiJDBSYbh4fmshd79N7i88GXNu+Lc+faR7Q+G7Mvh+IV3drHG6xOqR++rXAZU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779373567; c=relaxed/simple; bh=H4VTxzwSRDhkXmVBottIruqP1ZHQ+WtaCvrCsMy96vg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=NYMPEQ3Cich+OMf/H0BLuCCurbfzCulqXf8jZsh8kI/Rle+YwdbprcA1LA3Brcx3x7DWjL+t1RAEEmjcN5+7ZsH0dJP2Tdhw/VxNoS4UxjSy2GfJjSmYnjHL4l6bSSjy8sf2i4wgaToXwPx0+fMEPwa3KbGQorr6E0qV/KGt+NA= 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=RQHAJ6xO; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=WS+F8gAR; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="RQHAJ6xO"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="WS+F8gAR" Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 64L99oR03009546 for ; Thu, 21 May 2026 14:26:05 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= 1RJryf+QQ2nHWkSW1Rv1c9yfe/EC2A5M6ANbh5cksho=; b=RQHAJ6xO0vGBkGRE uvR6rr+9JWiU5FQxd6TnFURk05TpVYl7Bj45/i3LlhpELp44ouRdwfjOTzHqMz43 AYdR+aTYNiClwfD6erwLCwQyYrx5bhxOvQfrAjI0e59+nEwXnPfa5ENqdCB29qQf BuzklE55CbiWif4neygznujZnlHrJo6gsiBE7Aeo+9o7W3ZxeFbpdd80AM+aeSLx 9pdg5+dBjLy8A76/MFztw9VqDXhIHE44jVzRPzqW5CczNfgMeDHMAXn44JvqDVxK vHQHbwZ/QC0e6HMIQfhaAqaWLe9EEiCE4OY4L6yMMpBtS0AxFPzgPd3qr5T9YpEH sHZ92Q== Received: from mail-ua1-f69.google.com (mail-ua1-f69.google.com [209.85.222.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4e9sr32n8j-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 21 May 2026 14:26:05 +0000 (GMT) Received: by mail-ua1-f69.google.com with SMTP id a1e0cc1a2514c-95ce6d50ea7so2441342241.1 for ; Thu, 21 May 2026 07:26:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1779373564; x=1779978364; 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=1RJryf+QQ2nHWkSW1Rv1c9yfe/EC2A5M6ANbh5cksho=; b=WS+F8gAR1xUTsKyC4AKmwwAx0hNK4N6lT0enxwAJSzas7fThjZUxoCbjnWBy8RvYSm nxdgNK2eUBcmmgB/uXj99JwAGxeoY+4CnOPKnWgf52zf+l9WoSipjuq9vVYrz0DfgYYQ k05g8CwW42M3SRfJpLv1x50gi7HiVatQh6TL6UyqmtAZde31T4XNtWacKnTP8b1p2fpm DlTsh0jdk7WHsPfbLSidbNbJGBzWz8UA6fuLUc/OR27jL5K7cIjlJLjrvDS4rWvk3ZiV NM22TWE1iIycgQ1/GvBw81E3msTSfYcvxycwDd5spZ2mnHVVWLKgE0TUYR9YatpUT624 Q3ew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779373564; x=1779978364; 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=1RJryf+QQ2nHWkSW1Rv1c9yfe/EC2A5M6ANbh5cksho=; b=BMBwe68jtz3DIL8ITgSxdK9ILH0A0zifY0k39HgaAf/kRcfVuKHMDa4tA4q3bjiUAR KxTE+x33GwKkW7EvpsKvUwj2C9EPqv6KdUaIcgoQiBGffzuAoWQYa+Gw+Ay59IF1ZAYo v+obH2Yq+Bvv7eS0Um+vR3o69VfActeDN5eX6tX1DaWzy8G1RYH5++tHXmsV9RYZV4RU KFWQJ5fn0DEmK/jn4pOPn67MaH3fIXDJppFND8R7n6S5YhXdE+Q3D17DR5EJHK8fvhBa 3RC5n7xL9W1OuxdZKO9EmKatUtqmN5HSPbKgderjRIHu1Jvmpv4W3NkrIvWz0bQhdY/S FjwA== X-Gm-Message-State: AOJu0YwYP74hlp/5TcubVZw28KD5eHbYQuaZt/WHtNf7dT4h7Rb/N+9w w2JpHnvueZ2RdV1N4sxpz2v/1s/PLDCAqKQ86plXrIclU/2JkHQwTuRrWMPSlyKSQ8txTMltK0p PBHGkwEI2HeEfQykrzotrdK+b+MlrC6d8Iaw7SZ+I53YOXxYrIy6Rfblnkceeb7ehVy0= X-Gm-Gg: Acq92OHi6W49uIx5gn29xltyPQXtr4f2tyvgLx6dpLpJ2Tmj5ZnQHv6BnloPXibbtJ2 tkXhaYP9qJC2Co+GchDnYcL87WTkaJK8V4rtdYthDEFyeH1BhnwbHaLMvBDNwKR+yy8r2HR2Kz7 aXdSydHHnYgmxMHrM8PV4lSt+cOc9NPOAR95rDBBMm7S8NzUR4jPmxLdQ59KcvUDMWwRjg4tIW/ MymKq6cryJ/v1e4DLt+7QuZWZf9qdphL846TAHVJmC2W/H8SkNFhQcwHAoBOtNzrn7gRz6J/ele 0mqHR4W8SIFz2SmPuSnFbUny8LjT6rxxnvuuN5eJTHfikB70jlmDX0VFdVGJ3kE7n3CyrDWDiby YSBhpzi9h9OyVEZbWVAFPE1e4FVniWSwYsPmdeqmHf4GDzQcsBDI= X-Received: by 2002:a05:6102:5708:b0:62f:4387:fcb4 with SMTP id ada2fe7eead31-6737bf05370mr2075989137.0.1779373564373; Thu, 21 May 2026 07:26:04 -0700 (PDT) X-Received: by 2002:a05:6102:5708:b0:62f:4387:fcb4 with SMTP id ada2fe7eead31-6737bf05370mr2075933137.0.1779373563922; Thu, 21 May 2026 07:26:03 -0700 (PDT) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:bb10:ae82:b7c3:d15a]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4903c9abbadsm30441925e9.8.2026.05.21.07.26.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 21 May 2026 07:26:03 -0700 (PDT) From: Bartosz Golaszewski Date: Thu, 21 May 2026 16:25:40 +0200 Subject: [PATCH v4 07/10] nvmem: split out the reg_read/write() callbacks out of struct nvmem_device Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260521-nvmem-unbind-v4-7-7fa136759491@oss.qualcomm.com> References: <20260521-nvmem-unbind-v4-0-7fa136759491@oss.qualcomm.com> In-Reply-To: <20260521-nvmem-unbind-v4-0-7fa136759491@oss.qualcomm.com> To: Srinivas Kandagatla , Bartosz Golaszewski , Johan Hovold , Loic Poulain 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=6098; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=H4VTxzwSRDhkXmVBottIruqP1ZHQ+WtaCvrCsMy96vg=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBqDxXryjDO6S4xFqu7taQUTpSvMBR34GFbgcZMk Jwh5RpvgIGJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCag8V6wAKCRAFnS7L/zaE w2iYD/wPhBHboBsC7QOdQIAnpAVqvtE2zsy2uPII8IC4hQnd81Vilgm0E0VyDoP8zKCBE0f3MPA xJ0W20mI2pH7jNsW45VuAkbwZYiDlZfpwoOg/9qbwoIxnKRQFUtHsgHvGPTQoe0Ls5pRUffU8Ul +RYYNzYc02zd9bCcXqUGs1nisFk6jOAbjbC7hsUW/mv9bU/gsxvJgJDwth4vvJ7ltQjEXSF1y6K QrRvBGl+ZiF+nv963jHAG0v1ITRPT4fa85FZX3PTAzjXjlqkqNZQH5Flj9MKf1nXIR6CRR57g0n nnYKglA1RFEf4s8VGfqiZtKXZuoIJoV/XCpUo+xzZbmHlCM5zYrBuN+unpAAX8W6CSI1tOowkYb gr7k9Jpmj33EaalgF6m4U2bsaiXkSZ9DEv+tr5/6N+Fly7lK0g1l4DwZj9DNOMUy2qMiNhw8a8b cEztkgW+JJDWzGr12R2AjPU88KvF1rrcGyl1Eve4eLuqLElaoMOS6Im+toAaWnKY0w+bCX/V9oO NAcPAi3g5eHiOCPc4SOE8ibV/w+1iL/IWla8u7CNqPUOmd6bT4fTsJAk/90CXe8ihNAb4OFh7Ra 2052mXZmU7NJR7VlIx9l6jIafKleHJn5jTbr3sLebO/9sxOQHMhiBKXZxxsNMjJZ36RXIUVPlpg z/wwYCLXlMsO3+A== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-GUID: _vk7MRKm4YpfiIatHdQ7kN84BZcZjEFA X-Proofpoint-ORIG-GUID: _vk7MRKm4YpfiIatHdQ7kN84BZcZjEFA X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTIxMDE0NCBTYWx0ZWRfX3+KPrjB7q/ZE RAg/quyyt+X7rWvd6mRpoH8X3e52hLfsRRhK3be3Udh7vE8hpKe8woSAcN78zrJb09Q57nydsTA sDBjnol6ZAn3tCnduv6lol4hxXZzvFVwAMqRnhgIKgl3s62dI7X1sl+qQ6SFIHmKpm1vX+yJRlY o1SC/D5FpI4Mb0x3XxEvEsu053nK6C6/fnAjuJgs1yG0AhvksKv0DrXUu8JKkU1hF2+HA74skb7 b9KiY0bpnfn1M5GOKl8w8AGGvOQr93NzsHJ4HlN3rJrLGOlml0vSaRilt2bJwp4d7bXyM8HOZjM 9L4gIU+wXF8E7BEWzdec9YfNP0jxxen97bJIWs59hHIxoZ2HJT9Iyk82SnpYAnHz/aXYqNjuZYg WvZyOCie+xhcxwpxu4rLvUfhxl+WCDpjLfqKjMLeP0J13x90h9kE+LdzF8w5K/CHUozl/NX2ztE z3cQt5dj3F+RBQmz3Fg== X-Authority-Analysis: v=2.4 cv=L+YtheT8 c=1 sm=1 tr=0 ts=6a0f15fd cx=c_pps a=UbhLPJ621ZpgOD2l3yZY1w==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=rJkE3RaqiGZ5pbrm-msn:22 a=EUspDBNiAAAA:8 a=IQ43IFojRXP4T6AthesA:9 a=QEXdDO2ut3YA:10 a=TOPH6uDL9cOC6tEoww4z:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-21_02,2026-05-18_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=0 priorityscore=1501 malwarescore=0 bulkscore=0 lowpriorityscore=0 phishscore=0 clxscore=1015 adultscore=0 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605130000 definitions=main-2605210144 The reg_read/write() fields of struct nvmem_device point to memory owned by the nvmem provider. They must not be dereferenced after the provider is unregistered. Ahead of protecting against accesses to invalid memory with SRCU, move the callbacks into a separate structure the address of which is stored in nvmem_device. Signed-off-by: Bartosz Golaszewski --- drivers/nvmem/core.c | 37 +++++++++++++++++++++++++++---------- drivers/nvmem/internals.h | 9 +++++++-- 2 files changed, 34 insertions(+), 12 deletions(-) diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index 24e079240ebbb0899d6d91f8147210a64d4414cb..b6429aae99e0deef502b1929deb= c47a09986925d 100644 --- a/drivers/nvmem/core.c +++ b/drivers/nvmem/core.c @@ -57,25 +57,28 @@ static BLOCKING_NOTIFIER_HEAD(nvmem_notifier); static int __nvmem_reg_read(struct nvmem_device *nvmem, unsigned int offse= t, void *val, size_t bytes) { - if (!nvmem->reg_read) + struct nvmem_operations *ops =3D nvmem->ops; + + if (!ops->reg_read) return -EOPNOTSUPP; =20 - return nvmem->reg_read(nvmem->priv, offset, val, bytes); + return ops->reg_read(nvmem->priv, offset, val, bytes); } =20 static int __nvmem_reg_write(struct nvmem_device *nvmem, unsigned int offs= et, void *val, size_t bytes) { + struct nvmem_operations *ops =3D nvmem->ops; int ret, wr_ok; =20 - if (!nvmem->reg_write) + if (!ops->reg_write) return -EOPNOTSUPP; =20 ret =3D gpiod_set_value_cansleep(nvmem->wp_gpio, 0); if (ret) return ret; =20 - wr_ok =3D nvmem->reg_write(nvmem->priv, offset, val, bytes); + wr_ok =3D ops->reg_write(nvmem->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_operations *ops =3D nvmem->ops; + 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 (!ops->reg_write) mode &=3D ~0200; =20 - if (!nvmem->reg_read) + if (!ops->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_operations *ops =3D nvmem->ops; =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 && !ops->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->ops); kfree(nvmem); } =20 @@ -897,6 +904,7 @@ EXPORT_SYMBOL_GPL(nvmem_layout_unregister); =20 struct nvmem_device *nvmem_register(const struct nvmem_config *config) { + struct nvmem_operations *ops; struct nvmem_device *nvmem; int rval; =20 @@ -910,8 +918,15 @@ struct nvmem_device *nvmem_register(const struct nvmem= _config *config) if (!nvmem) return ERR_PTR(-ENOMEM); =20 + ops =3D kzalloc_obj(*ops); + if (!ops) { + kfree(nvmem); + return ERR_PTR(-ENOMEM); + } + rval =3D ida_alloc(&nvmem_ida, GFP_KERNEL); if (rval < 0) { + kfree(ops); kfree(nvmem); return ERR_PTR(rval); } @@ -921,6 +936,7 @@ struct nvmem_device *nvmem_register(const struct nvmem_= config *config) nvmem->dev.type =3D &nvmem_provider_type; nvmem->dev.bus =3D &nvmem_bus_type; nvmem->dev.parent =3D config->dev; + nvmem->ops =3D ops; =20 device_initialize(&nvmem->dev); =20 @@ -937,6 +953,9 @@ struct nvmem_device *nvmem_register(const struct nvmem_= config *config) INIT_LIST_HEAD(&nvmem->cells); nvmem->fixup_dt_cell_info =3D config->fixup_dt_cell_info; =20 + ops->reg_read =3D config->reg_read; + ops->reg_write =3D config->reg_write; + nvmem->owner =3D config->owner; if (!nvmem->owner && config->dev->driver) nvmem->owner =3D config->dev->driver->owner; @@ -946,8 +965,6 @@ struct nvmem_device *nvmem_register(const struct nvmem_= config *config) nvmem->root_only =3D config->root_only; nvmem->priv =3D config->priv; nvmem->type =3D config->type; - nvmem->reg_read =3D config->reg_read; - nvmem->reg_write =3D config->reg_write; nvmem->keepout =3D config->keepout; nvmem->nkeepout =3D config->nkeepout; if (config->of_node) @@ -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 || !ops->reg_write; =20 #ifdef CONFIG_NVMEM_SYSFS nvmem->dev.groups =3D nvmem_dev_groups; diff --git a/drivers/nvmem/internals.h b/drivers/nvmem/internals.h index 7cbc55f40259fc4315c41979ad8bf75c36bcb056..070eef89ffca78fe033aaaada0f= 91c257fe2f166 100644 --- a/drivers/nvmem/internals.h +++ b/drivers/nvmem/internals.h @@ -7,6 +7,12 @@ #include #include =20 +/* Hold pointers to callbacks owned by the nvmem provider module. */ +struct nvmem_operations { + nvmem_reg_read_t reg_read; + nvmem_reg_write_t reg_write; +}; + struct nvmem_device { struct module *owner; struct device dev; @@ -26,10 +32,9 @@ struct nvmem_device { struct nvmem_cell_info *cell); const struct nvmem_keepout *keepout; unsigned int nkeepout; - nvmem_reg_read_t reg_read; - nvmem_reg_write_t reg_write; struct gpio_desc *wp_gpio; struct nvmem_layout *layout; + struct nvmem_operations *ops; void *priv; bool sysfs_cells_populated; }; --=20 2.47.3 From nobody Sun May 24 20:35:16 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5ADD13D7D66 for ; Thu, 21 May 2026 14:26:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779373569; cv=none; b=EJoO3ThKNN0zvofqGySWd0C1fCBi7RfQZre9Z1Otn5yT1eGoQtn0fsNiEZny7leo4FEd0XCcq1QIJfpj11doLq+F8Zt75SbCCBN2UgMa39qVgyzQXUJjSaZ3iBPlkWGP4O6FBVrhv4iVVr1g6ZUR3MX7dCu0XaYM0IESGZLV71o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779373569; c=relaxed/simple; bh=chJcYNUNvWdVCm11FwsO0RzQtcv7xjcWc6VBYeH2TDs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=AR0bvobeYbNqGPZdh1b7pbn8AXtgNqOjFXj7D4LwJi2boSakaG8hX5YXkZhw2/pKdXIajKzpBXPYmGZtMgs+X7iKPgTuzWKy2LsYjwwz98OqEC2gEQgAtyJhtB5uxYbadqqxs/zBkrPHRMaKmJPglC0FJ3qxHJL1JyEopPsf7EU= 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=CUs9e9gu; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=bEdQPOao; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="CUs9e9gu"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="bEdQPOao" Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 64L99jHq3343451 for ; Thu, 21 May 2026 14:26:07 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= EvZykmHWOkKG/QwXU8TG+tCYJqQVPqu4JMOWn5jw9rc=; b=CUs9e9guF4lQhVoo MMuN829R8bEP2XTypLAQwfjvrFVAzTxxQqLicW7nUdVQ5trdn42lFT4GUEgCeM56 0LycYeHTGeG965C6EEQ/Gkf36a6b+cAf64cL6VB5EyBgTIEdzCcBwlJjn6JGBLO2 CCQAtc+ITnyyphcltLKcJHHK6H7r+8xvfO90xDBkDIj8X8lRaPs18wmhf8gEP0Pj pxHvM29nAh6ewAJQL1evhAaa2M6wMjcZksoCia1nmmc2L6rT9HjHcxUS0zdTC36V mJ3J6FVD2bwpEjAupynXx7xaeDNWPWuEtu53IC0szUC62nL/yZZPNidu5EOrXhXg 1R7dIA== Received: from mail-vs1-f70.google.com (mail-vs1-f70.google.com [209.85.217.70]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4e9wahsrns-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 21 May 2026 14:26:07 +0000 (GMT) Received: by mail-vs1-f70.google.com with SMTP id ada2fe7eead31-63146b7289bso16546841137.1 for ; Thu, 21 May 2026 07:26:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1779373566; x=1779978366; 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=EvZykmHWOkKG/QwXU8TG+tCYJqQVPqu4JMOWn5jw9rc=; b=bEdQPOaorQ9WW4Lop7M5z+CRV8O6EhP26cjh4nbK1TfvrEPtxAdgICwKyPpPfVY1ZP X4hN1c1QFMIpQhyVySD07x0/ug/oF/teiIEb0YgRIUSzl232Yezl0ZTQMqjokADF7P8f 4bc4jfeaP7nAQqJ2/COqXTQrfevgGThz5hSKx6UgdNr8VLlKofH55L/SCOUr666o6TZ9 5had0Q5btt8XmFxO4/1uJfnDSjCWg4W9Rkx5N6bXc1lP4yusFz8yDKVvgIGK3n5KDv33 w7ZMGvrUmBqf7JMBC6Pf8zZ/6MUxp5Bc/J3nGGy5H0uEGlOWYEqBwr/zISphY/LYGNZi ONow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779373566; x=1779978366; 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=EvZykmHWOkKG/QwXU8TG+tCYJqQVPqu4JMOWn5jw9rc=; b=eRpU4Gf7ChkeSPSNgLeGjgSOUsr+kg+y7PNTkQ1GQVqQwbkNOgRCCtM8UzTzYsKhTW tXW9seWqJ7khvL+i6nfvrIPZn+6WZNAaa/y9aAisLYjTnorIyGSFiPRF6L4RewiYR7KJ xYNsXPWKxdM+N3NpQAmvO9hW3oBn596geCjr6SRF3kWKSre977s62AwJrMQZVDW9yjWl eXF2b5dDHQRzV76b+Rg/PiCvW2iS+fmwYjO/1mNRrqEh1FUB0+5e37MJkSKUzMGLUZph XfM3uxvfVJXGbwjKTYyBTOLGzb16aLEe+a9vQi9PV6NXtsD0FZx4BjmMPzH5f1FyEIuV rysQ== X-Gm-Message-State: AOJu0Yy6XphkoAMZYFtOXsGKseLRgWo6hikLDzZA8dad4vbnAIu0a0qA gqAqSUm2gmyUhhleiSQMMoSJns0Rr4fKIk6ARTVDNDvpLNJvIxKOwxelo4yPbSZF13DBN4KZw76 Ek8Oz38e5/uTxu4kJ5H6L62SYrPT0n/nrvMLS3PYtFmG7L7aRFY6Y89O92FES3DQRrRU= X-Gm-Gg: Acq92OEh8y5+97gv+ZLGMpY4dUlS55Q8PZig9nI1sC+c3PeKiSE5NZBSiwv6SEqiqZ8 u7yXMt4PMwMdOXp5dWcf9+vgIfzcXCBOAebEbUmhJZWPPYGjtq6++Mz4/cTy1D3ShzK1GNEz2EF ibBzDre4+iQwYbB1cGfhkuN4NitFJOdYaiMuH49R3r8DnVZ2KAvcez3lgKJQzTNUySVQmx3dv6X n7mCC9gengiax25LqtdYKbjcBRWN+CgXbiiJU9sUmiDxpTJt/ohYMp4BlDFuOkvyAtJ2sZIwIxi N545qTtB+zPcCfY32X9CyUXqFc/2HKPID8gx7yfb+O4jmRZrR+mRuKagocfx73i1wYke6cBpFE+ fdAq2OOUGoJeDqz6p4/r3tRnBuDWPjW4vQBs4toRXi+HCgzYs75Y= X-Received: by 2002:a05:6102:a90:b0:633:bb15:28ae with SMTP id ada2fe7eead31-673cdbe983fmr1076033137.15.1779373566142; Thu, 21 May 2026 07:26:06 -0700 (PDT) X-Received: by 2002:a05:6102:a90:b0:633:bb15:28ae with SMTP id ada2fe7eead31-673cdbe983fmr1076004137.15.1779373565754; Thu, 21 May 2026 07:26:05 -0700 (PDT) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:bb10:ae82:b7c3:d15a]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4903c9abbadsm30441925e9.8.2026.05.21.07.26.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 21 May 2026 07:26:04 -0700 (PDT) From: Bartosz Golaszewski Date: Thu, 21 May 2026 16:25:41 +0200 Subject: [PATCH v4 08/10] nvmem: simplify nvmem_sysfs_remove_compat() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260521-nvmem-unbind-v4-8-7fa136759491@oss.qualcomm.com> References: <20260521-nvmem-unbind-v4-0-7fa136759491@oss.qualcomm.com> In-Reply-To: <20260521-nvmem-unbind-v4-0-7fa136759491@oss.qualcomm.com> To: Srinivas Kandagatla , Bartosz Golaszewski , Johan Hovold , Loic Poulain Cc: linux-kernel@vger.kernel.org, brgl@kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2068; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=chJcYNUNvWdVCm11FwsO0RzQtcv7xjcWc6VBYeH2TDs=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBqDxXsYr5q2sxkxKUNNZtXNc1b7A1LCDpwAcnl7 7eDUvNS4xOJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCag8V7AAKCRAFnS7L/zaE wyKVD/4nF/xuahKL7AzoU4y0aSepsRD+e2yz/CFNt8Zmf6hpCG55l9ioOTW8Xgyap0E+WT7cj7X LyER471eZsfFVKdRQM1PySx17ug2O7OUvZMZJW8g96WtY9Up6w6Ffm7YyeHHQp6QK9MMW6YLP0t hB1Mmr/ieZc0Zv+uYSTzDjQLgbEEMmROYiAkvNwl4nX/S559lAB75G+scEy6J0yz++0105BfRHO G1xDvTH9o6DoaRCBjW3EtQlUUOmOEkVZba/io7Qb6Un75peY1r0xgBSD0G6CFIgb2NqRUQjkIPV ejDo/59qhKawaSudYaqyX1yhPIGzkvZIjYPSUN4UAJleXtqUGabdp3CdOgHUfzQT9e8dsAmR73e ieUxNElRnVyAS8xKUgctgTICMrICRacJmzUNmXI5Rw1fSdL+jYIw4lssYtOcsfYLmg5e5NIKh9Q 12CZkEErapG/5by1ZSMGAQUV8wmYjBciTqLzv1raD4cPsetYpCnARMAWoGOtwLlXHgd1TtTMVIm kvZPmqvpQdvhdmwMTc6RBjB8E82U18w1ulNI8BO0unvNY8SY27UukKckpjnUbE2SVH1yQB3OLtP Ky5WR6aq4Mo4ozAdiBqM0eUek5xqFg5E+KRa1gPTvKPB5pcIMzzvwe9OFF3q6/skMKB/ZOUdo0c 6eIWzHxw+/FFgWg== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTIxMDE0NCBTYWx0ZWRfX6z5lacgTd0mS 8Xmb/jqbj4Ey4WxIfuVvQms56tGglR5tLkUet+v1V2JXQ0oqh2ieZTJCPIsTMkw0YWiXbaZSwAw GTW4mcF9NOCPYPGNYvO0G06zH91/V3Zl7/xGcu/SjD5s9TZp+98Xg7D7Mrg9fTZPPgR6udEUrzO PU3DxqnmSRVq+KVBO054CNhi0wqNOE9QaHLprNJ5GXXkUQ0dX4Ntv2S1nyZIX9+VmFgmCNzwhWG z4tTXdJS6n68na3gG1L8GuW0CO0FperpXDpLMnR6MmmbW91TYnQXTFcW5pJlwHci8DpMleooWI7 zgn/NnWGETFpkiP5R6CvTeAGgHB7/xRVITUVUFNLdWZaqRhEQ700V6nh7hVy5kMw2Ghg+hJLJX9 5+ddjxEf9deZSbMNJmyrHYlAyv322rxZEyw75/Dvhvm7w6uYbZhbIonH3kGRW0zUX5q5PVMOhqu plGKzx/MoU/fj28yU/w== X-Proofpoint-ORIG-GUID: O_fjj5ho0smdNdJI4vJKir9NOC2weqJk X-Proofpoint-GUID: O_fjj5ho0smdNdJI4vJKir9NOC2weqJk X-Authority-Analysis: v=2.4 cv=H8LrBeYi c=1 sm=1 tr=0 ts=6a0f15ff cx=c_pps a=N1BjEkVkxJi3uNfLdpvX3g==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=EUspDBNiAAAA:8 a=vscgUUECmMDzLPOjfHYA:9 a=QEXdDO2ut3YA:10 a=crWF4MFLhNY0qMRaF8an:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-21_02,2026-05-18_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 phishscore=0 adultscore=0 suspectscore=0 lowpriorityscore=0 spamscore=0 impostorscore=0 malwarescore=0 bulkscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605130000 definitions=main-2605210144 There's no need for the config argument in nvmem_sysfs_remove_compat(). Once the compat attribute is registered, that information is carried in nvmem_device::flags. Rework the code to always query that field and drop the second argument. Signed-off-by: Bartosz Golaszewski --- drivers/nvmem/core.c | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index b6429aae99e0deef502b1929debc47a09986925d..c59c5f0e8a253eaedc0c6b180c7= 273a6c53ee1ac 100644 --- a/drivers/nvmem/core.c +++ b/drivers/nvmem/core.c @@ -460,10 +460,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,8 +529,7 @@ static int nvmem_sysfs_setup_compat(struct nvmem_device= *nvmem, { return -ENOSYS; } -static void nvmem_sysfs_remove_compat(struct nvmem_device *nvmem, - const struct nvmem_config *config) +static void nvmem_sysfs_remove_compat(struct nvmem_device *nvmem) { } =20 @@ -1052,8 +1050,7 @@ struct nvmem_device *nvmem_register(const struct nvme= m_config *config) device_del(&nvmem->dev); err_remove_cells: nvmem_device_remove_all_cells(nvmem); - if (config->compat) - nvmem_sysfs_remove_compat(nvmem, config); + nvmem_sysfs_remove_compat(nvmem); err_put_device: put_device(&nvmem->dev); =20 @@ -1069,8 +1066,7 @@ static void nvmem_device_release(struct kref *kref) =20 blocking_notifier_call_chain(&nvmem_notifier, NVMEM_REMOVE, nvmem); =20 - if (nvmem->flags & FLAG_COMPAT) - device_remove_bin_file(nvmem->base_dev, &nvmem->eeprom); + nvmem_sysfs_remove_compat(nvmem); =20 nvmem_device_remove_all_cells(nvmem); nvmem_destroy_layout(nvmem); --=20 2.47.3 From nobody Sun May 24 20:35:16 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 43E3C3E7BDE for ; Thu, 21 May 2026 14:26:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779373570; cv=none; b=QdkbuDZM09SQENWdUOC6rUzu2B8hwz5Vm8jKs/ypD70UQHhp1XaU2VkcmuzNitTLJHZrjllQVt4PZgNG8afCLqGMW25M87+jhE0IGRgIm91u2ENhh18dYu1zrHOVTxWbw+CJ4NKqi6ssCyJYzrDvOcjxQ3RnGWcuxQr42Wdgn98= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779373570; c=relaxed/simple; bh=SAE06UKnCu+BvGDpmoo8KwBdutZAS2XSRuglaL35LKU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mK9JagC0VxPgoGZrJuzo7PtfSP3U9D5jZi8FhO5Ux9cvy+FPvP7JMhqtJOx2Mqs4H6HYtI3X9UcgZ8D4fmDDQOIqXffTFRHFiT/39fmUl9w3xAvVk+Al/zmpIh3UbsMLWR5UkFNZPEfai2ukHtJfTVHfKHt0Mk60myvwRK9uIlE= 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=PmbyTEZ5; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=jrp40CIe; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="PmbyTEZ5"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="jrp40CIe" Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 64L99ns03009484 for ; Thu, 21 May 2026 14:26:08 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= SmDMLd3PxcBCoEGL1ZcB7hUI/xAqZMoM8+/DMqsYvOQ=; b=PmbyTEZ54tYcnEu7 mrWiyDKJoGeKzxLPCrMKq4eZUmUsq60d1qLpcBOVjkffUOMSSGOF+l6zGg+OzoW0 33yfted8qaao3mLkewhLmD9arrJANxRLolFSXm/xMidSZz+S+Yd0dGwxId7xNGDT TarT9BAefvUYdz2D9u0wvES6zCjO8xLQ1FUQIQnAdzmY4ASIa8qFq+Lc5eH9+ewD EQq+38piygRcwshROx34tW7RHQlmSEwQEUMseHdhk/T0zkwbuxIJoioZM3K266UU K4tGJDTBT7+yAtgBDGQEIygeabVZkIzIHjvsSInnfC9xhci8siPQquIrLJ5ByBRK dD7gEw== Received: from mail-oo1-f70.google.com (mail-oo1-f70.google.com [209.85.161.70]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4e9sr32n8r-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 21 May 2026 14:26:08 +0000 (GMT) Received: by mail-oo1-f70.google.com with SMTP id 006d021491bc7-6963482e03dso7952031eaf.3 for ; Thu, 21 May 2026 07:26:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1779373568; x=1779978368; 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=SmDMLd3PxcBCoEGL1ZcB7hUI/xAqZMoM8+/DMqsYvOQ=; b=jrp40CIeSop8ll1dbiwTTNCDkjpgrOOFexTBe7Al33p+oHSXU0CDfZ/ha9NdoTYm8b KD/kL2sNPmbFpTSbVByfm8YAuD1eiCa81W/JWXPxwRzlQ+bCMthGsr/YBe5YnPIlAJ2g ugZ8C5cnx1SdPyia2iWTcnAFHT0eSo73qEGV27a+yO7sOH59CjNjl14PU1yQjRHLaWMS /K1dveTauWTHeb+MRDcCFlpDmH3UA0w5v/yDG221N1luenevbZdHQPd0X3RaTXPm4N// Z6BcU6qeHJDqh2hDchXlNghqVIHzP2VOod2wnGdwxX7mi0faaOvDZ9V3TYZvQPpEYEhD Wp7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779373568; x=1779978368; 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=SmDMLd3PxcBCoEGL1ZcB7hUI/xAqZMoM8+/DMqsYvOQ=; b=ETjolrdYz2pdjNVPTZKW25LfTMy79oVFLlq0uCpHfqVMfsNv19cIVaqjbGjq6MAHDc ouuNDL6O5VBQM1yIVfSOBkXdYlqLM6PMiaXDAmADOfztAr7HkgIC8fG8kIDm7y4rknOn ARXquRHNVEO/YhXPz3b1PK3+nQywStOApBTO9FYZtq5NHsJVRcJ+iEYz6hND4syi8/aC 0+L9O1aT+tI1TX5nr+vc8dXdEy0E1upDufsFlfqFRKxk6M9DJ7n+JiKHmNiFbmQXQbql 5L4IspsZD4hs6mkCKtDwCkscKzvu7nOLXlE9sKwPyi3zC265lEodM6lHPadfF2LBgry9 B8PA== X-Gm-Message-State: AOJu0YxLk6Ck25e78n2jGMhlk8bH0nFZrpHNPGCbGBSYzzl1KnFz6SfJ AXUlO2rrJfoHj/sRRv7kTYj1P7SOu8DvPgPt/GV1vQA5Deb+hVF9BsTwz/9wIzgyzAXHTstuJRY 5ZjGD3Ay8uZvGlJWNtatjywoU40peet6jMm6QijVGy5O2/w8I5RK42zsZiVvbPkI+7xk= X-Gm-Gg: Acq92OFhaBWKq8ZJTU9LlfloOYfsVNfZqeWdDIRBdhs4a7n3yo84XOlbXV/wBG0wGy2 7beWXIR3vTRK4n8RKQiEIHRKNkHLvasoZnnPqTUuEzn1O6n5NjY75qklZafmgByLephb7RKQajQ yMUSPYB0us+k3wv/bYk9drEn3NmAo2CC8+W0c2bCOvsWrXMe79ossSgixkesM/n46gq0cfvrLIC +5/VhkCT5Kjximfp7kse+mimGuX3DwBqWq2hLWuaxy3oKw1hHLLLGsP5juEMS8rsBqGtDBaXJSV xU7ZgE7S4yT24+U2fjPKtFu4e8NFt2V1C1DvFUeP47GupYib0BXjCesq5pDongK0n38RVDc7lLY lwj/oPhjHoR9qKtmAb5sZP+EAo18SON5QTznCbZTcdaeRw98+zuw= X-Received: by 2002:a05:6820:2982:b0:696:23f5:7702 with SMTP id 006d021491bc7-69d6ef68240mr1366220eaf.60.1779373567629; Thu, 21 May 2026 07:26:07 -0700 (PDT) X-Received: by 2002:a05:6820:2982:b0:696:23f5:7702 with SMTP id 006d021491bc7-69d6ef68240mr1366202eaf.60.1779373567224; Thu, 21 May 2026 07:26:07 -0700 (PDT) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:bb10:ae82:b7c3:d15a]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4903c9abbadsm30441925e9.8.2026.05.21.07.26.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 21 May 2026 07:26:06 -0700 (PDT) From: Bartosz Golaszewski Date: Thu, 21 May 2026 16:25:42 +0200 Subject: [PATCH v4 09/10] nvmem: remove duplicated reference counting Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260521-nvmem-unbind-v4-9-7fa136759491@oss.qualcomm.com> References: <20260521-nvmem-unbind-v4-0-7fa136759491@oss.qualcomm.com> In-Reply-To: <20260521-nvmem-unbind-v4-0-7fa136759491@oss.qualcomm.com> To: Srinivas Kandagatla , Bartosz Golaszewski , Johan Hovold , Loic Poulain 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=5743; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=SAE06UKnCu+BvGDpmoo8KwBdutZAS2XSRuglaL35LKU=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBqDxXtVfGjOjw3xJ4E3iu8Q8h4yVvBaVJZ1WrgE N3V83TB7CCJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCag8V7QAKCRAFnS7L/zaE w0wcD/99M1xo11Hc0PfIIkcKTexG9clLIkY4Mr/XR6//+73jUF548+A0fy0uk0iHRC6TlAYp2w7 n2ZlJPduTc4RDKZ/NQPfA0OYe2TrJlqYDu1OtxgKdEpt/hoh7regZGCPFMxceLjNQq8ZilmBYTF eIWOG4f/DdJkGljrYHh/S8C629FAjy6Jwj4LZ4YydYZ9LTvCYtYNuaOBaFxXdBs/XdGPece8QTK Jiu3oBUdHQHujCIEttsi4P0MH2CpaeFMS0DfII9KsC41D/0PytzlLn1uhR/MZ05yJS94sJkrOWz MaWv7Soht3KXtYGOan3unifrqr5Q2csbZFcZHl8Zwyr4mE9T7kKOGm1StWaI6yfgTbjJRb9k6w9 72Kn8VVZGaHurRC3ppBzI2BeT1XcU8h/jz7CgsFciOPPryL4UZBiHIDNxvfhTR+Myg0f9BfZnv3 FMhMlc+bRsG+6Sp6rEn/1yQSbu7aVkYk9Vwi9+9s8A3cKDBY2BsKo9LmH3PaDDBcHPT3lE9h4qt jPMx3Ys8l+6xeO+gcvvQuXKmiWzTJOopQAISG7DrZKH84cp6ITpL5LWaQ2Aon3bBNOV3QviT6YY 9tEd41cwIvxCxJkjQU1itt0PmIE0w+SqaS960gkp7w6RsBM4ouvjuEbP4UgOJwBW5GUlWRSM5G+ NgTKPkfzsCTsoPg== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-GUID: S39BletJ7Z365qzs90iCp4EIie3a_isD X-Proofpoint-ORIG-GUID: S39BletJ7Z365qzs90iCp4EIie3a_isD X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTIxMDE0NCBTYWx0ZWRfX05zm9GnM/9T1 C8RFDwL/r8zXHGAFkTdz4MQcnYxOiV8els/H9U1WrOIRYs3GblNdprRizPYT4lYFO680FaU7oBP PYZJoN5laOrhVEbb8L17T8vAmhqqMQPw891+LaiBUOU0QA4sYucFzBkExmLvz4JRgq3K8mLNH/N Oz9dmxGoEstrLAglzIkivUhM/PdXSH5c4m5wX9VswtU0RLk6D4vSiGeaxOu4dxEHOH5lzPxbipg wgj/1WBeakV8Unt6+nmM4aUkdzsRkK4xf3d/kAMHNK1ac+cu7fYNQEUw4ZNBaVdaelZS4KD54WV rp42r8hPs+aYZKF3aMToiEZ0Pg9BIAyRRIIgjVM4oDU4lDBtBo5n6IZzODi1rBenGKi/gwomcZK SeirB483ei+F/I1eI5EEcu5f3K+JKY8dkK88SHkmFx+0N+wZ9jpib6wPLRuoGYFt0dRhmkkdeQs mVA4YvkghoPOTw+h73Q== X-Authority-Analysis: v=2.4 cv=L+YtheT8 c=1 sm=1 tr=0 ts=6a0f1600 cx=c_pps a=lkkFf9KBb43tY3aOjL++dA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=rJkE3RaqiGZ5pbrm-msn:22 a=EUspDBNiAAAA:8 a=IOj402APi-VxR199s-4A:9 a=QEXdDO2ut3YA:10 a=k4UEASGLJojhI9HsvVT1:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-21_02,2026-05-18_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=0 priorityscore=1501 malwarescore=0 bulkscore=0 lowpriorityscore=0 phishscore=0 clxscore=1015 adultscore=0 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605130000 definitions=main-2605210144 Commit c1de7f43bd84 ("nvmem: use kref") introduced reference counting with kref to an already reference counted nvmem_device structure. We only need one refcount so use the one provded by device's kobject and drop the kref field from struct nvmem_device. Signed-off-by: Bartosz Golaszewski --- drivers/nvmem/core.c | 82 ++++++++++++++++++++-----------------------= ---- drivers/nvmem/internals.h | 1 - 2 files changed, 35 insertions(+), 48 deletions(-) diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index c59c5f0e8a253eaedc0c6b180c7273a6c53ee1ac..2c6d058a20d97e039f42e45c7b8= d4305344c4ba0 100644 --- a/drivers/nvmem/core.c +++ b/drivers/nvmem/core.c @@ -535,24 +535,6 @@ static void nvmem_sysfs_remove_compat(struct nvmem_dev= ice *nvmem) =20 #endif /* CONFIG_NVMEM_SYSFS */ =20 -static void nvmem_release(struct device *dev) -{ - struct nvmem_device *nvmem =3D to_nvmem_device(dev); - - ida_free(&nvmem_ida, nvmem->id); - gpiod_put(nvmem->wp_gpio); - kfree(nvmem->ops); - kfree(nvmem); -} - -static const struct device_type nvmem_provider_type =3D { - .release =3D nvmem_release, -}; - -static const struct bus_type nvmem_bus_type =3D { - .name =3D "nvmem", -}; - static void nvmem_cell_entry_drop(struct nvmem_cell_entry *cell) { blocking_notifier_call_chain(&nvmem_notifier, NVMEM_CELL_REMOVE, cell); @@ -571,6 +553,25 @@ static void nvmem_device_remove_all_cells(const struct= nvmem_device *nvmem) nvmem_cell_entry_drop(cell); } =20 +static void nvmem_release(struct device *dev) +{ + struct nvmem_device *nvmem =3D to_nvmem_device(dev); + + gpiod_put(nvmem->wp_gpio); + nvmem_device_remove_all_cells(nvmem); + ida_free(&nvmem_ida, nvmem->id); + kfree(nvmem->ops); + kfree(nvmem); +} + +static const struct device_type nvmem_provider_type =3D { + .release =3D nvmem_release, +}; + +static const struct bus_type nvmem_bus_type =3D { + .name =3D "nvmem", +}; + static void nvmem_cell_entry_add(struct nvmem_cell_entry *cell) { scoped_guard(mutex, &nvmem_mutex) @@ -934,6 +935,7 @@ struct nvmem_device *nvmem_register(const struct nvmem_= config *config) nvmem->dev.type =3D &nvmem_provider_type; nvmem->dev.bus =3D &nvmem_bus_type; nvmem->dev.parent =3D config->dev; + INIT_LIST_HEAD(&nvmem->cells); nvmem->ops =3D ops; =20 device_initialize(&nvmem->dev); @@ -947,8 +949,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 ops->reg_read =3D config->reg_read; @@ -1009,24 +1009,24 @@ struct nvmem_device *nvmem_register(const struct nv= mem_config *config) if (config->cells) { rval =3D nvmem_add_cells(nvmem, config->cells, config->ncells); if (rval) - goto err_remove_cells; + goto err_remove_compat; } =20 if (config->add_legacy_fixed_of_cells) { rval =3D nvmem_add_cells_from_legacy_of(nvmem); if (rval) - goto err_remove_cells; + goto err_remove_compat; } =20 rval =3D nvmem_add_cells_from_fixed_layout(nvmem); if (rval) - goto err_remove_cells; + goto err_remove_compat; =20 dev_dbg(&nvmem->dev, "Registering nvmem device %s\n", config->name); =20 rval =3D device_add(&nvmem->dev); if (rval) - goto err_remove_cells; + goto err_remove_compat; =20 rval =3D nvmem_populate_layout(nvmem); if (rval) @@ -1048,8 +1048,7 @@ struct nvmem_device *nvmem_register(const struct nvme= m_config *config) #endif err_remove_dev: device_del(&nvmem->dev); -err_remove_cells: - nvmem_device_remove_all_cells(nvmem); +err_remove_compat: nvmem_sysfs_remove_compat(nvmem); err_put_device: put_device(&nvmem->dev); @@ -1058,21 +1057,6 @@ struct nvmem_device *nvmem_register(const struct nvm= em_config *config) } EXPORT_SYMBOL_GPL(nvmem_register); =20 -static void nvmem_device_release(struct kref *kref) -{ - struct nvmem_device *nvmem; - - nvmem =3D container_of(kref, struct nvmem_device, refcnt); - - blocking_notifier_call_chain(&nvmem_notifier, NVMEM_REMOVE, nvmem); - - nvmem_sysfs_remove_compat(nvmem); - - nvmem_device_remove_all_cells(nvmem); - nvmem_destroy_layout(nvmem); - device_unregister(&nvmem->dev); -} - /** * nvmem_unregister() - Unregister previously registered nvmem device * @@ -1080,8 +1064,15 @@ static void nvmem_device_release(struct kref *kref) */ void nvmem_unregister(struct nvmem_device *nvmem) { - if (nvmem) - kref_put(&nvmem->refcnt, nvmem_device_release); + if (!nvmem) + return; + + blocking_notifier_call_chain(&nvmem_notifier, NVMEM_REMOVE, nvmem); + + nvmem_sysfs_remove_compat(nvmem); + nvmem_destroy_layout(nvmem); + + device_unregister(&nvmem->dev); } EXPORT_SYMBOL_GPL(nvmem_unregister); =20 @@ -1142,8 +1133,6 @@ static struct nvmem_device *nvmem_device_match(void *= data, return ERR_PTR(-EINVAL); } =20 - kref_get(&nvmem->refcnt); - return nvmem; } =20 @@ -1259,9 +1248,8 @@ EXPORT_SYMBOL_GPL(devm_nvmem_device_put); */ void nvmem_device_put(struct nvmem_device *nvmem) { - put_device(&nvmem->dev); module_put(nvmem->owner); - kref_put(&nvmem->refcnt, nvmem_device_release); + put_device(&nvmem->dev); } EXPORT_SYMBOL_GPL(nvmem_device_put); =20 diff --git a/drivers/nvmem/internals.h b/drivers/nvmem/internals.h index 070eef89ffca78fe033aaaada0f91c257fe2f166..60daa79c404dc915872481bd3b0= 2de2258d33406 100644 --- a/drivers/nvmem/internals.h +++ b/drivers/nvmem/internals.h @@ -19,7 +19,6 @@ struct nvmem_device { int stride; int word_size; int id; - struct kref refcnt; size_t size; bool read_only; bool root_only; --=20 2.47.3 From nobody Sun May 24 20:35:16 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 472E53EA949 for ; Thu, 21 May 2026 14:26:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779373572; cv=none; b=IpmX/Q2HNyjFUPTKz0YjHUjsqBTE1p/aGLElfZofATGmOJwgyXkseCbGVPye23cH/LJ++4b3oUDOPoo0pFPkTtQhRxALmkmoaLjKagrlIU4pbSx7zWERjsKprcME+aPb0lU1uH/rpSi36ae53RF177e7stCXE/RuzeTZc7+HlaE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779373572; c=relaxed/simple; bh=crZFG5EEQ/XpebF5oR/q/KAWJip2MvYpvjgZ/M671mI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FYfKZWXCYYOXayP86uCZr/yoKv5wk7QuOkAPXiZyqhjyaGNWYIc7kjmn7F5O/wYFuVk+4wRZOfbldakbI/BqoP61j523iy7wlE9qqfFLBZt7ZBCPFSyVLY5CF8dKTsFfjzAHEMi3KYHcB3bQwVAjWjQGoaMDKub1NC7heH9ii0o= 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=jfLoyjdr; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=fRhTFnia; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="jfLoyjdr"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="fRhTFnia" Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 64L99saA3451575 for ; Thu, 21 May 2026 14:26:10 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= GcR7ReLeAOcf7bVj6RK9HechYfK2p6RdYNeXOdB466A=; b=jfLoyjdrIwGRCyQa wYvUu31g0uE7lprdX5K8EP7XGMGm+DqMLsYIVeMoWqt2/9zBBpFNPInxl9hq4hmh cOfjVXwhXDmsdfvsoxR33nmNYOjyoTJx3s1+dzGCrIHSt9OJz4kJAB9dF0UoKT2f basls60gjyZtZiz5jGDwc0BOUhQPdUWwVIepoSe87lEQ+9lMnao8BfIo6SL6Lgde XBthy7BF0rLfbM+7kiCMeZo2I+UjiNfvRrN5WLpuHZ8QSmglA0g0PFu0gGx0N2pj zSVOH1Q/GTSO+SZAN6fHUx4b7qSnEV9aemvEcGWEoAaddUOb7ufUdkW09RHfgtzH Klbr9Q== 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 4e9y1h99g6-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 21 May 2026 14:26:10 +0000 (GMT) Received: by mail-vs1-f71.google.com with SMTP id ada2fe7eead31-6343bea7909so2535896137.0 for ; Thu, 21 May 2026 07:26:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1779373569; x=1779978369; 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=GcR7ReLeAOcf7bVj6RK9HechYfK2p6RdYNeXOdB466A=; b=fRhTFniagP+oI+WBRPSsdNW7iwGpLrz7Dp94tj310cOUglDmNQbZV/BBt74GRe2pnP gUN7TN59F7YxpNCt8PACagzAPItIuBkX8EKt8wYXF4nfDEsctZNfVp0+ZZBB/nW5HdgC z/G0u6tTw6so/XIZLpP6mQhDGMCPxgptdB+J3pRKBMyNDFl8vZQhCsEu2c+5gZDwLjN9 iLmCkwzf82e38kZ1D4zkKr+SHaLID15gDlp5pz4IUQhNyriQXigknZm41ZI/N55yaG1R ewdi894RON+ljF7zS7JqRPTNmVkNiRVOCOgt6tafcTOkP+j/NiaKEOo+3khurXBZVGx2 quvg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779373569; x=1779978369; 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=GcR7ReLeAOcf7bVj6RK9HechYfK2p6RdYNeXOdB466A=; b=jN4+DEdlU1WfCDWQ0iJfBR/N0ortxOlQy5QuA8M7vMoMIUnSLkknd2kpayxV2Q9BFR c4zFMbljjeSrT1ZmRIHsG6GPV1ZAf6mcfzw9it36C+SxKID3wXyvZ9/tZaBF8EXZe6EU xO3BnXTlc8rfnFmz4ICVtg4JAiZmr3etmKgWLlgPKtYaScrV8rYD8dJIsK7AeqxsxhH0 3kIp9YxW+pUgmDdsduB6kT2brJCI7X4YBeiSBL3q+iQp7hy2/d2qN7Dx5ZpKNdXrDAUG //jpAB7rQ1HGSzN2Hmu3UmZQ7zA5tu0OqPntGmG8D+62VXzlldl+mYkZ0iKttzki+xRZ rROw== X-Gm-Message-State: AOJu0Yx9en1XuEhrqzCpPXXw5YbThyuLZXq3KWpNgVcgpwazYNHFheZB S4g8+vQu5kBMJ1DXOIJ6ApahRALx89r8Yl0xFGcRdX+vwmOh2lPim7eATFGln829d8KCmnuuIUK yOPNNU15FoKBBRYhqL1MFkGt/JKstZ+p3a5boVhcchk4NO95ex53KMUKjaONPozOhpGI= X-Gm-Gg: Acq92OGfBIwMs4Fo0sgj640NklzHLpLEbReBkSkqNKJf9IXsiCTQjzR9cwMBRDP7ZHR AHawd+6LsRoXtsqOX0e6RtAHedGdp0u1O1VFk0hminLA/qZ2waBHaIguBN+f6GBJ6QISzQbuQLP fk7rHxFkP9PN2bSU1W6XsYMb+VyvbFiRo6meGQjOS4grmvbobjZvf3fTiZN3HwbLTO6eHFLGv68 GsmvX3CCscI2fXzWEK1O+E5X0TRy0S8d//SVR6/D1WiHvUKx8xnjbFd5VaeDcSpZZw2I19hUoCc DI0woa3EPTwPUjVgGIbRov3WA4F3t1Gd6bj8Tvi4dvTiDw+dYkGj/T0fR90/lkscNOLRCAk9JQ5 Msu/a9jGijARVMjuAZywmRYFcPAx8MhxP+MB/rTjKGVZtlHDReJ0= X-Received: by 2002:a05:6102:1591:b0:62e:c54:fccb with SMTP id ada2fe7eead31-6739d5d98f8mr1555410137.28.1779373569368; Thu, 21 May 2026 07:26:09 -0700 (PDT) X-Received: by 2002:a05:6102:1591:b0:62e:c54:fccb with SMTP id ada2fe7eead31-6739d5d98f8mr1555350137.28.1779373568830; Thu, 21 May 2026 07:26:08 -0700 (PDT) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:bb10:ae82:b7c3:d15a]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4903c9abbadsm30441925e9.8.2026.05.21.07.26.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 21 May 2026 07:26:07 -0700 (PDT) From: Bartosz Golaszewski Date: Thu, 21 May 2026 16:25:43 +0200 Subject: [PATCH v4 10/10] nvmem: protect nvmem_device::ops with SRCU Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260521-nvmem-unbind-v4-10-7fa136759491@oss.qualcomm.com> References: <20260521-nvmem-unbind-v4-0-7fa136759491@oss.qualcomm.com> In-Reply-To: <20260521-nvmem-unbind-v4-0-7fa136759491@oss.qualcomm.com> To: Srinivas Kandagatla , Bartosz Golaszewski , Johan Hovold , Loic Poulain 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=5454; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=crZFG5EEQ/XpebF5oR/q/KAWJip2MvYpvjgZ/M671mI=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBqDxXtcmDVxEWpP0cV9/rKa0InNP9L5HAVPpYS9 aP+ys5klamJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCag8V7QAKCRAFnS7L/zaE w4EtD/4patwRqDURTdftzfi5d2F5oGFg8mYkK5RSDZcX4bGYUSsCAMAGDb592SH1ZVTdVljxJhs xH7EFNdlvn/k0UCb3EftflZnazXYcMaudCpRGhS5ggv+uNwhNtxM2c/eOfzIa76WNUjuABbGfuY ImG43Mir23FYSA3LKXNKTW3BMbj4P6yUFpyHxzKdXN471Xd/+WWtJ02zi+oMZ6dPDTk66vhI4f8 zQobKg2xX7S//suSAyFRreX+712GKxWzbGXyJqcxk7MTC1OqG4iCaL4G6gBbfl43iiK1Dw+jAL0 GrrFse/NgaMGFthcxinPnggtetZ4++mCPF9iABFT8vZY8VxmlzEmGGWiTsYni/IWM35ilNT2Xte 0y2Hcuzeaugi27yE1YFfdegRYQfq4I0NAWK4CyrULAgdZS/c+8/tzN5eUh10SZMX+tOu6frDB6F J2mRjG4VMaOPhHFwrjOrrQqHfSc0oBl0GqRn8vjIkBUB4HSh0abGzpbyoBmJ4Q/XbChMQyKwx2F tLKyGuKGuDWwLveb1XhZcNTvEGRnLGs5QnmXmcQzZa3Cdb8FCzVNpzHjV1RJHpOzR6SpmfhdcZp 0WaTdgAZsyzx58q6aR9K4H5Dt5Eyule0aHlwRy6KbBacuFa/eiHZuH9awlI4DvvTU1FBwG6aJKC xwUg12hZONdcncw== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-ORIG-GUID: dJmKm5iAgE-XFQFvEfBry8_LnhSC-P3r X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTIxMDE0NCBTYWx0ZWRfXznLTU/3wvjFB uTgvC7PPwlHQTOQ82VarVEQJRE8dWZssVJkDYt0VJUd/M8aW7CMzPK2OcYQmZkZKXQpDpPMecda RFVYRsu4daJlEqKDZMNAViAN8fDJj8ZiXkWgsCs3tmXNSsvls18rb+8p/OVqjd+p9i+tTfjlRbT CVIJqvasIWBlbL7RD25O9zcag/tvgodyFeliwvs08SCu6f5EppCv1R/fyZmw14BI7JSwUFoJL9L R7i635OtfmCl/8ddiysuClkZRR8SHfAljPBcBVJKlUsXleOn6PmlAfevaH0tWryT8GbJPj6HmLy SAoHiAs/JuZHCkppHulBbQa6Hlqw8QiejN5aCdSxsrMWzl0/MkGu8pNDj5/m9ZfID5NWDd0bg6u 2h+Bvf3Shli/H19Z7Tju5VlNma9NazZwK0v42tVjWlNl+qQ7KVlNztx8seD/fVCrV92ObwUL3f3 gal29tFLoslIrQT/VKQ== X-Authority-Analysis: v=2.4 cv=YfyNIQRf c=1 sm=1 tr=0 ts=6a0f1602 cx=c_pps a=P2rfLEam3zuxRRdjJWA2cw==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=3WHJM1ZQz_JShphwDgj5:22 a=EUspDBNiAAAA:8 a=ydBWjX_Uc0Q5hLJtmLYA:9 a=QEXdDO2ut3YA:10 a=ODZdjJIeia2B_SHc_B0f:22 X-Proofpoint-GUID: dJmKm5iAgE-XFQFvEfBry8_LnhSC-P3r X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-21_02,2026-05-18_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 bulkscore=0 priorityscore=1501 impostorscore=0 phishscore=0 lowpriorityscore=0 adultscore=0 suspectscore=0 clxscore=1015 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605130000 definitions=main-2605210144 With the provider-owned data split out into a separate 'ops' structure, we can now protect it with SRCU. Protect all dereferences of nvmem->ops with an SRCU read lock. Synchronize SRCU in nvmem_unregister() after setting the implementation pointer to NULL. This has the effect of numbing down the device after nvmem_unregister() returns - it will no longer accept any consumer calls and return -ENODEV. The actual device will live on for as long as there are references to it but we will no longer reach into the consumer's memory which may be gone by this time. Nvmem cell entries are destroyed in .release() now as they may be still dereferenced via the nvmem_cell handles after nvmem_release(). The actual calls will still go through SRCU and fail with -ENODEV if the provider is gone. Signed-off-by: Bartosz Golaszewski --- drivers/nvmem/core.c | 44 ++++++++++++++++++++++++++++++++++++++------ drivers/nvmem/internals.h | 4 +++- 2 files changed, 41 insertions(+), 7 deletions(-) diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index 2c6d058a20d97e039f42e45c7b8d4305344c4ba0..2e66d4ae4aedca36662171abace= c02fadd5e9039 100644 --- a/drivers/nvmem/core.c +++ b/drivers/nvmem/core.c @@ -57,7 +57,12 @@ static BLOCKING_NOTIFIER_HEAD(nvmem_notifier); static int __nvmem_reg_read(struct nvmem_device *nvmem, unsigned int offse= t, void *val, size_t bytes) { - struct nvmem_operations *ops =3D nvmem->ops; + struct nvmem_operations *ops; + + guard(srcu)(&nvmem->srcu); + ops =3D srcu_dereference(nvmem->ops, &nvmem->srcu); + if (!ops) + return -ENODEV; =20 if (!ops->reg_read) return -EOPNOTSUPP; @@ -68,9 +73,14 @@ static int __nvmem_reg_read(struct nvmem_device *nvmem, = unsigned int offset, static int __nvmem_reg_write(struct nvmem_device *nvmem, unsigned int offs= et, void *val, size_t bytes) { - struct nvmem_operations *ops =3D nvmem->ops; + struct nvmem_operations *ops; int ret, wr_ok; =20 + guard(srcu)(&nvmem->srcu); + ops =3D srcu_dereference(nvmem->ops, &nvmem->srcu); + if (!ops) + return -ENODEV; + if (!ops->reg_write) return -EOPNOTSUPP; =20 @@ -289,7 +299,7 @@ static ssize_t bin_attr_nvmem_write(struct file *filp, = struct kobject *kobj, =20 static umode_t nvmem_bin_attr_get_umode(struct nvmem_device *nvmem) { - struct nvmem_operations *ops =3D nvmem->ops; + struct nvmem_operations *ops =3D rcu_dereference_raw(nvmem->ops); =20 umode_t mode =3D 0400; =20 @@ -333,7 +343,7 @@ static umode_t nvmem_attr_is_visible(struct kobject *ko= bj, { struct device *dev =3D kobj_to_dev(kobj); struct nvmem_device *nvmem =3D to_nvmem_device(dev); - struct nvmem_operations *ops =3D nvmem->ops; + struct nvmem_operations *ops =3D rcu_dereference_raw(nvmem->ops); =20 /* * If the device has no .reg_write operation, do not allow @@ -560,7 +570,7 @@ static void nvmem_release(struct device *dev) gpiod_put(nvmem->wp_gpio); nvmem_device_remove_all_cells(nvmem); ida_free(&nvmem_ida, nvmem->id); - kfree(nvmem->ops); + cleanup_srcu_struct(&nvmem->srcu); kfree(nvmem); } =20 @@ -936,7 +946,20 @@ struct nvmem_device *nvmem_register(const struct nvmem= _config *config) nvmem->dev.bus =3D &nvmem_bus_type; nvmem->dev.parent =3D config->dev; INIT_LIST_HEAD(&nvmem->cells); - nvmem->ops =3D ops; + + /* + * Must happen before we assign the release() callback in + * device_initialize(). + */ + rval =3D init_srcu_struct(&nvmem->srcu); + if (rval) { + ida_free(&nvmem_ida, nvmem->id); + kfree(ops); + kfree(nvmem); + return ERR_PTR(rval); + } + + rcu_assign_pointer(nvmem->ops, ops); =20 device_initialize(&nvmem->dev); =20 @@ -1051,7 +1074,10 @@ struct nvmem_device *nvmem_register(const struct nvm= em_config *config) err_remove_compat: nvmem_sysfs_remove_compat(nvmem); err_put_device: + ops =3D rcu_replace_pointer(nvmem->ops, NULL, true); + synchronize_srcu(&nvmem->srcu); put_device(&nvmem->dev); + kfree(ops); =20 return ERR_PTR(rval); } @@ -1064,13 +1090,19 @@ EXPORT_SYMBOL_GPL(nvmem_register); */ void nvmem_unregister(struct nvmem_device *nvmem) { + struct nvmem_operations *ops; + if (!nvmem) return; =20 blocking_notifier_call_chain(&nvmem_notifier, NVMEM_REMOVE, nvmem); =20 + ops =3D rcu_replace_pointer(nvmem->ops, NULL, true); + synchronize_srcu(&nvmem->srcu); + nvmem_sysfs_remove_compat(nvmem); nvmem_destroy_layout(nvmem); + kfree(ops); =20 device_unregister(&nvmem->dev); } diff --git a/drivers/nvmem/internals.h b/drivers/nvmem/internals.h index 60daa79c404dc915872481bd3b02de2258d33406..17418fd0dcc92b101b56082fc15= d74042386107d 100644 --- a/drivers/nvmem/internals.h +++ b/drivers/nvmem/internals.h @@ -6,6 +6,7 @@ #include #include #include +#include =20 /* Hold pointers to callbacks owned by the nvmem provider module. */ struct nvmem_operations { @@ -16,6 +17,7 @@ struct nvmem_operations { struct nvmem_device { struct module *owner; struct device dev; + struct srcu_struct srcu; int stride; int word_size; int id; @@ -33,7 +35,7 @@ struct nvmem_device { unsigned int nkeepout; struct gpio_desc *wp_gpio; struct nvmem_layout *layout; - struct nvmem_operations *ops; + struct nvmem_operations __rcu *ops; void *priv; bool sysfs_cells_populated; }; --=20 2.47.3