From nobody Wed Jun 17 04:14:31 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 A18711FF7C7 for ; Tue, 28 Apr 2026 09:20:43 +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=1777368045; cv=none; b=Xje0Gd05O7jtAG3erNkaHeNQgGeHnRVNhYCzLCUwLaGBhYDvDL8r+7lOIaTRfcYxaXChpQ2vRs3i/dzqSK/ij9krW1XmRjzCXEo8bEMJijWUr5HfESfOREdyAe8a0m2azlpPtxkKKX3dJ3zWredXFSzpqk5ZhXJAJB8+uBeGCIE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777368045; c=relaxed/simple; bh=3gvGnqdkyrPYFJWQtIodxLXGzHVuRLvYfsCfWBiWCaw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=e9oRJ+rGqxGxwHKlRUpYXBTWnw9O9ri1ROD1i8Fwvgfo0hDepjoeRkCd6K7NTMyxuRJfsggJ5RKDUSb+RpEvoKgelrCstSbrYc6ernhMbIUFSaWetC2GRwaiLkD0e2LVg4fNu1RsJT+LVvBAGcaxueVg1BfDC0bTa64kkqAZjhk= 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=WJkTHlCy; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=EY95eNvt; 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="WJkTHlCy"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="EY95eNvt" 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 63S7wCs51746795 for ; Tue, 28 Apr 2026 09:20:43 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= DKCqFUuqOsU3jZLfZjBiONDMRhc7FGLOcrEvMLzfoUw=; b=WJkTHlCyUsdwl3qg 9p7BgC5b2e8QVyd+ImBn/O+zZ83QtVrxoWub5CkXkyYuWwLfGSnYu8v/B8x1foLb 9gtJUzCCDY5PO5WdinDO5y3ZUknZmRkJdjx+o8rLmoA0WFmTchrR2CBcw69j1ty0 /BmG5yf4vRrRJ5q393BUvdCBVbK4/HANdGxcv19eD6oK8DmkpcL15Rk0MUODvHca oGzgI97gkdcSyGYrzM7YzvArMwR8E7WyzNzan0pulbxFXQ6/pWHIye8yET5rdJ6X lvNSlr7r/80SNcCIU/tHno0lJXceug8XLptOOuXdzVmATHlNWZFvxQJg6jPF+5It sRgeiQ== 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 4dtryd8ap3-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 28 Apr 2026 09:20:42 +0000 (GMT) Received: by mail-qt1-f199.google.com with SMTP id d75a77b69052e-50edf01172bso227731681cf.2 for ; Tue, 28 Apr 2026 02:20:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1777368042; x=1777972842; 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=DKCqFUuqOsU3jZLfZjBiONDMRhc7FGLOcrEvMLzfoUw=; b=EY95eNvtzvSFRSreFm8hj8q3AfoMGcdq4KqAtHiVD4SRK+LJqSJLuPcccMdXRqQQ6X XrJi+TK1R6cmEEoXg6bcU06bOuws7Cfg3aMmRxsObeLp6hMVq2hKmfLLiscLd0uwn3V4 bxfRSj80CjyO639REpx/3HLBu99fcEM/wZJbe8IyY5G5k3q58srN8nP846A7yrXbiJm3 kCBnt/cjm0rI7A7tTiAbovak8agjgrxGhlKhoelpFgft4A6O8hP9QGYHGE1mFq3aTRxH DlIamR+reC6xr079Du5FMCo2GOVQZnml1cU654qKRve0wPXzFRbZq695Bnte0KrwrecQ cbKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777368042; x=1777972842; 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=DKCqFUuqOsU3jZLfZjBiONDMRhc7FGLOcrEvMLzfoUw=; b=aghlnUNkHSp0KBpvzBuAWVTDhus6tfffx7Zguhhr4B+IC+XqIZ0OYssgtohUtEvuWh iZZZP9TEsByI/W1q3vcqksDeYSHNBPZ0CPEBs1u9CJCBAhq/kPWve+sTEnGd4JnMZfOi uWIa3oYsow22y89PHov43TEANaGU7atbecadPN0pxpCIFkz9y41evCoaDag4Z2WW5TuM CU+GQ2FFiljmvDZjXc0S8V4e28WJ/gCA3tW1o+Gle8SL7ldw4R4L1LfCKu4IVmzVQTcg kbX7+hZk6QAAQ1mOkQgvlc+8iR7avYEQfrzTyA+axSa/Ic0QimcLhQ2+Z01/ujJBvoZa TWNg== X-Forwarded-Encrypted: i=1; AFNElJ9abvHdOUNQis52xK4ow3bbcHrUzjdJLysXGC8MVCp1WoH2w4kAY/fwVKM3msoloiBmwVf9de4zDwHtsTk=@vger.kernel.org X-Gm-Message-State: AOJu0YwafagWb92ksNWcdfH6c1ezAR9FESRijAcGLOlB2UifFKrX+1QC PjRo21821+c1tGb2fowYJvHmzHOlwhvQ+44FxEX1Oe9DiEuWGGta+HVME0EkjHQvaiLftOKe/zv G97mL2PK/mY2/hFTIcFd5HaipVgDEqaH1H6GlSL3dNH2y19Vl7HVG6heoM0HHOKcgaUM= X-Gm-Gg: AeBDiet0tkRA2PG9VkgAVRxIKDLeoIqbKdy5i0uEJgQAysPJC5Zr/o2J5ju8AzzJSb+ NhqQnJCdjBJ/QiRNQlJbCrKaupaGBoGGxQDr+7zruiw3L1K8BDyvj7rlv7VwaHDtMwKQwHX83iF il4bxUN/dpEZJ8jNnNIkTofw/5qEfw3krW56UsqrCm5kexcxigsIhOBOWaFTqTBaaKS+u7UQw9Q xOIxvlIRH9wsvxCpk9qIP3aK/6TlvZAEuURfgdHkX3ZP3rqAVo5qYQkCcbbNI2uQsKkIDK068dN 9GEy8P47AoDoPQXLBrYP1LYTJ8+7bKDVaqtd2rntArO/T/0KDimi/4AuaASxXo8uih4Kid31q3L 5QiYCisEtS6s1s1PRzpsvqjqZs+0+/f3lyNQtk80v8WuHzZFD1RviHDi0uKx6 X-Received: by 2002:a05:622a:4d4f:b0:50e:6055:274e with SMTP id d75a77b69052e-5100e122739mr30268321cf.17.1777368041750; Tue, 28 Apr 2026 02:20:41 -0700 (PDT) X-Received: by 2002:a05:622a:4d4f:b0:50e:6055:274e with SMTP id d75a77b69052e-5100e122739mr30268001cf.17.1777368041278; Tue, 28 Apr 2026 02:20:41 -0700 (PDT) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:7473:f19:2705:c566]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48a7748f236sm15726195e9.5.2026.04.28.02.20.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Apr 2026 02:20:40 -0700 (PDT) From: Bartosz Golaszewski Date: Tue, 28 Apr 2026 11:20:26 +0200 Subject: [PATCH v3 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: <20260428-swnode-remove-on-dev-unreg-v3-1-533bdc71b22e@oss.qualcomm.com> References: <20260428-swnode-remove-on-dev-unreg-v3-0-533bdc71b22e@oss.qualcomm.com> In-Reply-To: <20260428-swnode-remove-on-dev-unreg-v3-0-533bdc71b22e@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=2927; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=3gvGnqdkyrPYFJWQtIodxLXGzHVuRLvYfsCfWBiWCaw=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBp8HvhCeTqXXEgrBO7r+8Q4cbjW8SRuhLwvzY1l cnz+gQIMdKJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCafB74QAKCRAFnS7L/zaE w6+qEACZIJ2GbUNkpEfzF81gPgIaSiM7x9PEGYs5pbekYcWyA+g4CRbSwxee5rgiKpjdbuzfGLZ dJEvufmAB6MFnMZEQoxawN0SbkF/zMFgv7Rg5CohwYeHJmURYAHnk9jCMC1ta2jzx5yCFh2+hK9 tZU0rrcfVcVSro+Wn4vbMSau993zTJePuwiU0rFx+4GkVtkrYJibVYHrUDS3U9hfKWqRJkdCLn6 pmpwWx6Ve3I0AR0Wz8Qb8fR+Tf81qdvvlDL7TlUYr1SxVidcabm1Q+huAXWRfQ3K4Z3S+U54n+B LtpqwUoMiMsvFwbGpjtwAJlHaucE3w6kHh4Pa+IZhjcW8IApASj4K6LwWwZf6ZmCOXARwsyYyBn EOSBxhUDpW8mwevX5i+hTMMFCMwzkAkk/Z9NofiWJcFllS5+VYcGfE+izFKzFubkQxRyzZnoR4I ua3akd0JUykmT1xAlY9L9ezqRNOv0A1uQ7vmeDMbJa8Kr74CyvwLS/hpIX5jAGNj5DvPJJ/vGnb bia98BXVcmTaO+85Xn7NMW/2jYoA6FRGP1hIAeUG2Tr/ljJguvWZrj1EVO/YIedPOYxPnbrXIuQ /hgV64zgcqD4FnZCSWOnBiuGdN60Hla+ILXGCMW+oIm1veWbkGdFL0SGhaf89tqm69BUABY6Z81 w9FCpOkXK0fkzjA== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-GUID: toMsTJBE88a0E_QXxe9UuIILAreqRlzv X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDI4MDA4MiBTYWx0ZWRfX8UgSsSpM9J6A sPi04CroInBhZaDLH2KHx7xD5ZMnTrcEnl8h15SBg9Fr1j8suWoN/s2uPNAh6dAVtS03cvOusrP fuYAdrgXJt/cm9srvBFRTiwFPLWk5MQdfrweHOT3VBZmcZeH+v42AqwItgkYz8YkP03rQioeTNK aKiP4Nzz5NvK6do+RrAVsYjbT80bokRe/D5BiGWrdeRc1oos3aUal0hlHnjH0oGd2lg3QtZ+zXJ Wv0x5UG+/LkEQ9F69fMktvR6ORYcp77TjDlrxsy3hbPvX1Yzr25LFpiksGmr5WMgDkEY1d4NXUN HBolKfWQYUoI3kL8pDndyJzJaXUG80PiCP7+aU5eNSi9VbPW6eVgHxAsquqXmqU+MpGi5pG7Egf 0MhGbcnC2LcRIYTrs1/qVbB/J/LfbLQhqJF0Oqjp/L3c+dIwm7TbOGWpxGjkY2igD1PVPN2tmGS lzWSSzPZIh/Ux2BV9qg== X-Proofpoint-ORIG-GUID: toMsTJBE88a0E_QXxe9UuIILAreqRlzv X-Authority-Analysis: v=2.4 cv=cMnQdFeN c=1 sm=1 tr=0 ts=69f07bea 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=eoimf2acIAo5FJnRuUoq:22 a=EUspDBNiAAAA:8 a=PTX60mhBgyOAItwlv74A:9 a=QEXdDO2ut3YA:10 a=kacYvNCVWA4VmyqE58fU: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-28_02,2026-04-21_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 spamscore=0 impostorscore=0 malwarescore=0 bulkscore=0 clxscore=1015 priorityscore=1501 suspectscore=0 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-2604280082 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") Signed-off-by: Bartosz Golaszewski Reviewed-by: Andy Shevchenko --- drivers/base/platform.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/drivers/base/platform.c b/drivers/base/platform.c index 75b4698d0e582e67adafa78c312d75c72fd654cf..a6268a72a99e864cbfc333cd99c= 0d5706b901ff3 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,11 @@ 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 || is_software_node(pdevinf= o->fwnode))) return ERR_PTR(-EINVAL); =20 pdev =3D platform_device_alloc(pdevinfo->name, pdevinfo->id); @@ -866,6 +871,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) && !pdevinfo->swnode) + 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 Wed Jun 17 04:14:31 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 3353433AD8C for ; Tue, 28 Apr 2026 09:20:45 +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=1777368046; cv=none; b=O5b54pYHCfxJc6eUsUTSnaYS/R7BEbWiorZth6mmz/zHabQCVi3Gko9AzoM/Ka4hzxGGMPJl1Q5mf0QUmcFR+RWOlykSziC4PPJtvyhtG4K1fU0HOz4ZDbaZEz58OLITtM1E/LpvH5bs5a5UX/lMiPoUlvV+vPy6TKPk0V+9uFo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777368046; c=relaxed/simple; bh=DeQzfE7uEw87FoNwrajQBxkZ/sMoxBLsCBYIPXjNSsI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=QvXO6YYH+yorLxxTeFL151jgz4D9G83/GI2E70YZOmZPruDLREnytduDguKrSOa/fgVUHCwebUIeCF1rjQmJOj90i8c+xPPL/+wQ9XiEU7ypWHDjwZl1E85cJIt9Y69aLugEQC2wRqnbXdMCvWDvwlwpaImgVGOLZ1NKIoZs+FU= 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=bYzgtmhA; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Fwk5wv+c; 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="bYzgtmhA"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Fwk5wv+c" 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 63S7v53o3968294 for ; Tue, 28 Apr 2026 09:20:44 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=bYzgtmhAlL2xOEog bwiRdU5d99A0r7XLhrX3j5IqFAYqa97K/RbCTFMPLDZV3kylCEwhJ3h23J/J+3ns Wqy4n95vc5PUYCZiha0S6cZiXzzPAQhjdYeWdPMA8DHcsJnC91VAyMU1W+qmAXbL qCKpufsDq3BC7q0KPJ9cWPDCj7FVMSYGcDqrFMkIRVaRbLsjx3lMCHL8EC3Ilg0S i5YuNllFb7wes7I9YJm6lmdIOn4WN7y3j3xrn8Dez+dv1itkY9gise/VM+wWU+OX WAg/mh75+fhPhIF9isR9MQd7Wv97SHcAailD9cULx1qGtg0qAj3+Fj8hl8BXrYH2 urHanQ== Received: from mail-qt1-f200.google.com (mail-qt1-f200.google.com [209.85.160.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4dtry0gb08-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 28 Apr 2026 09:20:44 +0000 (GMT) Received: by mail-qt1-f200.google.com with SMTP id d75a77b69052e-50d8e8c47a3so303889441cf.0 for ; Tue, 28 Apr 2026 02:20:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1777368043; x=1777972843; 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=Fwk5wv+cMXzn1n6hbTds+4YlvcXXSn2CnUWOQC00TPoFWP++5ztwouxhfRd6oMWRNn LjyY5VjtLDuCO6OwLOP9LDyUH9+yeZN/xLxP7mNhVTzzpiZudRiAi9f82nSajFlrJdZH D7T+Z87vB/R0kM26HMpUIduz+KWp/sX/7smjjCc3dOZ7gJocg9/8QKoieQiLXVK4pCK/ IelYuiUMcuOgRNhUzu7//BohVbVmaS8fDuzJlJ5BgcF5rwz4jgLdQu6e0r6Oh9DOPYWR PVzLFGTmSR3pvVT97meUDBO/cGh3Qb1NTU7iid5YsZQEl4PKtM5AhsWDoU6eTKd0ZZFC tWEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777368043; x=1777972843; 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=jRFaVDZ8fjqHjdJL9y+bONr0lnk5BbHfj95FgjnWrp+VxWUhln4uqQATznEiTSIDvC kheYus5Qt9vocYci5EL93VhXmBJou7VPLZkclLK8VKwbHR3BsQu2pZeUsZyuTASddooc IzvKw6GoyUCe9DbqYlWDTI3ZqlXg+VjDP0ZWRg9zBTDWDIi7SURc/fdHxyQpjqvuW/z/ 7MrvmvNT2Bk99Waaw3KNcmavsODwDevRtuQzuhDpv672+EUL5+nzFGpFEBXhwX+KXFPf WMhr9QUNGBSFIYJo/nLrE8AS49/lGZa1JpLn6FTedcDQhKzZ7bxfPeq2ip+pXDQKAy1k 3lmQ== X-Forwarded-Encrypted: i=1; AFNElJ8Te4TF3Qg+6hKn9T4P5TevxMSA5DbU5Z28cQbBejcA4sN7/CUOOpMdhE2DIyKIFb3oXBzHURUWJMYTgyQ=@vger.kernel.org X-Gm-Message-State: AOJu0YzR/7mRgs+doTXxpPbdT8OrFDU46bWw8XZWEpk7rxyZVxxP597T tHDjYG5ud4XvibM6tW24HQfIOiQj88fVyivAPlGnMCnyEF4OM1pgzpznd3afLnYtncr8AurC1ND kWagSfUNLjxsrLJJjCcIRWp5wbnps3P2jl8JAp+uuG0o1b5L2SSxUaxpdj5FJPNaj/QU= X-Gm-Gg: AeBDieuGDxNaRuUOiHdqiX83cWdevNl1LtL0g+av+zYQtsA0ZIvG3h0EIvy5NS9bhpG m5NV+C6B+Wh84T8jiKi0yhxrcWxwXLyj410jrSlQSxS9MWsiHOFfDjPJfqDng4Ig5bLzSKC4+Rl VjbbMUFM30FzbBkhgCIzBEnSSYICnfvkECMGl7Pe8GoepBadFDy9ock9l/WVgTKr40fhcFOX4Bg elkYs/cuCpYw30MTiLOXC1xuY43Y6Gwbm6zdVtxl2Bmggfl72HD1DCec8c3V2K/zMiNR+e6UQnV 2JaYsBSVPmM7avXEARYItOv+xDbimVTJFoSRc7NUMyDeBOtO/qjOYWT4rCfm97icEo6dN/iUlOw a9aHckcJ4GAqqqqaXwjsU2vi6PrPHU5Ay8Lb3o0oT+VcaItzrbYYr3GUB5IUG X-Received: by 2002:a05:622a:251a:b0:50b:4e4e:1a20 with SMTP id d75a77b69052e-5100e207f59mr27362141cf.59.1777368043413; Tue, 28 Apr 2026 02:20:43 -0700 (PDT) X-Received: by 2002:a05:622a:251a:b0:50b:4e4e:1a20 with SMTP id d75a77b69052e-5100e207f59mr27361861cf.59.1777368043014; Tue, 28 Apr 2026 02:20:43 -0700 (PDT) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:7473:f19:2705:c566]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48a7748f236sm15726195e9.5.2026.04.28.02.20.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Apr 2026 02:20:42 -0700 (PDT) From: Bartosz Golaszewski Date: Tue, 28 Apr 2026 11:20:27 +0200 Subject: [PATCH v3 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: <20260428-swnode-remove-on-dev-unreg-v3-2-533bdc71b22e@oss.qualcomm.com> References: <20260428-swnode-remove-on-dev-unreg-v3-0-533bdc71b22e@oss.qualcomm.com> In-Reply-To: <20260428-swnode-remove-on-dev-unreg-v3-0-533bdc71b22e@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/NoTDAcsmYgBp8HvjYPF7YvsnZDQyKI3cG13qVRN8CodRuRqEv 5QGGXs/HrqJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCafB74wAKCRAFnS7L/zaE wxonD/0W3xu1ONPw5UYpM1/xd+A/8K9nawsk6xomadRBYWW1A3uvxzvEWfSZ14N7w2x+rRKQ+2b 68a4ac24vsmx4wFXTwm3F1Ln3Un5A7nhMCRO2A65iqQ75CjOX5lWMe4lyZMIFptmev/o/1aChXi 7bbRE0RyV+lYiG8SJ1DzLQIrle0lOPxzBolO8aOG1uBUMNqIebRg740VYJcLu2DZT90y5tpeSfF 4/KO5u0ss2VWvjHHtRxqMY3OHCmQWvNpUZmM92vsr6NJMGtz6xglmv/KJwq2GHeUgbvIgWCY5/j in4ofLnaM9OoUnw39WsDvP0PPVgvTsEGOD3CD51TUDrXsrqmWQB3TP1UxrWB4NUWdGMDN4538bR /Bbln4CCGSIIfqwV6IJ2xUU3wV042eN6d8NTN1gmARcM1f/52hYGvjqWVNSG5GZt/5YmWEc1KYM vD8ixcyrnTZwJqsLFYxyjZgzuhu1tdKX9XUhhrnKI8Hz8N9boVHHyisbV1HA2lMsf8sfetp4JG1 CVZgXDSavaYAHBlmtFIEjfIVFn7uRYN7/XFqgq5L7e25l1biS/UoLB6k1ooFivCQOomDRMcZ6wc IYXd+kCmkuZLXppSnpw5th/hWfyiBsXPRXXzYx+nW2mEVuoxmtH4S+v3jBbiihR7o8nXh/HOaLU vQeUgCsv0J2/fjA== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Authority-Analysis: v=2.4 cv=KuJ9H2WN c=1 sm=1 tr=0 ts=69f07bec cx=c_pps a=JbAStetqSzwMeJznSMzCyw==: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=EUspDBNiAAAA:8 a=0NWOcHYCwBz2ZqcsIPkA:9 a=QEXdDO2ut3YA:10 a=uxP6HrT_eTzRwkO_Te1X:22 X-Proofpoint-GUID: uKPvMMF92aljqWTYcMlwQKjgeHPbWWcc X-Proofpoint-ORIG-GUID: uKPvMMF92aljqWTYcMlwQKjgeHPbWWcc X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDI4MDA4MiBTYWx0ZWRfX0nphAX/lShIP D4yRU0oi2F6ZRuvuG+d4uUEub0AjO/CZkwpmhzm928WT4++i7pdMl9eibCDDQz8p43li+t96SU4 BK0VQqgZKgupr0vBdEGYEl6ePpX8A3H1PkJbVtvVnBztrxNEy2F1IakBbeeq9PfcHwgzplkNgEK CvYxpySk+JL5gbm2+4xc+jrFiVoOd38xrexY+6A6HNnBRHO/8MWEOCmxSXiUw/3HZ04TlaHekDd cKpHARZeeK6IPz5IGZ+5Qhv3wreH4wCisbLf8eERoIZiqnN9Ak4f5UE0TqBkUgKfbnlfk/ZW/MW 0jJk/F6O5fJTneNL8KE7WwyHuyGPsJZb8bjXtdyIbXX9KoY5zy23EFvmIWyfNWyAUvOa3KygF25 rZsXjkvrBegdO3puO9axssLpMxE9Xpwv2Thdnl2OMcMqeDkCFvgb8G8NRNrIN02D0HJo0Euv02h OZWerqhiaE2+VtgAPMg== 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-28_02,2026-04-21_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 suspectscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 phishscore=0 bulkscore=0 malwarescore=0 impostorscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604200000 definitions=main-2604280082 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 Wed Jun 17 04:14:31 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 C56E83502A4 for ; Tue, 28 Apr 2026 09:20:47 +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=1777368049; cv=none; b=p+uwvgCuhzPCyYvxh918mCOrFIDoZIUG6AsgbreVk4r8SKEdywzMcTrcKlMjMG3L9iLGnvKELfjmwnjJaPighKXsO+7BPVBfgIdetQk+X0igP/vV83Zo0v95l2OOSXvwB7jLfwBtBwtWk3+ZRIbuUsvC4rH0hOXSxAay1AoQn4c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777368049; c=relaxed/simple; bh=T8cDYp2DNAqsSajdUoTPkvXrB2+9GR9lrfSx0ziTXnQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Xdy+wgCV75EmhEHTRaRjQA4EroiKx0C6VXUr/wM9tnBow76sp83o+vpnOhsnxCOQEcV7fqt3vAUnOgp/CzR4+tHMGB96rUqJTFxNKI85RkNo5BW0SxwDbf2S13IwTeM7Uih/kJFX3/Rbe38FupXQY2tuuIjyYawnsTAALZV71Bc= 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=iGlAvFBw; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Rbbdw3zj; 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="iGlAvFBw"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Rbbdw3zj" 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 63S45ssP2006212 for ; Tue, 28 Apr 2026 09:20:47 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= p8vfhMIPFT/sWGZjm7l26HgyrbyRR4i+eno24bHq3b4=; b=iGlAvFBwKsx2g8SM bLBvtLP2mtu2ixoHUpUxDHk8Mnme4jXi1SJqbh+yJ9O6tCF4oyDmpPKHylIb2l1d oeL7gRtBGQtVcmXYnPG+iOEy6uccnbPjZYk15dm10Wn5GvUM7UnfMeqaGQIxW8t0 944vwqGoc+BB8pIb+aEXAMnmP6QSi2g3ldh3ZdcCBWChIMC7EbfpIAhmL53j38zc OCDKbxMO2xsTfJrV9W03xBV1371xVP4I2fDYt5NFXB1y9lYAyUhJoemVenckwe69 L0NKSysLPz9VItP8n6ZsQpBRDIY4zGRJ7GwCDk5Xe8l9fPV+GUebdG9d1Wq/afsl Y7nljw== Received: from mail-qt1-f200.google.com (mail-qt1-f200.google.com [209.85.160.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4dt7gkmcdn-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 28 Apr 2026 09:20:46 +0000 (GMT) Received: by mail-qt1-f200.google.com with SMTP id d75a77b69052e-50d58bed44aso241273671cf.3 for ; Tue, 28 Apr 2026 02:20:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1777368046; x=1777972846; 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=p8vfhMIPFT/sWGZjm7l26HgyrbyRR4i+eno24bHq3b4=; b=Rbbdw3zjjmYQN2oP+MGdh+/mmDEl+OQRrnQ5DWPVwK0XKUuwPq+VXcF2b1+zMuNvHF AXTY/yx9FIgs4DzuwIw8E40/p4Pjco0Et30HNCH0iwtReanF7kviTvshzn3qEVmPjKPj iv8CaquFk5lrtsL3RcaYOcDi5o9VeZj7fOhVvfjbDkWyyrm9QQsH9KID5g81GbKyzc8k DTjrjaQLhcYhQb3n5EDfk/O/MiQE8WbqgxKCnDa5P0RlI5WQJaeDkE8m3I7Wl0IGmbOQ o5CebQ+QDiiVX9MKbkzhG97szXyBcoErIQHeTWs+dghXXkhwtLx33ivR23nrg6gVUtkE Bomw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777368046; x=1777972846; 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=p8vfhMIPFT/sWGZjm7l26HgyrbyRR4i+eno24bHq3b4=; b=D3ECuAUoGeSsIngF1sJezc8MO2goJRVijTiyuCQM4S97MXHggUpmr/7s8Z/P+SC1EW NI06znFoN7GLwCIUq3f0WJnye5GAJzXCwF3UecesIRsflETdd0vqOFIsMPl8uzh8nDbM ivqGIAk9YA5CELnJtSMZxa6ZemHI8XpXVg//9gjvOjjoqiLeCU1LYYCuuG9kkWOAjwUt Z5w3jqanIgSn2i5i4byA4vK0E8uIYYCZMtBdu0kyrpwvUxJHe0ToxbpAAe0mZwosIwRa JTYbrLJF8dfZKiWlxrNnOIxVjIs5675us31ScMfXnAwjzd8Dnx6TsOUQWBTGzQ1KPlIM RC0w== X-Forwarded-Encrypted: i=1; AFNElJ+p1j1KhlOV5b/gaIkn1+sA1Ni4KqN9Cdm8fDWWTqzGK4xwWpl5LnCMGvTC2nKqHrLM8Nw1K0EwjT7OFfc=@vger.kernel.org X-Gm-Message-State: AOJu0YwElyOmX2SLx1g8uroTBn1VEhDUPQWDByUzErlfPwQ2h4dMoX4s RMSGWmtgmyToGYRZ+nYjkesmNssLFJUlMkI+n8Jz2ydwz0RFEcyo2IZNQur77xEHZ6tlM0ZNuH1 Ns7l/kpy96LD+O5ysU90FUa3rXnpIpZX4wEnAQdWaOzbctkBOS5pCsmjYjhi+OVpiv3U= X-Gm-Gg: AeBDievbeLLJOlFP4DyopRxSrygBcsrAWOWSLJ0OB3rQ6BuG8yq/0HckHhF0JVqxo2c VLQp4E8vzhAitMCtb6gYZxEg6K2yjRM6aM5a4hGgiU3QvtQxrV3MWlq82OJlGANE9En00yPJddd FGlP5evUWhLHQ7jzgewubAwcjTufg+hov/DIA/BD0fZDLYn3K5VBVIGFl6sRNNo4LW0u1x8ZnCW LKXkhXr5UZA9fLSHvqmqAW7fQxQS4mCQquSF0zV30E8di95+Nc+xOcLC0EsrwUwIfm2D9H+SZkM 1RNrrkDK+2nd/hxfDlJTnw8FKGE6MAGvcXShWaAWHZCQY2qgmxQLP7IbCWC1+UcLOVXpKXPNttx gHSxu2UzV/hnkUeu24GD4IH4a2j/1h/5EffECWcJ8wgtMHdaqLFBoewTk10gn X-Received: by 2002:ac8:58d5:0:b0:50f:c5d3:a18c with SMTP id d75a77b69052e-5100e12dd9fmr27572651cf.20.1777368046070; Tue, 28 Apr 2026 02:20:46 -0700 (PDT) X-Received: by 2002:ac8:58d5:0:b0:50f:c5d3:a18c with SMTP id d75a77b69052e-5100e12dd9fmr27572461cf.20.1777368045598; Tue, 28 Apr 2026 02:20:45 -0700 (PDT) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:7473:f19:2705:c566]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48a7748f236sm15726195e9.5.2026.04.28.02.20.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Apr 2026 02:20:44 -0700 (PDT) From: Bartosz Golaszewski Date: Tue, 28 Apr 2026 11:20:28 +0200 Subject: [PATCH v3 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: <20260428-swnode-remove-on-dev-unreg-v3-3-533bdc71b22e@oss.qualcomm.com> References: <20260428-swnode-remove-on-dev-unreg-v3-0-533bdc71b22e@oss.qualcomm.com> In-Reply-To: <20260428-swnode-remove-on-dev-unreg-v3-0-533bdc71b22e@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=6067; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=T8cDYp2DNAqsSajdUoTPkvXrB2+9GR9lrfSx0ziTXnQ=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBp8HvkK3aARE5v16HitWeAITYrhw1b7vUsRJWGO oOiPEUW1quJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCafB75AAKCRAFnS7L/zaE wxlzD/93aEyaLYrv6CzlQiY8MU3aZm+VK+O2gnw9M1ctLlVaMh/NeWYDnJeGO1t50dAn8rOWCUh So7WyOHHs6Wx1UQ47NcG2eEk97qi9dPo6wV+YXShKCXnr8+/TLPdze5JCu7lASLE6dk0+by36Jl sP2iMDPXPpOt58ewSEGdLRMijh0PpFMy9Ji5Qnx10saLFTmz40Rrd6i0EmiCm+et3w++x6AOm7+ PvBHm1/EN56gBrA57cSo30BW+ijrCEJCP6eFn0LDdp0zOEsINf/6e2I6T5z79Z8CBgQlMXUjQgt sua6Zf/qG1QmGzr+DsPnx+oq1QGwb3n3I0wGuPCzwc7pnd18X0nT9AedPfqU9avnnbHGD+WXl7A 3sBjzyf5as9wNqJBzsZoBXn5EeWSVlYnPsKDDgAzPrAUSWaTpmyQgwzHPBXomm73B0wKa+h/TJq adYf1nSF1B6lVyFGKRFAJIX+BsZ+O8DFL2lRP6KFUu09A+GG5mxeSxBhURsk8KJae2xFUEPtY29 kWMR8GC51nP4DZA3AM0JIqWa4L/50RULM6Jf4DxI3uvVRQ+xK9HRx/g82i/8NFNnhFTRcBXt5yb /3ugyQLekmATa2avQD5D0Rp7dcmJ9x17Bi7K3tyV2RbbUZ7TE2aRDuJSU6fVbh4LYA7M4495RpL jX6a0cshCbH3dOg== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-GUID: kJDzTwXO7hOGtrHMEOkeh4a-ZYZvGp2u X-Proofpoint-ORIG-GUID: kJDzTwXO7hOGtrHMEOkeh4a-ZYZvGp2u X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDI4MDA4MiBTYWx0ZWRfX9H7ApUAN5XYu ZSYXVETjjdGoCP6OYR8jUQscKoyC1/Od1sW9/Yytx+97EXQdnsxi/s1DfAtAYsP0plKeoVPUIH6 9ZMWImp6IW1FWHHtXXWV5QTy1PCzHESp5FZ05bunKghJA2s3EayGWTqpG1A7Jl+7CxRWVvVe464 ThAsxf1RRHK3JVnhGUmE8Mjc2RzCwezpI9lYPAgEctqxlIo5ISARB/QcF5yFF9LMFlhysuOpvx4 FnJZ26fg8HSiMGrbHTylKm7rej4+IPORx1jUGHThH9pERuIELYpLMOhj/noY4BynhPFoAxD2H9o GTv8mQ/XPjqGFDygwjTNMj86wb1YtPgocF+pKva+Ri14y0VL8GQ2hBVGzyHeGjteMtTG6pf8jbO wbLQoJBTht1Q575DOo5wkXTqErjTrC2V1bXHte1ACeClTM5z9WAMaajkzn+qcPgPhhb20u+Rnsn aYkP4p2u3HD148kp+wA== X-Authority-Analysis: v=2.4 cv=bJsm5v+Z c=1 sm=1 tr=0 ts=69f07bee cx=c_pps a=JbAStetqSzwMeJznSMzCyw==: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=EUspDBNiAAAA:8 a=vxuIP30iJWOd7SGqMXcA:9 a=QEXdDO2ut3YA:10 a=uxP6HrT_eTzRwkO_Te1X: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-28_02,2026-04-21_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 impostorscore=0 adultscore=0 suspectscore=0 malwarescore=0 spamscore=0 bulkscore=0 lowpriorityscore=0 phishscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604200000 definitions=main-2604280082 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 | 156 +++++++++++++++++++++++++++= ++++ 1 file changed, 156 insertions(+) diff --git a/drivers/base/test/platform-device-test.c b/drivers/base/test/p= latform-device-test.c index 6355a2231b741791b54eb78af42e13f31f745184..19b3b2ea150738877278f7e37be= 7ef69539147c0 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,162 @@ 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); +} + +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