/* always return newly allocated name, caller must free after use */ staticconstchar *safe_name(conststruct kobject *kobj, constchar *orig_name)
{ constchar *name = orig_name; struct kernfs_node *kn; int i = 0;
/* don't be a hero. After 16 tries give up */ while (i < 16 && (kn = sysfs_get_dirent(kobj->sd, name))) {
sysfs_put(kn); if (name != orig_name)
kfree(name);
name = kasprintf(GFP_KERNEL, "%s#%i", orig_name, ++i);
}
if (name == orig_name) {
name = kstrdup(orig_name, GFP_KERNEL);
} else {
pr_warn("Duplicate name in %s, renamed to \"%s\"\n",
kobject_name(kobj), name);
} return name;
}
int __of_add_property_sysfs(struct device_node *np, struct property *pp)
{ int rc;
void __of_remove_property_sysfs(struct device_node *np, conststruct property *prop)
{ /* at early boot, bail here and defer setup to of_init() */ if (of_kset && of_node_is_attached(np))
__of_sysfs_remove_bin_file(np, prop);
}
void __of_update_property_sysfs(struct device_node *np, struct property *newprop, conststruct property *oldprop)
{ /* At early boot, bail out and defer setup to of_init() */ if (!of_kset) return;
if (oldprop)
__of_sysfs_remove_bin_file(np, oldprop);
__of_add_property_sysfs(np, newprop);
}
int __of_attach_node_sysfs(struct device_node *np)
{ constchar *name; struct kobject *parent; struct property *pp; int rc;
if (!IS_ENABLED(CONFIG_SYSFS) || !of_kset) return 0;
np->kobj.kset = of_kset; if (!np->parent) { /* Nodes without parents are new top level trees */
name = safe_name(&of_kset->kobj, "base");
parent = NULL;
} else {
name = safe_name(&np->parent->kobj, kbasename(np->full_name));
parent = &np->parent->kobj;
} if (!name) return -ENOMEM;
BUG_ON(!of_node_is_initialized(np)); if (!of_kset) return;
/* only remove properties if on sysfs */ if (of_node_is_attached(np)) {
for_each_property_of_node(np, pp)
__of_sysfs_remove_bin_file(np, pp);
kobject_del(&np->kobj);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.