diff options
Diffstat (limited to 'arch/sparc/kernel/prom_common.c')
| -rw-r--r-- | arch/sparc/kernel/prom_common.c | 12 | 
1 files changed, 5 insertions, 7 deletions
diff --git a/arch/sparc/kernel/prom_common.c b/arch/sparc/kernel/prom_common.c index ed25834328f..79cc0d1a477 100644 --- a/arch/sparc/kernel/prom_common.c +++ b/arch/sparc/kernel/prom_common.c @@ -15,7 +15,7 @@   */  #include <linux/kernel.h> -#include <linux/module.h> +#include <linux/export.h>  #include <linux/errno.h>  #include <linux/mutex.h>  #include <linux/slab.h> @@ -23,7 +23,6 @@  #include <linux/of_pdt.h>  #include <asm/prom.h>  #include <asm/oplib.h> -#include <asm/leon.h>  #include "prom.h" @@ -55,19 +54,18 @@ EXPORT_SYMBOL(of_set_property_mutex);  int of_set_property(struct device_node *dp, const char *name, void *val, int len)  {  	struct property **prevp; +	unsigned long flags;  	void *new_val;  	int err; -	new_val = kmalloc(len, GFP_KERNEL); +	new_val = kmemdup(val, len, GFP_KERNEL);  	if (!new_val)  		return -ENOMEM; -	memcpy(new_val, val, len); -  	err = -ENODEV;  	mutex_lock(&of_set_property_mutex); -	write_lock(&devtree_lock); +	raw_spin_lock_irqsave(&devtree_lock, flags);  	prevp = &dp->properties;  	while (*prevp) {  		struct property *prop = *prevp; @@ -94,7 +92,7 @@ int of_set_property(struct device_node *dp, const char *name, void *val, int len  		}  		prevp = &(*prevp)->next;  	} -	write_unlock(&devtree_lock); +	raw_spin_unlock_irqrestore(&devtree_lock, flags);  	mutex_unlock(&of_set_property_mutex);  	/* XXX Upate procfs if necessary... */  | 
