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 D190236D9F9 for ; Thu, 30 Apr 2026 07:46:22 +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=1777535184; cv=none; b=m6dzqy5iRcl814gvpbh8pQUafTH8LyAxUoO4OjCsjWcneylKg5e0BfwVcsjyhNvuhXbCEnKTvAQ4n+R2ac48Iqnta5hUf0CPRu7b49GK53gKtjL+eIGZ8TkKM0p4M2taVNMbncezmP11fiU4ifg+3BMgexpwqp1zcn/a3erKEls= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777535184; c=relaxed/simple; bh=xqT6kzop9Tu9IRegDxu2r1ixLhIQNCTwTag8YUl9Jig=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=QbHDKNfNYWT76b1IjTlD6/n5qDlWjJC+aVkW39r/X6Q72UFJiUxvfr+OSCfkZZISXmYIIFpKzfjwN3ICoC+nD/l5uNjEZd92lZIFtpRao0GtLxjCkETP1sdqty2KkX2sozsgvghtfHsxag3mHM42HvV0wEu4OiYZB/hAWsgbGJc= 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=hq2pLFfi; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=icj9VEKG; 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="hq2pLFfi"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="icj9VEKG" Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 63TNebe5831724 for ; Thu, 30 Apr 2026 07:46:21 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= CKiF1d5L+Ukri0gr8t+v5QxYVCgWBtf/9l2+Zs13NyQ=; b=hq2pLFfiY3h9ocWE kbJpQythjLQBTaCZjB6NFymebS3tclg5Oj5K43VnF1Dy5MjJ/J5Aylf6IqfVGFgx 6TjPv6IEMZNCJN4yX/J6SLFL8sMOr5nYz3ijiJMfad7F5qARhAYGZjvA0DCm8ndR LasCvFcHSs2ykGM4Ng46MnqLfJqMXN3BpyLP8/765JF+TiZh1eKH2OwaNPCICRWj 4lJekBZdGEj4BGTZySRi2t9RVRm2kxU4skkK12TnjGZ2fc7Fp8s9okC5QfYtDiZ9 fiSI1qBVrq88jnszpntyfpyt4HZ5WUqH/4iaA9Fw0a6ffMWY1tHh5H0EyHii5VTa ewMG+w== Received: from mail-qk1-f198.google.com (mail-qk1-f198.google.com [209.85.222.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4duuvb1f1e-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 30 Apr 2026 07:46:21 +0000 (GMT) Received: by mail-qk1-f198.google.com with SMTP id af79cd13be357-8eb9f8bbbb3so512454685a.0 for ; Thu, 30 Apr 2026 00:46:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1777535181; x=1778139981; 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=CKiF1d5L+Ukri0gr8t+v5QxYVCgWBtf/9l2+Zs13NyQ=; b=icj9VEKG2DfTSIfbMFyYVNu9quX73Hy8Wek9QdpGbJZ66p/JJMDz66gzG7ol+/M2wf ZNvHGd0NwNrAItve3jSlO4z8/mYRFJu8RYjtaJMkjN8ZNSNVmzzcEAyk0sfCkzWn2fSv tTLcXtdulZt/mn1zRsu5MbuvUPfh9BkwjktcADHZKH2PGF6dQiA8g2hjRtO4LtD9e7Ft hbwaxydYeVV1ro/HrJPJxfwbC91kUAwNIWYHzCbRIkt3jwV8Q/98AR/rVIntnGhtCHJZ MXPJCqvon4grv4DgObKnXXMLHbv8Hh9tH+Y/O8l9RLjil0HvWzFDgMdTueBp5NHrC6ml PLAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777535181; x=1778139981; 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=CKiF1d5L+Ukri0gr8t+v5QxYVCgWBtf/9l2+Zs13NyQ=; b=sHRxPzAErkHQBB1OaImf7hzz6uJlggkdiQv8XcjcmNlq5vMG0ZIt1ReSRrToYm5U2S WFIpBkrcP0/MK5I34fJn/Hf2zPe+Obusp6OIGSf9W0XoOhmG/kCMcuT/wtQSX9Gb0Wb9 qty4povQgoGWu/DqEuEWdYAZtfbTGal7HfjsYE+UwUwSjp+zN+bBteKgXAj5ryzSepIy LyFpluXPHSEstzJ3qqzSM4oBUPiHmgZ3gKNTR14rVOnMysqHRfA3EwoQEdaDxFStDYu2 w7QVNSJ8sQbSq27hKeGaHPdUEcEpICyeZ/rC8ek7KiEnxU22qToYq3nsFNBmyC8xdkUA bRHQ== X-Forwarded-Encrypted: i=1; AFNElJ9/d5RTFklPjJ667yDrMECLUT2PpskFXDky+2IAXvwsaaP/sYNWgsd1loWiuEtmt/r59+gZqGIcFDWhCMc=@vger.kernel.org X-Gm-Message-State: AOJu0Yx4ukMVhq05+d8dYbX0cC3830SIMIFPt+Wqlxl9vp1N2t4uPjS7 WW+oweGgYwD0qzQoUM+cAp1UG7VNZvO7LgVVzKbTuToeQbKn49gqhSIld86bXVAiJN33nugBDi2 MNUKk1hLN7BMrIzmJcME/VNC2hDwLssA3RRUvMSgX8h5eF3/IQI1o793AFAyCcAQuw74= X-Gm-Gg: AeBDiev1R/mSsg085YR9CJrIsTldsrUGXjl/NSb9xkt2iX7fF3F2XfI2LQDVx+47bZw s/hHYKRqBRr01kNhPkxMZU+IBpaXExkwtO1J4dgvsIrYbd0kDvr+eDd0FOyuXXMGd+g5gkvgMPZ xQ3jVd3k++AliZeXZOmm+oj8/TEX0CN4Gw/9Q2Q/K5xTlex6wKKlbf6ZfJF/sH1H4/i2rqWGYBM kTdmFmtZ1hLoo5zcmG6OdflgjdadeIAPYIurhct7oLymw1A4HVB/St4Xi8WJ40wv2MM8VoaDvCm I1COCr9H28tjT9YdLJ9IDgSZtAYoRd5PxVG87SNi0YxxMBgh1bZfG9cSJZ+ReOZWUptbQbiCUtE JN6EKFMdJFtC/vPPshHw1yNE/mIjz1NqH5CtgNI5+T0kYmINvWHxZL5BY88Ry X-Received: by 2002:a05:622a:9009:b0:50d:9f3e:e1a with SMTP id d75a77b69052e-5102d09ec31mr12893421cf.9.1777535181105; Thu, 30 Apr 2026 00:46:21 -0700 (PDT) X-Received: by 2002:a05:622a:9009:b0:50d:9f3e:e1a with SMTP id d75a77b69052e-5102d09ec31mr12893291cf.9.1777535180700; Thu, 30 Apr 2026 00:46:20 -0700 (PDT) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:79a:f446:21cb:22e7]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48a820c856dsm48714825e9.6.2026.04.30.00.46.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2026 00:46:19 -0700 (PDT) From: Bartosz Golaszewski Date: Thu, 30 Apr 2026 09:46:04 +0200 Subject: [PATCH v4 1/3] driver core: platform: remove software node on release() 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 Message-Id: <20260430-swnode-remove-on-dev-unreg-v4-1-01574da0aed3@oss.qualcomm.com> References: <20260430-swnode-remove-on-dev-unreg-v4-0-01574da0aed3@oss.qualcomm.com> In-Reply-To: <20260430-swnode-remove-on-dev-unreg-v4-0-01574da0aed3@oss.qualcomm.com> To: Greg Kroah-Hartman , "Rafael J. Wysocki" , Danilo Krummrich , Dmitry Torokhov , Brendan Higgins , David Gow , Rae Moar , Andy Shevchenko Cc: brgl@kernel.org, driver-core@lists.linux.dev, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, kunit-dev@googlegroups.com, Bartosz Golaszewski , Andy Shevchenko X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3068; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=xqT6kzop9Tu9IRegDxu2r1ixLhIQNCTwTag8YUl9Jig=; b=kA0DAAoBBZ0uy/82hMMByyZiAGnzCMWh/lxrSWg36NMX+/CKGA8yIxzcbCw9gWBIJOnLLP2Wk 4kCMwQAAQoAHRYhBJHlEy3ltUYde6Jl/AWdLsv/NoTDBQJp8wjFAAoJEAWdLsv/NoTD1g8P/3zh ii7c5Pw1temLKFdC1ULb6TiSHLSQJ1Q33ZFxLJo8hK7Q1GoPRtKoaQLwLCKaYIPy35AZjWTsOOh HjjsxqIwUkYec0EzgZOu8QXEm+yA0cH2ttSRje3CPeF4DczxvYJmYpP0+zXAScWBaUUW2fQmmje cpVOQzw3C/vmqTZzYETS+8SWg8dddZixpUy4MJhSnH2dzg+W8vXuOxhzZGMUmW21CxuF+tFNMlb 057+jnh+YlSv8cfn2QMxnlC7RPhumH6FzpikjjDukOwHwTfWqRbqvftP918ZYQC2B2wB6ty1HU/ 554t0d6rMztG0vQ0JYRkPd26dtJKxCkRE/Su6QPuxzzd6zEATWcNX9RJlYRtl4umLmOKDN+c4U+ 4yAmKfCkn5JiQ4uRCIFRYoyNpzvuUiT9l/Lu4Ssk5BgEWd5krR9DLmHTdNIWAzTt0i+IadBCO9C MAxPKY0TWWfcbkIxaDxaFQwhgKSLaoo5zXhBXVZ9M5DxNVVHotb2S97nFqlDLJvjdvFawYVgTql IDj/iOXa/lhTvKkE27oSlUCPZdITe1z7WfWnlspuSY6E/AJxilpcq/uNrkDx2iIL9PyJ8TfnLuw lpGE9uc4j/1C+YOydOrWvyxuB0BXLdLIOC88YkkMpbVYhDIbC+Uzq6cdyuSOxwyGPJi4kOmXjfo Hw7wu X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-GUID: Y4El1Eg1oXOJH8mOSiZCuZvKhbHCwGRt X-Proofpoint-ORIG-GUID: Y4El1Eg1oXOJH8mOSiZCuZvKhbHCwGRt X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDMwMDA3NSBTYWx0ZWRfXwCcPmmpfWVlA LelrheIRpCoRbsCq6DUULF4XUrA86grrNaMH84vN62KjEV30bWAiv15HGK57qOJ7nM2DL8xwZHg fs6DCtSvI/jshbsKrj8g0UFq/Xt+augHowRRxEzmwomQolmH6aPEEiUlExHxjoL2+ebTPAbyEUg fPe2rhbWEQGb6J2EM5Nu94Ord5rqZQqGzVWd2jdgOUPw6ZReWHTZc9eYhTW3OHc1CJNmJ2/u2vV 3tztH6n9+P4AohnA0+h3r9WpDnriBAV9C6z8XactgXFZ90F9cCMPHk8OH/G9y7PFNSPMg7cYHJJ zd9+qD++v/dfoFyDIzmLXdCB450zlZuOz35VCojO54IiuySQvlTkcDb+AqIi9zDSWXUwMvnWHEe Dbv1gLUbxJOwujgiiSnMZ/H1bJz5vxDlPt2ZW8Ss6z4HWqvKRTng1fZy41g9nB71s/Pn3/nvSql 5yjScpMm2iz13hVJJoA== X-Authority-Analysis: v=2.4 cv=V+JNF+ni c=1 sm=1 tr=0 ts=69f308cd cx=c_pps a=qKBjSQ1v91RyAK45QCPf5w==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=gowsoOTTUOVcmtlkKump:22 a=QyXUC8HyAAAA:8 a=EUspDBNiAAAA:8 a=PTX60mhBgyOAItwlv74A:9 a=QEXdDO2ut3YA:10 a=NFOGd7dJGGMPyQGDc5-O: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-04-30_02,2026-04-28_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 spamscore=0 suspectscore=0 malwarescore=0 bulkscore=0 lowpriorityscore=0 impostorscore=0 adultscore=0 priorityscore=1501 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604200000 definitions=main-2604300075 If we pass a software node to a newly created device using struct platform_device_info, it will not be removed when the device is released. This may happen when a module creating the device is removed or on failure in platform_device_add(). When we try to reuse that software node in a subsequent call to platform_device_register_full(), it will fails with -EBUSY. Add the missing call to device_remove_software_node() in release path. In addition to the above change, make sure that we still function correctly if a software node is used as the primary firmware node as well as disallow using two software nodes for platform devices as device_add_software_node() does not handle this case correctly (in fact a comment inside it states that only one software node per device is allowed but it will not bail out if two are used so we need to handle it here). Fixes: 0fc434bc2c45 ("driver core: platform: allow attaching software nodes when creating devices") Reviewed-by: Andy Shevchenko Signed-off-by: Bartosz Golaszewski --- drivers/base/platform.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/drivers/base/platform.c b/drivers/base/platform.c index 75b4698d0e582e67adafa78c312d75c72fd654cf..22834be0a3aeabf538f57ec6815ab3cd6851c16b 100644 --- a/drivers/base/platform.c +++ b/drivers/base/platform.c @@ -599,6 +599,7 @@ static void platform_device_release(struct device *dev) struct platform_object *pa = container_of(dev, struct platform_object, pdev.dev); + device_remove_software_node(dev); of_node_put(pa->pdev.dev.of_node); kfree(pa->pdev.dev.platform_data); kfree(pa->pdev.mfd_cell); @@ -848,7 +849,13 @@ struct platform_device *platform_device_register_full(const struct platform_devi int ret; struct platform_device *pdev; - if (pdevinfo->swnode && pdevinfo->properties) + /* + * Only one software node per device is allowed. Make sure we don't + * accept or create two. + */ + if ((pdevinfo->swnode && pdevinfo->properties) || + (pdevinfo->swnode && is_software_node(pdevinfo->fwnode)) || + (pdevinfo->properties && is_software_node(pdevinfo->fwnode))) return ERR_PTR(-EINVAL); pdev = platform_device_alloc(pdevinfo->name, pdevinfo->id); @@ -866,6 +873,16 @@ struct platform_device *platform_device_register_full(const struct platform_devi pdev->dev.coherent_dma_mask = pdevinfo->dma_mask; } + /* + * If the primary firmware node is a software node and there's no + * secondary firmware node, the primary will be affected by the call + * to device_remove_software_node() in platform_device_release() and + * its reference count will be dropped by one. Take another reference + * here to make it have no effect. + */ + if (is_software_node(pdevinfo->fwnode)) + fwnode_handle_get(pdevinfo->fwnode); + ret = platform_device_add_resources(pdev, pdevinfo->res, pdevinfo->num_res); if (ret) goto err; -- 2.47.3