[RFC PATCH 06/14] driver core: wire device_ktype populate to walker

Pavol Sakac sakacpav at amazon.de
Thu Jul 2 10:51:06 PDT 2026


Wire the kernfs syscall callback shape (kobject *, const char *)
to the device-level walker. Add device_ktype_populate_one() and
device_ktype_populate_all() adapters that dispatch through
device_sysfs_apply() over dev->kobj.ktype->entries (currently
NULL; the migration commit installs driver_core_sysfs_entries[]).

The adapters early-return when dev->p->dead is set so a populate
racing with device_del() is a no-op.

No behaviour change: the table is empty until the migration commit.

Cc: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
Cc: Rafael J. Wysocki <rafael at kernel.org>
Cc: Tejun Heo <tj at kernel.org>
Cc: Danilo Krummrich <dakr at kernel.org>
Cc: linux-kernel at vger.kernel.org
Cc: driver-core at lists.linux.dev
Cc: linux-api at vger.kernel.org
Assisted-by: Claude:claude-opus-4.7
Signed-off-by: Pavol Sakac <sakacpav at amazon.de>
---
 drivers/base/core.c | 50 +++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 46 insertions(+), 4 deletions(-)

diff --git a/drivers/base/core.c b/drivers/base/core.c
index aeb4985eb8838..975b6e0c4dabd 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -33,6 +33,7 @@
 #include <linux/swiotlb.h>
 #include <linux/sysfs.h>
 
+
 #include "base.h"
 #include "physical_location.h"
 #include "power/power.h"
@@ -2841,10 +2842,9 @@ device_sysfs_entries_end(const struct device_sysfs_entry *entries)
 	return e;
 }
 
-static __maybe_unused int
-device_sysfs_apply(struct device *dev,
-		  const struct device_sysfs_entry *entries,
-		  enum dev_sysfs_action action, const char *name)
+static int device_sysfs_apply(struct device *dev,
+			     const struct device_sysfs_entry *entries,
+			     enum dev_sysfs_action action, const char *name)
 {
 	const struct device_sysfs_entry *e;
 
@@ -2972,11 +2972,53 @@ int device_set_sysfs_lazy(struct device *dev)
 }
 EXPORT_SYMBOL_GPL(device_set_sysfs_lazy);
 
+/*
+ * kobj_type populate adapters - thin wrappers from the kobject
+ * callback shape (kobject *, const char *) to the device-level
+ * walker. Both read dev->kobj.ktype->entries (which is currently
+ * NULL until driver_core_sysfs_entries[] is populated below) and
+ * call device_sysfs_apply() with the matching action.
+ *
+ * The walker traverses an empty table today, so these adapters are
+ * no-ops in behavioural terms. They are wired now so that the
+ * ktype plumbing lands as one reviewable unit; subsequent commits
+ * flip rows on without touching dispatch wiring.
+ */
+static int device_ktype_populate_one(struct kobject *kobj, const char *name)
+{
+	struct device *dev = kobj_to_dev(kobj);
+	const struct kobj_type *ktype = dev->kobj.ktype;
+	int ret;
+
+	/* Device is being torn down; do not populate. */
+	if (dev->p->dead)
+		return -ENOENT;
+
+	ret = device_sysfs_apply(dev, ktype ? ktype->entries : NULL,
+				DEV_SYSFS_ADD_ONE, name);
+	return ret;
+}
+
+static void device_ktype_populate_all(struct kobject *kobj)
+{
+	struct device *dev = kobj_to_dev(kobj);
+	const struct kobj_type *ktype = dev->kobj.ktype;
+
+	/* Device is being torn down; do not populate. */
+	if (dev->p->dead)
+		return;
+
+	device_sysfs_apply(dev, ktype ? ktype->entries : NULL,
+			  DEV_SYSFS_ADD_ALL, NULL);
+}
+
 static const struct kobj_type device_ktype = {
 	.release	= device_release,
 	.sysfs_ops	= &dev_sysfs_ops,
 	.namespace	= device_namespace,
 	.get_ownership	= device_get_ownership,
+	.populate	= device_ktype_populate_one,
+	.populate_all	= device_ktype_populate_all,
 };
 
 
-- 
2.47.3




Amazon Web Services Development Center Germany GmbH
Tamara-Danz-Str. 13
10243 Berlin
Geschaeftsfuehrung: Christof Hellmis, Andreas Stieger
Eingetragen am Amtsgericht Charlottenburg unter HRB 257764 B
Sitz: Berlin
Ust-ID: DE 365 538 597




More information about the kexec mailing list