Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754594AbbFLTjD (ORCPT ); Fri, 12 Jun 2015 15:39:03 -0400 Received: from mail-wg0-f48.google.com ([74.125.82.48]:35339 "EHLO mail-wg0-f48.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753538AbbFLTib (ORCPT ); Fri, 12 Jun 2015 15:38:31 -0400 From: Pantelis Antoniou To: Rob Herring Cc: Grant Likely , Andrew Morton , Matt Porter , Koen Kooi , Guenter Roeck , Greg Kroah-Hartman , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-api@vger.kernel.org, Pantelis Antoniou , Pantelis Antoniou Subject: [PATCH v4 3/4] of: overlay: add per overlay sysfs attributes Date: Fri, 12 Jun 2015 22:38:15 +0300 Message-Id: <1434137896-13806-4-git-send-email-pantelis.antoniou@konsulko.com> X-Mailer: git-send-email 1.7.12 In-Reply-To: <1434137896-13806-1-git-send-email-pantelis.antoniou@konsulko.com> References: <1434137896-13806-1-git-send-email-pantelis.antoniou@konsulko.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2337 Lines: 88 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 --- drivers/of/overlay.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/drivers/of/overlay.c b/drivers/of/overlay.c index 37ec858..747568f 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 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/