From nobody Tue Jun 16 17:02:08 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 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: quoted-printable 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..22834be0a3aeabf538f57ec6815= ab3cd6851c16b 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 =3D container_of(dev, struct platform_object, pdev.dev); =20 + 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; =20 - 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); =20 pdev =3D 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 =3D pdevinfo->dma_mask; } =20 + /* + * 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 =3D platform_device_add_resources(pdev, pdevinfo->res, pdevinfo->num_= res); if (ret) goto err; --=20 2.47.3 From nobody Tue Jun 16 17:02:08 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 ACAC43ACF02 for ; Thu, 30 Apr 2026 07:46:24 +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=1777535187; cv=none; b=HrQQWmNPJYGxABsoR/a3Vdf1M9SqB7ODKXBBd1gIzZBcDuSE7Ih902/nhvPTaL+n0v1dXPuS8MWbvmnoyXZDfsNQe9cT1CvEK0SOTlhenD8sEuGNmTnYLlCSsWW+TlMGKfuIIrEN4pAPgBlmeb8sQSNiA2y/q4gf4mZONyYuKU4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777535187; c=relaxed/simple; bh=DeQzfE7uEw87FoNwrajQBxkZ/sMoxBLsCBYIPXjNSsI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ZBKIFXSo08o4njaGaHFXFhXvKjrnhVDP2rmgy9SAastS9aw0wEt9ZOWrLQtYDB4eBF9TqrzyFOyumzk5X0Vqs8uzOHOy+TOkzTkEFA045j+YMfrlYXc2BBhZBIOhT0D4QXzfXop05aqx2oVgjBV+5+J4YWdW9Mx6hl92bIi2J4s= 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=afcE2Nah; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=bE/9G2n2; 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="afcE2Nah"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="bE/9G2n2" 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 63U7ZlVV088541 for ; Thu, 30 Apr 2026 07:46:24 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= 34bMm2QC5D3vRxjYjMA8BCTGNq2X+nM48LZ6CVNLD7Q=; b=afcE2NahFTka7BEJ CkqHwAjfphrGRqwXXEfkjS421Z0/IZet+pxrGIfzvqaaxiWvc1Aa6wtOWzpdBv88 GIBvn5QHSTsLJTYG93NZ/tgRoBFJi7tEiClBJwJtVO7TqIM4hHN3H7IVdblkzfvT 6kcNIUpeau61kNnRp1l8nTXblyGivpy1MefRURu7Sghh+5R3aa8Ba2y9QHJslYII J1JYtSTqKD+bLRPI9o3xRhkv00GhhCESuD1KyePnZEaTRg4xqIslKqu5dZHQoUxd RdhJ1iOmpOj80UW3QfDQyek80c4o/YAQuG+IbihAytDlJ0a0pjWMx61xqZVONQz3 Jk8TsA== Received: from mail-qt1-f197.google.com (mail-qt1-f197.google.com [209.85.160.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4dv2u4019k-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 30 Apr 2026 07:46:23 +0000 (GMT) Received: by mail-qt1-f197.google.com with SMTP id d75a77b69052e-50e136aff17so9708171cf.3 for ; Thu, 30 Apr 2026 00:46:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1777535183; x=1778139983; 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=34bMm2QC5D3vRxjYjMA8BCTGNq2X+nM48LZ6CVNLD7Q=; b=bE/9G2n2tAKGt2K3hW7rghikTek3HZPlbpZPRT5IEsp992GFvz+1I1LfB+NccqTGW5 FFhN3Kl8QbdHGbsUjgVZJjxw8COjPeXdT1bkCQXEqte+VH3yrl8krxK1flDe9zKJKx7Y CO4XwCHDih698zALSulmyDSnAaeB5mJYpMD+VQlAmeU6L1L1goGMA7L2dw2rnenuTn3Y HIeDvszGuVRPyTbh//ADGtIOm90ad/A+IlFt29teEIWm+uIChcdUabwUpoujmyUa0bKw gUUXaZrGMxILUUGbO7fGBEzJOb1Tn8nvgqqHYG1PpFttXK2a+Vs05RNTzBRbLJ26AaDF VO3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777535183; x=1778139983; 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=34bMm2QC5D3vRxjYjMA8BCTGNq2X+nM48LZ6CVNLD7Q=; b=D2PGYxvt4hSsYC8qnU/2KT6vYdz/W7Bz+9vbVWcZl5Cr9oeyImU7enna/IjJPMAOMw BZxItp65hFDQTUx0mYUhMsOT31efhpeLyKGxzaMxpW2B6nPaf7cdUC+V5CvEx5XgbCRV wduqwPfgUQGRyZCpDrlAT24GJkR3WAV8DfyGSxixsT7qky4UwSEuXP43T7Z8JyOx9CPh x5JEF6vaYX4SI17HbxmlQNUAs9ekIJxj4NVZYKpe4FN8tE2C2jHMNYCjVIiK3yd0BeeB v/VamH45sgi+vWen771z61N8A06Ix50SEwGyPWT0IM0OWn2f2v6bx10MSJB8Qo3EvOHB mGfQ== X-Forwarded-Encrypted: i=1; AFNElJ+vWML8JJdNdzH8rOZRW6BP0j1y6KKU1rYPZA8dBbRnyrZL7O7n4+Kv0+6mFIJbRJ6oBXVyfTX8+W5kqKQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yx5zzs8IuuIkE5yVX41p2AWqi+Rb+klbBmZBBs6Dl/DL9mfDdqb EiZ7aSQkfs1gTphni8eQnk94qCaoNbIS1RPMJB+CwoyjuXce5QhZL1UL0qfK3wmhyEqMJ6LDiZg HOy9kHlwSc3nBYGXdS64eT7qAgmMcxpGubHpheWAMv4yoPn2esmhXDb2DhufwpkRwYO0= X-Gm-Gg: AeBDies2gwXZ38gS3wlIKBzNO0s54amPBnGAoQXkqm4x7B6ynSxngiBgf+cnI87GYEW xPaY8vKPLvbYOzC9ZO1NgdYUpMY1kxf8u+ivFTA/wd9DfB5GZXwmgjRW43izEldVlAdL5oUcPPg wTeYpaWSFiFbjs9O+MxYftovDUUh7RJDgfTjV9AvNm9ZKSuducPE0bAH/gqHAuw6hDNme3gnbxW bY3pMz02KivDBm0E8mOc9D+cHPizLJjzUoj2jvrhVm7bhVBUZYXTqaDp5nP/MorDDTGeWIoHn1G o/dHow+n7K9E8AI0FNQY9qxAP1w8NWW1d/mNkzOC/WPKdqMNixTwcJc3i9LmKkqgD/79s6JTiUb iSQHfPpjb7sIAtVaQTqLsmoYJ2DYhnFuzZfJisD164Xyk8HdRx0rHuMihlogO X-Received: by 2002:a05:622a:1649:b0:50b:4778:ac60 with SMTP id d75a77b69052e-5102aaf8c62mr22664881cf.10.1777535182981; Thu, 30 Apr 2026 00:46:22 -0700 (PDT) X-Received: by 2002:a05:622a:1649:b0:50b:4778:ac60 with SMTP id d75a77b69052e-5102aaf8c62mr22664561cf.10.1777535182507; Thu, 30 Apr 2026 00:46:22 -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.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2026 00:46:21 -0700 (PDT) From: Bartosz Golaszewski Date: Thu, 30 Apr 2026 09:46:05 +0200 Subject: [PATCH v4 2/3] kunit: provide kunit_software_node_register() 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: <20260430-swnode-remove-on-dev-unreg-v4-2-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 X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3107; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=DeQzfE7uEw87FoNwrajQBxkZ/sMoxBLsCBYIPXjNSsI=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBp8wjG4LWnpl5HGfVVOZ6PBIjYsxHmWZz+BysSn mcqVbAduDqJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCafMIxgAKCRAFnS7L/zaE w1ifD/0cvTNmatAEAtSQJ6hCjOITJQt9OMIRaQYby9TNG3tbFUUgkmawvBzfVNvcgsAt9quWOd/ H0asnxBXL/pk5aSoQz1El0I5x0KBlpNTd+WYTksN47q7Eq48oBVB1K8jneuSpJT2HFogKsC8izs xfLuivW7vySa7sISNJailwBmGWbfrGiiuTBCsOmIFyuJmj5dOBmj74r6fDsRy645v5mQOFYHgRF YtWJh2aZS/59iZOmgdKHy+iE8l+V8JBDqzABJXUINwBHd34Z/Hh8C3Ho5+xVxjIhQgZRhWM8bxc IDkdlK0OIId8ntLQGPryXCMwXqnSoPWOp6IrFhN53KD9rd5PQ+kfcU7iCFXokI/QtkymJseLRWM 3sRB6/drvRjYMRP/0OHCBNQ54TA6ZIvJe1JGc61qhP+z7Zn+5th8927CreJAske7v4iGgRv/Yyi IKUDc4/Wt/HHMbPMsBdL/rdi/C2CqRbM9kmq5aJs4rwxnEgYfEnMmTLhgG5znykkUh7fg4osOsr cs7FGJQn9opuhXKZzxX7NirDiZcmIXCckTdY46yhLy5m2H32KEEOIF3cQbyoaQQy7u6AzvaLmFt grkiIVoFpz2tvRas1sYMCckyK8zYlkVb6JNyQETOnlnbbsaqnBR+sSYEGN9KGYzIbQoFASJIsIg LisL5a3Wvbb4u9g== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Authority-Analysis: v=2.4 cv=Ev/iaycA c=1 sm=1 tr=0 ts=69f308cf cx=c_pps a=EVbN6Ke/fEF3bsl7X48z0g==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=eoimf2acIAo5FJnRuUoq:22 a=EUspDBNiAAAA:8 a=0NWOcHYCwBz2ZqcsIPkA:9 a=QEXdDO2ut3YA:10 a=a_PwQJl-kcHnX1M80qC6:22 X-Proofpoint-ORIG-GUID: Dt6sZ6a7raA_tk-Jx7OTMdpJP86sjxUc X-Proofpoint-GUID: Dt6sZ6a7raA_tk-Jx7OTMdpJP86sjxUc X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDMwMDA3NSBTYWx0ZWRfX4oe7Y3fJ3Heg DGkJ3uyXu89feR2f/AMdDSnXeEYpIpDY0jN5uToL7CcsNgIUNbUT2UHmGLDwfByvhTWaHEUCawm /vif6aScmjk4PA+f0T1aIOTokmfzAB7zeC5kX7H+P2D9/Eu6bp3wNzFfPmZPl6cu/1z62wD5toO +kzrR1fGqbLP2llfD8Jhm6iUotuO/6Q+FPOOuxedMm6YQ2tnDRO3uoEnGJZndcc+mYN7lf2v4dp tIO1CjrIOVwFkW1BkUfKfrlq0XqqpMh9bwoNUg0senMGeKxDfqPgMrZxn30xdaD8aksb4BxyPH7 3D1DzY59+DfHhw8UfU5HOy7AthWZ2wQQKIJ4C6Shi7KtXRTKkD2ydYi16OXlmAS20BIvukvwqQP TIoWMTJ+DZZaAcuP2aWvazyfbEhNzWiLHRuPnnHnykXqKf6Jc3oSabAKXxBITLW3chUjQKFuvua vojQeD1SXf/reat1syA== 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 bulkscore=0 impostorscore=0 phishscore=0 spamscore=0 suspectscore=0 malwarescore=0 priorityscore=1501 clxscore=1015 adultscore=0 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604200000 definitions=main-2604300075 Implement a helper for registering kunit test-managed software nodes. Signed-off-by: Bartosz Golaszewski --- include/kunit/fwnode.h | 19 ++++++++++++++++++ lib/kunit/Makefile | 3 ++- lib/kunit/fwnode.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++= ++++ 3 files changed, 73 insertions(+), 1 deletion(-) diff --git a/include/kunit/fwnode.h b/include/kunit/fwnode.h new file mode 100644 index 0000000000000000000000000000000000000000..e1554ace64b8a5899aff9f4b424= 7e5157826a49b --- /dev/null +++ b/include/kunit/fwnode.h @@ -0,0 +1,19 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * KUnit resource management helpers firmware nodes. + * + * Copyright (C) Qualcomm Technologies, Inc. and/or its subsidiaries + */ + +#ifndef _KUNIT_FWNODE_H +#define _KUNIT_FWNODE_H + +struct kunit; +struct fwnode_handle; +struct software_node; + +struct fwnode_handle * +kunit_software_node_register(struct kunit *test, + const struct software_node *node); + +#endif /* _KUNIT_FWNODE_H */ diff --git a/lib/kunit/Makefile b/lib/kunit/Makefile index 656f1fa35abcc635e67d5b4cb1bc586b48415ac5..7549a701791b5b7eaa8e0637b68= 18cdfd0b655a8 100644 --- a/lib/kunit/Makefile +++ b/lib/kunit/Makefile @@ -10,7 +10,8 @@ kunit-objs +=3D test.o \ executor.o \ attributes.o \ device.o \ - platform.o + platform.o \ + fwnode.o =20 ifeq ($(CONFIG_KUNIT_DEBUGFS),y) kunit-objs +=3D debugfs.o diff --git a/lib/kunit/fwnode.c b/lib/kunit/fwnode.c new file mode 100644 index 0000000000000000000000000000000000000000..bc8bf06762dd71a741a3419c1ca= 04028d6ad3ec8 --- /dev/null +++ b/lib/kunit/fwnode.c @@ -0,0 +1,52 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) Qualcomm Technologies, Inc. and/or its subsidiaries + */ + +#include +#include + +#include +#include + +static void kunit_software_node_unregister(void *data) +{ + const struct software_node *swnode =3D data; + + software_node_unregister(swnode); +} + +/** + * kunit_software_node_register() - Register a KUnit-managed software node + * @test: test context + * @swnode: Software node to register + * + * Register a test-managed software node and return its firmware node hand= le. + * The software node is unregistered after the test case completes. + * + * Return: Firmware node handle of the registered software node or IS_ERR() + * on failure. + */ +struct fwnode_handle * +kunit_software_node_register(struct kunit *test, + const struct software_node *swnode) +{ + struct fwnode_handle *fwnode; + int ret; + + ret =3D software_node_register(swnode); + if (ret) + return ERR_PTR(ret); + + fwnode =3D software_node_fwnode(swnode); + if (WARN_ON(!fwnode)) + return ERR_PTR(-ENOENT); + + ret =3D kunit_add_action_or_reset(test, kunit_software_node_unregister, + (void *)swnode); + if (ret) + return ERR_PTR(ret); + + return fwnode; +} +EXPORT_SYMBOL_GPL(kunit_software_node_register); --=20 2.47.3 From nobody Tue Jun 16 17:02:08 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 50FC73BBA09 for ; Thu, 30 Apr 2026 07:46:26 +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=1777535189; cv=none; b=q16iFHiz4UjFnfPLoLkvb+I9SdCMDeKWaIkJYuMOpAxucimUZwM9ukHUUsbRxQLN06javi2pgYn9NRBQEmKwxHLdySpnb5hA/WMoSj07sJhhKQEHnSHCbMDaXKq/FLD7tTRVHq6famp3p9FQSefHjGur7gPCgPOAF4IgApbitCU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777535189; c=relaxed/simple; bh=a3kxmSehqMFl/pq1mo8hhGqnhavQ9y5hTS7eBrV7YMs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Yd80B2RiQ7RWRffvkd5frwGzy28RPuIvCEt4Z/T/LmX32hksY8MzKXZkcFvAwQUWahXeNYZOXNqQdfHk5FKYkzYkBXyBMCVlAB4llE8c78k5+KAwQANiUvnE181q5/17+G3QfR2ONqgOAPegsS8jZ4ytc+X7f+e0t1Y3InDmRk4= 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=RX3fKRw4; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=j+QDGb9T; 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="RX3fKRw4"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="j+QDGb9T" Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 63U62X0I3993224 for ; Thu, 30 Apr 2026 07:46:25 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= 3czt389yZj9Aogyc/90tArENXIqN03I1zI6Kzz5LCmo=; b=RX3fKRw4Ih2dCFAJ TSFjE+ymud8px9czwLxeuLHa/bJqXdLPQE1RIeWvRiMniWhztTCb8KGGu0+0wWpc cvw0C+xat1VMnkvpQt04kDdsF4UZnBtur83Z2K1SBKot5xY4eWk41bxuD8m5JWjp S7DIWeOWFIQRuRcUJAWEBP92b0q3H3dAqmtlBjCnx5B9ZnSsTZbXuPpb+ENop0wP /m6KfzP2PiBOxi5XR0EqxeZvVCKgA9CZvTSqD7CUdzWcgj80miQolkN4Ihl448/S l535dv5m1lSWcYue/VC5ikKY+AYgDM/uqIfraQMG7vLvbg6Z38opr7pyh7UpMAmP 4aVydQ== Received: from mail-qt1-f199.google.com (mail-qt1-f199.google.com [209.85.160.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4duhx93suk-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 30 Apr 2026 07:46:25 +0000 (GMT) Received: by mail-qt1-f199.google.com with SMTP id d75a77b69052e-50faf575af4so13072391cf.0 for ; Thu, 30 Apr 2026 00:46:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1777535185; x=1778139985; 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=3czt389yZj9Aogyc/90tArENXIqN03I1zI6Kzz5LCmo=; b=j+QDGb9TULPmP66XIwyrioI6RnPrHbqK/b8L/SQX2812AE9jSdADyTsgOPDuZjeL2D NdQUVF2XoiEIdp+yIudzM7zQSlsR27CwTsJSdr4CV2AL+yQVvqTxlFjt3tNEl72Y3ett XScuYL0onB+Hfxj7Qomfgt6N4w1N6gsVnJO6hHcng0Iy9VBslzfWvbqz31V0mvWSnBTc CsWzARj5g02jk3pVu2Zg1ci7Yyq13xxxQWt93S0uoaouKAu1/el+GJI9PcOSoYrhtxr6 ExnxI7SYXlolQSeZgM2TMBUKOMQBHDoqhOJGSROSvLCyIOFtS5+7AtWx8byGeL+fDW8q e9bw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777535185; x=1778139985; 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=3czt389yZj9Aogyc/90tArENXIqN03I1zI6Kzz5LCmo=; b=gHBjVIJruchnVRIvAhuWHqnHrFPWODvknF1FPjqz8E/GwcjfCRhtr3UY0LOp5tgDCC y9ve4SGH2SZj4/H46M4RyDj4l8mQ6mh25koQBGOJxbhTIHCVXZroBFqhGPDeB43qd3mI WH1XuPLYK1gc6TLWyWibv8PoaxSta+s7msOs3iRiHw1UiDW5paPgDLflPOfQhdAJGTlY H5vP7RavY8DVuQn3K10kkuE18PAR26dVA1n0e8tCC7FIKgGBfg02fMHiM6tuVvZVfpiF E5kmRsBVT1Yg3+opm+edtlnye7wN1f2qa1l7knw3AmRWWGKdM7fBGBocYiK1xybSu15/ tVkg== X-Forwarded-Encrypted: i=1; AFNElJ8+IKThdm+F/qLz5kFfDjE9zeM0fbnnUZtHpHE9nyILFKdBRDxmDWD3NTcAyHgBDH44dTbbzhHNgvsLI+0=@vger.kernel.org X-Gm-Message-State: AOJu0Yw0eCcguAjLv0Yh1zpf2QqmuYj53j8IJd85II9aft+umsDPHoeR eurA0USefukCLuS3XGRZgfjgRaHyBFUc/yOrcRyqZwTEPl+0whfsEHh42j0OelJR3GkWuvpZkQj mkayAXVI6Rgj4Com+Sjmwfp3h1/AP1QgJehpucMlc5XNd2MJGtMVbQcLrPkd6YwrsLRg= X-Gm-Gg: AeBDiet4rBbzdK9HRgXPyD0C03bF1dOb+sfDETCVotAOiUw17gHUQX4inUVUZ+Z0PlB MHhn2V4cOpQZ97Ns4BU+UgttcmJnmV8BUtXnqd+H/h0u1u9zG99n2ctTlexk6LFu9fnJjStJ48z M7S4vTncvWjMPndtZddCNVMltqJffRw+sBtqUECO15UsC/ZdkJpsyg4UbDKUmJhd4U7VOneDXQR M2NSJz+tl3PFk3Yv9G/CZjOvar0OcafyaDGJk0nI7w9oyWG7/nxpMtvVbY7z2l8DDibq/IopG3D aYVc4x98jaCjCiPVrjuG0uHxdBOjRoRpSmmM0KIot/DwaKHNfwj1L8LuYogMfpVxRwqZ9Y8JmrB UA342f9g1y2ePlcpaa+ROq8wbIBr7Mh3z4l8CPTDJYr/eziWpgVBO/M4Afhz9 X-Received: by 2002:a05:622a:5595:b0:50d:a8f5:d51f with SMTP id d75a77b69052e-5102ae7701bmr23324031cf.45.1777535184498; Thu, 30 Apr 2026 00:46:24 -0700 (PDT) X-Received: by 2002:a05:622a:5595:b0:50d:a8f5:d51f with SMTP id d75a77b69052e-5102ae7701bmr23323841cf.45.1777535184070; Thu, 30 Apr 2026 00:46:24 -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.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2026 00:46:23 -0700 (PDT) From: Bartosz Golaszewski Date: Thu, 30 Apr 2026 09:46:06 +0200 Subject: [PATCH v4 3/3] driver core: platform: tests: add test cases for correct swnode removal 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: <20260430-swnode-remove-on-dev-unreg-v4-3-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 X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=6434; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=a3kxmSehqMFl/pq1mo8hhGqnhavQ9y5hTS7eBrV7YMs=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBp8wjHY73bjK2GzsfwhlZAW3gnvrZSLWSGNacEJ F5T2xhiC86JAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCafMIxwAKCRAFnS7L/zaE w6cyD/4pw9gjhCEZK+OXYGHyac3qFVKRZicRWxRNHKnSo8iba+1J1vCUQ0eBCIAhQlIe+atzvJ5 ior8nrT6ruocPz+Vl394E/heboqSatWJvKwJMjV+DS2r9EmueH5Vp+V/LQbkajMsZTM7euNrmaX 2bwpraSaEd09EMv0u9AVNhKZCZ9TBRScNxeYdMEpt8uvL2QPSpc8FLMb3vHvjoMmcdZ1A+qiC+/ 7PvuC2hqtZz8NVcug4TUFT+KBrvvM40b2l3vnPPDtQLvUht5C6gKRDl6cXpIQXPLHn/xja5dyLG K9JLk4xrF9LwgRv8LTKBPGN7vS1DeO4LRj3038ebTnCDBHTXpa2C9UQUppA48QLdUNWupBdrI0l HP1jsg4olP77BKnKJhp0pk1HIY3lg2Mx1+xsj4fxAJcBZHCdX/wY3katxwE5sIm9E4AkWDpA3Ed nvXlIuWvyuveouZQJKoi+R6XC6wRJGD7gYZ2GFyDdd0gwtZMOicAwnPM7Gh1QQpG59E1fLFitq/ 6RWrrIcjYQ6COJ+HgAV4YYWGMKhd1WgXDTBXAiTTRYA46YDMGurHD/eM7/6mHBJkWk3BcUZHjxe fIL/2LNxCV5FvKy+i58q7YmZf15tNxwglnl6JBZa+9dghuESCvKfbCxyUi0Cvbw9euanT11mfjK rCiArcrQ5omfNRQ== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDMwMDA3NSBTYWx0ZWRfX/W9M5wGxeOGX zJFcT8SVAmrKVl/UGwwGNOoEgepqcNDsB6tms1gxC9HJ/kShuBkU1NQMqpXNuy6zwRYsc9kSCD7 w0JghI5YoN9tKu8Zqm0ikWsoRCmbIRNV730N2o1Jh1xqbD2Yu5zGOBUGMbIuv2bUUrSZWA1By/P qNsT6MylRLCT7MUFg+AjNy+7/M4WASEEhZTNJRwceahwN11J76PwzSzRDJRTj6ItYzucRKPixkD 0PY64KKuldlZMYQ7vjsPqTHpASdNU8NeYRaXAmPf//XuoU5F+zzuZo7AnWtYdrkZbs/UPiXW3so gwBqT9rbxHINss2MGL+duBOcHMtG6iURzRgzFwSVDTzKggfPHpHYPSkiHm9Cb/Bm2PtKFTXlXuu Db9V2WDansodbzTxP5wPS3q31eLI6DfKvl7aiouzstvqvNFm3UhIloeRGP9iacUGkyjWMxWz/7q qG5v3pHqdUTyu8enU5w== X-Proofpoint-ORIG-GUID: DuISBfk6QFwo3ljb0Dmtgrpfrte4wjaQ X-Authority-Analysis: v=2.4 cv=O5oJeh9W c=1 sm=1 tr=0 ts=69f308d1 cx=c_pps a=WeENfcodrlLV9YRTxbY/uA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=EUspDBNiAAAA:8 a=Cjzkl-VOwT-M8rwmhL8A:9 a=QEXdDO2ut3YA:10 a=kacYvNCVWA4VmyqE58fU:22 X-Proofpoint-GUID: DuISBfk6QFwo3ljb0Dmtgrpfrte4wjaQ 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 spamscore=0 clxscore=1015 adultscore=0 phishscore=0 suspectscore=0 impostorscore=0 bulkscore=0 priorityscore=1501 lowpriorityscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604200000 definitions=main-2604300075 Extend the kunit module for platform devices with test cases verifying that the same software node can be added to platform devices repeatedly. Signed-off-by: Bartosz Golaszewski --- drivers/base/test/platform-device-test.c | 168 +++++++++++++++++++++++++++= ++++ 1 file changed, 168 insertions(+) diff --git a/drivers/base/test/platform-device-test.c b/drivers/base/test/p= latform-device-test.c index 6355a2231b741791b54eb78af42e13f31f745184..3e42c205fc935ab1dd2066e257d= 4ecf837c9ad79 100644 --- a/drivers/base/test/platform-device-test.c +++ b/drivers/base/test/platform-device-test.c @@ -1,12 +1,15 @@ // SPDX-License-Identifier: GPL-2.0 =20 +#include #include #include =20 #include #include +#include #include #include +#include =20 #define DEVICE_NAME "test" =20 @@ -253,9 +256,174 @@ static struct kunit_suite platform_device_match_test_= suite =3D { .test_cases =3D platform_device_match_tests, }; =20 +static int platform_device_swnode_test_probe(struct platform_device *pdev) +{ + return 0; +} + +static struct platform_driver platform_swnode_test_driver =3D { + .probe =3D platform_device_swnode_test_probe, + .driver =3D { + .name =3D DEVICE_NAME, + }, +}; + +static const struct software_node platform_device_test_swnode =3D { }; + +/* + * Check that reusing a software node works correctly. If the call to + * platform_device_register_full() fails after adding the secondary firmwa= re + * node, the software node must be unregistered in the device's release() + * callback or the subsequent call to platform_device_register_full() will= fail + * with -EBUSY due to the software node aleady having been registered. + */ +static void platform_device_swnode_add_twice(struct kunit *test) +{ + struct platform_device_info pdevinfo; + struct platform_device *pdev; + struct fwnode_handle fwnode; + int ret; + + ret =3D kunit_platform_driver_register(test, &platform_swnode_test_driver= ); + KUNIT_ASSERT_EQ(test, ret, 0); + + fwnode_init(&fwnode, NULL); + pdevinfo =3D (struct platform_device_info){ + .name =3D DEVICE_NAME, + .id =3D PLATFORM_DEVID_NONE, + .fwnode =3D &fwnode, + .swnode =3D &platform_device_test_swnode, + }; + + pdev =3D platform_device_register_full(&pdevinfo); + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, pdev); + + wait_for_device_probe(); + KUNIT_ASSERT_TRUE(test, device_is_bound(&pdev->dev)); + + platform_device_unregister(pdev); + + pdev =3D platform_device_register_full(&pdevinfo); + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, pdev); + + wait_for_device_probe(); + KUNIT_ASSERT_TRUE(test, device_is_bound(&pdev->dev)); + + platform_device_unregister(pdev); +} + +/* + * Check that passing a software node as the primary firmware node of the + * platform device does not result in it being unregistered by the call to + * device_remove_software_node() in its release path. + */ +static void platform_device_swnode_as_primary(struct kunit *test) +{ + struct platform_device_info pdevinfo; + struct platform_device *pdev; + struct fwnode_handle *fwnode; + int ret; + + ret =3D kunit_platform_driver_register(test, &platform_swnode_test_driver= ); + KUNIT_ASSERT_EQ(test, ret, 0); + + fwnode =3D kunit_software_node_register(test, &platform_device_test_swnod= e); + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, fwnode); + + pdevinfo =3D (struct platform_device_info){ + .name =3D DEVICE_NAME, + .id =3D PLATFORM_DEVID_NONE, + .fwnode =3D fwnode, + }; + + pdev =3D platform_device_register_full(&pdevinfo); + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, pdev); + + wait_for_device_probe(); + KUNIT_ASSERT_TRUE(test, device_is_bound(&pdev->dev)); + + platform_device_unregister(pdev); + + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, software_node_fwnode(&platform_device_= test_swnode)); +} + +static const struct software_node platform_device_test_primary_swnode =3D = { }; + +/* + * Check that passing two software nodes to platform_device_register_full() + * fails. + */ +static void platform_device_two_swnodes(struct kunit *test) +{ + static const struct property_entry properties[] =3D { + PROPERTY_ENTRY_U32("foo", 42), + { } + }; + + struct platform_device_info pdevinfo; + struct platform_device *pdev; + struct fwnode_handle *fwnode; + int ret; + + ret =3D kunit_platform_driver_register(test, &platform_swnode_test_driver= ); + KUNIT_ASSERT_EQ(test, ret, 0); + + fwnode =3D kunit_software_node_register(test, &platform_device_test_swnod= e); + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, fwnode); + + pdevinfo =3D (struct platform_device_info){ + .name =3D DEVICE_NAME, + .id =3D PLATFORM_DEVID_NONE, + .fwnode =3D fwnode, + .swnode =3D &platform_device_test_swnode, + }; + + pdev =3D platform_device_register_full(&pdevinfo); + KUNIT_ASSERT_TRUE(test, IS_ERR(pdev)); + KUNIT_ASSERT_EQ_MSG(test, PTR_ERR(pdev), -EINVAL, + "Expected errno =3D=3D -EINVAL, got: %pe", pdev); + + pdevinfo =3D (struct platform_device_info){ + .name =3D DEVICE_NAME, + .id =3D PLATFORM_DEVID_NONE, + .swnode =3D &platform_device_test_swnode, + .properties =3D properties, + }; + + pdev =3D platform_device_register_full(&pdevinfo); + KUNIT_ASSERT_TRUE(test, IS_ERR(pdev)); + KUNIT_ASSERT_EQ_MSG(test, PTR_ERR(pdev), -EINVAL, + "Expected errno =3D=3D -EINVAL, got: %pe", pdev); + + pdevinfo =3D (struct platform_device_info){ + .name =3D DEVICE_NAME, + .id =3D PLATFORM_DEVID_NONE, + .fwnode =3D fwnode, + .properties =3D properties, + }; + + pdev =3D platform_device_register_full(&pdevinfo); + KUNIT_ASSERT_TRUE(test, IS_ERR(pdev)); + KUNIT_ASSERT_EQ_MSG(test, PTR_ERR(pdev), -EINVAL, + "Expected errno =3D=3D -EINVAL, got: %pe", pdev); +} + +static struct kunit_case platform_device_swnode_tests[] =3D { + KUNIT_CASE(platform_device_swnode_add_twice), + KUNIT_CASE(platform_device_swnode_as_primary), + KUNIT_CASE(platform_device_two_swnodes), + {} +}; + +static struct kunit_suite platform_device_swnode_test_suite =3D { + .name =3D "platform-device-swnode", + .test_cases =3D platform_device_swnode_tests, +}; + kunit_test_suites( &platform_device_devm_test_suite, &platform_device_match_test_suite, + &platform_device_swnode_test_suite, ); =20 MODULE_DESCRIPTION("Test module for platform devices"); --=20 2.47.3