diff options
author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2005-11-07 14:29:02 +1100 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2005-11-08 11:17:40 +1100 |
commit | 183d020258dfd08178a05c6793dae10409db8abb (patch) | |
tree | 5b20bc62709c94bd63e17d800544140213eaf0f5 /arch/ppc64 | |
parent | 4350147a816b9c5b40fa59e4fa23f17490630b79 (diff) | |
download | blackbird-op-linux-183d020258dfd08178a05c6793dae10409db8abb.tar.gz blackbird-op-linux-183d020258dfd08178a05c6793dae10409db8abb.zip |
[PATCH] ppc64: SMU partition recovery
This patch adds the ability to the SMU driver to recover missing
calibration partitions from the SMU chip itself. It also adds some
dynamic mecanism to /proc/device-tree so that new properties are visible
to userland.
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/ppc64')
-rw-r--r-- | arch/ppc64/kernel/prom.c | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/arch/ppc64/kernel/prom.c b/arch/ppc64/kernel/prom.c index 0e8961dea3bc..3402fbee62c7 100644 --- a/arch/ppc64/kernel/prom.c +++ b/arch/ppc64/kernel/prom.c @@ -31,6 +31,7 @@ #include <linux/initrd.h> #include <linux/bitops.h> #include <linux/module.h> +#include <linux/module.h> #include <asm/prom.h> #include <asm/rtas.h> @@ -1865,17 +1866,32 @@ get_property(struct device_node *np, const char *name, int *lenp) EXPORT_SYMBOL(get_property); /* - * Add a property to a node + * Add a property to a node. */ -void +int prom_add_property(struct device_node* np, struct property* prop) { - struct property **next = &np->properties; + struct property **next; prop->next = NULL; - while (*next) + write_lock(&devtree_lock); + next = &np->properties; + while (*next) { + if (strcmp(prop->name, (*next)->name) == 0) { + /* duplicate ! don't insert it */ + write_unlock(&devtree_lock); + return -1; + } next = &(*next)->next; + } *next = prop; + write_unlock(&devtree_lock); + + /* try to add to proc as well if it was initialized */ + if (np->pde) + proc_device_tree_add_prop(np->pde, prop); + + return 0; } #if 0 |