aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390/kernel/smp.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/s390/kernel/smp.c')
-rw-r--r--arch/s390/kernel/smp.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c
index a6d85c0a7f20..70f4b9604575 100644
--- a/arch/s390/kernel/smp.c
+++ b/arch/s390/kernel/smp.c
@@ -468,6 +468,11 @@ int __cpuinit start_secondary(void *cpuvoid)
468 ipi_call_lock(); 468 ipi_call_lock();
469 set_cpu_online(smp_processor_id(), true); 469 set_cpu_online(smp_processor_id(), true);
470 ipi_call_unlock(); 470 ipi_call_unlock();
471 __ctl_clear_bit(0, 28); /* Disable lowcore protection */
472 S390_lowcore.restart_psw.mask = PSW_BASE_BITS | PSW_DEFAULT_KEY;
473 S390_lowcore.restart_psw.addr =
474 PSW_ADDR_AMODE | (unsigned long) psw_restart_int_handler;
475 __ctl_set_bit(0, 28); /* Enable lowcore protection */
471 /* Switch on interrupts */ 476 /* Switch on interrupts */
472 local_irq_enable(); 477 local_irq_enable();
473 /* cpu_idle will call schedule for us */ 478 /* cpu_idle will call schedule for us */
@@ -507,7 +512,11 @@ static int __cpuinit smp_alloc_lowcore(int cpu)
507 memset((char *)lowcore + 512, 0, sizeof(*lowcore) - 512); 512 memset((char *)lowcore + 512, 0, sizeof(*lowcore) - 512);
508 lowcore->async_stack = async_stack + ASYNC_SIZE; 513 lowcore->async_stack = async_stack + ASYNC_SIZE;
509 lowcore->panic_stack = panic_stack + PAGE_SIZE; 514 lowcore->panic_stack = panic_stack + PAGE_SIZE;
510 515 lowcore->restart_psw.mask = PSW_BASE_BITS | PSW_DEFAULT_KEY;
516 lowcore->restart_psw.addr =
517 PSW_ADDR_AMODE | (unsigned long) restart_int_handler;
518 if (user_mode != HOME_SPACE_MODE)
519 lowcore->restart_psw.mask |= PSW_ASC_HOME;
511#ifndef CONFIG_64BIT 520#ifndef CONFIG_64BIT
512 if (MACHINE_HAS_IEEE) { 521 if (MACHINE_HAS_IEEE) {
513 unsigned long save_area; 522 unsigned long save_area;