All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org>
To: Pantelis Antoniou
	<pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org>
Cc: Rob Herring <robherring2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	Frank Rowand
	<frowand.list-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	Matt Porter <mporter-OWPKS81ov/FWk0Htik3J/w@public.gmane.org>,
	Koen Kooi
	<koen-QLwJDigV5abLmq1fohREcCpxlwaOVQ5f@public.gmane.org>,
	Guenter Roeck <linux-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>,
	devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-api-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	Pantelis Antoniou
	<panto-wVdstyuyKrO8r51toPun2/C9HSW9iNxf@public.gmane.org>
Subject: Re: [PATCH v5 1/4] of: overlay: kobjectify overlay objects
Date: Sun, 4 Oct 2015 20:22:10 +0100	[thread overview]
Message-ID: <20151004192210.GD9649@kroah.com> (raw)
In-Reply-To: <1442419751-4846-2-git-send-email-pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org>

On Wed, Sep 16, 2015 at 07:09:08PM +0300, Pantelis Antoniou wrote:
> We are going to need the overlays to appear on sysfs with runtime
> global properties (like master enable) so turn them into kobjects.
> 
> Signed-off-by: Pantelis Antoniou <pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org>
> ---
>  drivers/of/base.c       |  7 +++++++
>  drivers/of/of_private.h |  9 +++++++++
>  drivers/of/overlay.c    | 52 +++++++++++++++++++++++++++++++++++++++++++++++--
>  3 files changed, 66 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/of/base.c b/drivers/of/base.c
> index 8b5a187..31c0c8f 100644
> --- a/drivers/of/base.c
> +++ b/drivers/of/base.c
> @@ -192,6 +192,7 @@ int __of_attach_node_sysfs(struct device_node *np)
>  void __init of_core_init(void)
>  {
>  	struct device_node *np;
> +	int ret;
>  
>  	/* Create the kset, and register existing nodes */
>  	mutex_lock(&of_mutex);
> @@ -208,6 +209,12 @@ void __init of_core_init(void)
>  	/* Symlink in /proc as required by userspace ABI */
>  	if (of_root)
>  		proc_symlink("device-tree", NULL, "/sys/firmware/devicetree/base");
> +
> +	ret = of_overlay_init();
> +	if (ret != 0)
> +		pr_warn("of_init: of_overlay_init failed!\n");
> +
> +	return 0;
>  }
>  
>  static struct property *__of_find_property(const struct device_node *np,
> diff --git a/drivers/of/of_private.h b/drivers/of/of_private.h
> index 8e882e7..120eb44 100644
> --- a/drivers/of/of_private.h
> +++ b/drivers/of/of_private.h
> @@ -90,4 +90,13 @@ extern void __of_detach_node_sysfs(struct device_node *np);
>  #define for_each_transaction_entry_reverse(_oft, _te) \
>  	list_for_each_entry_reverse(_te, &(_oft)->te_list, node)
>  
> +#if defined(CONFIG_OF_OVERLAY)
> +extern int of_overlay_init(void);
> +#else
> +static inline int of_overlay_init(void)
> +{
> +	return 0;
> +}
> +#endif
> +
>  #endif /* _LINUX_OF_PRIVATE_H */
> diff --git a/drivers/of/overlay.c b/drivers/of/overlay.c
> index 24e025f..eeb3ec2 100644
> --- a/drivers/of/overlay.c
> +++ b/drivers/of/overlay.c
> @@ -20,6 +20,7 @@
>  #include <linux/slab.h>
>  #include <linux/err.h>
>  #include <linux/idr.h>
> +#include <linux/sysfs.h>
>  
>  #include "of_private.h"
>  
> @@ -51,6 +52,7 @@ struct of_overlay {
>  	int count;
>  	struct of_overlay_info *ovinfo_tab;
>  	struct of_changeset cset;
> +	struct kobject kobj;
>  };
>  
>  static int of_overlay_apply_one(struct of_overlay *ov,
> @@ -325,6 +327,24 @@ static int of_free_overlay_info(struct of_overlay *ov)
>  static LIST_HEAD(ov_list);
>  static DEFINE_IDR(ov_idr);
>  
> +static inline struct of_overlay *kobj_to_overlay(struct kobject *kobj)
> +{
> +	return container_of(kobj, struct of_overlay, kobj);
> +}
> +
> +void of_overlay_release(struct kobject *kobj)
> +{
> +	struct of_overlay *ov = kobj_to_overlay(kobj);
> +
> +	kfree(ov);
> +}
> +
> +static struct kobj_type of_overlay_ktype = {
> +	.release = of_overlay_release,
> +};
> +
> +static struct kset *ov_kset;
> +
>  /**
>   * of_overlay_create() - Create and apply an overlay
>   * @tree:	Device node containing all the overlays
> @@ -350,6 +370,9 @@ int of_overlay_create(struct device_node *tree)
>  
>  	of_changeset_init(&ov->cset);
>  
> +	/* initialize kobject */
> +	kobject_init(&ov->kobj, &of_overlay_ktype);
> +
>  	mutex_lock(&of_mutex);
>  
>  	id = idr_alloc(&ov_idr, ov, 0, 0, GFP_KERNEL);
> @@ -385,6 +408,14 @@ int of_overlay_create(struct device_node *tree)
>  		goto err_revert_overlay;
>  	}
>  
> +	ov->kobj.kset = ov_kset;
> +	err = kobject_add(&ov->kobj, NULL, "%d", id);

NULL for the parent?  Really?  Where does that cause this kobject to
show up in the sysfs tree?

> @@ -512,7 +545,9 @@ int of_overlay_destroy(int id)
>  	of_free_overlay_info(ov);
>  	idr_remove(&ov_idr, id);
>  	of_changeset_destroy(&ov->cset);
> -	kfree(ov);
> +
> +	kobject_del(&ov->kobj);
> +	kobject_put(&ov->kobj);

Two drops of the reference?

>  
>  	err = 0;
>  
> @@ -542,7 +577,8 @@ int of_overlay_destroy_all(void)
>  		of_changeset_revert(&ov->cset);
>  		of_free_overlay_info(ov);
>  		idr_remove(&ov_idr, ov->id);
> -		kfree(ov);
> +		kobject_del(&ov->kobj);
> +		kobject_put(&ov->kobj);

Again, why 2?

thanks,

greg k-h

WARNING: multiple messages have this Message-ID (diff)
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
Cc: Rob Herring <robherring2@gmail.com>,
	Frank Rowand <frowand.list@gmail.com>,
	Matt Porter <mporter@konsulko.com>,
	Koen Kooi <koen@dominion.thruhere.net>,
	Guenter Roeck <linux@roeck-us.net>,
	devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-api@vger.kernel.org,
	Pantelis Antoniou <panto@antoniou-consulting.com>
Subject: Re: [PATCH v5 1/4] of: overlay: kobjectify overlay objects
Date: Sun, 4 Oct 2015 20:22:10 +0100	[thread overview]
Message-ID: <20151004192210.GD9649@kroah.com> (raw)
In-Reply-To: <1442419751-4846-2-git-send-email-pantelis.antoniou@konsulko.com>

On Wed, Sep 16, 2015 at 07:09:08PM +0300, Pantelis Antoniou wrote:
> We are going to need the overlays to appear on sysfs with runtime
> global properties (like master enable) so turn them into kobjects.
> 
> Signed-off-by: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
> ---
>  drivers/of/base.c       |  7 +++++++
>  drivers/of/of_private.h |  9 +++++++++
>  drivers/of/overlay.c    | 52 +++++++++++++++++++++++++++++++++++++++++++++++--
>  3 files changed, 66 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/of/base.c b/drivers/of/base.c
> index 8b5a187..31c0c8f 100644
> --- a/drivers/of/base.c
> +++ b/drivers/of/base.c
> @@ -192,6 +192,7 @@ int __of_attach_node_sysfs(struct device_node *np)
>  void __init of_core_init(void)
>  {
>  	struct device_node *np;
> +	int ret;
>  
>  	/* Create the kset, and register existing nodes */
>  	mutex_lock(&of_mutex);
> @@ -208,6 +209,12 @@ void __init of_core_init(void)
>  	/* Symlink in /proc as required by userspace ABI */
>  	if (of_root)
>  		proc_symlink("device-tree", NULL, "/sys/firmware/devicetree/base");
> +
> +	ret = of_overlay_init();
> +	if (ret != 0)
> +		pr_warn("of_init: of_overlay_init failed!\n");
> +
> +	return 0;
>  }
>  
>  static struct property *__of_find_property(const struct device_node *np,
> diff --git a/drivers/of/of_private.h b/drivers/of/of_private.h
> index 8e882e7..120eb44 100644
> --- a/drivers/of/of_private.h
> +++ b/drivers/of/of_private.h
> @@ -90,4 +90,13 @@ extern void __of_detach_node_sysfs(struct device_node *np);
>  #define for_each_transaction_entry_reverse(_oft, _te) \
>  	list_for_each_entry_reverse(_te, &(_oft)->te_list, node)
>  
> +#if defined(CONFIG_OF_OVERLAY)
> +extern int of_overlay_init(void);
> +#else
> +static inline int of_overlay_init(void)
> +{
> +	return 0;
> +}
> +#endif
> +
>  #endif /* _LINUX_OF_PRIVATE_H */
> diff --git a/drivers/of/overlay.c b/drivers/of/overlay.c
> index 24e025f..eeb3ec2 100644
> --- a/drivers/of/overlay.c
> +++ b/drivers/of/overlay.c
> @@ -20,6 +20,7 @@
>  #include <linux/slab.h>
>  #include <linux/err.h>
>  #include <linux/idr.h>
> +#include <linux/sysfs.h>
>  
>  #include "of_private.h"
>  
> @@ -51,6 +52,7 @@ struct of_overlay {
>  	int count;
>  	struct of_overlay_info *ovinfo_tab;
>  	struct of_changeset cset;
> +	struct kobject kobj;
>  };
>  
>  static int of_overlay_apply_one(struct of_overlay *ov,
> @@ -325,6 +327,24 @@ static int of_free_overlay_info(struct of_overlay *ov)
>  static LIST_HEAD(ov_list);
>  static DEFINE_IDR(ov_idr);
>  
> +static inline struct of_overlay *kobj_to_overlay(struct kobject *kobj)
> +{
> +	return container_of(kobj, struct of_overlay, kobj);
> +}
> +
> +void of_overlay_release(struct kobject *kobj)
> +{
> +	struct of_overlay *ov = kobj_to_overlay(kobj);
> +
> +	kfree(ov);
> +}
> +
> +static struct kobj_type of_overlay_ktype = {
> +	.release = of_overlay_release,
> +};
> +
> +static struct kset *ov_kset;
> +
>  /**
>   * of_overlay_create() - Create and apply an overlay
>   * @tree:	Device node containing all the overlays
> @@ -350,6 +370,9 @@ int of_overlay_create(struct device_node *tree)
>  
>  	of_changeset_init(&ov->cset);
>  
> +	/* initialize kobject */
> +	kobject_init(&ov->kobj, &of_overlay_ktype);
> +
>  	mutex_lock(&of_mutex);
>  
>  	id = idr_alloc(&ov_idr, ov, 0, 0, GFP_KERNEL);
> @@ -385,6 +408,14 @@ int of_overlay_create(struct device_node *tree)
>  		goto err_revert_overlay;
>  	}
>  
> +	ov->kobj.kset = ov_kset;
> +	err = kobject_add(&ov->kobj, NULL, "%d", id);

NULL for the parent?  Really?  Where does that cause this kobject to
show up in the sysfs tree?

> @@ -512,7 +545,9 @@ int of_overlay_destroy(int id)
>  	of_free_overlay_info(ov);
>  	idr_remove(&ov_idr, id);
>  	of_changeset_destroy(&ov->cset);
> -	kfree(ov);
> +
> +	kobject_del(&ov->kobj);
> +	kobject_put(&ov->kobj);

Two drops of the reference?

>  
>  	err = 0;
>  
> @@ -542,7 +577,8 @@ int of_overlay_destroy_all(void)
>  		of_changeset_revert(&ov->cset);
>  		of_free_overlay_info(ov);
>  		idr_remove(&ov_idr, ov->id);
> -		kfree(ov);
> +		kobject_del(&ov->kobj);
> +		kobject_put(&ov->kobj);

Again, why 2?

thanks,

greg k-h

  parent reply	other threads:[~2015-10-04 19:22 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-16 16:09 [PATCH v5 0/4] of: overlay: kobject & sysfs'ation Pantelis Antoniou
2015-09-16 16:09 ` [PATCH v5 1/4] of: overlay: kobjectify overlay objects Pantelis Antoniou
     [not found]   ` <1442419751-4846-2-git-send-email-pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org>
2015-10-04 19:22     ` Greg Kroah-Hartman [this message]
2015-10-04 19:22       ` Greg Kroah-Hartman
     [not found]       ` <20151004192210.GD9649-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2015-10-20 13:47         ` Pantelis Antoniou
2015-10-20 13:47           ` Pantelis Antoniou
     [not found] ` <1442419751-4846-1-git-send-email-pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org>
2015-09-16 16:09   ` [PATCH v5 2/4] of: overlay: global sysfs enable attribute Pantelis Antoniou
2015-09-16 16:09     ` Pantelis Antoniou
2015-09-16 16:09 ` [PATCH v5 3/4] of: overlay: add per overlay sysfs attributes Pantelis Antoniou
     [not found]   ` <1442419751-4846-4-git-send-email-pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org>
2015-09-16 16:45     ` Rob Herring
2015-09-16 16:45       ` Rob Herring
     [not found]       ` <CAL_Jsq+N43c-A175QC0L9jpEP9ZptugDLChMEJgs76=1NEP3Mw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-09-16 19:08         ` Pantelis Antoniou
2015-09-16 19:08           ` Pantelis Antoniou
2015-10-04 19:23     ` Greg Kroah-Hartman
2015-10-04 19:23       ` Greg Kroah-Hartman
2015-09-16 16:09 ` [PATCH v5 4/4] Documentation: ABI: /sys/firmware/devicetree/overlays Pantelis Antoniou

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20151004192210.GD9649@kroah.com \
    --to=gregkh-hqyy1w1ycw8ekmwlsbkhg0b+6bgklq7r@public.gmane.org \
    --cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=frowand.list-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=koen-QLwJDigV5abLmq1fohREcCpxlwaOVQ5f@public.gmane.org \
    --cc=linux-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org \
    --cc=linux-api-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=mporter-OWPKS81ov/FWk0Htik3J/w@public.gmane.org \
    --cc=pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org \
    --cc=panto-wVdstyuyKrO8r51toPun2/C9HSW9iNxf@public.gmane.org \
    --cc=robherring2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.