powerpc/kernel: Open code HMT_MEDIUM_LOW_HAS_PPR
[cascardo/linux.git] / arch / powerpc / kernel / entry_64.S
1 /*
2  *  PowerPC version 
3  *    Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org)
4  *  Rewritten by Cort Dougan (cort@cs.nmt.edu) for PReP
5  *    Copyright (C) 1996 Cort Dougan <cort@cs.nmt.edu>
6  *  Adapted for Power Macintosh by Paul Mackerras.
7  *  Low-level exception handlers and MMU support
8  *  rewritten by Paul Mackerras.
9  *    Copyright (C) 1996 Paul Mackerras.
10  *  MPC8xx modifications Copyright (C) 1997 Dan Malek (dmalek@jlc.net).
11  *
12  *  This file contains the system call entry code, context switch
13  *  code, and exception/interrupt return code for PowerPC.
14  *
15  *  This program is free software; you can redistribute it and/or
16  *  modify it under the terms of the GNU General Public License
17  *  as published by the Free Software Foundation; either version
18  *  2 of the License, or (at your option) any later version.
19  */
20
21 #include <linux/errno.h>
22 #include <linux/err.h>
23 #include <asm/unistd.h>
24 #include <asm/processor.h>
25 #include <asm/page.h>
26 #include <asm/mmu.h>
27 #include <asm/thread_info.h>
28 #include <asm/ppc_asm.h>
29 #include <asm/asm-offsets.h>
30 #include <asm/cputable.h>
31 #include <asm/firmware.h>
32 #include <asm/bug.h>
33 #include <asm/ptrace.h>
34 #include <asm/irqflags.h>
35 #include <asm/ftrace.h>
36 #include <asm/hw_irq.h>
37 #include <asm/context_tracking.h>
38 #include <asm/tm.h>
39
40 /*
41  * System calls.
42  */
43         .section        ".toc","aw"
44 SYS_CALL_TABLE:
45         .tc sys_call_table[TC],sys_call_table
46
47 /* This value is used to mark exception frames on the stack. */
48 exception_marker:
49         .tc     ID_EXC_MARKER[TC],STACK_FRAME_REGS_MARKER
50
51         .section        ".text"
52         .align 7
53
54         .globl system_call_common
55 system_call_common:
56 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
57 BEGIN_FTR_SECTION
58         extrdi. r10, r12, 1, (63-MSR_TS_T_LG) /* transaction active? */
59         bne     tabort_syscall
60 END_FTR_SECTION_IFSET(CPU_FTR_TM)
61 #endif
62         andi.   r10,r12,MSR_PR
63         mr      r10,r1
64         addi    r1,r1,-INT_FRAME_SIZE
65         beq-    1f
66         ld      r1,PACAKSAVE(r13)
67 1:      std     r10,0(r1)
68         std     r11,_NIP(r1)
69         std     r12,_MSR(r1)
70         std     r0,GPR0(r1)
71         std     r10,GPR1(r1)
72         beq     2f                      /* if from kernel mode */
73         ACCOUNT_CPU_USER_ENTRY(r10, r11)
74 2:      std     r2,GPR2(r1)
75         std     r3,GPR3(r1)
76         mfcr    r2
77         std     r4,GPR4(r1)
78         std     r5,GPR5(r1)
79         std     r6,GPR6(r1)
80         std     r7,GPR7(r1)
81         std     r8,GPR8(r1)
82         li      r11,0
83         std     r11,GPR9(r1)
84         std     r11,GPR10(r1)
85         std     r11,GPR11(r1)
86         std     r11,GPR12(r1)
87         std     r11,_XER(r1)
88         std     r11,_CTR(r1)
89         std     r9,GPR13(r1)
90         mflr    r10
91         /*
92          * This clears CR0.SO (bit 28), which is the error indication on
93          * return from this system call.
94          */
95         rldimi  r2,r11,28,(63-28)
96         li      r11,0xc01
97         std     r10,_LINK(r1)
98         std     r11,_TRAP(r1)
99         std     r3,ORIG_GPR3(r1)
100         std     r2,_CCR(r1)
101         ld      r2,PACATOC(r13)
102         addi    r9,r1,STACK_FRAME_OVERHEAD
103         ld      r11,exception_marker@toc(r2)
104         std     r11,-16(r9)             /* "regshere" marker */
105 #if defined(CONFIG_VIRT_CPU_ACCOUNTING_NATIVE) && defined(CONFIG_PPC_SPLPAR)
106 BEGIN_FW_FTR_SECTION
107         beq     33f
108         /* if from user, see if there are any DTL entries to process */
109         ld      r10,PACALPPACAPTR(r13)  /* get ptr to VPA */
110         ld      r11,PACA_DTL_RIDX(r13)  /* get log read index */
111         addi    r10,r10,LPPACA_DTLIDX
112         LDX_BE  r10,0,r10               /* get log write index */
113         cmpd    cr1,r11,r10
114         beq+    cr1,33f
115         bl      accumulate_stolen_time
116         REST_GPR(0,r1)
117         REST_4GPRS(3,r1)
118         REST_2GPRS(7,r1)
119         addi    r9,r1,STACK_FRAME_OVERHEAD
120 33:
121 END_FW_FTR_SECTION_IFSET(FW_FEATURE_SPLPAR)
122 #endif /* CONFIG_VIRT_CPU_ACCOUNTING_NATIVE && CONFIG_PPC_SPLPAR */
123
124         /*
125          * A syscall should always be called with interrupts enabled
126          * so we just unconditionally hard-enable here. When some kind
127          * of irq tracing is used, we additionally check that condition
128          * is correct
129          */
130 #if defined(CONFIG_TRACE_IRQFLAGS) && defined(CONFIG_BUG)
131         lbz     r10,PACASOFTIRQEN(r13)
132         xori    r10,r10,1
133 1:      tdnei   r10,0
134         EMIT_BUG_ENTRY 1b,__FILE__,__LINE__,BUGFLAG_WARNING
135 #endif
136
137 #ifdef CONFIG_PPC_BOOK3E
138         wrteei  1
139 #else
140         ld      r11,PACAKMSR(r13)
141         ori     r11,r11,MSR_EE
142         mtmsrd  r11,1
143 #endif /* CONFIG_PPC_BOOK3E */
144
145         /* We do need to set SOFTE in the stack frame or the return
146          * from interrupt will be painful
147          */
148         li      r10,1
149         std     r10,SOFTE(r1)
150
151         CURRENT_THREAD_INFO(r11, r1)
152         ld      r10,TI_FLAGS(r11)
153         andi.   r11,r10,_TIF_SYSCALL_DOTRACE
154         bne     syscall_dotrace         /* does not return */
155         cmpldi  0,r0,NR_syscalls
156         bge-    syscall_enosys
157
158 system_call:                    /* label this so stack traces look sane */
159 /*
160  * Need to vector to 32 Bit or default sys_call_table here,
161  * based on caller's run-mode / personality.
162  */
163         ld      r11,SYS_CALL_TABLE@toc(2)
164         andi.   r10,r10,_TIF_32BIT
165         beq     15f
166         addi    r11,r11,8       /* use 32-bit syscall entries */
167         clrldi  r3,r3,32
168         clrldi  r4,r4,32
169         clrldi  r5,r5,32
170         clrldi  r6,r6,32
171         clrldi  r7,r7,32
172         clrldi  r8,r8,32
173 15:
174         slwi    r0,r0,4
175         ldx     r12,r11,r0      /* Fetch system call handler [ptr] */
176         mtctr   r12
177         bctrl                   /* Call handler */
178
179 .Lsyscall_exit:
180         std     r3,RESULT(r1)
181         CURRENT_THREAD_INFO(r12, r1)
182
183         ld      r8,_MSR(r1)
184 #ifdef CONFIG_PPC_BOOK3S
185         /* No MSR:RI on BookE */
186         andi.   r10,r8,MSR_RI
187         beq-    unrecov_restore
188 #endif
189         /*
190          * Disable interrupts so current_thread_info()->flags can't change,
191          * and so that we don't get interrupted after loading SRR0/1.
192          */
193 #ifdef CONFIG_PPC_BOOK3E
194         wrteei  0
195 #else
196         ld      r10,PACAKMSR(r13)
197         /*
198          * For performance reasons we clear RI the same time that we
199          * clear EE. We only need to clear RI just before we restore r13
200          * below, but batching it with EE saves us one expensive mtmsrd call.
201          * We have to be careful to restore RI if we branch anywhere from
202          * here (eg syscall_exit_work).
203          */
204         li      r9,MSR_RI
205         andc    r11,r10,r9
206         mtmsrd  r11,1
207 #endif /* CONFIG_PPC_BOOK3E */
208
209         ld      r9,TI_FLAGS(r12)
210         li      r11,-MAX_ERRNO
211         andi.   r0,r9,(_TIF_SYSCALL_DOTRACE|_TIF_SINGLESTEP|_TIF_USER_WORK_MASK|_TIF_PERSYSCALL_MASK)
212         bne-    syscall_exit_work
213         cmpld   r3,r11
214         ld      r5,_CCR(r1)
215         bge-    syscall_error
216 .Lsyscall_error_cont:
217         ld      r7,_NIP(r1)
218 BEGIN_FTR_SECTION
219         stdcx.  r0,0,r1                 /* to clear the reservation */
220 END_FTR_SECTION_IFCLR(CPU_FTR_STCX_CHECKS_ADDRESS)
221         andi.   r6,r8,MSR_PR
222         ld      r4,_LINK(r1)
223
224         beq-    1f
225         ACCOUNT_CPU_USER_EXIT(r11, r12)
226
227 BEGIN_FTR_SECTION
228         HMT_MEDIUM_LOW
229 END_FTR_SECTION_IFSET(CPU_FTR_HAS_PPR)
230
231         ld      r13,GPR13(r1)   /* only restore r13 if returning to usermode */
232 1:      ld      r2,GPR2(r1)
233         ld      r1,GPR1(r1)
234         mtlr    r4
235         mtcr    r5
236         mtspr   SPRN_SRR0,r7
237         mtspr   SPRN_SRR1,r8
238         RFI
239         b       .       /* prevent speculative execution */
240
241 syscall_error:  
242         oris    r5,r5,0x1000    /* Set SO bit in CR */
243         neg     r3,r3
244         std     r5,_CCR(r1)
245         b       .Lsyscall_error_cont
246         
247 /* Traced system call support */
248 syscall_dotrace:
249         bl      save_nvgprs
250         addi    r3,r1,STACK_FRAME_OVERHEAD
251         bl      do_syscall_trace_enter
252
253         /*
254          * We use the return value of do_syscall_trace_enter() as the syscall
255          * number. If the syscall was rejected for any reason do_syscall_trace_enter()
256          * returns an invalid syscall number and the test below against
257          * NR_syscalls will fail.
258          */
259         mr      r0,r3
260
261         /* Restore argument registers just clobbered and/or possibly changed. */
262         ld      r3,GPR3(r1)
263         ld      r4,GPR4(r1)
264         ld      r5,GPR5(r1)
265         ld      r6,GPR6(r1)
266         ld      r7,GPR7(r1)
267         ld      r8,GPR8(r1)
268
269         /* Repopulate r9 and r10 for the system_call path */
270         addi    r9,r1,STACK_FRAME_OVERHEAD
271         CURRENT_THREAD_INFO(r10, r1)
272         ld      r10,TI_FLAGS(r10)
273
274         cmpldi  r0,NR_syscalls
275         blt+    system_call
276
277         /* Return code is already in r3 thanks to do_syscall_trace_enter() */
278         b       .Lsyscall_exit
279
280
281 syscall_enosys:
282         li      r3,-ENOSYS
283         b       .Lsyscall_exit
284         
285 syscall_exit_work:
286 #ifdef CONFIG_PPC_BOOK3S
287         mtmsrd  r10,1           /* Restore RI */
288 #endif
289         /* If TIF_RESTOREALL is set, don't scribble on either r3 or ccr.
290          If TIF_NOERROR is set, just save r3 as it is. */
291
292         andi.   r0,r9,_TIF_RESTOREALL
293         beq+    0f
294         REST_NVGPRS(r1)
295         b       2f
296 0:      cmpld   r3,r11          /* r11 is -MAX_ERRNO */
297         blt+    1f
298         andi.   r0,r9,_TIF_NOERROR
299         bne-    1f
300         ld      r5,_CCR(r1)
301         neg     r3,r3
302         oris    r5,r5,0x1000    /* Set SO bit in CR */
303         std     r5,_CCR(r1)
304 1:      std     r3,GPR3(r1)
305 2:      andi.   r0,r9,(_TIF_PERSYSCALL_MASK)
306         beq     4f
307
308         /* Clear per-syscall TIF flags if any are set.  */
309
310         li      r11,_TIF_PERSYSCALL_MASK
311         addi    r12,r12,TI_FLAGS
312 3:      ldarx   r10,0,r12
313         andc    r10,r10,r11
314         stdcx.  r10,0,r12
315         bne-    3b
316         subi    r12,r12,TI_FLAGS
317
318 4:      /* Anything else left to do? */
319         SET_DEFAULT_THREAD_PPR(r3, r10)         /* Set thread.ppr = 3 */
320         andi.   r0,r9,(_TIF_SYSCALL_DOTRACE|_TIF_SINGLESTEP)
321         beq     ret_from_except_lite
322
323         /* Re-enable interrupts */
324 #ifdef CONFIG_PPC_BOOK3E
325         wrteei  1
326 #else
327         ld      r10,PACAKMSR(r13)
328         ori     r10,r10,MSR_EE
329         mtmsrd  r10,1
330 #endif /* CONFIG_PPC_BOOK3E */
331
332         bl      save_nvgprs
333         addi    r3,r1,STACK_FRAME_OVERHEAD
334         bl      do_syscall_trace_leave
335         b       ret_from_except
336
337 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
338 tabort_syscall:
339         /* Firstly we need to enable TM in the kernel */
340         mfmsr   r10
341         li      r13, 1
342         rldimi  r10, r13, MSR_TM_LG, 63-MSR_TM_LG
343         mtmsrd  r10, 0
344
345         /* tabort, this dooms the transaction, nothing else */
346         li      r13, (TM_CAUSE_SYSCALL|TM_CAUSE_PERSISTENT)
347         TABORT(R13)
348
349         /*
350          * Return directly to userspace. We have corrupted user register state,
351          * but userspace will never see that register state. Execution will
352          * resume after the tbegin of the aborted transaction with the
353          * checkpointed register state.
354          */
355         li      r13, MSR_RI
356         andc    r10, r10, r13
357         mtmsrd  r10, 1
358         mtspr   SPRN_SRR0, r11
359         mtspr   SPRN_SRR1, r12
360
361         rfid
362         b       .       /* prevent speculative execution */
363 #endif
364
365 /* Save non-volatile GPRs, if not already saved. */
366 _GLOBAL(save_nvgprs)
367         ld      r11,_TRAP(r1)
368         andi.   r0,r11,1
369         beqlr-
370         SAVE_NVGPRS(r1)
371         clrrdi  r0,r11,1
372         std     r0,_TRAP(r1)
373         blr
374
375         
376 /*
377  * The sigsuspend and rt_sigsuspend system calls can call do_signal
378  * and thus put the process into the stopped state where we might
379  * want to examine its user state with ptrace.  Therefore we need
380  * to save all the nonvolatile registers (r14 - r31) before calling
381  * the C code.  Similarly, fork, vfork and clone need the full
382  * register state on the stack so that it can be copied to the child.
383  */
384
385 _GLOBAL(ppc_fork)
386         bl      save_nvgprs
387         bl      sys_fork
388         b       .Lsyscall_exit
389
390 _GLOBAL(ppc_vfork)
391         bl      save_nvgprs
392         bl      sys_vfork
393         b       .Lsyscall_exit
394
395 _GLOBAL(ppc_clone)
396         bl      save_nvgprs
397         bl      sys_clone
398         b       .Lsyscall_exit
399
400 _GLOBAL(ppc32_swapcontext)
401         bl      save_nvgprs
402         bl      compat_sys_swapcontext
403         b       .Lsyscall_exit
404
405 _GLOBAL(ppc64_swapcontext)
406         bl      save_nvgprs
407         bl      sys_swapcontext
408         b       .Lsyscall_exit
409
410 _GLOBAL(ppc_switch_endian)
411         bl      save_nvgprs
412         bl      sys_switch_endian
413         b       .Lsyscall_exit
414
415 _GLOBAL(ret_from_fork)
416         bl      schedule_tail
417         REST_NVGPRS(r1)
418         li      r3,0
419         b       .Lsyscall_exit
420
421 _GLOBAL(ret_from_kernel_thread)
422         bl      schedule_tail
423         REST_NVGPRS(r1)
424         mtlr    r14
425         mr      r3,r15
426 #if defined(_CALL_ELF) && _CALL_ELF == 2
427         mr      r12,r14
428 #endif
429         blrl
430         li      r3,0
431         b       .Lsyscall_exit
432
433 /*
434  * This routine switches between two different tasks.  The process
435  * state of one is saved on its kernel stack.  Then the state
436  * of the other is restored from its kernel stack.  The memory
437  * management hardware is updated to the second process's state.
438  * Finally, we can return to the second process, via ret_from_except.
439  * On entry, r3 points to the THREAD for the current task, r4
440  * points to the THREAD for the new task.
441  *
442  * Note: there are two ways to get to the "going out" portion
443  * of this code; either by coming in via the entry (_switch)
444  * or via "fork" which must set up an environment equivalent
445  * to the "_switch" path.  If you change this you'll have to change
446  * the fork code also.
447  *
448  * The code which creates the new task context is in 'copy_thread'
449  * in arch/powerpc/kernel/process.c 
450  */
451         .align  7
452 _GLOBAL(_switch)
453         mflr    r0
454         std     r0,16(r1)
455         stdu    r1,-SWITCH_FRAME_SIZE(r1)
456         /* r3-r13 are caller saved -- Cort */
457         SAVE_8GPRS(14, r1)
458         SAVE_10GPRS(22, r1)
459         std     r0,_NIP(r1)     /* Return to switch caller */
460         mfcr    r23
461         std     r23,_CCR(r1)
462         std     r1,KSP(r3)      /* Set old stack pointer */
463
464 #ifdef CONFIG_SMP
465         /* We need a sync somewhere here to make sure that if the
466          * previous task gets rescheduled on another CPU, it sees all
467          * stores it has performed on this one.
468          */
469         sync
470 #endif /* CONFIG_SMP */
471
472         /*
473          * If we optimise away the clear of the reservation in system
474          * calls because we know the CPU tracks the address of the
475          * reservation, then we need to clear it here to cover the
476          * case that the kernel context switch path has no larx
477          * instructions.
478          */
479 BEGIN_FTR_SECTION
480         ldarx   r6,0,r1
481 END_FTR_SECTION_IFSET(CPU_FTR_STCX_CHECKS_ADDRESS)
482
483 #ifdef CONFIG_PPC_BOOK3S
484 /* Cancel all explict user streams as they will have no use after context
485  * switch and will stop the HW from creating streams itself
486  */
487         DCBT_STOP_ALL_STREAM_IDS(r6)
488 #endif
489
490         addi    r6,r4,-THREAD   /* Convert THREAD to 'current' */
491         std     r6,PACACURRENT(r13)     /* Set new 'current' */
492
493         ld      r8,KSP(r4)      /* new stack pointer */
494 #ifdef CONFIG_PPC_BOOK3S
495 BEGIN_FTR_SECTION
496         clrrdi  r6,r8,28        /* get its ESID */
497         clrrdi  r9,r1,28        /* get current sp ESID */
498 FTR_SECTION_ELSE
499         clrrdi  r6,r8,40        /* get its 1T ESID */
500         clrrdi  r9,r1,40        /* get current sp 1T ESID */
501 ALT_MMU_FTR_SECTION_END_IFCLR(MMU_FTR_1T_SEGMENT)
502         clrldi. r0,r6,2         /* is new ESID c00000000? */
503         cmpd    cr1,r6,r9       /* or is new ESID the same as current ESID? */
504         cror    eq,4*cr1+eq,eq
505         beq     2f              /* if yes, don't slbie it */
506
507         /* Bolt in the new stack SLB entry */
508         ld      r7,KSP_VSID(r4) /* Get new stack's VSID */
509         oris    r0,r6,(SLB_ESID_V)@h
510         ori     r0,r0,(SLB_NUM_BOLTED-1)@l
511 BEGIN_FTR_SECTION
512         li      r9,MMU_SEGSIZE_1T       /* insert B field */
513         oris    r6,r6,(MMU_SEGSIZE_1T << SLBIE_SSIZE_SHIFT)@h
514         rldimi  r7,r9,SLB_VSID_SSIZE_SHIFT,0
515 END_MMU_FTR_SECTION_IFSET(MMU_FTR_1T_SEGMENT)
516
517         /* Update the last bolted SLB.  No write barriers are needed
518          * here, provided we only update the current CPU's SLB shadow
519          * buffer.
520          */
521         ld      r9,PACA_SLBSHADOWPTR(r13)
522         li      r12,0
523         std     r12,SLBSHADOW_STACKESID(r9)     /* Clear ESID */
524         li      r12,SLBSHADOW_STACKVSID
525         STDX_BE r7,r12,r9                       /* Save VSID */
526         li      r12,SLBSHADOW_STACKESID
527         STDX_BE r0,r12,r9                       /* Save ESID */
528
529         /* No need to check for MMU_FTR_NO_SLBIE_B here, since when
530          * we have 1TB segments, the only CPUs known to have the errata
531          * only support less than 1TB of system memory and we'll never
532          * actually hit this code path.
533          */
534
535         slbie   r6
536         slbie   r6              /* Workaround POWER5 < DD2.1 issue */
537         slbmte  r7,r0
538         isync
539 2:
540 #endif /* !CONFIG_PPC_BOOK3S */
541
542         CURRENT_THREAD_INFO(r7, r8)  /* base of new stack */
543         /* Note: this uses SWITCH_FRAME_SIZE rather than INT_FRAME_SIZE
544            because we don't need to leave the 288-byte ABI gap at the
545            top of the kernel stack. */
546         addi    r7,r7,THREAD_SIZE-SWITCH_FRAME_SIZE
547
548         mr      r1,r8           /* start using new stack pointer */
549         std     r7,PACAKSAVE(r13)
550
551         ld      r6,_CCR(r1)
552         mtcrf   0xFF,r6
553
554         /* r3-r13 are destroyed -- Cort */
555         REST_8GPRS(14, r1)
556         REST_10GPRS(22, r1)
557
558         /* convert old thread to its task_struct for return value */
559         addi    r3,r3,-THREAD
560         ld      r7,_NIP(r1)     /* Return to _switch caller in new task */
561         mtlr    r7
562         addi    r1,r1,SWITCH_FRAME_SIZE
563         blr
564
565         .align  7
566 _GLOBAL(ret_from_except)
567         ld      r11,_TRAP(r1)
568         andi.   r0,r11,1
569         bne     ret_from_except_lite
570         REST_NVGPRS(r1)
571
572 _GLOBAL(ret_from_except_lite)
573         /*
574          * Disable interrupts so that current_thread_info()->flags
575          * can't change between when we test it and when we return
576          * from the interrupt.
577          */
578 #ifdef CONFIG_PPC_BOOK3E
579         wrteei  0
580 #else
581         ld      r10,PACAKMSR(r13) /* Get kernel MSR without EE */
582         mtmsrd  r10,1             /* Update machine state */
583 #endif /* CONFIG_PPC_BOOK3E */
584
585         CURRENT_THREAD_INFO(r9, r1)
586         ld      r3,_MSR(r1)
587 #ifdef CONFIG_PPC_BOOK3E
588         ld      r10,PACACURRENT(r13)
589 #endif /* CONFIG_PPC_BOOK3E */
590         ld      r4,TI_FLAGS(r9)
591         andi.   r3,r3,MSR_PR
592         beq     resume_kernel
593 #ifdef CONFIG_PPC_BOOK3E
594         lwz     r3,(THREAD+THREAD_DBCR0)(r10)
595 #endif /* CONFIG_PPC_BOOK3E */
596
597         /* Check current_thread_info()->flags */
598         andi.   r0,r4,_TIF_USER_WORK_MASK
599 #ifdef CONFIG_PPC_BOOK3E
600         bne     1f
601         /*
602          * Check to see if the dbcr0 register is set up to debug.
603          * Use the internal debug mode bit to do this.
604          */
605         andis.  r0,r3,DBCR0_IDM@h
606         beq     restore
607         mfmsr   r0
608         rlwinm  r0,r0,0,~MSR_DE /* Clear MSR.DE */
609         mtmsr   r0
610         mtspr   SPRN_DBCR0,r3
611         li      r10, -1
612         mtspr   SPRN_DBSR,r10
613         b       restore
614 #else
615         beq     restore
616 #endif
617 1:      andi.   r0,r4,_TIF_NEED_RESCHED
618         beq     2f
619         bl      restore_interrupts
620         SCHEDULE_USER
621         b       ret_from_except_lite
622 2:
623 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
624         andi.   r0,r4,_TIF_USER_WORK_MASK & ~_TIF_RESTORE_TM
625         bne     3f              /* only restore TM if nothing else to do */
626         addi    r3,r1,STACK_FRAME_OVERHEAD
627         bl      restore_tm_state
628         b       restore
629 3:
630 #endif
631         bl      save_nvgprs
632         /*
633          * Use a non volatile GPR to save and restore our thread_info flags
634          * across the call to restore_interrupts.
635          */
636         mr      r30,r4
637         bl      restore_interrupts
638         mr      r4,r30
639         addi    r3,r1,STACK_FRAME_OVERHEAD
640         bl      do_notify_resume
641         b       ret_from_except
642
643 resume_kernel:
644         /* check current_thread_info, _TIF_EMULATE_STACK_STORE */
645         andis.  r8,r4,_TIF_EMULATE_STACK_STORE@h
646         beq+    1f
647
648         addi    r8,r1,INT_FRAME_SIZE    /* Get the kprobed function entry */
649
650         lwz     r3,GPR1(r1)
651         subi    r3,r3,INT_FRAME_SIZE    /* dst: Allocate a trampoline exception frame */
652         mr      r4,r1                   /* src:  current exception frame */
653         mr      r1,r3                   /* Reroute the trampoline frame to r1 */
654
655         /* Copy from the original to the trampoline. */
656         li      r5,INT_FRAME_SIZE/8     /* size: INT_FRAME_SIZE */
657         li      r6,0                    /* start offset: 0 */
658         mtctr   r5
659 2:      ldx     r0,r6,r4
660         stdx    r0,r6,r3
661         addi    r6,r6,8
662         bdnz    2b
663
664         /* Do real store operation to complete stwu */
665         lwz     r5,GPR1(r1)
666         std     r8,0(r5)
667
668         /* Clear _TIF_EMULATE_STACK_STORE flag */
669         lis     r11,_TIF_EMULATE_STACK_STORE@h
670         addi    r5,r9,TI_FLAGS
671 0:      ldarx   r4,0,r5
672         andc    r4,r4,r11
673         stdcx.  r4,0,r5
674         bne-    0b
675 1:
676
677 #ifdef CONFIG_PREEMPT
678         /* Check if we need to preempt */
679         andi.   r0,r4,_TIF_NEED_RESCHED
680         beq+    restore
681         /* Check that preempt_count() == 0 and interrupts are enabled */
682         lwz     r8,TI_PREEMPT(r9)
683         cmpwi   cr1,r8,0
684         ld      r0,SOFTE(r1)
685         cmpdi   r0,0
686         crandc  eq,cr1*4+eq,eq
687         bne     restore
688
689         /*
690          * Here we are preempting the current task. We want to make
691          * sure we are soft-disabled first and reconcile irq state.
692          */
693         RECONCILE_IRQ_STATE(r3,r4)
694 1:      bl      preempt_schedule_irq
695
696         /* Re-test flags and eventually loop */
697         CURRENT_THREAD_INFO(r9, r1)
698         ld      r4,TI_FLAGS(r9)
699         andi.   r0,r4,_TIF_NEED_RESCHED
700         bne     1b
701
702         /*
703          * arch_local_irq_restore() from preempt_schedule_irq above may
704          * enable hard interrupt but we really should disable interrupts
705          * when we return from the interrupt, and so that we don't get
706          * interrupted after loading SRR0/1.
707          */
708 #ifdef CONFIG_PPC_BOOK3E
709         wrteei  0
710 #else
711         ld      r10,PACAKMSR(r13) /* Get kernel MSR without EE */
712         mtmsrd  r10,1             /* Update machine state */
713 #endif /* CONFIG_PPC_BOOK3E */
714 #endif /* CONFIG_PREEMPT */
715
716         .globl  fast_exc_return_irq
717 fast_exc_return_irq:
718 restore:
719         /*
720          * This is the main kernel exit path. First we check if we
721          * are about to re-enable interrupts
722          */
723         ld      r5,SOFTE(r1)
724         lbz     r6,PACASOFTIRQEN(r13)
725         cmpwi   cr0,r5,0
726         beq     restore_irq_off
727
728         /* We are enabling, were we already enabled ? Yes, just return */
729         cmpwi   cr0,r6,1
730         beq     cr0,do_restore
731
732         /*
733          * We are about to soft-enable interrupts (we are hard disabled
734          * at this point). We check if there's anything that needs to
735          * be replayed first.
736          */
737         lbz     r0,PACAIRQHAPPENED(r13)
738         cmpwi   cr0,r0,0
739         bne-    restore_check_irq_replay
740
741         /*
742          * Get here when nothing happened while soft-disabled, just
743          * soft-enable and move-on. We will hard-enable as a side
744          * effect of rfi
745          */
746 restore_no_replay:
747         TRACE_ENABLE_INTS
748         li      r0,1
749         stb     r0,PACASOFTIRQEN(r13);
750
751         /*
752          * Final return path. BookE is handled in a different file
753          */
754 do_restore:
755 #ifdef CONFIG_PPC_BOOK3E
756         b       exception_return_book3e
757 #else
758         /*
759          * Clear the reservation. If we know the CPU tracks the address of
760          * the reservation then we can potentially save some cycles and use
761          * a larx. On POWER6 and POWER7 this is significantly faster.
762          */
763 BEGIN_FTR_SECTION
764         stdcx.  r0,0,r1         /* to clear the reservation */
765 FTR_SECTION_ELSE
766         ldarx   r4,0,r1
767 ALT_FTR_SECTION_END_IFCLR(CPU_FTR_STCX_CHECKS_ADDRESS)
768
769         /*
770          * Some code path such as load_up_fpu or altivec return directly
771          * here. They run entirely hard disabled and do not alter the
772          * interrupt state. They also don't use lwarx/stwcx. and thus
773          * are known not to leave dangling reservations.
774          */
775         .globl  fast_exception_return
776 fast_exception_return:
777         ld      r3,_MSR(r1)
778         ld      r4,_CTR(r1)
779         ld      r0,_LINK(r1)
780         mtctr   r4
781         mtlr    r0
782         ld      r4,_XER(r1)
783         mtspr   SPRN_XER,r4
784
785         REST_8GPRS(5, r1)
786
787         andi.   r0,r3,MSR_RI
788         beq-    unrecov_restore
789
790         /* Load PPR from thread struct before we clear MSR:RI */
791 BEGIN_FTR_SECTION
792         ld      r2,PACACURRENT(r13)
793         ld      r2,TASKTHREADPPR(r2)
794 END_FTR_SECTION_IFSET(CPU_FTR_HAS_PPR)
795
796         /*
797          * Clear RI before restoring r13.  If we are returning to
798          * userspace and we take an exception after restoring r13,
799          * we end up corrupting the userspace r13 value.
800          */
801         ld      r4,PACAKMSR(r13) /* Get kernel MSR without EE */
802         andc    r4,r4,r0         /* r0 contains MSR_RI here */
803         mtmsrd  r4,1
804
805 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
806         /* TM debug */
807         std     r3, PACATMSCRATCH(r13) /* Stash returned-to MSR */
808 #endif
809         /*
810          * r13 is our per cpu area, only restore it if we are returning to
811          * userspace the value stored in the stack frame may belong to
812          * another CPU.
813          */
814         andi.   r0,r3,MSR_PR
815         beq     1f
816 BEGIN_FTR_SECTION
817         mtspr   SPRN_PPR,r2     /* Restore PPR */
818 END_FTR_SECTION_IFSET(CPU_FTR_HAS_PPR)
819         ACCOUNT_CPU_USER_EXIT(r2, r4)
820         REST_GPR(13, r1)
821 1:
822         mtspr   SPRN_SRR1,r3
823
824         ld      r2,_CCR(r1)
825         mtcrf   0xFF,r2
826         ld      r2,_NIP(r1)
827         mtspr   SPRN_SRR0,r2
828
829         ld      r0,GPR0(r1)
830         ld      r2,GPR2(r1)
831         ld      r3,GPR3(r1)
832         ld      r4,GPR4(r1)
833         ld      r1,GPR1(r1)
834
835         rfid
836         b       .       /* prevent speculative execution */
837
838 #endif /* CONFIG_PPC_BOOK3E */
839
840         /*
841          * We are returning to a context with interrupts soft disabled.
842          *
843          * However, we may also about to hard enable, so we need to
844          * make sure that in this case, we also clear PACA_IRQ_HARD_DIS
845          * or that bit can get out of sync and bad things will happen
846          */
847 restore_irq_off:
848         ld      r3,_MSR(r1)
849         lbz     r7,PACAIRQHAPPENED(r13)
850         andi.   r0,r3,MSR_EE
851         beq     1f
852         rlwinm  r7,r7,0,~PACA_IRQ_HARD_DIS
853         stb     r7,PACAIRQHAPPENED(r13)
854 1:      li      r0,0
855         stb     r0,PACASOFTIRQEN(r13);
856         TRACE_DISABLE_INTS
857         b       do_restore
858
859         /*
860          * Something did happen, check if a re-emit is needed
861          * (this also clears paca->irq_happened)
862          */
863 restore_check_irq_replay:
864         /* XXX: We could implement a fast path here where we check
865          * for irq_happened being just 0x01, in which case we can
866          * clear it and return. That means that we would potentially
867          * miss a decrementer having wrapped all the way around.
868          *
869          * Still, this might be useful for things like hash_page
870          */
871         bl      __check_irq_replay
872         cmpwi   cr0,r3,0
873         beq     restore_no_replay
874  
875         /*
876          * We need to re-emit an interrupt. We do so by re-using our
877          * existing exception frame. We first change the trap value,
878          * but we need to ensure we preserve the low nibble of it
879          */
880         ld      r4,_TRAP(r1)
881         clrldi  r4,r4,60
882         or      r4,r4,r3
883         std     r4,_TRAP(r1)
884
885         /*
886          * Then find the right handler and call it. Interrupts are
887          * still soft-disabled and we keep them that way.
888         */
889         cmpwi   cr0,r3,0x500
890         bne     1f
891         addi    r3,r1,STACK_FRAME_OVERHEAD;
892         bl      do_IRQ
893         b       ret_from_except
894 1:      cmpwi   cr0,r3,0xe60
895         bne     1f
896         addi    r3,r1,STACK_FRAME_OVERHEAD;
897         bl      handle_hmi_exception
898         b       ret_from_except
899 1:      cmpwi   cr0,r3,0x900
900         bne     1f
901         addi    r3,r1,STACK_FRAME_OVERHEAD;
902         bl      timer_interrupt
903         b       ret_from_except
904 #ifdef CONFIG_PPC_DOORBELL
905 1:
906 #ifdef CONFIG_PPC_BOOK3E
907         cmpwi   cr0,r3,0x280
908 #else
909         BEGIN_FTR_SECTION
910                 cmpwi   cr0,r3,0xe80
911         FTR_SECTION_ELSE
912                 cmpwi   cr0,r3,0xa00
913         ALT_FTR_SECTION_END_IFSET(CPU_FTR_HVMODE)
914 #endif /* CONFIG_PPC_BOOK3E */
915         bne     1f
916         addi    r3,r1,STACK_FRAME_OVERHEAD;
917         bl      doorbell_exception
918         b       ret_from_except
919 #endif /* CONFIG_PPC_DOORBELL */
920 1:      b       ret_from_except /* What else to do here ? */
921  
922 unrecov_restore:
923         addi    r3,r1,STACK_FRAME_OVERHEAD
924         bl      unrecoverable_exception
925         b       unrecov_restore
926
927 #ifdef CONFIG_PPC_RTAS
928 /*
929  * On CHRP, the Run-Time Abstraction Services (RTAS) have to be
930  * called with the MMU off.
931  *
932  * In addition, we need to be in 32b mode, at least for now.
933  * 
934  * Note: r3 is an input parameter to rtas, so don't trash it...
935  */
936 _GLOBAL(enter_rtas)
937         mflr    r0
938         std     r0,16(r1)
939         stdu    r1,-RTAS_FRAME_SIZE(r1) /* Save SP and create stack space. */
940
941         /* Because RTAS is running in 32b mode, it clobbers the high order half
942          * of all registers that it saves.  We therefore save those registers
943          * RTAS might touch to the stack.  (r0, r3-r13 are caller saved)
944          */
945         SAVE_GPR(2, r1)                 /* Save the TOC */
946         SAVE_GPR(13, r1)                /* Save paca */
947         SAVE_8GPRS(14, r1)              /* Save the non-volatiles */
948         SAVE_10GPRS(22, r1)             /* ditto */
949
950         mfcr    r4
951         std     r4,_CCR(r1)
952         mfctr   r5
953         std     r5,_CTR(r1)
954         mfspr   r6,SPRN_XER
955         std     r6,_XER(r1)
956         mfdar   r7
957         std     r7,_DAR(r1)
958         mfdsisr r8
959         std     r8,_DSISR(r1)
960
961         /* Temporary workaround to clear CR until RTAS can be modified to
962          * ignore all bits.
963          */
964         li      r0,0
965         mtcr    r0
966
967 #ifdef CONFIG_BUG       
968         /* There is no way it is acceptable to get here with interrupts enabled,
969          * check it with the asm equivalent of WARN_ON
970          */
971         lbz     r0,PACASOFTIRQEN(r13)
972 1:      tdnei   r0,0
973         EMIT_BUG_ENTRY 1b,__FILE__,__LINE__,BUGFLAG_WARNING
974 #endif
975         
976         /* Hard-disable interrupts */
977         mfmsr   r6
978         rldicl  r7,r6,48,1
979         rotldi  r7,r7,16
980         mtmsrd  r7,1
981
982         /* Unfortunately, the stack pointer and the MSR are also clobbered,
983          * so they are saved in the PACA which allows us to restore
984          * our original state after RTAS returns.
985          */
986         std     r1,PACAR1(r13)
987         std     r6,PACASAVEDMSR(r13)
988
989         /* Setup our real return addr */        
990         LOAD_REG_ADDR(r4,rtas_return_loc)
991         clrldi  r4,r4,2                 /* convert to realmode address */
992         mtlr    r4
993
994         li      r0,0
995         ori     r0,r0,MSR_EE|MSR_SE|MSR_BE|MSR_RI
996         andc    r0,r6,r0
997         
998         li      r9,1
999         rldicr  r9,r9,MSR_SF_LG,(63-MSR_SF_LG)
1000         ori     r9,r9,MSR_IR|MSR_DR|MSR_FE0|MSR_FE1|MSR_FP|MSR_RI|MSR_LE
1001         andc    r6,r0,r9
1002         sync                            /* disable interrupts so SRR0/1 */
1003         mtmsrd  r0                      /* don't get trashed */
1004
1005         LOAD_REG_ADDR(r4, rtas)
1006         ld      r5,RTASENTRY(r4)        /* get the rtas->entry value */
1007         ld      r4,RTASBASE(r4)         /* get the rtas->base value */
1008         
1009         mtspr   SPRN_SRR0,r5
1010         mtspr   SPRN_SRR1,r6
1011         rfid
1012         b       .       /* prevent speculative execution */
1013
1014 rtas_return_loc:
1015         FIXUP_ENDIAN
1016
1017         /* relocation is off at this point */
1018         GET_PACA(r4)
1019         clrldi  r4,r4,2                 /* convert to realmode address */
1020
1021         bcl     20,31,$+4
1022 0:      mflr    r3
1023         ld      r3,(1f-0b)(r3)          /* get &rtas_restore_regs */
1024
1025         mfmsr   r6
1026         li      r0,MSR_RI
1027         andc    r6,r6,r0
1028         sync    
1029         mtmsrd  r6
1030         
1031         ld      r1,PACAR1(r4)           /* Restore our SP */
1032         ld      r4,PACASAVEDMSR(r4)     /* Restore our MSR */
1033
1034         mtspr   SPRN_SRR0,r3
1035         mtspr   SPRN_SRR1,r4
1036         rfid
1037         b       .       /* prevent speculative execution */
1038
1039         .align  3
1040 1:      .llong  rtas_restore_regs
1041
1042 rtas_restore_regs:
1043         /* relocation is on at this point */
1044         REST_GPR(2, r1)                 /* Restore the TOC */
1045         REST_GPR(13, r1)                /* Restore paca */
1046         REST_8GPRS(14, r1)              /* Restore the non-volatiles */
1047         REST_10GPRS(22, r1)             /* ditto */
1048
1049         GET_PACA(r13)
1050
1051         ld      r4,_CCR(r1)
1052         mtcr    r4
1053         ld      r5,_CTR(r1)
1054         mtctr   r5
1055         ld      r6,_XER(r1)
1056         mtspr   SPRN_XER,r6
1057         ld      r7,_DAR(r1)
1058         mtdar   r7
1059         ld      r8,_DSISR(r1)
1060         mtdsisr r8
1061
1062         addi    r1,r1,RTAS_FRAME_SIZE   /* Unstack our frame */
1063         ld      r0,16(r1)               /* get return address */
1064
1065         mtlr    r0
1066         blr                             /* return to caller */
1067
1068 #endif /* CONFIG_PPC_RTAS */
1069
1070 _GLOBAL(enter_prom)
1071         mflr    r0
1072         std     r0,16(r1)
1073         stdu    r1,-PROM_FRAME_SIZE(r1) /* Save SP and create stack space */
1074
1075         /* Because PROM is running in 32b mode, it clobbers the high order half
1076          * of all registers that it saves.  We therefore save those registers
1077          * PROM might touch to the stack.  (r0, r3-r13 are caller saved)
1078          */
1079         SAVE_GPR(2, r1)
1080         SAVE_GPR(13, r1)
1081         SAVE_8GPRS(14, r1)
1082         SAVE_10GPRS(22, r1)
1083         mfcr    r10
1084         mfmsr   r11
1085         std     r10,_CCR(r1)
1086         std     r11,_MSR(r1)
1087
1088         /* Put PROM address in SRR0 */
1089         mtsrr0  r4
1090
1091         /* Setup our trampoline return addr in LR */
1092         bcl     20,31,$+4
1093 0:      mflr    r4
1094         addi    r4,r4,(1f - 0b)
1095         mtlr    r4
1096
1097         /* Prepare a 32-bit mode big endian MSR
1098          */
1099 #ifdef CONFIG_PPC_BOOK3E
1100         rlwinm  r11,r11,0,1,31
1101         mtsrr1  r11
1102         rfi
1103 #else /* CONFIG_PPC_BOOK3E */
1104         LOAD_REG_IMMEDIATE(r12, MSR_SF | MSR_ISF | MSR_LE)
1105         andc    r11,r11,r12
1106         mtsrr1  r11
1107         rfid
1108 #endif /* CONFIG_PPC_BOOK3E */
1109
1110 1:      /* Return from OF */
1111         FIXUP_ENDIAN
1112
1113         /* Just make sure that r1 top 32 bits didn't get
1114          * corrupt by OF
1115          */
1116         rldicl  r1,r1,0,32
1117
1118         /* Restore the MSR (back to 64 bits) */
1119         ld      r0,_MSR(r1)
1120         MTMSRD(r0)
1121         isync
1122
1123         /* Restore other registers */
1124         REST_GPR(2, r1)
1125         REST_GPR(13, r1)
1126         REST_8GPRS(14, r1)
1127         REST_10GPRS(22, r1)
1128         ld      r4,_CCR(r1)
1129         mtcr    r4
1130         
1131         addi    r1,r1,PROM_FRAME_SIZE
1132         ld      r0,16(r1)
1133         mtlr    r0
1134         blr
1135
1136 #ifdef CONFIG_FUNCTION_TRACER
1137 #ifdef CONFIG_DYNAMIC_FTRACE
1138 _GLOBAL(mcount)
1139 _GLOBAL(_mcount)
1140         blr
1141
1142 _GLOBAL_TOC(ftrace_caller)
1143         /* Taken from output of objdump from lib64/glibc */
1144         mflr    r3
1145         ld      r11, 0(r1)
1146         stdu    r1, -112(r1)
1147         std     r3, 128(r1)
1148         ld      r4, 16(r11)
1149         subi    r3, r3, MCOUNT_INSN_SIZE
1150 .globl ftrace_call
1151 ftrace_call:
1152         bl      ftrace_stub
1153         nop
1154 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
1155 .globl ftrace_graph_call
1156 ftrace_graph_call:
1157         b       ftrace_graph_stub
1158 _GLOBAL(ftrace_graph_stub)
1159 #endif
1160         ld      r0, 128(r1)
1161         mtlr    r0
1162         addi    r1, r1, 112
1163 _GLOBAL(ftrace_stub)
1164         blr
1165 #else
1166 _GLOBAL_TOC(_mcount)
1167         /* Taken from output of objdump from lib64/glibc */
1168         mflr    r3
1169         ld      r11, 0(r1)
1170         stdu    r1, -112(r1)
1171         std     r3, 128(r1)
1172         ld      r4, 16(r11)
1173
1174         subi    r3, r3, MCOUNT_INSN_SIZE
1175         LOAD_REG_ADDR(r5,ftrace_trace_function)
1176         ld      r5,0(r5)
1177         ld      r5,0(r5)
1178         mtctr   r5
1179         bctrl
1180         nop
1181
1182
1183 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
1184         b       ftrace_graph_caller
1185 #endif
1186         ld      r0, 128(r1)
1187         mtlr    r0
1188         addi    r1, r1, 112
1189 _GLOBAL(ftrace_stub)
1190         blr
1191
1192 #endif /* CONFIG_DYNAMIC_FTRACE */
1193
1194 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
1195 _GLOBAL(ftrace_graph_caller)
1196         /* load r4 with local address */
1197         ld      r4, 128(r1)
1198         subi    r4, r4, MCOUNT_INSN_SIZE
1199
1200         /* Grab the LR out of the caller stack frame */
1201         ld      r11, 112(r1)
1202         ld      r3, 16(r11)
1203
1204         bl      prepare_ftrace_return
1205         nop
1206
1207         /*
1208          * prepare_ftrace_return gives us the address we divert to.
1209          * Change the LR in the callers stack frame to this.
1210          */
1211         ld      r11, 112(r1)
1212         std     r3, 16(r11)
1213
1214         ld      r0, 128(r1)
1215         mtlr    r0
1216         addi    r1, r1, 112
1217         blr
1218
1219 _GLOBAL(return_to_handler)
1220         /* need to save return values */
1221         std     r4,  -32(r1)
1222         std     r3,  -24(r1)
1223         /* save TOC */
1224         std     r2,  -16(r1)
1225         std     r31, -8(r1)
1226         mr      r31, r1
1227         stdu    r1, -112(r1)
1228
1229         /*
1230          * We might be called from a module.
1231          * Switch to our TOC to run inside the core kernel.
1232          */
1233         ld      r2, PACATOC(r13)
1234
1235         bl      ftrace_return_to_handler
1236         nop
1237
1238         /* return value has real return address */
1239         mtlr    r3
1240
1241         ld      r1, 0(r1)
1242         ld      r4,  -32(r1)
1243         ld      r3,  -24(r1)
1244         ld      r2,  -16(r1)
1245         ld      r31, -8(r1)
1246
1247         /* Jump back to real return address */
1248         blr
1249 #endif /* CONFIG_FUNCTION_GRAPH_TRACER */
1250 #endif /* CONFIG_FUNCTION_TRACER */