Thread (10 messages) flat view 10 messages, 3 authors, 2015-10-20

Re: [PATCH v5 3/4] of: overlay: add per overlay sysfs attributes

From: Rob Herring <hidden>
Date: 2015-09-16 16:45:27
Also in: linux-devicetree, lkml

On Wed, Sep 16, 2015 at 11:09 AM, Pantelis Antoniou
[off-list ref] wrote:
The two default overlay attributes are:

* A targets sysfs attribute listing the targets of the installed
overlay. The targets list the path on the kernel's device tree
where each overlay fragment is applied to

* A per overlay can_remove sysfs attribute that reports whether
the overlay can be removed or not due to another overlapping overlay.

Signed-off-by: Pantelis Antoniou <pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org>
---
How about an answer to my v4 questions?

Rob
quoted hunk ↗ jump to hunk
 drivers/of/overlay.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 53 insertions(+)
diff --git a/drivers/of/overlay.c b/drivers/of/overlay.c
index 62cfb99..cff3c05 100644
--- a/drivers/of/overlay.c
+++ b/drivers/of/overlay.c
@@ -373,8 +373,61 @@ static const struct attribute *overlay_global_attrs[] = {
        NULL
 };

+static ssize_t can_remove_show(struct kobject *kobj,
+               struct kobj_attribute *attr, char *buf)
+{
+       struct of_overlay *ov = kobj_to_overlay(kobj);
+
+       return snprintf(buf, PAGE_SIZE, "%d\n", overlay_removal_is_ok(ov));
+}
+
+static ssize_t targets_show(struct kobject *kobj,
+               struct kobj_attribute *attr, char *buf)
+{
+       struct of_overlay *ov = kobj_to_overlay(kobj);
+       struct of_overlay_info *ovinfo;
+       char *s, *e;
+       ssize_t ret;
+       int i, len;
+
+       s = buf;
+       e = buf + PAGE_SIZE;
+
+       mutex_lock(&of_mutex);
+
+       /* targets */
+       for (i = 0; i < ov->count; i++) {
+               ovinfo = &ov->ovinfo_tab[i];
+
+               len = snprintf(s, e - s, "%s\n",
+                               of_node_full_name(ovinfo->target));
+               if (len == 0) {
+                       ret = -ENOSPC;
+                       goto err;
+               }
+               s += len;
+       }
+
+       /* the buffer is zero terminated */
+       ret = s - buf;
+err:
+       mutex_unlock(&of_mutex);
+       return ret;
+}
+
+static struct kobj_attribute can_remove_attr = __ATTR_RO(can_remove);
+static struct kobj_attribute targets_attr = __ATTR_RO(targets);
+
+static struct attribute *overlay_attrs[] = {
+       &can_remove_attr.attr,
+       &targets_attr.attr,
+       NULL
+};
+
 static struct kobj_type of_overlay_ktype = {
        .release = of_overlay_release,
+       .sysfs_ops = &kobj_sysfs_ops,   /* default kobj sysfs ops */
+       .default_attrs = overlay_attrs,
 };

 static struct kset *ov_kset;
--
1.7.12
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help