[S390] smp: introduce LC_ORDER and simplify lowcore handling

Removes a couple of simple code duplications. But before I have to do
this again, just simplify it.

Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
Heiko Carstens 2009-09-22 22:58:49 +02:00 committed by Martin Schwidefsky
parent 07805ac81c
commit 3fd26a7793
2 changed files with 10 additions and 10 deletions
arch/s390
include/asm
kernel

@ -189,6 +189,12 @@ union save_area {
#define SAVE_AREA_BASE SAVE_AREA_BASE_S390X #define SAVE_AREA_BASE SAVE_AREA_BASE_S390X
#endif #endif
#ifndef __s390x__
#define LC_ORDER 0
#else
#define LC_ORDER 1
#endif
struct _lowcore struct _lowcore
{ {
#ifndef __s390x__ #ifndef __s390x__

@ -475,10 +475,8 @@ static int __cpuinit smp_alloc_lowcore(int cpu)
{ {
unsigned long async_stack, panic_stack; unsigned long async_stack, panic_stack;
struct _lowcore *lowcore; struct _lowcore *lowcore;
int lc_order;
lc_order = sizeof(long) == 8 ? 1 : 0; lowcore = (void *) __get_free_pages(GFP_KERNEL | GFP_DMA, LC_ORDER);
lowcore = (void *) __get_free_pages(GFP_KERNEL | GFP_DMA, lc_order);
if (!lowcore) if (!lowcore)
return -ENOMEM; return -ENOMEM;
async_stack = __get_free_pages(GFP_KERNEL, ASYNC_ORDER); async_stack = __get_free_pages(GFP_KERNEL, ASYNC_ORDER);
@ -509,16 +507,14 @@ static int __cpuinit smp_alloc_lowcore(int cpu)
out: out:
free_page(panic_stack); free_page(panic_stack);
free_pages(async_stack, ASYNC_ORDER); free_pages(async_stack, ASYNC_ORDER);
free_pages((unsigned long) lowcore, lc_order); free_pages((unsigned long) lowcore, LC_ORDER);
return -ENOMEM; return -ENOMEM;
} }
static void smp_free_lowcore(int cpu) static void smp_free_lowcore(int cpu)
{ {
struct _lowcore *lowcore; struct _lowcore *lowcore;
int lc_order;
lc_order = sizeof(long) == 8 ? 1 : 0;
lowcore = lowcore_ptr[cpu]; lowcore = lowcore_ptr[cpu];
#ifndef CONFIG_64BIT #ifndef CONFIG_64BIT
if (MACHINE_HAS_IEEE) if (MACHINE_HAS_IEEE)
@ -528,7 +524,7 @@ static void smp_free_lowcore(int cpu)
#endif #endif
free_page(lowcore->panic_stack - PAGE_SIZE); free_page(lowcore->panic_stack - PAGE_SIZE);
free_pages(lowcore->async_stack - ASYNC_SIZE, ASYNC_ORDER); free_pages(lowcore->async_stack - ASYNC_SIZE, ASYNC_ORDER);
free_pages((unsigned long) lowcore, lc_order); free_pages((unsigned long) lowcore, LC_ORDER);
lowcore_ptr[cpu] = NULL; lowcore_ptr[cpu] = NULL;
} }
@ -664,7 +660,6 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
unsigned long async_stack, panic_stack; unsigned long async_stack, panic_stack;
struct _lowcore *lowcore; struct _lowcore *lowcore;
unsigned int cpu; unsigned int cpu;
int lc_order;
smp_detect_cpus(); smp_detect_cpus();
@ -674,8 +669,7 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
print_cpu_info(); print_cpu_info();
/* Reallocate current lowcore, but keep its contents. */ /* Reallocate current lowcore, but keep its contents. */
lc_order = sizeof(long) == 8 ? 1 : 0; lowcore = (void *) __get_free_pages(GFP_KERNEL | GFP_DMA, LC_ORDER);
lowcore = (void *) __get_free_pages(GFP_KERNEL | GFP_DMA, lc_order);
panic_stack = __get_free_page(GFP_KERNEL); panic_stack = __get_free_page(GFP_KERNEL);
async_stack = __get_free_pages(GFP_KERNEL, ASYNC_ORDER); async_stack = __get_free_pages(GFP_KERNEL, ASYNC_ORDER);
BUG_ON(!lowcore || !panic_stack || !async_stack); BUG_ON(!lowcore || !panic_stack || !async_stack);