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 4C73B1E49F for ; Mon, 23 Feb 2026 10:57: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=1771844276; cv=none; b=p23Vd42qFdcfIqYikLUGqF+JIbl6QNXaQb5iM/9HqIziK46VBnyStjXYNTwtSnVdsi8oFmOladWjvi0OrJZdP5ujSE+vLsTjE6lWrNrnVEz7jxVdY48bQFulbnudiKUQq+46RCp1L7Zn/DP1ylKz7ALso1+iQ/92u/VM4GVFVhg= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771844276; c=relaxed/simple; bh=UIsWHzp+8aDgVDxgHb6vqYAZq4FkNHXsI4hjzfPFdi0=; h=From:Subject:Date:Message-Id:MIME-Version:Content-Type:To:Cc; b=jlteQNQnk2OuU94yHNyiHPY+ZTZqKPe/tyVOgcslniIMP3pDo73Rjz4yq9pTKcoWq6P9Z/48+O0xhMGZFZbGruHQJkztLCl8dP06yd5Nb0nhalEnXjUB1tyDe9W/YTRUo5z5QYs/lRQG8QWZyWedNmZCsBnBgBiT8efTgG/abhg= 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=BboLTWaL; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=GpK0Goc0; 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="BboLTWaL"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="GpK0Goc0" 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 61NAWhZ63698125 for ; Mon, 23 Feb 2026 10:57:54 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=aeiOLGPo7Pw1tYvAnvKceU h5ioZ1PiVSqmBzqCS47QI=; b=BboLTWaL7/kiu6rytr1kisiqZD13uj//uxR39j tO91IO/D5jA8FGKYIkdeQSJQg0aJ7qPmtVmiAARdeVcj85w1EZrrNOzPdObR/+MW 6mlFbT49bB6WVnsqjAQ5q+JtNSq4hSQBz62cM2EpsWamwTLCO5vVadTjm0OF6cZH 4T46m3hzU35FFFWZwwjfQahBiIzU7pIC09/vDFOa57W2mNyRUFGgLhuhBgFO7DJo TYlLQ4UDRmFrJWSB+vim6XtTOnMOOaXZ6lw0pJ0EmcqU3trGLk1q5P8Xz47X3yeA sAsV3/tkMTX4HtlkgHV4FK3FhWEBbsQ2tm5Fz+X/hG+rM8FQ== Received: from mail-qk1-f197.google.com (mail-qk1-f197.google.com [209.85.222.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cgn8182kx-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 23 Feb 2026 10:57:54 +0000 (GMT) Received: by mail-qk1-f197.google.com with SMTP id af79cd13be357-8cb3a2eb984so1334980285a.0 for ; Mon, 23 Feb 2026 02:57:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1771844273; x=1772449073; 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=aeiOLGPo7Pw1tYvAnvKceUh5ioZ1PiVSqmBzqCS47QI=; b=GpK0Goc0YZAhfDGee3Ul/oaltxGF46PNHdO/tBKfECco3+fO7/QmPBvDYGqT+zx3Dx KH7/2Nra619YAJB9cLAyj1HWGhmkasizoCDMaysSiZrLA6286ZiCIQ4fyVbRqwajleQw rWtUdzeh0+vgR9j0OMSjRYcaFCdWBN2PhAe68wvov9OTpJEUzihn1uK7HZVJJNQrF1Qr T00raPj90L1x0wD7waxmm5rpc62fPeYeW/B1UkxeL02ZNOyluxdZ1kftiW6kED6OfIa/ Gi4p09oUdm/9ruUs/VcXKVn46fJ7F/HSvoKAMJ6WXEzvi6o42GwRACnIjNWUSymS3CPm OVcA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771844273; x=1772449073; 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=aeiOLGPo7Pw1tYvAnvKceUh5ioZ1PiVSqmBzqCS47QI=; b=hUsJGaLSEB7HxQHi2p2MNQIR08fkVQmLHLOkOif02IJlPG5lS04L4EJ1hIik2wOoC+ ZpDggBhBnigCuKynsIAvEkI32y1Ofk5cRzQh6FEh50bvG7naNDUy9gn22RP3EDYWXUv3 37ZpaQajKmfcoYd0CpU2JosYOQv1wmuDpMTDIg3A3wihbQeH5o9yFAyiUn8e461u11eV qakhRNJhT431XGxNr6SttDTRxDrjx0p3vuUOAhbqz/fUTNOe4GxSyMB8LPJeySjJSv7I bLMDLqPrv2Q5CfBi5pl+aW/b0cLsNmP/YnWwKfMyp4Acep42gF2tVB+VXNe5/Qw7TJ2o C6ag== X-Gm-Message-State: AOJu0YxS4OpWCwgQcG51MGYj8c0ewcFDdWubC8GURm7nZulOFGEy0BIw oqFe/+kJTYwpT+JVKznc1P9gcta05DHO7jsHIgKsmAdC7LLwhMROjNSe5F1aITSUqv6+XGYNsjx 1kDIhlx1L5FC2PrxvsLiAJSfbSV+5X/74gFdttxN1PH8iO/fo3jcl4fAGsPzZ3+Kk8dE= X-Gm-Gg: AZuq6aLwF3hGR0bYyfELjRTa/9h5YK0kIv3I44O7ClRbeUcy2mpPxDK5ihUWl3HmItP DzUhWjgNkQUU1vNeHUDM8bD7+CQCcMRmQLl1AR/H594olLZi89EWPZ1RgHXDbk0jJ1MMebrzwai nTcYrwwddpjApYq5hcUbjGk3jW4SrFp//8n44MBuZc/MwfLJ2HqjddEPtrSJSFLUYHXZPTfSx1W 232Ot9cmm0qXxZ6EGA2T1ZYCem50Wwd+a0Y4UucAtIdk4m0SOkXV/yTOuI72V4t72veN9iVC6xR w2qm42QLgdIcUyrCifTL5KhrFSe1XY5sNLCJyp+yx+pS2MA8P6kgEZa4MZwBa3m6VuNdjqSX7Ne 2oWrbSc5UhnlzW1wzWBniaDBBPL/uVoKzKULfX9khgyWKN9KayN/e X-Received: by 2002:a05:620a:4587:b0:8cb:50d6:18c4 with SMTP id af79cd13be357-8cb8c9cde98mr932275185a.11.1771844273511; Mon, 23 Feb 2026 02:57:53 -0800 (PST) X-Received: by 2002:a05:620a:4587:b0:8cb:50d6:18c4 with SMTP id af79cd13be357-8cb8c9cde98mr932274185a.11.1771844273064; Mon, 23 Feb 2026 02:57:53 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:bd71:422c:5e83:8b37]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43970c00c18sm18120002f8f.14.2026.02.23.02.57.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Feb 2026 02:57:52 -0800 (PST) From: Bartosz Golaszewski Subject: [PATCH v2 0/7] nvmem: survive unbind with active consumers Date: Mon, 23 Feb 2026 11:57:01 +0100 Message-Id: <20260223-nvmem-unbind-v2-0-0df33a933dca@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=H4sIAH0ynGkC/1XMQQ7CIBCF4as0s5YGEGl15T1MF0CpnURAwRJNw 93FJi7cTPJP8r4Vko1oE5yaFaLNmDD4GnzXgJmVv1qCY23glEvKmCA+O+vI4jX6kchurw98Mr1 QFOrkHu2Er427DLVnTM8Q35ue2ff7g+Q/lBmhpNNaUKY0O6r+HFJqH4u6meBcWw8MpZQPK/pw3 q8AAAA= X-Change-ID: 20260114-nvmem-unbind-673b52fc84a0 To: Srinivas Kandagatla , Bartosz Golaszewski Cc: linux-kernel@vger.kernel.org, brgl@kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1988; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=UIsWHzp+8aDgVDxgHb6vqYAZq4FkNHXsI4hjzfPFdi0=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpnDKiTj3cpvYMxVs332INZ6MlYRO3aNeh5Dd3k oTNEsFIADiJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaZwyogAKCRAFnS7L/zaE w6GjD/49wo+ukAQjCPEuI6PEr7H8wrnTpyohynQyL1CF0OMwYJY31mMOG/ykrgI1g+QZcLbbuot RRjsDWthDjmlRzTXO3Gxxdd/JGhceEiNAepZRCMTFH94W2vuP5JLGpufFDPSQDkOyRG8kc7gYo+ r/AlCdVrXclqWsVmd33lEoCjDFbFjnnP6Dy/4CpSlsFhkwf9F46DE4NF7XpYbAACErw6jv+vZS/ kSpT7j/b63+pBeuk7DIWxmgQ12NhVbi6sj3DoF2qHdXWDcbjNA5o6Uw5v7D8rupfnd7fjlmjzXZ oV+RYfDViRk3xn6W+sVVeGyIGmk2NSGySpIc+55tK3Db1f++CciAR/cSA/Oep7NI9kZI7ZPklha mj+qi/IoMStP1Wpq3myOZMf7mnt4BCmXdi04wlbm+9JjxPjCWh98TWkXua3oc16s2vuNMK7t5CN g1wmbNjePWcg60fFsQi7fI+2BFy/VUh3zhDi10siks2w42Pozq3NHkFb+rX+RggUXIxNjxRb8kq KFlJzmbnfOxkTAyyh14EAZL/lFFMNFdS+DgnlgQJHG5kleuuerMO1A4yHibRda6E4UjwhBf4EEe ekuEQ/7TC9jurU6KpVOPnb9XVeZx1EF9TjdMkKraF+zYTGOR8maYyvtgIQbUVSZL+iLeT/DFz0C N90MhJ6tGOeAUyA== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-GUID: ZrBj8Vwu1qsT51xLRRTC6pitPCWR3L0q X-Proofpoint-ORIG-GUID: ZrBj8Vwu1qsT51xLRRTC6pitPCWR3L0q X-Authority-Analysis: v=2.4 cv=CbsFJbrl c=1 sm=1 tr=0 ts=699c32b2 cx=c_pps a=50t2pK5VMbmlHzFWWp8p/g==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=11ZMHtE6aVnYDTNUpP4A:9 a=QEXdDO2ut3YA:10 a=IoWCM6iH3mJn3m4BftBB:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjIzMDA5NCBTYWx0ZWRfX3wy4cxnMzxw6 vakIwOYbVCdj/+76OvOk8Qkt9mC6GyehcVKPJjajfDsWO2j7UByilmdzwHVbraiJ4A5wmFuLiL5 Wl2dfCv4Y2gUfhFl+SCcvlTMkIiKno8LN4zU641I2rPvFWcrRaVwlh0TfF/Sp3EZCLpPHevpMQo 1Xrv+n50/W9XBLtZ27CFyV2vx1DGfL5elWrzuWimOKaRzmIObBNemKSC6RrMemXE/E7h4UFtNYm kuxUSba3cSUe2/0EuoCBlqUJBZEtFPiSFrc9P+NeHJZar/bYbYnAGgSoMliAVSsC2HK/4wp/0nh DcY+BmPi+BKFzOVmqHKaaTwos0b5sEI+WqpNN88i4pRv0lAhBml32Yd0GWTrKv5y0wDzOYPJFkb T+P1uRCJXQBt8Tu6vyxYoRNsWolh6XUG4CITySYhShwiIJ34g4SZH/7Ad8wDQPhuPPwzgAmcyFn kQaKGOXiqtVZRnweAaA== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-23_02,2026-02-20_04,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 adultscore=0 impostorscore=0 priorityscore=1501 suspectscore=0 phishscore=0 spamscore=0 malwarescore=0 clxscore=1015 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2602230094 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. Thankfully the design of nvmem is rather sane so it just needs a bit of encouragement and synchronization. Signed-off-by: Bartosz Golaszewski --- 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 (7): 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 struct nvmem_device into refcounted and provider-owned data nvmem: synchronize nvmem device unregistering with SRCU drivers/nvmem/core.c | 295 +++++++++++++++++++++++++--------------------- drivers/nvmem/internals.h | 18 ++- 2 files changed, 173 insertions(+), 140 deletions(-) --- base-commit: d75756d8d78aa50d454b92665896b3cd0d1077bb change-id: 20260114-nvmem-unbind-673b52fc84a0 Best regards, -- Bartosz Golaszewski