diff options
| author | Geert Uytterhoeven <geert@linux-m68k.org> | 2011-04-24 23:19:05 +0200 | 
|---|---|---|
| committer | Geert Uytterhoeven <geert@linux-m68k.org> | 2011-07-30 21:21:38 +0200 | 
| commit | 3a17bfa4fb37e7f8e06ef31feafec559bd4c6699 (patch) | |
| tree | df5d877a6da920b5acbefddd4951c5e197c16343 /arch/m68k/amiga | |
| parent | b4f6f45302a9440e26f71dab0b95906bcc3bd13a (diff) | |
| download | linux-3a17bfa4fb37e7f8e06ef31feafec559bd4c6699.tar.bz2 | |
m68k/amiga: Chip RAM - Always allocate from the start of memory
As of commit 5df1abdbd37af2ae317a1c5b5944173284dc55d6 ('m68k/amiga: Fix
"debug=mem"'), "debug=mem" no longer uses amiga_chip_alloc_res(), so we
can remove the hack to prefer memory at the safe end.
This allows to simplify the code and make amiga_chip_alloc() just call
amiga_chip_alloc_res() internally.
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
Diffstat (limited to 'arch/m68k/amiga')
| -rw-r--r-- | arch/m68k/amiga/chipram.c | 35 | 
1 files changed, 15 insertions, 20 deletions
| diff --git a/arch/m68k/amiga/chipram.c b/arch/m68k/amiga/chipram.c index 9005fa07f2e2..e5a8dbc9abaf 100644 --- a/arch/m68k/amiga/chipram.c +++ b/arch/m68k/amiga/chipram.c @@ -43,24 +43,20 @@ void __init amiga_chip_init(void)  void *amiga_chip_alloc(unsigned long size, const char *name)  {  	struct resource *res; +	void *p; -	/* round up */ -	size = PAGE_ALIGN(size); - -	pr_debug("amiga_chip_alloc: allocate %lu bytes\n", size);  	res = kzalloc(sizeof(struct resource), GFP_KERNEL);  	if (!res)  		return NULL; -	res->name = name; -	if (allocate_resource(&chipram_res, res, size, 0, UINT_MAX, PAGE_SIZE, -			      NULL, NULL) < 0) { +	res->name = name; +	p = amiga_chip_alloc_res(size, res); +	if (!p) {  		kfree(res);  		return NULL;  	} -	chipavail -= size; -	pr_debug("amiga_chip_alloc: returning %pR\n", res); -	return (void *)ZTWO_VADDR(res->start); + +	return p;  }  EXPORT_SYMBOL(amiga_chip_alloc); @@ -72,23 +68,22 @@ EXPORT_SYMBOL(amiga_chip_alloc);  	 *  those drivers must not free that Chip RAM afterwards.  	 */ -void * __init amiga_chip_alloc_res(unsigned long size, struct resource *res) +void *amiga_chip_alloc_res(unsigned long size, struct resource *res)  { -	unsigned long start; +	int error;  	/* round up */  	size = PAGE_ALIGN(size); -	/* dmesg into chipmem prefers memory at the safe end */ -	start = CHIP_PHYSADDR + chipavail - size;  	pr_debug("amiga_chip_alloc_res: allocate %lu bytes\n", size); -	if (allocate_resource(&chipram_res, res, size, start, UINT_MAX, -			      PAGE_SIZE, NULL, NULL) < 0) { -		pr_err("amiga_chip_alloc_res: first alloc failed!\n"); -		if (allocate_resource(&chipram_res, res, size, 0, UINT_MAX, -				      PAGE_SIZE, NULL, NULL) < 0) -			return NULL; +	error = allocate_resource(&chipram_res, res, size, 0, UINT_MAX, +				  PAGE_SIZE, NULL, NULL); +	if (error < 0) { +		pr_err("amiga_chip_alloc_res: allocate_resource() failed %d!\n", +		       error); +		return NULL;  	} +  	chipavail -= size;  	pr_debug("amiga_chip_alloc_res: returning %pR\n", res);  	return (void *)ZTWO_VADDR(res->start); |