diff options
Diffstat (limited to 'arch/xtensa')
-rw-r--r-- | arch/xtensa/kernel/ptrace.c | 17 | ||||
-rw-r--r-- | arch/xtensa/kernel/traps.c | 1 | ||||
-rw-r--r-- | arch/xtensa/kernel/vmlinux.lds.S | 5 | ||||
-rw-r--r-- | arch/xtensa/mm/fault.c | 23 |
4 files changed, 15 insertions, 31 deletions
diff --git a/arch/xtensa/kernel/ptrace.c b/arch/xtensa/kernel/ptrace.c index 14104ff63093..06a13d9b69db 100644 --- a/arch/xtensa/kernel/ptrace.c +++ b/arch/xtensa/kernel/ptrace.c | |||
@@ -50,18 +50,8 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
50 | switch (request) { | 50 | switch (request) { |
51 | case PTRACE_PEEKTEXT: /* read word at location addr. */ | 51 | case PTRACE_PEEKTEXT: /* read word at location addr. */ |
52 | case PTRACE_PEEKDATA: | 52 | case PTRACE_PEEKDATA: |
53 | { | 53 | ret = generic_ptrace_peekdata(child, addr, data); |
54 | unsigned long tmp; | ||
55 | int copied; | ||
56 | |||
57 | copied = access_process_vm(child, addr, &tmp, sizeof(tmp), 0); | ||
58 | ret = -EIO; | ||
59 | if (copied != sizeof(tmp)) | ||
60 | break; | ||
61 | ret = put_user(tmp,(unsigned long *) data); | ||
62 | |||
63 | goto out; | 54 | goto out; |
64 | } | ||
65 | 55 | ||
66 | /* Read the word at location addr in the USER area. */ | 56 | /* Read the word at location addr in the USER area. */ |
67 | 57 | ||
@@ -138,10 +128,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
138 | 128 | ||
139 | case PTRACE_POKETEXT: /* write the word at location addr. */ | 129 | case PTRACE_POKETEXT: /* write the word at location addr. */ |
140 | case PTRACE_POKEDATA: | 130 | case PTRACE_POKEDATA: |
141 | if (access_process_vm(child, addr, &data, sizeof(data), 1) | 131 | ret = generic_ptrace_pokedata(child, addr, data); |
142 | == sizeof(data)) | ||
143 | break; | ||
144 | ret = -EIO; | ||
145 | goto out; | 132 | goto out; |
146 | 133 | ||
147 | case PTRACE_POKEUSR: | 134 | case PTRACE_POKEUSR: |
diff --git a/arch/xtensa/kernel/traps.c b/arch/xtensa/kernel/traps.c index 693ab268485e..c5e62f9d9f50 100644 --- a/arch/xtensa/kernel/traps.c +++ b/arch/xtensa/kernel/traps.c | |||
@@ -482,6 +482,7 @@ void die(const char * str, struct pt_regs * regs, long err) | |||
482 | if (!user_mode(regs)) | 482 | if (!user_mode(regs)) |
483 | show_stack(NULL, (unsigned long*)regs->areg[1]); | 483 | show_stack(NULL, (unsigned long*)regs->areg[1]); |
484 | 484 | ||
485 | add_taint(TAINT_DIE); | ||
485 | spin_unlock_irq(&die_lock); | 486 | spin_unlock_irq(&die_lock); |
486 | 487 | ||
487 | if (in_interrupt()) | 488 | if (in_interrupt()) |
diff --git a/arch/xtensa/kernel/vmlinux.lds.S b/arch/xtensa/kernel/vmlinux.lds.S index bb3f1f3097a8..ac4ed52034db 100644 --- a/arch/xtensa/kernel/vmlinux.lds.S +++ b/arch/xtensa/kernel/vmlinux.lds.S | |||
@@ -191,10 +191,7 @@ SECTIONS | |||
191 | __initramfs_end = .; | 191 | __initramfs_end = .; |
192 | #endif | 192 | #endif |
193 | 193 | ||
194 | . = ALIGN(4096); | 194 | PERCPU(4096) |
195 | __per_cpu_start = .; | ||
196 | .data.percpu : { *(.data.percpu) } | ||
197 | __per_cpu_end = .; | ||
198 | 195 | ||
199 | 196 | ||
200 | /* We need this dummy segment here */ | 197 | /* We need this dummy segment here */ |
diff --git a/arch/xtensa/mm/fault.c b/arch/xtensa/mm/fault.c index 3dc6f2f07bbe..16004067add3 100644 --- a/arch/xtensa/mm/fault.c +++ b/arch/xtensa/mm/fault.c | |||
@@ -41,6 +41,7 @@ void do_page_fault(struct pt_regs *regs) | |||
41 | siginfo_t info; | 41 | siginfo_t info; |
42 | 42 | ||
43 | int is_write, is_exec; | 43 | int is_write, is_exec; |
44 | int fault; | ||
44 | 45 | ||
45 | info.si_code = SEGV_MAPERR; | 46 | info.si_code = SEGV_MAPERR; |
46 | 47 | ||
@@ -102,20 +103,18 @@ good_area: | |||
102 | * the fault. | 103 | * the fault. |
103 | */ | 104 | */ |
104 | survive: | 105 | survive: |
105 | switch (handle_mm_fault(mm, vma, address, is_write)) { | 106 | fault = handle_mm_fault(mm, vma, address, is_write); |
106 | case VM_FAULT_MINOR: | 107 | if (unlikely(fault & VM_FAULT_ERROR)) { |
107 | current->min_flt++; | 108 | if (fault & VM_FAULT_OOM) |
108 | break; | 109 | goto out_of_memory; |
109 | case VM_FAULT_MAJOR: | 110 | else if (fault & VM_FAULT_SIGBUS) |
110 | current->maj_flt++; | 111 | goto do_sigbus; |
111 | break; | ||
112 | case VM_FAULT_SIGBUS: | ||
113 | goto do_sigbus; | ||
114 | case VM_FAULT_OOM: | ||
115 | goto out_of_memory; | ||
116 | default: | ||
117 | BUG(); | 112 | BUG(); |
118 | } | 113 | } |
114 | if (fault & VM_FAULT_MAJOR) | ||
115 | current->maj_flt++; | ||
116 | else | ||
117 | current->min_flt++; | ||
119 | 118 | ||
120 | up_read(&mm->mmap_sem); | 119 | up_read(&mm->mmap_sem); |
121 | return; | 120 | return; |