diff options
author | Ingo Molnar <mingo@elte.hu> | 2009-09-20 14:24:58 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-09-20 14:25:03 -0400 |
commit | bfefb7a0c6e08736f2d5917c468467f134bf28bb (patch) | |
tree | 7aa7084114dc083fe5b4d7b532901bdeb67188e7 /arch/ia64/kernel/mca_asm.S | |
parent | 8d0cc631f6dd0a9283ceb7d61d8b85ecbcd355ea (diff) | |
parent | 78f28b7c555359c67c2a0d23f7436e915329421e (diff) |
Merge branch 'linus' into x86/urgent
Merge reason: Bring in changes that the next patch will depend on.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/ia64/kernel/mca_asm.S')
-rw-r--r-- | arch/ia64/kernel/mca_asm.S | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/arch/ia64/kernel/mca_asm.S b/arch/ia64/kernel/mca_asm.S index a06d46548ff9..7461d2573d41 100644 --- a/arch/ia64/kernel/mca_asm.S +++ b/arch/ia64/kernel/mca_asm.S | |||
@@ -40,6 +40,7 @@ | |||
40 | 40 | ||
41 | .global ia64_do_tlb_purge | 41 | .global ia64_do_tlb_purge |
42 | .global ia64_os_mca_dispatch | 42 | .global ia64_os_mca_dispatch |
43 | .global ia64_os_init_on_kdump | ||
43 | .global ia64_os_init_dispatch_monarch | 44 | .global ia64_os_init_dispatch_monarch |
44 | .global ia64_os_init_dispatch_slave | 45 | .global ia64_os_init_dispatch_slave |
45 | 46 | ||
@@ -299,6 +300,25 @@ END(ia64_os_mca_virtual_begin) | |||
299 | //StartMain//////////////////////////////////////////////////////////////////// | 300 | //StartMain//////////////////////////////////////////////////////////////////// |
300 | 301 | ||
301 | // | 302 | // |
303 | // NOP init handler for kdump. In panic situation, we may receive INIT | ||
304 | // while kernel transition. Since we initialize registers on leave from | ||
305 | // current kernel, no longer monarch/slave handlers of current kernel in | ||
306 | // virtual mode are called safely. | ||
307 | // We can unregister these init handlers from SAL, however then the INIT | ||
308 | // will result in warmboot by SAL and we cannot retrieve the crashdump. | ||
309 | // Therefore register this NOP function to SAL, to prevent entering virtual | ||
310 | // mode and resulting warmboot by SAL. | ||
311 | // | ||
312 | ia64_os_init_on_kdump: | ||
313 | mov r8=r0 // IA64_INIT_RESUME | ||
314 | mov r9=r10 // SAL_GP | ||
315 | mov r22=r17 // *minstate | ||
316 | ;; | ||
317 | mov r10=r0 // return to same context | ||
318 | mov b0=r12 // SAL_CHECK return address | ||
319 | br b0 | ||
320 | |||
321 | // | ||
302 | // SAL to OS entry point for INIT on all processors. This has been defined for | 322 | // SAL to OS entry point for INIT on all processors. This has been defined for |
303 | // registration purposes with SAL as a part of ia64_mca_init. Monarch and | 323 | // registration purposes with SAL as a part of ia64_mca_init. Monarch and |
304 | // slave INIT have identical processing, except for the value of the | 324 | // slave INIT have identical processing, except for the value of the |
@@ -1073,3 +1093,30 @@ GLOBAL_ENTRY(ia64_get_rnat) | |||
1073 | mov ar.rsc=3 | 1093 | mov ar.rsc=3 |
1074 | br.ret.sptk.many rp | 1094 | br.ret.sptk.many rp |
1075 | END(ia64_get_rnat) | 1095 | END(ia64_get_rnat) |
1096 | |||
1097 | |||
1098 | // void ia64_set_psr_mc(void) | ||
1099 | // | ||
1100 | // Set psr.mc bit to mask MCA/INIT. | ||
1101 | GLOBAL_ENTRY(ia64_set_psr_mc) | ||
1102 | rsm psr.i | psr.ic // disable interrupts | ||
1103 | ;; | ||
1104 | srlz.d | ||
1105 | ;; | ||
1106 | mov r14 = psr // get psr{36:35,31:0} | ||
1107 | movl r15 = 1f | ||
1108 | ;; | ||
1109 | dep r14 = -1, r14, PSR_MC, 1 // set psr.mc | ||
1110 | ;; | ||
1111 | dep r14 = -1, r14, PSR_IC, 1 // set psr.ic | ||
1112 | ;; | ||
1113 | dep r14 = -1, r14, PSR_BN, 1 // keep bank1 in use | ||
1114 | ;; | ||
1115 | mov cr.ipsr = r14 | ||
1116 | mov cr.ifs = r0 | ||
1117 | mov cr.iip = r15 | ||
1118 | ;; | ||
1119 | rfi | ||
1120 | 1: | ||
1121 | br.ret.sptk.many rp | ||
1122 | END(ia64_set_psr_mc) | ||