diff options
Diffstat (limited to 'arch/xtensa/kernel')
-rw-r--r-- | arch/xtensa/kernel/asm-offsets.c | 1 | ||||
-rw-r--r-- | arch/xtensa/kernel/pci.c | 95 | ||||
-rw-r--r-- | arch/xtensa/kernel/ptrace.c | 5 | ||||
-rw-r--r-- | arch/xtensa/kernel/syscalls.c | 153 | ||||
-rw-r--r-- | arch/xtensa/kernel/syscalls.h | 63 | ||||
-rw-r--r-- | arch/xtensa/kernel/traps.c | 4 | ||||
-rw-r--r-- | arch/xtensa/kernel/vmlinux.lds.S | 6 |
7 files changed, 46 insertions, 281 deletions
diff --git a/arch/xtensa/kernel/asm-offsets.c b/arch/xtensa/kernel/asm-offsets.c index 840cd9a1d3d2..7cd1d7f8f608 100644 --- a/arch/xtensa/kernel/asm-offsets.c +++ b/arch/xtensa/kernel/asm-offsets.c | |||
@@ -15,7 +15,6 @@ | |||
15 | #include <asm/processor.h> | 15 | #include <asm/processor.h> |
16 | 16 | ||
17 | #include <linux/types.h> | 17 | #include <linux/types.h> |
18 | #include <linux/sched.h> | ||
19 | #include <linux/stddef.h> | 18 | #include <linux/stddef.h> |
20 | #include <linux/thread_info.h> | 19 | #include <linux/thread_info.h> |
21 | #include <linux/ptrace.h> | 20 | #include <linux/ptrace.h> |
diff --git a/arch/xtensa/kernel/pci.c b/arch/xtensa/kernel/pci.c index d29a81648637..09887c96e9a1 100644 --- a/arch/xtensa/kernel/pci.c +++ b/arch/xtensa/kernel/pci.c | |||
@@ -57,50 +57,6 @@ struct pci_controller** pci_ctrl_tail = &pci_ctrl_head; | |||
57 | 57 | ||
58 | static int pci_bus_count; | 58 | static int pci_bus_count; |
59 | 59 | ||
60 | static void pcibios_fixup_resources(struct pci_dev* dev); | ||
61 | |||
62 | #if 0 // FIXME | ||
63 | struct pci_fixup pcibios_fixups[] = { | ||
64 | { DECLARE_PCI_FIXUP_HEADER, PCI_ANY_ID, PCI_ANY_ID, pcibios_fixup_resources }, | ||
65 | { 0 } | ||
66 | }; | ||
67 | #endif | ||
68 | |||
69 | void | ||
70 | pcibios_update_resource(struct pci_dev *dev, struct resource *root, | ||
71 | struct resource *res, int resource) | ||
72 | { | ||
73 | u32 new, check, mask; | ||
74 | int reg; | ||
75 | struct pci_controller* pci_ctrl = dev->sysdata; | ||
76 | |||
77 | new = res->start; | ||
78 | if (pci_ctrl && res->flags & IORESOURCE_IO) { | ||
79 | new -= pci_ctrl->io_space.base; | ||
80 | } | ||
81 | new |= (res->flags & PCI_REGION_FLAG_MASK); | ||
82 | if (resource < 6) { | ||
83 | reg = PCI_BASE_ADDRESS_0 + 4*resource; | ||
84 | } else if (resource == PCI_ROM_RESOURCE) { | ||
85 | res->flags |= PCI_ROM_ADDRESS_ENABLE; | ||
86 | reg = dev->rom_base_reg; | ||
87 | } else { | ||
88 | /* Somebody might have asked allocation of a non-standard resource */ | ||
89 | return; | ||
90 | } | ||
91 | |||
92 | pci_write_config_dword(dev, reg, new); | ||
93 | pci_read_config_dword(dev, reg, &check); | ||
94 | mask = (new & PCI_BASE_ADDRESS_SPACE_IO) ? | ||
95 | PCI_BASE_ADDRESS_IO_MASK : PCI_BASE_ADDRESS_MEM_MASK; | ||
96 | |||
97 | if ((new ^ check) & mask) { | ||
98 | printk(KERN_ERR "PCI: Error while updating region " | ||
99 | "%s/%d (%08x != %08x)\n", dev->slot_name, resource, | ||
100 | new, check); | ||
101 | } | ||
102 | } | ||
103 | |||
104 | /* | 60 | /* |
105 | * We need to avoid collisions with `mirrored' VGA ports | 61 | * We need to avoid collisions with `mirrored' VGA ports |
106 | * and other strange ISA hardware, so we always want the | 62 | * and other strange ISA hardware, so we always want the |
@@ -125,7 +81,7 @@ pcibios_align_resource(void *data, struct resource *res, unsigned long size, | |||
125 | 81 | ||
126 | if (size > 0x100) { | 82 | if (size > 0x100) { |
127 | printk(KERN_ERR "PCI: I/O Region %s/%d too large" | 83 | printk(KERN_ERR "PCI: I/O Region %s/%d too large" |
128 | " (%ld bytes)\n", dev->slot_name, | 84 | " (%ld bytes)\n", pci_name(dev), |
129 | dev->resource - res, size); | 85 | dev->resource - res, size); |
130 | } | 86 | } |
131 | 87 | ||
@@ -149,7 +105,7 @@ pcibios_enable_resources(struct pci_dev *dev, int mask) | |||
149 | r = &dev->resource[idx]; | 105 | r = &dev->resource[idx]; |
150 | if (!r->start && r->end) { | 106 | if (!r->start && r->end) { |
151 | printk (KERN_ERR "PCI: Device %s not available because " | 107 | printk (KERN_ERR "PCI: Device %s not available because " |
152 | "of resource collisions\n", dev->slot_name); | 108 | "of resource collisions\n", pci_name(dev)); |
153 | return -EINVAL; | 109 | return -EINVAL; |
154 | } | 110 | } |
155 | if (r->flags & IORESOURCE_IO) | 111 | if (r->flags & IORESOURCE_IO) |
@@ -161,7 +117,7 @@ pcibios_enable_resources(struct pci_dev *dev, int mask) | |||
161 | cmd |= PCI_COMMAND_MEMORY; | 117 | cmd |= PCI_COMMAND_MEMORY; |
162 | if (cmd != old_cmd) { | 118 | if (cmd != old_cmd) { |
163 | printk("PCI: Enabling device %s (%04x -> %04x)\n", | 119 | printk("PCI: Enabling device %s (%04x -> %04x)\n", |
164 | dev->slot_name, old_cmd, cmd); | 120 | pci_name(dev), old_cmd, cmd); |
165 | pci_write_config_word(dev, PCI_COMMAND, cmd); | 121 | pci_write_config_word(dev, PCI_COMMAND, cmd); |
166 | } | 122 | } |
167 | return 0; | 123 | return 0; |
@@ -293,7 +249,7 @@ int pcibios_enable_device(struct pci_dev *dev, int mask) | |||
293 | r = &dev->resource[idx]; | 249 | r = &dev->resource[idx]; |
294 | if (!r->start && r->end) { | 250 | if (!r->start && r->end) { |
295 | printk(KERN_ERR "PCI: Device %s not available because " | 251 | printk(KERN_ERR "PCI: Device %s not available because " |
296 | "of resource collisions\n", dev->slot_name); | 252 | "of resource collisions\n", pci_name(dev)); |
297 | return -EINVAL; | 253 | return -EINVAL; |
298 | } | 254 | } |
299 | if (r->flags & IORESOURCE_IO) | 255 | if (r->flags & IORESOURCE_IO) |
@@ -303,7 +259,7 @@ int pcibios_enable_device(struct pci_dev *dev, int mask) | |||
303 | } | 259 | } |
304 | if (cmd != old_cmd) { | 260 | if (cmd != old_cmd) { |
305 | printk("PCI: Enabling device %s (%04x -> %04x)\n", | 261 | printk("PCI: Enabling device %s (%04x -> %04x)\n", |
306 | dev->slot_name, old_cmd, cmd); | 262 | pci_name(dev), old_cmd, cmd); |
307 | pci_write_config_word(dev, PCI_COMMAND, cmd); | 263 | pci_write_config_word(dev, PCI_COMMAND, cmd); |
308 | } | 264 | } |
309 | 265 | ||
@@ -325,47 +281,6 @@ pci_controller_num(struct pci_dev *dev) | |||
325 | 281 | ||
326 | #endif /* CONFIG_PROC_FS */ | 282 | #endif /* CONFIG_PROC_FS */ |
327 | 283 | ||
328 | |||
329 | static void | ||
330 | pcibios_fixup_resources(struct pci_dev *dev) | ||
331 | { | ||
332 | struct pci_controller* pci_ctrl = (struct pci_controller *)dev->sysdata; | ||
333 | int i; | ||
334 | unsigned long offset; | ||
335 | |||
336 | if (!pci_ctrl) { | ||
337 | printk(KERN_ERR "No pci_ctrl for PCI dev %s!\n",dev->slot_name); | ||
338 | return; | ||
339 | } | ||
340 | for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) { | ||
341 | struct resource *res = dev->resource + i; | ||
342 | if (!res->start || !res->flags) | ||
343 | continue; | ||
344 | if (res->end == 0xffffffff) { | ||
345 | DBG("PCI:%s Resource %d [%08lx-%08lx] is unassigned\n", | ||
346 | dev->slot_name, i, res->start, res->end); | ||
347 | res->end -= res->start; | ||
348 | res->start = 0; | ||
349 | continue; | ||
350 | } | ||
351 | offset = 0; | ||
352 | if (res->flags & IORESOURCE_IO) | ||
353 | offset = (unsigned long) pci_ctrl->io_space.base; | ||
354 | else if (res->flags & IORESOURCE_MEM) | ||
355 | offset = (unsigned long) pci_ctrl->mem_space.base; | ||
356 | |||
357 | if (offset != 0) { | ||
358 | res->start += offset; | ||
359 | res->end += offset; | ||
360 | #ifdef DEBUG | ||
361 | printk("Fixup res %d (%lx) of dev %s: %lx -> %lx\n", | ||
362 | i, res->flags, dev->slot_name, | ||
363 | res->start - offset, res->start); | ||
364 | #endif | ||
365 | } | ||
366 | } | ||
367 | } | ||
368 | |||
369 | /* | 284 | /* |
370 | * Platform support for /proc/bus/pci/X/Y mmap()s, | 285 | * Platform support for /proc/bus/pci/X/Y mmap()s, |
371 | * modelled on the sparc64 implementation by Dave Miller. | 286 | * modelled on the sparc64 implementation by Dave Miller. |
diff --git a/arch/xtensa/kernel/ptrace.c b/arch/xtensa/kernel/ptrace.c index 9ef07a4dd2a2..2659efdd4e99 100644 --- a/arch/xtensa/kernel/ptrace.c +++ b/arch/xtensa/kernel/ptrace.c | |||
@@ -22,6 +22,7 @@ | |||
22 | #include <linux/smp.h> | 22 | #include <linux/smp.h> |
23 | #include <linux/smp_lock.h> | 23 | #include <linux/smp_lock.h> |
24 | #include <linux/security.h> | 24 | #include <linux/security.h> |
25 | #include <linux/signal.h> | ||
25 | 26 | ||
26 | #include <asm/pgtable.h> | 27 | #include <asm/pgtable.h> |
27 | #include <asm/page.h> | 28 | #include <asm/page.h> |
@@ -239,7 +240,7 @@ int sys_ptrace(long request, long pid, long addr, long data) | |||
239 | case PTRACE_CONT: /* restart after signal. */ | 240 | case PTRACE_CONT: /* restart after signal. */ |
240 | { | 241 | { |
241 | ret = -EIO; | 242 | ret = -EIO; |
242 | if ((unsigned long) data > _NSIG) | 243 | if (!valid_signal(data)) |
243 | break; | 244 | break; |
244 | if (request == PTRACE_SYSCALL) | 245 | if (request == PTRACE_SYSCALL) |
245 | set_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | 246 | set_tsk_thread_flag(child, TIF_SYSCALL_TRACE); |
@@ -269,7 +270,7 @@ int sys_ptrace(long request, long pid, long addr, long data) | |||
269 | 270 | ||
270 | case PTRACE_SINGLESTEP: | 271 | case PTRACE_SINGLESTEP: |
271 | ret = -EIO; | 272 | ret = -EIO; |
272 | if ((unsigned long) data > _NSIG) | 273 | if (!valid_signal(data)) |
273 | break; | 274 | break; |
274 | clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | 275 | clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); |
275 | child->ptrace |= PT_SINGLESTEP; | 276 | child->ptrace |= PT_SINGLESTEP; |
diff --git a/arch/xtensa/kernel/syscalls.c b/arch/xtensa/kernel/syscalls.c index abc8ed6c7026..f20c6494c518 100644 --- a/arch/xtensa/kernel/syscalls.c +++ b/arch/xtensa/kernel/syscalls.c | |||
@@ -42,12 +42,9 @@ | |||
42 | #include <asm/mman.h> | 42 | #include <asm/mman.h> |
43 | #include <asm/shmparam.h> | 43 | #include <asm/shmparam.h> |
44 | #include <asm/page.h> | 44 | #include <asm/page.h> |
45 | #include <asm/ipc.h> | ||
46 | 45 | ||
47 | extern void do_syscall_trace(void); | 46 | extern void do_syscall_trace(void); |
48 | typedef int (*syscall_t)(void *a0,...); | 47 | typedef int (*syscall_t)(void *a0,...); |
49 | extern int (*do_syscalls)(struct pt_regs *regs, syscall_t fun, | ||
50 | int narg); | ||
51 | extern syscall_t sys_call_table[]; | 48 | extern syscall_t sys_call_table[]; |
52 | extern unsigned char sys_narg_table[]; | 49 | extern unsigned char sys_narg_table[]; |
53 | 50 | ||
@@ -72,10 +69,8 @@ int sys_pipe(int __user *userfds) | |||
72 | /* | 69 | /* |
73 | * Common code for old and new mmaps. | 70 | * Common code for old and new mmaps. |
74 | */ | 71 | */ |
75 | 72 | long sys_mmap(unsigned long addr, unsigned long len, unsigned long prot, | |
76 | static inline long do_mmap2(unsigned long addr, unsigned long len, | 73 | unsigned long flags, unsigned long fd, unsigned long pgoff) |
77 | unsigned long prot, unsigned long flags, | ||
78 | unsigned long fd, unsigned long pgoff) | ||
79 | { | 74 | { |
80 | int error = -EBADF; | 75 | int error = -EBADF; |
81 | struct file * file = NULL; | 76 | struct file * file = NULL; |
@@ -97,29 +92,6 @@ out: | |||
97 | return error; | 92 | return error; |
98 | } | 93 | } |
99 | 94 | ||
100 | unsigned long old_mmap(unsigned long addr, size_t len, int prot, | ||
101 | int flags, int fd, off_t offset) | ||
102 | { | ||
103 | return do_mmap2(addr, len, prot, flags, fd, offset >> PAGE_SHIFT); | ||
104 | } | ||
105 | |||
106 | long sys_mmap2(unsigned long addr, unsigned long len, unsigned long prot, | ||
107 | unsigned long flags, unsigned long fd, unsigned long pgoff) | ||
108 | { | ||
109 | return do_mmap2(addr, len, prot, flags, fd, pgoff); | ||
110 | } | ||
111 | |||
112 | int sys_fork(struct pt_regs *regs) | ||
113 | { | ||
114 | return do_fork(SIGCHLD, regs->areg[1], regs, 0, NULL, NULL); | ||
115 | } | ||
116 | |||
117 | int sys_vfork(struct pt_regs *regs) | ||
118 | { | ||
119 | return do_fork(CLONE_VFORK|CLONE_VM|SIGCHLD, regs->areg[1], | ||
120 | regs, 0, NULL, NULL); | ||
121 | } | ||
122 | |||
123 | int sys_clone(struct pt_regs *regs) | 95 | int sys_clone(struct pt_regs *regs) |
124 | { | 96 | { |
125 | unsigned long clone_flags; | 97 | unsigned long clone_flags; |
@@ -162,30 +134,6 @@ int sys_uname(struct old_utsname * name) | |||
162 | return -EFAULT; | 134 | return -EFAULT; |
163 | } | 135 | } |
164 | 136 | ||
165 | int sys_olduname(struct oldold_utsname * name) | ||
166 | { | ||
167 | int error; | ||
168 | |||
169 | if (!name) | ||
170 | return -EFAULT; | ||
171 | if (!access_ok(VERIFY_WRITE,name,sizeof(struct oldold_utsname))) | ||
172 | return -EFAULT; | ||
173 | |||
174 | error = __copy_to_user(&name->sysname,&system_utsname.sysname,__OLD_UTS_LEN); | ||
175 | error -= __put_user(0,name->sysname+__OLD_UTS_LEN); | ||
176 | error -= __copy_to_user(&name->nodename,&system_utsname.nodename,__OLD_UTS_LEN); | ||
177 | error -= __put_user(0,name->nodename+__OLD_UTS_LEN); | ||
178 | error -= __copy_to_user(&name->release,&system_utsname.release,__OLD_UTS_LEN); | ||
179 | error -= __put_user(0,name->release+__OLD_UTS_LEN); | ||
180 | error -= __copy_to_user(&name->version,&system_utsname.version,__OLD_UTS_LEN); | ||
181 | error -= __put_user(0,name->version+__OLD_UTS_LEN); | ||
182 | error -= __copy_to_user(&name->machine,&system_utsname.machine,__OLD_UTS_LEN); | ||
183 | error -= __put_user(0,name->machine+__OLD_UTS_LEN); | ||
184 | |||
185 | return error ? -EFAULT : 0; | ||
186 | } | ||
187 | |||
188 | |||
189 | /* | 137 | /* |
190 | * Build the string table for the builtin "poor man's strace". | 138 | * Build the string table for the builtin "poor man's strace". |
191 | */ | 139 | */ |
@@ -319,100 +267,3 @@ void system_call (struct pt_regs *regs) | |||
319 | regs->areg[2] = res; | 267 | regs->areg[2] = res; |
320 | do_syscall_trace(); | 268 | do_syscall_trace(); |
321 | } | 269 | } |
322 | |||
323 | /* | ||
324 | * sys_ipc() is the de-multiplexer for the SysV IPC calls.. | ||
325 | * | ||
326 | * This is really horribly ugly. | ||
327 | */ | ||
328 | |||
329 | int sys_ipc (uint call, int first, int second, | ||
330 | int third, void __user *ptr, long fifth) | ||
331 | { | ||
332 | int version, ret; | ||
333 | |||
334 | version = call >> 16; /* hack for backward compatibility */ | ||
335 | call &= 0xffff; | ||
336 | ret = -ENOSYS; | ||
337 | |||
338 | switch (call) { | ||
339 | case SEMOP: | ||
340 | ret = sys_semtimedop (first, (struct sembuf __user *)ptr, | ||
341 | second, NULL); | ||
342 | break; | ||
343 | |||
344 | case SEMTIMEDOP: | ||
345 | ret = sys_semtimedop (first, (struct sembuf __user *)ptr, | ||
346 | second, (const struct timespec *) fifth); | ||
347 | break; | ||
348 | |||
349 | case SEMGET: | ||
350 | ret = sys_semget (first, second, third); | ||
351 | break; | ||
352 | |||
353 | case SEMCTL: { | ||
354 | union semun fourth; | ||
355 | |||
356 | if (ptr && !get_user(fourth.__pad, (void *__user *) ptr)) | ||
357 | ret = sys_semctl (first, second, third, fourth); | ||
358 | break; | ||
359 | } | ||
360 | |||
361 | case MSGSND: | ||
362 | ret = sys_msgsnd (first, (struct msgbuf __user*) ptr, | ||
363 | second, third); | ||
364 | break; | ||
365 | |||
366 | case MSGRCV: | ||
367 | switch (version) { | ||
368 | case 0: { | ||
369 | struct ipc_kludge tmp; | ||
370 | |||
371 | if (ptr && !copy_from_user(&tmp, | ||
372 | (struct ipc_kludge *) ptr, | ||
373 | sizeof (tmp))) | ||
374 | ret = sys_msgrcv (first, tmp.msgp, second, | ||
375 | tmp.msgtyp, third); | ||
376 | break; | ||
377 | } | ||
378 | |||
379 | default: | ||
380 | ret = sys_msgrcv (first, (struct msgbuf __user *) ptr, | ||
381 | second, 0, third); | ||
382 | break; | ||
383 | } | ||
384 | break; | ||
385 | |||
386 | case MSGGET: | ||
387 | ret = sys_msgget ((key_t) first, second); | ||
388 | break; | ||
389 | |||
390 | case MSGCTL: | ||
391 | ret = sys_msgctl (first, second, (struct msqid_ds __user*) ptr); | ||
392 | break; | ||
393 | |||
394 | case SHMAT: { | ||
395 | ulong raddr; | ||
396 | ret = do_shmat (first, (char __user *) ptr, second, &raddr); | ||
397 | |||
398 | if (!ret) | ||
399 | ret = put_user (raddr, (ulong __user *) third); | ||
400 | |||
401 | break; | ||
402 | } | ||
403 | |||
404 | case SHMDT: | ||
405 | ret = sys_shmdt ((char __user *)ptr); | ||
406 | break; | ||
407 | |||
408 | case SHMGET: | ||
409 | ret = sys_shmget (first, second, third); | ||
410 | break; | ||
411 | |||
412 | case SHMCTL: | ||
413 | ret = sys_shmctl (first, second, (struct shmid_ds __user*) ptr); | ||
414 | break; | ||
415 | } | ||
416 | return ret; | ||
417 | } | ||
418 | |||
diff --git a/arch/xtensa/kernel/syscalls.h b/arch/xtensa/kernel/syscalls.h index 5b3f75f50feb..216c10a31501 100644 --- a/arch/xtensa/kernel/syscalls.h +++ b/arch/xtensa/kernel/syscalls.h | |||
@@ -25,41 +25,40 @@ | |||
25 | */ | 25 | */ |
26 | 26 | ||
27 | SYSCALL(0, 0) /* 00 */ | 27 | SYSCALL(0, 0) /* 00 */ |
28 | |||
29 | SYSCALL(sys_exit, 1) | 28 | SYSCALL(sys_exit, 1) |
30 | SYSCALL(sys_fork, 0) | 29 | SYSCALL(sys_ni_syscall, 0) |
31 | SYSCALL(sys_read, 3) | 30 | SYSCALL(sys_read, 3) |
32 | SYSCALL(sys_write, 3) | 31 | SYSCALL(sys_write, 3) |
33 | SYSCALL(sys_open, 3) /* 05 */ | 32 | SYSCALL(sys_open, 3) /* 05 */ |
34 | SYSCALL(sys_close, 1) | 33 | SYSCALL(sys_close, 1) |
35 | SYSCALL(sys_waitpid, 3) | 34 | SYSCALL(sys_ni_syscall, 3) |
36 | SYSCALL(sys_creat, 2) | 35 | SYSCALL(sys_creat, 2) |
37 | SYSCALL(sys_link, 2) | 36 | SYSCALL(sys_link, 2) |
38 | SYSCALL(sys_unlink, 1) /* 10 */ | 37 | SYSCALL(sys_unlink, 1) /* 10 */ |
39 | SYSCALL(sys_execve, 0) | 38 | SYSCALL(sys_execve, 0) |
40 | SYSCALL(sys_chdir, 1) | 39 | SYSCALL(sys_chdir, 1) |
41 | SYSCALL(sys_time, 1) | 40 | SYSCALL(sys_ni_syscall, 1) |
42 | SYSCALL(sys_mknod, 3) | 41 | SYSCALL(sys_mknod, 3) |
43 | SYSCALL(sys_chmod, 2) /* 15 */ | 42 | SYSCALL(sys_chmod, 2) /* 15 */ |
44 | SYSCALL(sys_lchown, 3) | 43 | SYSCALL(sys_lchown, 3) |
45 | SYSCALL(sys_ni_syscall, 0) | 44 | SYSCALL(sys_ni_syscall, 0) |
46 | SYSCALL(sys_stat, 2) | 45 | SYSCALL(sys_newstat, 2) |
47 | SYSCALL(sys_lseek, 3) | 46 | SYSCALL(sys_lseek, 3) |
48 | SYSCALL(sys_getpid, 0) /* 20 */ | 47 | SYSCALL(sys_getpid, 0) /* 20 */ |
49 | SYSCALL(sys_mount, 5) | 48 | SYSCALL(sys_mount, 5) |
50 | SYSCALL(sys_oldumount, 1) | 49 | SYSCALL(sys_ni_syscall, 1) |
51 | SYSCALL(sys_setuid, 1) | 50 | SYSCALL(sys_setuid, 1) |
52 | SYSCALL(sys_getuid, 0) | 51 | SYSCALL(sys_getuid, 0) |
53 | SYSCALL(sys_stime, 1) /* 25 */ | 52 | SYSCALL(sys_ni_syscall, 1) /* 25 */ |
54 | SYSCALL(sys_ptrace, 4) | 53 | SYSCALL(sys_ptrace, 4) |
55 | SYSCALL(sys_alarm, 1) | 54 | SYSCALL(sys_ni_syscall, 1) |
56 | SYSCALL(sys_fstat, 2) | 55 | SYSCALL(sys_newfstat, 2) |
57 | SYSCALL(sys_pause, 0) | 56 | SYSCALL(sys_ni_syscall, 0) |
58 | SYSCALL(sys_utime, 2) /* 30 */ | 57 | SYSCALL(sys_utime, 2) /* 30 */ |
59 | SYSCALL(sys_ni_syscall, 0) | 58 | SYSCALL(sys_ni_syscall, 0) |
60 | SYSCALL(sys_ni_syscall, 0) | 59 | SYSCALL(sys_ni_syscall, 0) |
61 | SYSCALL(sys_access, 2) | 60 | SYSCALL(sys_access, 2) |
62 | SYSCALL(sys_nice, 1) | 61 | SYSCALL(sys_ni_syscall, 1) |
63 | SYSCALL(sys_ni_syscall, 0) /* 35 */ | 62 | SYSCALL(sys_ni_syscall, 0) /* 35 */ |
64 | SYSCALL(sys_sync, 0) | 63 | SYSCALL(sys_sync, 0) |
65 | SYSCALL(sys_kill, 2) | 64 | SYSCALL(sys_kill, 2) |
@@ -73,7 +72,7 @@ SYSCALL(sys_ni_syscall, 0) | |||
73 | SYSCALL(sys_brk, 1) /* 45 */ | 72 | SYSCALL(sys_brk, 1) /* 45 */ |
74 | SYSCALL(sys_setgid, 1) | 73 | SYSCALL(sys_setgid, 1) |
75 | SYSCALL(sys_getgid, 0) | 74 | SYSCALL(sys_getgid, 0) |
76 | SYSCALL(sys_ni_syscall, 0) /* was signal(2) */ | 75 | SYSCALL(sys_ni_syscall, 0) |
77 | SYSCALL(sys_geteuid, 0) | 76 | SYSCALL(sys_geteuid, 0) |
78 | SYSCALL(sys_getegid, 0) /* 50 */ | 77 | SYSCALL(sys_getegid, 0) /* 50 */ |
79 | SYSCALL(sys_acct, 1) | 78 | SYSCALL(sys_acct, 1) |
@@ -84,21 +83,21 @@ SYSCALL(sys_fcntl, 3) /* 55 */ | |||
84 | SYSCALL(sys_ni_syscall, 2) | 83 | SYSCALL(sys_ni_syscall, 2) |
85 | SYSCALL(sys_setpgid, 2) | 84 | SYSCALL(sys_setpgid, 2) |
86 | SYSCALL(sys_ni_syscall, 0) | 85 | SYSCALL(sys_ni_syscall, 0) |
87 | SYSCALL(sys_olduname, 1) | 86 | SYSCALL(sys_ni_syscall, 0) |
88 | SYSCALL(sys_umask, 1) /* 60 */ | 87 | SYSCALL(sys_umask, 1) /* 60 */ |
89 | SYSCALL(sys_chroot, 1) | 88 | SYSCALL(sys_chroot, 1) |
90 | SYSCALL(sys_ustat, 2) | 89 | SYSCALL(sys_ustat, 2) |
91 | SYSCALL(sys_dup2, 2) | 90 | SYSCALL(sys_dup2, 2) |
92 | SYSCALL(sys_getppid, 0) | 91 | SYSCALL(sys_getppid, 0) |
93 | SYSCALL(sys_getpgrp, 0) /* 65 */ | 92 | SYSCALL(sys_ni_syscall, 0) /* 65 */ |
94 | SYSCALL(sys_setsid, 0) | 93 | SYSCALL(sys_setsid, 0) |
95 | SYSCALL(sys_sigaction, 3) | 94 | SYSCALL(sys_sigaction, 3) |
96 | SYSCALL(sys_sgetmask, 0) | 95 | SYSCALL(sys_ni_syscall, 0) |
97 | SYSCALL(sys_ssetmask, 1) | 96 | SYSCALL(sys_ni_syscall, 1) |
98 | SYSCALL(sys_setreuid, 2) /* 70 */ | 97 | SYSCALL(sys_setreuid, 2) /* 70 */ |
99 | SYSCALL(sys_setregid, 2) | 98 | SYSCALL(sys_setregid, 2) |
100 | SYSCALL(sys_sigsuspend, 0) | 99 | SYSCALL(sys_sigsuspend, 0) |
101 | SYSCALL(sys_sigpending, 1) | 100 | SYSCALL(sys_ni_syscall, 1) |
102 | SYSCALL(sys_sethostname, 2) | 101 | SYSCALL(sys_sethostname, 2) |
103 | SYSCALL(sys_setrlimit, 2) /* 75 */ | 102 | SYSCALL(sys_setrlimit, 2) /* 75 */ |
104 | SYSCALL(sys_getrlimit, 2) | 103 | SYSCALL(sys_getrlimit, 2) |
@@ -107,15 +106,15 @@ SYSCALL(sys_gettimeofday, 2) | |||
107 | SYSCALL(sys_settimeofday, 2) | 106 | SYSCALL(sys_settimeofday, 2) |
108 | SYSCALL(sys_getgroups, 2) /* 80 */ | 107 | SYSCALL(sys_getgroups, 2) /* 80 */ |
109 | SYSCALL(sys_setgroups, 2) | 108 | SYSCALL(sys_setgroups, 2) |
110 | SYSCALL(sys_ni_syscall, 0) /* old_select */ | 109 | SYSCALL(sys_ni_syscall, 0) |
111 | SYSCALL(sys_symlink, 2) | 110 | SYSCALL(sys_symlink, 2) |
112 | SYSCALL(sys_lstat, 2) | 111 | SYSCALL(sys_newlstat, 2) |
113 | SYSCALL(sys_readlink, 3) /* 85 */ | 112 | SYSCALL(sys_readlink, 3) /* 85 */ |
114 | SYSCALL(sys_uselib, 1) | 113 | SYSCALL(sys_uselib, 1) |
115 | SYSCALL(sys_swapon, 2) | 114 | SYSCALL(sys_swapon, 2) |
116 | SYSCALL(sys_reboot, 3) | 115 | SYSCALL(sys_reboot, 3) |
117 | SYSCALL(old_readdir, 3) | 116 | SYSCALL(sys_ni_syscall, 3) |
118 | SYSCALL(old_mmap, 6) /* 90 */ | 117 | SYSCALL(sys_ni_syscall, 6) /* 90 */ |
119 | SYSCALL(sys_munmap, 2) | 118 | SYSCALL(sys_munmap, 2) |
120 | SYSCALL(sys_truncate, 2) | 119 | SYSCALL(sys_truncate, 2) |
121 | SYSCALL(sys_ftruncate, 2) | 120 | SYSCALL(sys_ftruncate, 2) |
@@ -127,7 +126,7 @@ SYSCALL(sys_ni_syscall, 0) | |||
127 | SYSCALL(sys_statfs, 2) | 126 | SYSCALL(sys_statfs, 2) |
128 | SYSCALL(sys_fstatfs, 2) /* 100 */ | 127 | SYSCALL(sys_fstatfs, 2) /* 100 */ |
129 | SYSCALL(sys_ni_syscall, 3) | 128 | SYSCALL(sys_ni_syscall, 3) |
130 | SYSCALL(sys_socketcall, 2) | 129 | SYSCALL(sys_ni_syscall, 2) |
131 | SYSCALL(sys_syslog, 3) | 130 | SYSCALL(sys_syslog, 3) |
132 | SYSCALL(sys_setitimer, 3) | 131 | SYSCALL(sys_setitimer, 3) |
133 | SYSCALL(sys_getitimer, 2) /* 105 */ | 132 | SYSCALL(sys_getitimer, 2) /* 105 */ |
@@ -137,32 +136,32 @@ SYSCALL(sys_newfstat, 2) | |||
137 | SYSCALL(sys_uname, 1) | 136 | SYSCALL(sys_uname, 1) |
138 | SYSCALL(sys_ni_syscall, 0) /* 110 */ | 137 | SYSCALL(sys_ni_syscall, 0) /* 110 */ |
139 | SYSCALL(sys_vhangup, 0) | 138 | SYSCALL(sys_vhangup, 0) |
140 | SYSCALL(sys_ni_syscall, 0) /* was sys_idle() */ | 139 | SYSCALL(sys_ni_syscall, 0) |
141 | SYSCALL(sys_ni_syscall, 0) | 140 | SYSCALL(sys_ni_syscall, 0) |
142 | SYSCALL(sys_wait4, 4) | 141 | SYSCALL(sys_wait4, 4) |
143 | SYSCALL(sys_swapoff, 1) /* 115 */ | 142 | SYSCALL(sys_swapoff, 1) /* 115 */ |
144 | SYSCALL(sys_sysinfo, 1) | 143 | SYSCALL(sys_sysinfo, 1) |
145 | SYSCALL(sys_ipc, 5) /* 6 really, but glibc uses only 5) */ | 144 | SYSCALL(sys_ni_syscall, 0) |
146 | SYSCALL(sys_fsync, 1) | 145 | SYSCALL(sys_fsync, 1) |
147 | SYSCALL(sys_sigreturn, 0) | 146 | SYSCALL(sys_sigreturn, 0) |
148 | SYSCALL(sys_clone, 0) /* 120 */ | 147 | SYSCALL(sys_clone, 0) /* 120 */ |
149 | SYSCALL(sys_setdomainname, 2) | 148 | SYSCALL(sys_setdomainname, 2) |
150 | SYSCALL(sys_newuname, 1) | 149 | SYSCALL(sys_newuname, 1) |
151 | SYSCALL(sys_ni_syscall, 0) /* sys_modify_ldt */ | 150 | SYSCALL(sys_ni_syscall, 0) |
152 | SYSCALL(sys_adjtimex, 1) | 151 | SYSCALL(sys_adjtimex, 1) |
153 | SYSCALL(sys_mprotect, 3) /* 125 */ | 152 | SYSCALL(sys_mprotect, 3) /* 125 */ |
154 | SYSCALL(sys_sigprocmask, 3) | 153 | SYSCALL(sys_ni_syscall, 3) |
155 | SYSCALL(sys_ni_syscall, 2) /* old sys_create_module */ | 154 | SYSCALL(sys_ni_syscall, 2) |
156 | SYSCALL(sys_init_module, 2) | 155 | SYSCALL(sys_init_module, 2) |
157 | SYSCALL(sys_delete_module, 1) | 156 | SYSCALL(sys_delete_module, 1) |
158 | SYSCALL(sys_ni_syscall, 1) /* old sys_get_kernel_sysm */ /* 130 */ | 157 | SYSCALL(sys_ni_syscall, 1) /* 130 */ |
159 | SYSCALL(sys_quotactl, 0) | 158 | SYSCALL(sys_quotactl, 0) |
160 | SYSCALL(sys_getpgid, 1) | 159 | SYSCALL(sys_getpgid, 1) |
161 | SYSCALL(sys_fchdir, 1) | 160 | SYSCALL(sys_fchdir, 1) |
162 | SYSCALL(sys_bdflush, 2) | 161 | SYSCALL(sys_bdflush, 2) |
163 | SYSCALL(sys_sysfs, 3) /* 135 */ | 162 | SYSCALL(sys_sysfs, 3) /* 135 */ |
164 | SYSCALL(sys_personality, 1) | 163 | SYSCALL(sys_personality, 1) |
165 | SYSCALL(sys_ni_syscall, 0) /* for afs_syscall */ | 164 | SYSCALL(sys_ni_syscall, 0) |
166 | SYSCALL(sys_setfsuid, 1) | 165 | SYSCALL(sys_setfsuid, 1) |
167 | SYSCALL(sys_setfsgid, 1) | 166 | SYSCALL(sys_setfsgid, 1) |
168 | SYSCALL(sys_llseek, 5) /* 140 */ | 167 | SYSCALL(sys_llseek, 5) /* 140 */ |
@@ -212,7 +211,7 @@ SYSCALL(sys_socket, 3) | |||
212 | SYSCALL(sys_socketpair, 4) | 211 | SYSCALL(sys_socketpair, 4) |
213 | SYSCALL(sys_setresuid, 3) /* 185 */ | 212 | SYSCALL(sys_setresuid, 3) /* 185 */ |
214 | SYSCALL(sys_getresuid, 3) | 213 | SYSCALL(sys_getresuid, 3) |
215 | SYSCALL(sys_ni_syscall, 5) /* old sys_query_module */ | 214 | SYSCALL(sys_ni_syscall, 5) |
216 | SYSCALL(sys_poll, 3) | 215 | SYSCALL(sys_poll, 3) |
217 | SYSCALL(sys_nfsservctl, 3) | 216 | SYSCALL(sys_nfsservctl, 3) |
218 | SYSCALL(sys_setresgid, 3) /* 190 */ | 217 | SYSCALL(sys_setresgid, 3) /* 190 */ |
@@ -235,7 +234,7 @@ SYSCALL(sys_sigaltstack, 0) | |||
235 | SYSCALL(sys_sendfile, 4) | 234 | SYSCALL(sys_sendfile, 4) |
236 | SYSCALL(sys_ni_syscall, 0) | 235 | SYSCALL(sys_ni_syscall, 0) |
237 | SYSCALL(sys_ni_syscall, 0) | 236 | SYSCALL(sys_ni_syscall, 0) |
238 | SYSCALL(sys_mmap2, 6) /* 210 */ | 237 | SYSCALL(sys_mmap, 6) /* 210 */ |
239 | SYSCALL(sys_truncate64, 2) | 238 | SYSCALL(sys_truncate64, 2) |
240 | SYSCALL(sys_ftruncate64, 2) | 239 | SYSCALL(sys_ftruncate64, 2) |
241 | SYSCALL(sys_stat64, 2) | 240 | SYSCALL(sys_stat64, 2) |
@@ -245,4 +244,4 @@ SYSCALL(sys_pivot_root, 2) | |||
245 | SYSCALL(sys_mincore, 3) | 244 | SYSCALL(sys_mincore, 3) |
246 | SYSCALL(sys_madvise, 3) | 245 | SYSCALL(sys_madvise, 3) |
247 | SYSCALL(sys_getdents64, 3) | 246 | SYSCALL(sys_getdents64, 3) |
248 | SYSCALL(sys_vfork, 0) /* 220 */ | 247 | SYSCALL(sys_ni_syscall, 0) /* 220 */ |
diff --git a/arch/xtensa/kernel/traps.c b/arch/xtensa/kernel/traps.c index 804246e743b1..225d64d73f04 100644 --- a/arch/xtensa/kernel/traps.c +++ b/arch/xtensa/kernel/traps.c | |||
@@ -29,6 +29,7 @@ | |||
29 | #include <linux/module.h> | 29 | #include <linux/module.h> |
30 | #include <linux/stringify.h> | 30 | #include <linux/stringify.h> |
31 | #include <linux/kallsyms.h> | 31 | #include <linux/kallsyms.h> |
32 | #include <linux/delay.h> | ||
32 | 33 | ||
33 | #include <asm/ptrace.h> | 34 | #include <asm/ptrace.h> |
34 | #include <asm/timex.h> | 35 | #include <asm/timex.h> |
@@ -488,8 +489,7 @@ void die(const char * str, struct pt_regs * regs, long err) | |||
488 | 489 | ||
489 | if (panic_on_oops) { | 490 | if (panic_on_oops) { |
490 | printk(KERN_EMERG "Fatal exception: panic in 5 seconds\n"); | 491 | printk(KERN_EMERG "Fatal exception: panic in 5 seconds\n"); |
491 | set_current_state(TASK_UNINTERRUPTIBLE); | 492 | ssleep(5); |
492 | schedule_timeout(5 * HZ); | ||
493 | panic("Fatal exception"); | 493 | panic("Fatal exception"); |
494 | } | 494 | } |
495 | do_exit(err); | 495 | do_exit(err); |
diff --git a/arch/xtensa/kernel/vmlinux.lds.S b/arch/xtensa/kernel/vmlinux.lds.S index 476b2b53cd01..5ed71dfc8110 100644 --- a/arch/xtensa/kernel/vmlinux.lds.S +++ b/arch/xtensa/kernel/vmlinux.lds.S | |||
@@ -90,10 +90,10 @@ SECTIONS | |||
90 | *(.literal .text) | 90 | *(.literal .text) |
91 | *(.srom.text) | 91 | *(.srom.text) |
92 | VMLINUX_SYMBOL(__sched_text_start) = .; | 92 | VMLINUX_SYMBOL(__sched_text_start) = .; |
93 | *(.sched.text.literal .sched.text) | 93 | *(.sched.literal .sched.text) |
94 | VMLINUX_SYMBOL(__sched_text_end) = .; | 94 | VMLINUX_SYMBOL(__sched_text_end) = .; |
95 | VMLINUX_SYMBOL(__lock_text_start) = .; | 95 | VMLINUX_SYMBOL(__lock_text_start) = .; |
96 | *(.spinlock.text.literal .spinlock.text) | 96 | *(.spinlock.literal .spinlock.text) |
97 | VMLINUX_SYMBOL(__lock_text_end) = .; | 97 | VMLINUX_SYMBOL(__lock_text_end) = .; |
98 | 98 | ||
99 | } | 99 | } |
@@ -164,7 +164,7 @@ SECTIONS | |||
164 | __init_begin = .; | 164 | __init_begin = .; |
165 | .init.text : { | 165 | .init.text : { |
166 | _sinittext = .; | 166 | _sinittext = .; |
167 | *(.init.text.literal) *(.init.text) | 167 | *(.init.literal) *(.init.text) |
168 | _einittext = .; | 168 | _einittext = .; |
169 | } | 169 | } |
170 | 170 | ||