patch-2_6_7-vs1_9_1_12
[linux-2.6.git] / arch / ppc64 / mm / fault.c
1 /*
2  *  arch/ppc/mm/fault.c
3  *
4  *  PowerPC version 
5  *    Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org)
6  *
7  *  Derived from "arch/i386/mm/fault.c"
8  *    Copyright (C) 1991, 1992, 1993, 1994  Linus Torvalds
9  *
10  *  Modified by Cort Dougan and Paul Mackerras.
11  *
12  *  Modified for PPC64 by Dave Engebretsen (engebret@ibm.com)
13  *
14  *  This program is free software; you can redistribute it and/or
15  *  modify it under the terms of the GNU General Public License
16  *  as published by the Free Software Foundation; either version
17  *  2 of the License, or (at your option) any later version.
18  */
19
20 #include <linux/config.h>
21 #include <linux/signal.h>
22 #include <linux/sched.h>
23 #include <linux/kernel.h>
24 #include <linux/errno.h>
25 #include <linux/string.h>
26 #include <linux/types.h>
27 #include <linux/mman.h>
28 #include <linux/mm.h>
29 #include <linux/interrupt.h>
30 #include <linux/smp_lock.h>
31 #include <linux/module.h>
32
33 #include <asm/page.h>
34 #include <asm/pgtable.h>
35 #include <asm/mmu.h>
36 #include <asm/mmu_context.h>
37 #include <asm/system.h>
38 #include <asm/uaccess.h>
39
40 /*
41  * Check whether the instruction at regs->nip is a store using
42  * an update addressing form which will update r1.
43  */
44 static int store_updates_sp(struct pt_regs *regs)
45 {
46         unsigned int inst;
47
48         if (get_user(inst, (unsigned int __user *)regs->nip))
49                 return 0;
50         /* check for 1 in the rA field */
51         if (((inst >> 16) & 0x1f) != 1)
52                 return 0;
53         /* check major opcode */
54         switch (inst >> 26) {
55         case 37:        /* stwu */
56         case 39:        /* stbu */
57         case 45:        /* sthu */
58         case 53:        /* stfsu */
59         case 55:        /* stfdu */
60                 return 1;
61         case 62:        /* std or stdu */
62                 return (inst & 3) == 1;
63         case 31:
64                 /* check minor opcode */
65                 switch ((inst >> 1) & 0x3ff) {
66                 case 181:       /* stdux */
67                 case 183:       /* stwux */
68                 case 247:       /* stbux */
69                 case 439:       /* sthux */
70                 case 695:       /* stfsux */
71                 case 759:       /* stfdux */
72                         return 1;
73                 }
74         }
75         return 0;
76 }
77
78 /*
79  * The error_code parameter is
80  *  - DSISR for a non-SLB data access fault,
81  *  - SRR1 & 0x08000000 for a non-SLB instruction access fault
82  *  - 0 any SLB fault.
83  */
84 void do_page_fault(struct pt_regs *regs, unsigned long address,
85                    unsigned long error_code)
86 {
87         struct vm_area_struct * vma;
88         struct mm_struct *mm = current->mm;
89         siginfo_t info;
90         unsigned long code = SEGV_MAPERR;
91         unsigned long is_write = error_code & 0x02000000;
92
93         if (regs->trap == 0x300 || regs->trap == 0x380) {
94                 if (debugger_fault_handler(regs))
95                         return;
96         }
97
98         /* On a kernel SLB miss we can only check for a valid exception entry */
99         if (!user_mode(regs) && (regs->trap == 0x380)) {
100                 bad_page_fault(regs, address, SIGSEGV);
101                 return;
102         }
103
104         if (error_code & 0x00400000) {
105                 if (debugger_dabr_match(regs))
106                         return;
107         }
108
109         if (in_atomic() || mm == NULL) {
110                 bad_page_fault(regs, address, SIGSEGV);
111                 return;
112         }
113         down_read(&mm->mmap_sem);
114         vma = find_vma(mm, address);
115         if (!vma)
116                 goto bad_area;
117
118         if (vma->vm_start <= address) {
119                 goto good_area;
120         }
121         if (!(vma->vm_flags & VM_GROWSDOWN))
122                 goto bad_area;
123
124         /*
125          * N.B. The POWER/Open ABI allows programs to access up to
126          * 288 bytes below the stack pointer.
127          * The kernel signal delivery code writes up to about 1.5kB
128          * below the stack pointer (r1) before decrementing it.
129          * The exec code can write slightly over 640kB to the stack
130          * before setting the user r1.  Thus we allow the stack to
131          * expand to 1MB without further checks.
132          */
133         if (address + 0x100000 < vma->vm_end) {
134                 /* get user regs even if this fault is in kernel mode */
135                 struct pt_regs *uregs = current->thread.regs;
136                 if (uregs == NULL)
137                         goto bad_area;
138
139                 /*
140                  * A user-mode access to an address a long way below
141                  * the stack pointer is only valid if the instruction
142                  * is one which would update the stack pointer to the
143                  * address accessed if the instruction completed,
144                  * i.e. either stwu rs,n(r1) or stwux rs,r1,rb
145                  * (or the byte, halfword, float or double forms).
146                  *
147                  * If we don't check this then any write to the area
148                  * between the last mapped region and the stack will
149                  * expand the stack rather than segfaulting.
150                  */
151                 if (address + 2048 < uregs->gpr[1]
152                     && (!user_mode(regs) || !store_updates_sp(regs)))
153                         goto bad_area;
154         }
155
156         if (expand_stack(vma, address))
157                 goto bad_area;
158
159 good_area:
160         code = SEGV_ACCERR;
161
162         /* a write */
163         if (is_write) {
164                 if (!(vma->vm_flags & VM_WRITE))
165                         goto bad_area;
166         /* a read */
167         } else {
168                 /* protection fault */
169                 if (error_code & 0x08000000)
170                         goto bad_area;
171                 if (!(vma->vm_flags & (VM_READ | VM_EXEC)))
172                         goto bad_area;
173         }
174
175  survive:
176         /*
177          * If for any reason at all we couldn't handle the fault,
178          * make sure we exit gracefully rather than endlessly redo
179          * the fault.
180          */
181         switch (handle_mm_fault(mm, vma, address, is_write)) {
182
183         case VM_FAULT_MINOR:
184                 current->min_flt++;
185                 break;
186         case VM_FAULT_MAJOR:
187                 current->maj_flt++;
188                 break;
189         case VM_FAULT_SIGBUS:
190                 goto do_sigbus;
191         case VM_FAULT_OOM:
192                 goto out_of_memory;
193         default:
194                 BUG();
195         }
196
197         up_read(&mm->mmap_sem);
198         return;
199
200 bad_area:
201         up_read(&mm->mmap_sem);
202
203         /* User mode accesses cause a SIGSEGV */
204         if (user_mode(regs)) {
205                 info.si_signo = SIGSEGV;
206                 info.si_errno = 0;
207                 info.si_code = code;
208                 info.si_addr = (void *) address;
209                 force_sig_info(SIGSEGV, &info, current);
210                 return;
211         }
212
213         bad_page_fault(regs, address, SIGSEGV);
214         return;
215
216 /*
217  * We ran out of memory, or some other thing happened to us that made
218  * us unable to handle the page fault gracefully.
219  */
220 out_of_memory:
221         up_read(&mm->mmap_sem);
222         if (current->pid == 1) {
223                 yield();
224                 down_read(&mm->mmap_sem);
225                 goto survive;
226         }
227         printk("VM: killing process %s\n", current->comm);
228         if (user_mode(regs))
229                 do_exit(SIGKILL);
230         bad_page_fault(regs, address, SIGKILL);
231         return;
232
233 do_sigbus:
234         up_read(&mm->mmap_sem);
235         info.si_signo = SIGBUS;
236         info.si_errno = 0;
237         info.si_code = BUS_ADRERR;
238         info.si_addr = (void *)address;
239         force_sig_info (SIGBUS, &info, current);
240         if (!user_mode(regs))
241                 bad_page_fault(regs, address, SIGBUS);
242 }
243
244 /*
245  * bad_page_fault is called when we have a bad access from the kernel.
246  * It is called from do_page_fault above and from some of the procedures
247  * in traps.c.
248  */
249 void bad_page_fault(struct pt_regs *regs, unsigned long address, int sig)
250 {
251         const struct exception_table_entry *entry;
252
253         /* Are we prepared to handle this fault?  */
254         if ((entry = search_exception_tables(regs->nip)) != NULL) {
255                 regs->nip = entry->fixup;
256                 return;
257         }
258
259         /* kernel has accessed a bad area */
260         die("Kernel access of bad area", regs, sig);
261 }