* [PATCH 0/2] driver core: remove software node from platform devices on device release
@ 2026-04-10 11:50 Bartosz Golaszewski
2026-04-10 11:50 ` [PATCH 1/2] driver core: platform: remove software node on release() Bartosz Golaszewski
2026-04-10 11:50 ` [PATCH 2/2] driver core: platform: tests: add a test case for correct swnode removal Bartosz Golaszewski
0 siblings, 2 replies; 4+ messages in thread
From: Bartosz Golaszewski @ 2026-04-10 11:50 UTC (permalink / raw)
To: Greg Kroah-Hartman, Rafael J. Wysocki, Danilo Krummrich,
Dmitry Torokhov
Cc: brgl, driver-core, linux-kernel, Bartosz Golaszewski
This fixes an issue in platform device code where, if we specify a
software node for a platform device using struct platform_device_info,
it will not be removed on device .release().
The second patch adds a test-case that can be used to reproduce the
problem and prove that the fix works.
First patch should go into v7.1 while patch 2/2 can be queued for v7.2.
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
---
Bartosz Golaszewski (2):
driver core: platform: remove software node on release()
driver core: platform: tests: add a test case for correct swnode removal
drivers/base/platform.c | 1 +
drivers/base/test/platform-device-test.c | 62 ++++++++++++++++++++++++++++++++
2 files changed, 63 insertions(+)
---
base-commit: 3fa7d958829eb9bc3b469ed07f11de3d2804ef71
change-id: 20260410-swnode-remove-on-dev-unreg-42bfc4b23ba8
Best regards,
--
Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH 1/2] driver core: platform: remove software node on release()
2026-04-10 11:50 [PATCH 0/2] driver core: remove software node from platform devices on device release Bartosz Golaszewski
@ 2026-04-10 11:50 ` Bartosz Golaszewski
2026-04-13 3:56 ` Dmitry Torokhov
2026-04-10 11:50 ` [PATCH 2/2] driver core: platform: tests: add a test case for correct swnode removal Bartosz Golaszewski
1 sibling, 1 reply; 4+ messages in thread
From: Bartosz Golaszewski @ 2026-04-10 11:50 UTC (permalink / raw)
To: Greg Kroah-Hartman, Rafael J. Wysocki, Danilo Krummrich,
Dmitry Torokhov
Cc: brgl, driver-core, linux-kernel, Bartosz Golaszewski
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.
Fixes: 0fc434bc2c45 ("driver core: platform: allow attaching software nodes when creating devices")
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
---
drivers/base/platform.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/base/platform.c b/drivers/base/platform.c
index 75b4698d0e582e67adafa78c312d75c72fd654cf..a442abb4f1028a91f3c56b51211335678f7f18a2 100644
--- a/drivers/base/platform.c
+++ b/drivers/base/platform.c
@@ -600,6 +600,7 @@ static void platform_device_release(struct device *dev)
pdev.dev);
of_node_put(pa->pdev.dev.of_node);
+ device_remove_software_node(dev);
kfree(pa->pdev.dev.platform_data);
kfree(pa->pdev.mfd_cell);
kfree(pa->pdev.resource);
--
2.47.3
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/2] driver core: platform: tests: add a test case for correct swnode removal
2026-04-10 11:50 [PATCH 0/2] driver core: remove software node from platform devices on device release Bartosz Golaszewski
2026-04-10 11:50 ` [PATCH 1/2] driver core: platform: remove software node on release() Bartosz Golaszewski
@ 2026-04-10 11:50 ` Bartosz Golaszewski
1 sibling, 0 replies; 4+ messages in thread
From: Bartosz Golaszewski @ 2026-04-10 11:50 UTC (permalink / raw)
To: Greg Kroah-Hartman, Rafael J. Wysocki, Danilo Krummrich,
Dmitry Torokhov
Cc: brgl, driver-core, linux-kernel, Bartosz Golaszewski
Extend the kunit module for platform devices with a test case verifying
that the same software node can be added to platform devices repeatedly.
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
---
drivers/base/test/platform-device-test.c | 62 ++++++++++++++++++++++++++++++++
1 file changed, 62 insertions(+)
diff --git a/drivers/base/test/platform-device-test.c b/drivers/base/test/platform-device-test.c
index 6355a2231b741791b54eb78af42e13f31f745184..9046be1cd0f68b57f70eddb15227609c925318ce 100644
--- a/drivers/base/test/platform-device-test.c
+++ b/drivers/base/test/platform-device-test.c
@@ -5,8 +5,10 @@
#include <linux/device.h>
#include <linux/device/bus.h>
+#include <linux/fwnode.h>
#include <linux/of_platform.h>
#include <linux/platform_device.h>
+#include <linux/property.h>
#define DEVICE_NAME "test"
@@ -253,9 +255,69 @@ static struct kunit_suite platform_device_match_test_suite = {
.test_cases = platform_device_match_tests,
};
+static int platform_device_swnode_test_probe(struct platform_device *pdev)
+{
+ return 0;
+}
+
+static struct platform_driver platform_swnode_test_driver = {
+ .probe = platform_device_swnode_test_probe,
+ .driver = {
+ .name = DEVICE_NAME,
+ },
+};
+
+static const struct software_node platform_device_test_swnode = { };
+
+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 = kunit_platform_driver_register(test, &platform_swnode_test_driver);
+ KUNIT_ASSERT_EQ(test, ret, 0);
+
+ fwnode_init(&fwnode, NULL);
+ pdevinfo = (struct platform_device_info){
+ .name = DEVICE_NAME,
+ .id = PLATFORM_DEVID_NONE,
+ .fwnode = &fwnode,
+ .swnode = &platform_device_test_swnode,
+ };
+
+ pdev = 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 = 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);
+}
+
+static struct kunit_case platform_device_swnode_tests[] = {
+ KUNIT_CASE(platform_device_swnode_add_twice),
+ {}
+};
+
+static struct kunit_suite platform_device_swnode_test_suite = {
+ .name = "platform-device-swnode",
+ .test_cases = platform_device_swnode_tests,
+};
+
kunit_test_suites(
&platform_device_devm_test_suite,
&platform_device_match_test_suite,
+ &platform_device_swnode_test_suite,
);
MODULE_DESCRIPTION("Test module for platform devices");
--
2.47.3
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 1/2] driver core: platform: remove software node on release()
2026-04-10 11:50 ` [PATCH 1/2] driver core: platform: remove software node on release() Bartosz Golaszewski
@ 2026-04-13 3:56 ` Dmitry Torokhov
0 siblings, 0 replies; 4+ messages in thread
From: Dmitry Torokhov @ 2026-04-13 3:56 UTC (permalink / raw)
To: Bartosz Golaszewski
Cc: Greg Kroah-Hartman, Rafael J. Wysocki, Danilo Krummrich, brgl,
driver-core, linux-kernel
Hi Bartosz,
On Fri, Apr 10, 2026 at 01:50:45PM +0200, Bartosz Golaszewski wrote:
> 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.
Thank you for spotting this, but I do not believe the patch is correct
as it stands. We need to differentiate between nodes registered by
platform devices vs nodes that already registered where we simply use
them.
I think we need to mark nodes that platform_device_register_full()
registers form swnodes as "managed = true" so that they are cleaned up
properly.
See also sashiko feedback.
https://sashiko.dev/#/patchset/20260410-swnode-remove-on-dev-unreg-v1-0-cd7d305f3db2%40oss.qualcomm.com
Thanks.
--
Dmitry
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-04-13 3:56 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-10 11:50 [PATCH 0/2] driver core: remove software node from platform devices on device release Bartosz Golaszewski
2026-04-10 11:50 ` [PATCH 1/2] driver core: platform: remove software node on release() Bartosz Golaszewski
2026-04-13 3:56 ` Dmitry Torokhov
2026-04-10 11:50 ` [PATCH 2/2] driver core: platform: tests: add a test case for correct swnode removal Bartosz Golaszewski
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox