diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-10-25 10:44:27 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-10-25 10:44:27 -0400 |
commit | 4b37ba90f49d4157ac5628f8d730d3505f176724 (patch) | |
tree | fdb3d04426f7b72ee86b1f06be746624494493c5 /arch/m68knommu/kernel | |
parent | 229aebb873e29726b91e076161649cf45154b0bf (diff) | |
parent | 55f411de484a0136a77d050e877578a60bc2e094 (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/gerg/m68knommu
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/gerg/m68knommu: (21 commits)
m68knommu: convert to using tracehook_report_syscall_*
m68knommu: some boards use fixed phy for FEC ethernet
m68knommu: support the external GPIO based interrupts of the 5272
m68knommu: mask of vector bits in exception word properly
m68knommu: change to new flag variables
m68knommu: Fix MCFUART_TXFIFOSIZE for m548x.
m68knommu: add basic mmu-less m548x support
m68knommu: .gitignore vmlinux.lds
m68knommu: stop using __do_IRQ
m68knommu: rename PT_OFF_VECTOR to PT_OFF_FORMATVEC.
m68knommu: add support for Coldfire 547x/548x interrupt controller
m68k{nommu}: Remove unused DEFINE's from asm-offsets.c
m68knommu: whitespace cleanup in 68328/entry.S
m68knommu: Document supported chips in intc-2.c and intc-simr.c.
m68knommu: fix strace support for 68328/68360
m68knommu: fix default starting date
arch/m68knommu: Removing dead 68328_SERIAL_UART2 config option
arch/m68knommu: Removing dead RAM_{16,32}_MB config option
arch/m68knommu: Removing dead M68KFPU_EMU config option
arch/m68knommu: Removing dead RELOCATE config option
...
Diffstat (limited to 'arch/m68knommu/kernel')
-rw-r--r-- | arch/m68knommu/kernel/.gitignore | 1 | ||||
-rw-r--r-- | arch/m68knommu/kernel/asm-offsets.c | 11 | ||||
-rw-r--r-- | arch/m68knommu/kernel/ptrace.c | 47 | ||||
-rw-r--r-- | arch/m68knommu/kernel/setup.c | 3 | ||||
-rw-r--r-- | arch/m68knommu/kernel/time.c | 13 | ||||
-rw-r--r-- | arch/m68knommu/kernel/traps.c | 26 |
6 files changed, 31 insertions, 70 deletions
diff --git a/arch/m68knommu/kernel/.gitignore b/arch/m68knommu/kernel/.gitignore new file mode 100644 index 000000000000..c5f676c3c224 --- /dev/null +++ b/arch/m68knommu/kernel/.gitignore | |||
@@ -0,0 +1 @@ | |||
vmlinux.lds | |||
diff --git a/arch/m68knommu/kernel/asm-offsets.c b/arch/m68knommu/kernel/asm-offsets.c index 24335022fa2c..ffe02f41ad46 100644 --- a/arch/m68knommu/kernel/asm-offsets.c +++ b/arch/m68knommu/kernel/asm-offsets.c | |||
@@ -21,14 +21,8 @@ | |||
21 | int main(void) | 21 | int main(void) |
22 | { | 22 | { |
23 | /* offsets into the task struct */ | 23 | /* offsets into the task struct */ |
24 | DEFINE(TASK_STATE, offsetof(struct task_struct, state)); | ||
25 | DEFINE(TASK_FLAGS, offsetof(struct task_struct, flags)); | ||
26 | DEFINE(TASK_PTRACE, offsetof(struct task_struct, ptrace)); | ||
27 | DEFINE(TASK_BLOCKED, offsetof(struct task_struct, blocked)); | ||
28 | DEFINE(TASK_THREAD, offsetof(struct task_struct, thread)); | 24 | DEFINE(TASK_THREAD, offsetof(struct task_struct, thread)); |
29 | DEFINE(TASK_THREAD_INFO, offsetof(struct task_struct, stack)); | ||
30 | DEFINE(TASK_MM, offsetof(struct task_struct, mm)); | 25 | DEFINE(TASK_MM, offsetof(struct task_struct, mm)); |
31 | DEFINE(TASK_ACTIVE_MM, offsetof(struct task_struct, active_mm)); | ||
32 | 26 | ||
33 | /* offsets into the irq_cpustat_t struct */ | 27 | /* offsets into the irq_cpustat_t struct */ |
34 | DEFINE(CPUSTAT_SOFTIRQ_PENDING, offsetof(irq_cpustat_t, __softirq_pending)); | 28 | DEFINE(CPUSTAT_SOFTIRQ_PENDING, offsetof(irq_cpustat_t, __softirq_pending)); |
@@ -63,7 +57,7 @@ int main(void) | |||
63 | DEFINE(PT_OFF_FORMATVEC, offsetof(struct pt_regs, sr) - 2); | 57 | DEFINE(PT_OFF_FORMATVEC, offsetof(struct pt_regs, sr) - 2); |
64 | #else | 58 | #else |
65 | /* bitfields are a bit difficult */ | 59 | /* bitfields are a bit difficult */ |
66 | DEFINE(PT_OFF_VECTOR, offsetof(struct pt_regs, pc) + 4); | 60 | DEFINE(PT_OFF_FORMATVEC, offsetof(struct pt_regs, pc) + 4); |
67 | #endif | 61 | #endif |
68 | 62 | ||
69 | /* signal defines */ | 63 | /* signal defines */ |
@@ -75,11 +69,8 @@ int main(void) | |||
75 | DEFINE(PT_PTRACED, PT_PTRACED); | 69 | DEFINE(PT_PTRACED, PT_PTRACED); |
76 | 70 | ||
77 | /* Offsets in thread_info structure */ | 71 | /* Offsets in thread_info structure */ |
78 | DEFINE(TI_TASK, offsetof(struct thread_info, task)); | ||
79 | DEFINE(TI_EXECDOMAIN, offsetof(struct thread_info, exec_domain)); | ||
80 | DEFINE(TI_FLAGS, offsetof(struct thread_info, flags)); | 72 | DEFINE(TI_FLAGS, offsetof(struct thread_info, flags)); |
81 | DEFINE(TI_PREEMPTCOUNT, offsetof(struct thread_info, preempt_count)); | 73 | DEFINE(TI_PREEMPTCOUNT, offsetof(struct thread_info, preempt_count)); |
82 | DEFINE(TI_CPU, offsetof(struct thread_info, cpu)); | ||
83 | 74 | ||
84 | return 0; | 75 | return 0; |
85 | } | 76 | } |
diff --git a/arch/m68knommu/kernel/ptrace.c b/arch/m68knommu/kernel/ptrace.c index f6be1248d216..6fe7c38cd556 100644 --- a/arch/m68knommu/kernel/ptrace.c +++ b/arch/m68knommu/kernel/ptrace.c | |||
@@ -18,6 +18,7 @@ | |||
18 | #include <linux/ptrace.h> | 18 | #include <linux/ptrace.h> |
19 | #include <linux/user.h> | 19 | #include <linux/user.h> |
20 | #include <linux/signal.h> | 20 | #include <linux/signal.h> |
21 | #include <linux/tracehook.h> | ||
21 | 22 | ||
22 | #include <asm/uaccess.h> | 23 | #include <asm/uaccess.h> |
23 | #include <asm/page.h> | 24 | #include <asm/page.h> |
@@ -134,14 +135,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
134 | tmp >>= 16; | 135 | tmp >>= 16; |
135 | } else if (addr >= 21 && addr < 49) { | 136 | } else if (addr >= 21 && addr < 49) { |
136 | tmp = child->thread.fp[addr - 21]; | 137 | tmp = child->thread.fp[addr - 21]; |
137 | #ifdef CONFIG_M68KFPU_EMU | ||
138 | /* Convert internal fpu reg representation | ||
139 | * into long double format | ||
140 | */ | ||
141 | if (FPU_IS_EMU && (addr < 45) && !(addr % 3)) | ||
142 | tmp = ((tmp & 0xffff0000) << 15) | | ||
143 | ((tmp & 0x0000ffff) << 16); | ||
144 | #endif | ||
145 | } else if (addr == 49) { | 138 | } else if (addr == 49) { |
146 | tmp = child->mm->start_code; | 139 | tmp = child->mm->start_code; |
147 | } else if (addr == 50) { | 140 | } else if (addr == 50) { |
@@ -175,16 +168,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
175 | } | 168 | } |
176 | if (addr >= 21 && addr < 48) | 169 | if (addr >= 21 && addr < 48) |
177 | { | 170 | { |
178 | #ifdef CONFIG_M68KFPU_EMU | ||
179 | /* Convert long double format | ||
180 | * into internal fpu reg representation | ||
181 | */ | ||
182 | if (FPU_IS_EMU && (addr < 45) && !(addr % 3)) { | ||
183 | data = (unsigned long)data << 15; | ||
184 | data = (data & 0xffff0000) | | ||
185 | ((data & 0x0000ffff) >> 1); | ||
186 | } | ||
187 | #endif | ||
188 | child->thread.fp[addr - 21] = data; | 171 | child->thread.fp[addr - 21] = data; |
189 | ret = 0; | 172 | ret = 0; |
190 | } | 173 | } |
@@ -259,21 +242,17 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
259 | return ret; | 242 | return ret; |
260 | } | 243 | } |
261 | 244 | ||
262 | asmlinkage void syscall_trace(void) | 245 | asmlinkage int syscall_trace_enter(void) |
263 | { | 246 | { |
264 | if (!test_thread_flag(TIF_SYSCALL_TRACE)) | 247 | int ret = 0; |
265 | return; | 248 | |
266 | if (!(current->ptrace & PT_PTRACED)) | 249 | if (test_thread_flag(TIF_SYSCALL_TRACE)) |
267 | return; | 250 | ret = tracehook_report_syscall_entry(task_pt_regs(current)); |
268 | ptrace_notify(SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD) | 251 | return ret; |
269 | ? 0x80 : 0)); | 252 | } |
270 | /* | 253 | |
271 | * this isn't the same as continuing with a signal, but it will do | 254 | asmlinkage void syscall_trace_leave(void) |
272 | * for normal use. strace only continues with a signal if the | 255 | { |
273 | * stopping signal is not SIGTRAP. -brl | 256 | if (test_thread_flag(TIF_SYSCALL_TRACE)) |
274 | */ | 257 | tracehook_report_syscall_exit(task_pt_regs(current), 0); |
275 | if (current->exit_code) { | ||
276 | send_sig(current->exit_code, current, 1); | ||
277 | current->exit_code = 0; | ||
278 | } | ||
279 | } | 258 | } |
diff --git a/arch/m68knommu/kernel/setup.c b/arch/m68knommu/kernel/setup.c index ba92b90d5fbc..c684adf5dc40 100644 --- a/arch/m68knommu/kernel/setup.c +++ b/arch/m68knommu/kernel/setup.c | |||
@@ -54,9 +54,6 @@ void (*mach_reset)(void); | |||
54 | void (*mach_halt)(void); | 54 | void (*mach_halt)(void); |
55 | void (*mach_power_off)(void); | 55 | void (*mach_power_off)(void); |
56 | 56 | ||
57 | #ifdef CONFIG_M68000 | ||
58 | #define CPU "MC68000" | ||
59 | #endif | ||
60 | #ifdef CONFIG_M68328 | 57 | #ifdef CONFIG_M68328 |
61 | #define CPU "MC68328" | 58 | #define CPU "MC68328" |
62 | #endif | 59 | #endif |
diff --git a/arch/m68knommu/kernel/time.c b/arch/m68knommu/kernel/time.c index 7089dd9d843b..d6ac2a43453c 100644 --- a/arch/m68knommu/kernel/time.c +++ b/arch/m68knommu/kernel/time.c | |||
@@ -60,13 +60,16 @@ static unsigned long read_rtc_mmss(void) | |||
60 | { | 60 | { |
61 | unsigned int year, mon, day, hour, min, sec; | 61 | unsigned int year, mon, day, hour, min, sec; |
62 | 62 | ||
63 | if (mach_gettod) | 63 | if (mach_gettod) { |
64 | mach_gettod(&year, &mon, &day, &hour, &min, &sec); | 64 | mach_gettod(&year, &mon, &day, &hour, &min, &sec); |
65 | else | 65 | if ((year += 1900) < 1970) |
66 | year = mon = day = hour = min = sec = 0; | 66 | year += 100; |
67 | } else { | ||
68 | year = 1970; | ||
69 | mon = day = 1; | ||
70 | hour = min = sec = 0; | ||
71 | } | ||
67 | 72 | ||
68 | if ((year += 1900) < 1970) | ||
69 | year += 100; | ||
70 | 73 | ||
71 | return mktime(year, mon, day, hour, min, sec); | 74 | return mktime(year, mon, day, hour, min, sec); |
72 | } | 75 | } |
diff --git a/arch/m68knommu/kernel/traps.c b/arch/m68knommu/kernel/traps.c index 3739c8f657d7..a768008dfd06 100644 --- a/arch/m68knommu/kernel/traps.c +++ b/arch/m68knommu/kernel/traps.c | |||
@@ -179,14 +179,16 @@ static void __show_stack(struct task_struct *task, unsigned long *stack) | |||
179 | 179 | ||
180 | void bad_super_trap(struct frame *fp) | 180 | void bad_super_trap(struct frame *fp) |
181 | { | 181 | { |
182 | int vector = (fp->ptregs.vector >> 2) & 0xff; | ||
183 | |||
182 | console_verbose(); | 184 | console_verbose(); |
183 | if (fp->ptregs.vector < 4 * ARRAY_SIZE(vec_names)) | 185 | if (vector < ARRAY_SIZE(vec_names)) |
184 | printk (KERN_WARNING "*** %s *** FORMAT=%X\n", | 186 | printk (KERN_WARNING "*** %s *** FORMAT=%X\n", |
185 | vec_names[(fp->ptregs.vector) >> 2], | 187 | vec_names[vector], |
186 | fp->ptregs.format); | 188 | fp->ptregs.format); |
187 | else | 189 | else |
188 | printk (KERN_WARNING "*** Exception %d *** FORMAT=%X\n", | 190 | printk (KERN_WARNING "*** Exception %d *** FORMAT=%X\n", |
189 | (fp->ptregs.vector) >> 2, | 191 | vector, |
190 | fp->ptregs.format); | 192 | fp->ptregs.format); |
191 | printk (KERN_WARNING "Current process id is %d\n", current->pid); | 193 | printk (KERN_WARNING "Current process id is %d\n", current->pid); |
192 | die_if_kernel("BAD KERNEL TRAP", &fp->ptregs, 0); | 194 | die_if_kernel("BAD KERNEL TRAP", &fp->ptregs, 0); |
@@ -195,10 +197,11 @@ void bad_super_trap(struct frame *fp) | |||
195 | asmlinkage void trap_c(struct frame *fp) | 197 | asmlinkage void trap_c(struct frame *fp) |
196 | { | 198 | { |
197 | int sig; | 199 | int sig; |
200 | int vector = (fp->ptregs.vector >> 2) & 0xff; | ||
198 | siginfo_t info; | 201 | siginfo_t info; |
199 | 202 | ||
200 | if (fp->ptregs.sr & PS_S) { | 203 | if (fp->ptregs.sr & PS_S) { |
201 | if ((fp->ptregs.vector >> 2) == VEC_TRACE) { | 204 | if (vector == VEC_TRACE) { |
202 | /* traced a trapping instruction */ | 205 | /* traced a trapping instruction */ |
203 | } else | 206 | } else |
204 | bad_super_trap(fp); | 207 | bad_super_trap(fp); |
@@ -206,7 +209,7 @@ asmlinkage void trap_c(struct frame *fp) | |||
206 | } | 209 | } |
207 | 210 | ||
208 | /* send the appropriate signal to the user program */ | 211 | /* send the appropriate signal to the user program */ |
209 | switch ((fp->ptregs.vector) >> 2) { | 212 | switch (vector) { |
210 | case VEC_ADDRERR: | 213 | case VEC_ADDRERR: |
211 | info.si_code = BUS_ADRALN; | 214 | info.si_code = BUS_ADRALN; |
212 | sig = SIGBUS; | 215 | sig = SIGBUS; |
@@ -360,16 +363,3 @@ void show_stack(struct task_struct *task, unsigned long *stack) | |||
360 | else | 363 | else |
361 | __show_stack(task, stack); | 364 | __show_stack(task, stack); |
362 | } | 365 | } |
363 | |||
364 | #ifdef CONFIG_M68KFPU_EMU | ||
365 | asmlinkage void fpemu_signal(int signal, int code, void *addr) | ||
366 | { | ||
367 | siginfo_t info; | ||
368 | |||
369 | info.si_signo = signal; | ||
370 | info.si_errno = 0; | ||
371 | info.si_code = code; | ||
372 | info.si_addr = addr; | ||
373 | force_sig_info(signal, &info, current); | ||
374 | } | ||
375 | #endif | ||