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

From: Pavol Sakac

Date: Thu Jul 02 2026 - 13:51:37 EST


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@xxxxxxxxxxxxxxxxxxx>
Cc: Rafael J. Wysocki <rafael@xxxxxxxxxx>
Cc: Tejun Heo <tj@xxxxxxxxxx>
Cc: Danilo Krummrich <dakr@xxxxxxxxxx>
Cc: linux-kernel@xxxxxxxxxxxxxxx
Cc: driver-core@xxxxxxxxxxxxxxx
Cc: linux-api@xxxxxxxxxxxxxxx
Assisted-by: Claude:claude-opus-4.7
Signed-off-by: Pavol Sakac <sakacpav@xxxxxxxxx>
---
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