diff options
Diffstat (limited to 'arch/powerpc/platforms/pseries/hotplug-memory.c')
| -rw-r--r-- | arch/powerpc/platforms/pseries/hotplug-memory.c | 45 | 
1 files changed, 10 insertions, 35 deletions
| diff --git a/arch/powerpc/platforms/pseries/hotplug-memory.c b/arch/powerpc/platforms/pseries/hotplug-memory.c index 2e3a317722a8..9c62c2c3b3d0 100644 --- a/arch/powerpc/platforms/pseries/hotplug-memory.c +++ b/arch/powerpc/platforms/pseries/hotplug-memory.c @@ -311,11 +311,8 @@ out:  static int pseries_remove_mem_node(struct device_node *np)  { -	const __be32 *prop; -	unsigned long base; -	unsigned long lmb_size; -	int ret = -EINVAL; -	int addr_cells, size_cells; +	int ret; +	struct resource res;  	/*  	 * Check to see if we are actually removing memory @@ -326,21 +323,11 @@ static int pseries_remove_mem_node(struct device_node *np)  	/*  	 * Find the base address and size of the memblock  	 */ -	prop = of_get_property(np, "reg", NULL); -	if (!prop) +	ret = of_address_to_resource(np, 0, &res); +	if (ret)  		return ret; -	addr_cells = of_n_addr_cells(np); -	size_cells = of_n_size_cells(np); - -	/* -	 * "reg" property represents (addr,size) tuple. -	 */ -	base = of_read_number(prop, addr_cells); -	prop += addr_cells; -	lmb_size = of_read_number(prop, size_cells); - -	pseries_remove_memblock(base, lmb_size); +	pseries_remove_memblock(res.start, resource_size(&res));  	return 0;  } @@ -929,11 +916,8 @@ int dlpar_memory(struct pseries_hp_errorlog *hp_elog)  static int pseries_add_mem_node(struct device_node *np)  { -	const __be32 *prop; -	unsigned long base; -	unsigned long lmb_size; -	int ret = -EINVAL; -	int addr_cells, size_cells; +	int ret; +	struct resource res;  	/*  	 * Check to see if we are actually adding memory @@ -944,23 +928,14 @@ static int pseries_add_mem_node(struct device_node *np)  	/*  	 * Find the base and size of the memblock  	 */ -	prop = of_get_property(np, "reg", NULL); -	if (!prop) +	ret = of_address_to_resource(np, 0, &res); +	if (ret)  		return ret; -	addr_cells = of_n_addr_cells(np); -	size_cells = of_n_size_cells(np); -	/* -	 * "reg" property represents (addr,size) tuple. -	 */ -	base = of_read_number(prop, addr_cells); -	prop += addr_cells; -	lmb_size = of_read_number(prop, size_cells); -  	/*  	 * Update memory region to represent the memory add  	 */ -	ret = memblock_add(base, lmb_size); +	ret = memblock_add(res.start, resource_size(&res));  	return (ret < 0) ? -EINVAL : 0;  } | 
