From mboxrd@z Thu Jan 1 00:00:00 1970 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 0650B3612E3 for ; Wed, 29 Apr 2026 15:43:41 +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=1777477423; cv=none; b=p7Z9aLVlWBC7WxgOfaek4N1Lw6GmHFgdE2jrt2ghRkw4tyif8E5v6uMN3oKbXoERuxxiIrHG4Ao5V4LzbpO0Uivz12DtoRkbGdp/SVRB420HuyLu3sBNur0voumEfJ+5tdztV97Fkz9ehtbnDddJ7mEeeYM0s83z8Lkpdjm3ctI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777477423; c=relaxed/simple; bh=Hk4SUm6fY8vM065eZPmdJ7jlaPd8uM/I/bNhWBYopS8=; h=From:Subject:Date:Message-Id:MIME-Version:Content-Type:To:Cc; b=eYN9sJJ9FUzKkSOGCSu4fOATV00ra/z1Atg1M1y+ThiPu86N1aqtkwt9+I32TsncdyvL8n3t56ky/3sIH0HiSYzrP4e8T4iFGFc03ANCA36RVeVRiC3DA915FcFf1lLSMzhkvvgPSehXNaLsA19F7/lJ919zMdlvhzK9EXPeNl4= 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=UBVLB/Ej; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=gol7gZxj; 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="UBVLB/Ej"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="gol7gZxj" Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 63TF5AHq3752381 for ; Wed, 29 Apr 2026 15:43:41 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:message-id :mime-version:subject:to; s=qcppdkim1; bh=5IWNETTUvm+KzK8kvMj3F3 drwYlbqMwG+yOHWDDkbrs=; b=UBVLB/EjT/LI1luolEmoYrdwGOciRO2C19qvu0 ULbCcazk/Xa0hiE0TuxQIYc43xpMEViOe5PPOs7Yz/q/E4KwiNuN9EEOBfz34G32 Hoi8dAMsgaInX+ndJf+L5Lm3XwMGLh2X2RaKBpg6ISiBP/Hg7DYqkJZz65vHEdSf JPsjQAiPf0jeU9SVnCvnro175VU9WBtzJ33sbBRO+bVk1sWO7sf0m+MthpYrlDGB Lb9ULXaX/D1mjrcZPMLA2bMPORTk3Falyva277lUc91M1uX60OjESV/KMsjGnMOs u6ZkIySnVXXXbSG3Qs00CZ8XNQz5wy/gIRhCcY6naZ7JLPFw== 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 4duch1j8k7-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 29 Apr 2026 15:43:40 +0000 (GMT) Received: by mail-ua1-f70.google.com with SMTP id a1e0cc1a2514c-958a0e94ff9so4644673241.1 for ; Wed, 29 Apr 2026 08:43:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1777477420; x=1778082220; darn=vger.kernel.org; h=cc:to:content-transfer-encoding:mime-version:message-id:date :subject:from:from:to:cc:subject:date:message-id:reply-to; bh=5IWNETTUvm+KzK8kvMj3F3drwYlbqMwG+yOHWDDkbrs=; b=gol7gZxjiVMYKfWtmu9wEtnRLPaX+ntuR06tfSeR4QIFWRCWs2Y9rwqxIgfWJ16upI 43wUBE5lP0DWCUJixTi8BnrPp2v+q//VPmn8ltWY4mNizIWv449vN5lcOAthzMn2x8xr q97eUq5nyvL2Dmr1KSlAS3hfM322QTaPVAA9Dvsb8hPNjI/B73dBbomXcH5isdfmzBsE X/xO/j7FhZJyC1Ijb+CvK47ZMfT/GeuPEMt1BDCUIvXPQgEArWKI2M9A4tmW3zkljymt vRhTWDsSKTKKd3p7QQrLVyutSti5vDp/LYGDv1IZBY+5LaIGuShAF53BdbjO9dOGkg2d x0dQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777477420; x=1778082220; h=cc:to:content-transfer-encoding:mime-version:message-id:date :subject:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=5IWNETTUvm+KzK8kvMj3F3drwYlbqMwG+yOHWDDkbrs=; b=Jx+hbnF+QIOYETeTCDnhvX7dOk2kreWXR8u7hhNT0chsHlYTgFYvWLSX/aZguUYkZe O982kwG4tbrHp90UV8fa6dW3yB0klmC2eKkGutSzzEnY10WzT8vfqgUcrCIm8OzUcjNr pPbkSONCDfpDeiytG6llaY0GNvb6UPu3zRhIZ2KjNtjxs1gXrCfeNuikxe0J/rpiFovG CpuYeKmZ1VfF1Aak0f1s16XQbQsqTr4Mp1M/tYKCug8aTT3ySJAzZOz0ykn6IidyPQn0 mF4tGyrtKhTJ+4wV3wwKNnrx2RDrUqNl7s50UhW9r8osMNrL0dLKfCwSdJUAieki1Ors oT0Q== X-Gm-Message-State: AOJu0YxdsohTkXNXp4NL78BilUr3OjU2CFL1ZMOO7REvd+feGaNQnks1 2yv9tuCe9vIWNzQDc0mDJ62J3emi98xeq5dLdUFgjCu7Qi/J/zEgQ9WWR9yj8K31OPR2hmtxelW iVA8Sw89V+QVF1oJL4kGur1phZdVYKNf5oDlkiGgLZvh1rge+VMwOdd5MsU+MyJiflsY= X-Gm-Gg: AeBDiev/hpG0gcTLoZBgSKZdUArOzgMuHFZaXez+NZmIUAUL/HX4K/zBZd+MHzjfxvK 7/lbXh+r4FwSpixJd3BiMR9OXbhWZjwFz6iyrWZqmxds9L35efAzWJcv+kElmOT/+JMJlOUjHja pRwG1dmsZokvbV13wARj+WsJAzq00DkJd/UqovF44oTff51S29mWvvEljxTJAIvPO+9PjibCbRP RnPaNavp/32he5MuJ9tBjt70LhLtbKYo1Se7wqAtL0Ri6mhG9sCUNC4fjKGy61v2HPIz9xaQb0e fID7/HWfd8YC1FrMAQAbr2g6B7Kmlm4K3yhZC3PsRJqPn5flMdgbRTOwdybSw4UmmLvCFyzvT3z vkC+Sd3bzd8nuUlK+PDtQiI/+PaZlfN183gmWqG4XQzEtEPv0+Ss363lfojBkJg== X-Received: by 2002:a05:6102:548b:b0:605:7a45:c7c5 with SMTP id ada2fe7eead31-6280a3ae4abmr4148761137.14.1777477420171; Wed, 29 Apr 2026 08:43:40 -0700 (PDT) X-Received: by 2002:a05:6102:548b:b0:605:7a45:c7c5 with SMTP id ada2fe7eead31-6280a3ae4abmr4148712137.14.1777477419339; Wed, 29 Apr 2026 08:43:39 -0700 (PDT) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:e9c0:e45a:1dbc:c82a]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-447b3d481b2sm6837552f8f.4.2026.04.29.08.43.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 08:43:38 -0700 (PDT) From: Bartosz Golaszewski Subject: [PATCH v3 0/9] nvmem: rework nvmem core and allow unbinding with active consumers Date: Wed, 29 Apr 2026 17:43:15 +0200 Message-Id: <20260429-nvmem-unbind-v3-0-2a694f95395b@oss.qualcomm.com> 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: 7bit X-B4-Tracking: v=1; b=H4sIABQn8mkC/23MyQrCMBSF4Vcpd21KhtrBle8hLjLVBkxSExuU0 nc3LYgobi78F843Q9TB6AiHYoagk4nGuxxsV4AcuLtoZFRuoJjWmJAKuWS1RZMTxilUN0zsaS/ bimPIkzHo3jw27nTOPZh49+G56Yms3zdUf0OJIIwaISpMuCAdb48+xvI28av01pb5wOol+jEoZ T8GzQZWPWO8Y0xJ/sdYluUFMGxZfPMAAAA= X-Change-ID: 20260114-nvmem-unbind-673b52fc84a0 To: Srinivas Kandagatla , Bartosz Golaszewski , Johan Hovold Cc: linux-kernel@vger.kernel.org, brgl@kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2783; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=Hk4SUm6fY8vM065eZPmdJ7jlaPd8uM/I/bNhWBYopS8=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBp8icbHScahrznySuX01EBn3ikZ1lur5USPCAp5 dW5DEad0NCJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCafInGwAKCRAFnS7L/zaE w5X/EAC2mjnGmVFvhT2FHOQrgncvphD6xzvjdl74T2lzVA3OCVuyPL/+8fvD3hnRJ3sf82xdwVW S+2JVkXLMzxYUdZSXR2SHiH3FK4QXr8s/ABpB4JgBBak6DXvci40BzrXetvzYRcCom24Dhc3dDI O0iQQcs/0DFxUoAPECARYKCRXvU9yqG6SDmMaT5t+B1Xb33q/2s/Tc0tiofOgmKN0O1CQ24pxUY ydS7xJ+57xfhRQ216oqY6XGTGEQpwz1UUupiKb0xsIYJAeQLy8KypwShpdADeRsFjwJA0DVnPyb L4Tim6A6XM1eKgos8fyW335R8qkGWI294EesJILxLS1fMPJ4Tu8c8u0AOJwcA8z2HeHHyVbrAsX 2xLZL+F0RkZNdzNZZocoLF143PNBeJXzwcPlXDzcjqk76SSrxbjZLDumQ3EmTyWXewqr2Uc8RWZ rBefW1HizMwXufeKop23vWaIxV8wZ4sqJEteek+dfKzSkRDTzp1Jo+m9fSqwDL1Hb4QJ/Wf7x+q qeYPPjqu9Ol65h+Ecw1z5rW1Am9IWhWlUKG9N8uEWIzKdoD33MXiQ7lmTg7ddCN1nZixs0vsANy hwRu/9f8WSaO/Hj7MuMVfXg3x1YlpOL1CaxYqOcM/QoM7cMdvTZxSLjBVO0FNVCM2+1tr0kpaMY dCBL700Kt0b53nA== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Authority-Analysis: v=2.4 cv=arGCzyZV c=1 sm=1 tr=0 ts=69f2272c cx=c_pps a=R6oCqFB+Yf/t2GF8e0/dFg==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_glEPmIy2e8OvE2BGh3C:22 a=bC-a23v3AAAA:8 a=EUspDBNiAAAA:8 a=VwQbUJbxAAAA:8 a=ErMENM6eK4kmmSrpZ4kA:9 a=QEXdDO2ut3YA:10 a=TD8TdBvy0hsOASGTdmB-:22 a=FO4_E8m0qiDe52t0p3_H:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDI5MDE1NyBTYWx0ZWRfX68e50OWEj2dv oHflm/aCoNuybVr2LnVoV131WDnZey/WdK4K/BP3W+XFYJrTo4VGnhDGXqImlhAtoA7G9zVZIkn 4IaxWQUjiXhOfXxvjb1flIoxx2u9DJJdbMH9qyI44KD8UMsyereHOv4xkcOS9+/s4Pi35EzkjkV 8VZm9O9UOSVQ+l8VZ7pnkMaY9HLERL57NjYO0tmKD8t0xzO3NC3zR4NPjMDVe9Ac3uhPT/bhYea YyAO8/oN3wVSyG4sv6uJBbdmfz72bF1ClaIqa9ggL6XIrcldcTOe3ffVxh4uE2AXl8Ge+dJ82L2 /AblYpigTdAphqx6RHTijYW84njrzy+gN7tIdjbuMOHv90Ov4IoEhqUxjgq8MpdMpiFy0swLLD/ MmorsK6YKDT0gbeqBcfpaaJcp/2YkZoqoYIQGEmjUYUjVeNSQuXC+xsfpIT8xm4lREg2J1X9ZC3 QBHCMCfBSMENVRjfZpg== X-Proofpoint-GUID: T1WDKGuw_Mc1gBaU19Bki1SOVAZkLUiX X-Proofpoint-ORIG-GUID: T1WDKGuw_Mc1gBaU19Bki1SOVAZkLUiX X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-04-29_01,2026-04-28_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 bulkscore=0 clxscore=1015 adultscore=0 impostorscore=0 spamscore=0 suspectscore=0 priorityscore=1501 lowpriorityscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604200000 definitions=main-2604290157 Nvmem is one of the subsystems vulnerable to object life-time issues. The memory nvmem core dereferences is owned by nvmem providers which can be unbound at any time and even though nvmem devices themselves are reference-counted, there's no synchronization with the provider modules. This typically is not a problem because thanks to fw_devlink, consumers get synchronously unbound before providers but it's enough to pass fw_devlink=off over the command line, unbind the nvmem controller with consumers still holding references to it and try to read/write in order to see fireworks in the kernel log. User-space can trigger it too if a device (for instance: i2c eeprom on a cp2112 USB expander) is unplugged halfway through a long read. This series proposes to use SRCU to protect nvmem against accessing invalid memory after unbinding with active consumers and also reworks several places in nvmem core. Signed-off-by: Bartosz Golaszewski --- Changes in v3: - Add Fixes tag to patch 1 - Don't check the presence of read/write callbacks in sysfs attributes as these are not visible without them - Rework mutex guards and drop unneeded helper variables - Fix mutex guard conversion: it accidentally converted nvmem_lookup_mutex locks to nvmem_mutex - Extend patch 5 to also rename __nvmem_device_get() to nvmem_device_match() - Call nvmem_sysfs_remove_compat() on unregister, not release - Split patch 7 into two: one removing the redundant kref and second adding SRCU - Link to v2: https://patch.msgid.link/20260223-nvmem-unbind-v2-0-0df33a933dca@oss.qualcomm.com Changes in v2: - add missing SRCU struct cleanup - improve the teardown path on error in nvmem_register() - Link to v1: https://lore.kernel.org/r/20260116-nvmem-unbind-v1-0-7bb401ab19a8@oss.qualcomm.com --- Bartosz Golaszewski (9): nvmem: remove unused field from struct nvmem_device nvmem: return -EOPNOTSUPP to in-kernel users on missing callbacks nvmem: check the return value of gpiod_set_value_cansleep() nvmem: simplify locking with guard() nvmem: remove unneeded __nvmem_device_put() nvmem: split out the reg_read/write() callbacks out of struct nvmem_device nvmem: simplify nvmem_sysfs_remove_compat() nvmem: remove duplicated reference counting nvmem: protect nvmem_device::ops with SRCU drivers/nvmem/core.c | 298 ++++++++++++++++++++++++---------------------- drivers/nvmem/internals.h | 13 +- 2 files changed, 163 insertions(+), 148 deletions(-) --- base-commit: 09edb1ec49a5eef1910905fb9d3be57a6aaf7e40 change-id: 20260114-nvmem-unbind-673b52fc84a0 Best regards, -- Bartosz Golaszewski