From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: Grant Likely <grant.likely@secretlab.ca>
Cc: sfr@canb.auug.org.au, monstr@monstr.eu,
microblaze-uclinux@itee.uq.edu.au,
devicetree-discuss@lists.ozlabs.org, sparclinux@vger.kernel.org,
linuxppc-dev@lists.ozlabs.org, davem@davemloft.net
Subject: Re: [PATCH 09/11] of: merge of_attach_node() & of_detach_node()
Date: Thu, 26 Nov 2009 15:07:48 +1100 [thread overview]
Message-ID: <1259208468.16367.234.camel@pasglop> (raw)
In-Reply-To: <20091124081931.6216.27102.stgit@angua>
On Tue, 2009-11-24 at 01:19 -0700, Grant Likely wrote:
> Merge common code between PowerPC and Microblaze
Some of those guys might wnat to be in of_dynamic (see previous email)
Remember: We want to keep the footprint low for embedded archs that
don't want to do dynamic stuff. Really low.
Cheers,
Ben.
> Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
> ---
>
> arch/microblaze/include/asm/prom.h | 4 --
> arch/microblaze/kernel/prom.c | 59 -----------------------------------
> arch/powerpc/include/asm/prom.h | 4 --
> arch/powerpc/kernel/prom.c | 59 -----------------------------------
> drivers/of/base.c | 60 ++++++++++++++++++++++++++++++++++++
> include/linux/of.h | 4 ++
> 6 files changed, 64 insertions(+), 126 deletions(-)
>
> diff --git a/arch/microblaze/include/asm/prom.h b/arch/microblaze/include/asm/prom.h
> index 07d1063..6c6b386 100644
> --- a/arch/microblaze/include/asm/prom.h
> +++ b/arch/microblaze/include/asm/prom.h
> @@ -39,10 +39,6 @@ extern struct device_node *of_chosen;
>
> extern rwlock_t devtree_lock; /* temporary while merging */
>
> -/* For updating the device tree at runtime */
> -extern void of_attach_node(struct device_node *);
> -extern void of_detach_node(struct device_node *);
> -
> /* Other Prototypes */
> extern int early_uartlite_console(void);
>
> diff --git a/arch/microblaze/kernel/prom.c b/arch/microblaze/kernel/prom.c
> index c0d53b7..8c00457 100644
> --- a/arch/microblaze/kernel/prom.c
> +++ b/arch/microblaze/kernel/prom.c
> @@ -313,65 +313,6 @@ struct device_node *of_find_node_by_phandle(phandle handle)
> }
> EXPORT_SYMBOL(of_find_node_by_phandle);
>
> -/*
> - * Plug a device node into the tree and global list.
> - */
> -void of_attach_node(struct device_node *np)
> -{
> - unsigned long flags;
> -
> - write_lock_irqsave(&devtree_lock, flags);
> - np->sibling = np->parent->child;
> - np->allnext = allnodes;
> - np->parent->child = np;
> - allnodes = np;
> - write_unlock_irqrestore(&devtree_lock, flags);
> -}
> -
> -/*
> - * "Unplug" a node from the device tree. The caller must hold
> - * a reference to the node. The memory associated with the node
> - * is not freed until its refcount goes to zero.
> - */
> -void of_detach_node(struct device_node *np)
> -{
> - struct device_node *parent;
> - unsigned long flags;
> -
> - write_lock_irqsave(&devtree_lock, flags);
> -
> - parent = np->parent;
> - if (!parent)
> - goto out_unlock;
> -
> - if (allnodes == np)
> - allnodes = np->allnext;
> - else {
> - struct device_node *prev;
> - for (prev = allnodes;
> - prev->allnext != np;
> - prev = prev->allnext)
> - ;
> - prev->allnext = np->allnext;
> - }
> -
> - if (parent->child == np)
> - parent->child = np->sibling;
> - else {
> - struct device_node *prevsib;
> - for (prevsib = np->parent->child;
> - prevsib->sibling != np;
> - prevsib = prevsib->sibling)
> - ;
> - prevsib->sibling = np->sibling;
> - }
> -
> - of_node_set_flag(np, OF_DETACHED);
> -
> -out_unlock:
> - write_unlock_irqrestore(&devtree_lock, flags);
> -}
> -
> #if defined(CONFIG_DEBUG_FS) && defined(DEBUG)
> static struct debugfs_blob_wrapper flat_dt_blob;
>
> diff --git a/arch/powerpc/include/asm/prom.h b/arch/powerpc/include/asm/prom.h
> index 2ab9cbd..f384db8 100644
> --- a/arch/powerpc/include/asm/prom.h
> +++ b/arch/powerpc/include/asm/prom.h
> @@ -34,10 +34,6 @@ extern struct device_node *of_chosen;
>
> #define HAVE_ARCH_DEVTREE_FIXUPS
>
> -/* For updating the device tree at runtime */
> -extern void of_attach_node(struct device_node *);
> -extern void of_detach_node(struct device_node *);
> -
> #ifdef CONFIG_PPC32
> /*
> * PCI <-> OF matching functions
> diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c
> index 6873db9..7d0beeb 100644
> --- a/arch/powerpc/kernel/prom.c
> +++ b/arch/powerpc/kernel/prom.c
> @@ -740,65 +740,6 @@ struct device_node *of_find_next_cache_node(struct device_node *np)
> return NULL;
> }
>
> -/*
> - * Plug a device node into the tree and global list.
> - */
> -void of_attach_node(struct device_node *np)
> -{
> - unsigned long flags;
> -
> - write_lock_irqsave(&devtree_lock, flags);
> - np->sibling = np->parent->child;
> - np->allnext = allnodes;
> - np->parent->child = np;
> - allnodes = np;
> - write_unlock_irqrestore(&devtree_lock, flags);
> -}
> -
> -/*
> - * "Unplug" a node from the device tree. The caller must hold
> - * a reference to the node. The memory associated with the node
> - * is not freed until its refcount goes to zero.
> - */
> -void of_detach_node(struct device_node *np)
> -{
> - struct device_node *parent;
> - unsigned long flags;
> -
> - write_lock_irqsave(&devtree_lock, flags);
> -
> - parent = np->parent;
> - if (!parent)
> - goto out_unlock;
> -
> - if (allnodes == np)
> - allnodes = np->allnext;
> - else {
> - struct device_node *prev;
> - for (prev = allnodes;
> - prev->allnext != np;
> - prev = prev->allnext)
> - ;
> - prev->allnext = np->allnext;
> - }
> -
> - if (parent->child == np)
> - parent->child = np->sibling;
> - else {
> - struct device_node *prevsib;
> - for (prevsib = np->parent->child;
> - prevsib->sibling != np;
> - prevsib = prevsib->sibling)
> - ;
> - prevsib->sibling = np->sibling;
> - }
> -
> - of_node_set_flag(np, OF_DETACHED);
> -
> -out_unlock:
> - write_unlock_irqrestore(&devtree_lock, flags);
> -}
> -
> #ifdef CONFIG_PPC_PSERIES
> /*
> * Fix up the uninitialized fields in a new device node:
> diff --git a/drivers/of/base.c b/drivers/of/base.c
> index 4b10c89..9212b87 100644
> --- a/drivers/of/base.c
> +++ b/drivers/of/base.c
> @@ -60,6 +60,66 @@ int of_n_size_cells(struct device_node *np)
> }
> EXPORT_SYMBOL(of_n_size_cells);
>
> +/**
> + * of_attach_node - Plug a device node into the tree and global list.
> + */
> +void of_attach_node(struct device_node *np)
> +{
> + unsigned long flags;
> +
> + write_lock_irqsave(&devtree_lock, flags);
> + np->sibling = np->parent->child;
> + np->allnext = allnodes;
> + np->parent->child = np;
> + allnodes = np;
> + write_unlock_irqrestore(&devtree_lock, flags);
> +}
> +
> +/**
> + * of_detach_node - "Unplug" a node from the device tree.
> + *
> + * The caller must hold a reference to the node. The memory associated with
> + * the node is not freed until its refcount goes to zero.
> + */
> +void of_detach_node(struct device_node *np)
> +{
> + struct device_node *parent;
> + unsigned long flags;
> +
> + write_lock_irqsave(&devtree_lock, flags);
> +
> + parent = np->parent;
> + if (!parent)
> + goto out_unlock;
> +
> + if (allnodes == np)
> + allnodes = np->allnext;
> + else {
> + struct device_node *prev;
> + for (prev = allnodes;
> + prev->allnext != np;
> + prev = prev->allnext)
> + ;
> + prev->allnext = np->allnext;
> + }
> +
> + if (parent->child == np)
> + parent->child = np->sibling;
> + else {
> + struct device_node *prevsib;
> + for (prevsib = np->parent->child;
> + prevsib->sibling != np;
> + prevsib = prevsib->sibling)
> + ;
> + prevsib->sibling = np->sibling;
> + }
> +
> + of_node_set_flag(np, OF_DETACHED);
> +
> +out_unlock:
> + write_unlock_irqrestore(&devtree_lock, flags);
> +}
> +
> #if !defined(CONFIG_SPARC) /* SPARC doesn't do ref counting (yet) */
> /**
> * of_node_get - Increment refcount of a node
> diff --git a/include/linux/of.h b/include/linux/of.h
> index d4c014a..0a51742 100644
> --- a/include/linux/of.h
> +++ b/include/linux/of.h
> @@ -130,6 +130,10 @@ static inline unsigned long of_read_ulong(const u32 *cell, int size)
>
> #define OF_BAD_ADDR ((u64)-1)
>
> +/* For updating the device tree at runtime */
> +extern void of_attach_node(struct device_node *);
> +extern void of_detach_node(struct device_node *);
> +
> extern struct device_node *of_find_node_by_name(struct device_node *from,
> const char *name);
> #define for_each_node_by_name(dn, name) \
next prev parent reply other threads:[~2009-11-26 4:07 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-11-24 8:17 [PATCH 00/11] Yet another series of OF merge patches Grant Likely
2009-11-24 8:17 ` [PATCH 01/11] of/flattree: Merge early_init_dt_check_for_initrd() Grant Likely
2009-11-26 3:51 ` Benjamin Herrenschmidt
2009-11-26 4:02 ` Grant Likely
2009-11-24 8:18 ` [PATCH 02/11] of/flattree: Merge earlyinit_dt_scan_root() Grant Likely
2009-11-26 3:54 ` Benjamin Herrenschmidt
2009-11-26 4:03 ` Grant Likely
2009-11-24 8:18 ` [PATCH 03/11] of/flattree: merge dt_mem_next_cell Grant Likely
2009-11-26 3:55 ` Benjamin Herrenschmidt
2009-11-24 8:18 ` [PATCH 04/11] of/flattree: eliminate cell_t typedef Grant Likely
2009-11-26 3:59 ` Benjamin Herrenschmidt
2009-11-26 4:05 ` Grant Likely
2009-11-26 5:27 ` Benjamin Herrenschmidt
2009-11-26 21:36 ` Segher Boessenkool
2009-11-26 21:40 ` Benjamin Herrenschmidt
2009-11-26 23:32 ` David Miller
2009-12-11 6:43 ` Grant Likely
2009-11-26 6:28 ` M. Warner Losh
2009-11-26 7:06 ` Benjamin Herrenschmidt
2009-11-26 7:52 ` Mitch Bradley
2009-11-24 8:18 ` [PATCH 05/11] of/flattree: merge early_init_dt_scan_chosen() Grant Likely
2009-11-24 8:19 ` [PATCH 06/11] of/flattree: merge early_init_devtree() and early_init_move_devtree() Grant Likely
2009-11-26 4:04 ` Benjamin Herrenschmidt
2009-12-11 6:19 ` Grant Likely
2009-12-07 7:08 ` Jeremy Kerr
2009-12-11 6:20 ` Grant Likely
2009-11-24 8:19 ` [PATCH 07/11] of: merge machine_is_compatible() Grant Likely
2009-11-26 4:05 ` Benjamin Herrenschmidt
2009-12-11 6:54 ` Grant Likely
2009-11-24 8:19 ` [PATCH 08/11] of: Merge of_node_get() and of_node_put() Grant Likely
2009-11-26 4:06 ` Benjamin Herrenschmidt
2009-11-24 8:19 ` [PATCH 09/11] of: merge of_attach_node() & of_detach_node() Grant Likely
2009-11-26 4:07 ` Benjamin Herrenschmidt [this message]
2009-12-10 22:21 ` Grant Likely
2009-11-24 8:19 ` [PATCH 10/11] microblaze: gut implementation of early_init_dt_scan_cpus() Grant Likely
2009-11-24 8:20 ` [PATCH 11/11] of: unify phandle name in struct device_node Grant Likely
2009-11-24 17:37 ` David Miller
2009-11-24 20:33 ` Grant Likely
2009-11-24 21:10 ` David Miller
2009-11-24 21:06 ` Benjamin Herrenschmidt
2009-11-24 21:39 ` Grant Likely
2009-11-26 12:28 ` [PATCH 00/11] Yet another series of OF merge patches Wolfram Sang
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=1259208468.16367.234.camel@pasglop \
--to=benh@kernel.crashing.org \
--cc=davem@davemloft.net \
--cc=devicetree-discuss@lists.ozlabs.org \
--cc=grant.likely@secretlab.ca \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=microblaze-uclinux@itee.uq.edu.au \
--cc=monstr@monstr.eu \
--cc=sfr@canb.auug.org.au \
--cc=sparclinux@vger.kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox