diff options
Diffstat (limited to 'arch/alpha')
-rw-r--r-- | arch/alpha/include/asm/Kbuild | 1 | ||||
-rw-r--r-- | arch/alpha/include/asm/ioctls.h | 3 | ||||
-rw-r--r-- | arch/alpha/include/asm/mman.h | 11 | ||||
-rw-r--r-- | arch/alpha/include/asm/ptrace.h | 1 | ||||
-rw-r--r-- | arch/alpha/include/asm/signal.h | 3 | ||||
-rw-r--r-- | arch/alpha/include/asm/unistd.h | 3 | ||||
-rw-r--r-- | arch/alpha/kernel/binfmt_loader.c | 4 | ||||
-rw-r--r-- | arch/alpha/kernel/entry.S | 51 | ||||
-rw-r--r-- | arch/alpha/kernel/process.c | 62 | ||||
-rw-r--r-- | arch/alpha/kernel/signal.c | 16 | ||||
-rw-r--r-- | arch/alpha/kernel/srmcons.c | 5 | ||||
-rw-r--r-- | arch/alpha/kernel/systbls.S | 6 |
12 files changed, 62 insertions, 104 deletions
diff --git a/arch/alpha/include/asm/Kbuild b/arch/alpha/include/asm/Kbuild index 64ffc9e9e548..dcfabb9f05a0 100644 --- a/arch/alpha/include/asm/Kbuild +++ b/arch/alpha/include/asm/Kbuild | |||
@@ -11,3 +11,4 @@ header-y += reg.h | |||
11 | header-y += regdef.h | 11 | header-y += regdef.h |
12 | header-y += sysinfo.h | 12 | header-y += sysinfo.h |
13 | generic-y += exec.h | 13 | generic-y += exec.h |
14 | generic-y += trace_clock.h | ||
diff --git a/arch/alpha/include/asm/ioctls.h b/arch/alpha/include/asm/ioctls.h index 80e1cee90f1f..92c557be49fc 100644 --- a/arch/alpha/include/asm/ioctls.h +++ b/arch/alpha/include/asm/ioctls.h | |||
@@ -95,6 +95,9 @@ | |||
95 | #define TIOCGDEV _IOR('T',0x32, unsigned int) /* Get primary device node of /dev/console */ | 95 | #define TIOCGDEV _IOR('T',0x32, unsigned int) /* Get primary device node of /dev/console */ |
96 | #define TIOCSIG _IOW('T',0x36, int) /* Generate signal on Pty slave */ | 96 | #define TIOCSIG _IOW('T',0x36, int) /* Generate signal on Pty slave */ |
97 | #define TIOCVHANGUP 0x5437 | 97 | #define TIOCVHANGUP 0x5437 |
98 | #define TIOCGPKT _IOR('T', 0x38, int) /* Get packet mode state */ | ||
99 | #define TIOCGPTLCK _IOR('T', 0x39, int) /* Get Pty lock state */ | ||
100 | #define TIOCGEXCL _IOR('T', 0x40, int) /* Get exclusive mode state */ | ||
98 | 101 | ||
99 | #define TIOCSERCONFIG 0x5453 | 102 | #define TIOCSERCONFIG 0x5453 |
100 | #define TIOCSERGWILD 0x5454 | 103 | #define TIOCSERGWILD 0x5454 |
diff --git a/arch/alpha/include/asm/mman.h b/arch/alpha/include/asm/mman.h index cbeb3616a28e..0086b472bc2b 100644 --- a/arch/alpha/include/asm/mman.h +++ b/arch/alpha/include/asm/mman.h | |||
@@ -63,4 +63,15 @@ | |||
63 | /* compatibility flags */ | 63 | /* compatibility flags */ |
64 | #define MAP_FILE 0 | 64 | #define MAP_FILE 0 |
65 | 65 | ||
66 | /* | ||
67 | * When MAP_HUGETLB is set bits [26:31] encode the log2 of the huge page size. | ||
68 | * This gives us 6 bits, which is enough until someone invents 128 bit address | ||
69 | * spaces. | ||
70 | * | ||
71 | * Assume these are all power of twos. | ||
72 | * When 0 use the default page size. | ||
73 | */ | ||
74 | #define MAP_HUGE_SHIFT 26 | ||
75 | #define MAP_HUGE_MASK 0x3f | ||
76 | |||
66 | #endif /* __ALPHA_MMAN_H__ */ | 77 | #endif /* __ALPHA_MMAN_H__ */ |
diff --git a/arch/alpha/include/asm/ptrace.h b/arch/alpha/include/asm/ptrace.h index b87755a19554..b4c5b2fbb647 100644 --- a/arch/alpha/include/asm/ptrace.h +++ b/arch/alpha/include/asm/ptrace.h | |||
@@ -78,6 +78,7 @@ struct switch_stack { | |||
78 | 78 | ||
79 | #define current_pt_regs() \ | 79 | #define current_pt_regs() \ |
80 | ((struct pt_regs *) ((char *)current_thread_info() + 2*PAGE_SIZE) - 1) | 80 | ((struct pt_regs *) ((char *)current_thread_info() + 2*PAGE_SIZE) - 1) |
81 | #define signal_pt_regs current_pt_regs | ||
81 | 82 | ||
82 | #define force_successful_syscall_return() (current_pt_regs()->r0 = 0) | 83 | #define force_successful_syscall_return() (current_pt_regs()->r0 = 0) |
83 | 84 | ||
diff --git a/arch/alpha/include/asm/signal.h b/arch/alpha/include/asm/signal.h index a9388300abb1..45552862cc10 100644 --- a/arch/alpha/include/asm/signal.h +++ b/arch/alpha/include/asm/signal.h | |||
@@ -164,9 +164,6 @@ struct sigstack { | |||
164 | 164 | ||
165 | #ifdef __KERNEL__ | 165 | #ifdef __KERNEL__ |
166 | #include <asm/sigcontext.h> | 166 | #include <asm/sigcontext.h> |
167 | |||
168 | #define ptrace_signal_deliver(regs, cookie) do { } while (0) | ||
169 | |||
170 | #endif | 167 | #endif |
171 | 168 | ||
172 | #endif | 169 | #endif |
diff --git a/arch/alpha/include/asm/unistd.h b/arch/alpha/include/asm/unistd.h index 7826e227e4d0..eb3a4664ced2 100644 --- a/arch/alpha/include/asm/unistd.h +++ b/arch/alpha/include/asm/unistd.h | |||
@@ -482,6 +482,9 @@ | |||
482 | #define __ARCH_WANT_SYS_SIGPENDING | 482 | #define __ARCH_WANT_SYS_SIGPENDING |
483 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND | 483 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND |
484 | #define __ARCH_WANT_SYS_EXECVE | 484 | #define __ARCH_WANT_SYS_EXECVE |
485 | #define __ARCH_WANT_SYS_FORK | ||
486 | #define __ARCH_WANT_SYS_VFORK | ||
487 | #define __ARCH_WANT_SYS_CLONE | ||
485 | 488 | ||
486 | /* "Conditional" syscalls. What we want is | 489 | /* "Conditional" syscalls. What we want is |
487 | 490 | ||
diff --git a/arch/alpha/kernel/binfmt_loader.c b/arch/alpha/kernel/binfmt_loader.c index d1f474d1d44d..9525660c93c0 100644 --- a/arch/alpha/kernel/binfmt_loader.c +++ b/arch/alpha/kernel/binfmt_loader.c | |||
@@ -5,7 +5,7 @@ | |||
5 | #include <linux/binfmts.h> | 5 | #include <linux/binfmts.h> |
6 | #include <linux/a.out.h> | 6 | #include <linux/a.out.h> |
7 | 7 | ||
8 | static int load_binary(struct linux_binprm *bprm, struct pt_regs *regs) | 8 | static int load_binary(struct linux_binprm *bprm) |
9 | { | 9 | { |
10 | struct exec *eh = (struct exec *)bprm->buf; | 10 | struct exec *eh = (struct exec *)bprm->buf; |
11 | unsigned long loader; | 11 | unsigned long loader; |
@@ -37,7 +37,7 @@ static int load_binary(struct linux_binprm *bprm, struct pt_regs *regs) | |||
37 | retval = prepare_binprm(bprm); | 37 | retval = prepare_binprm(bprm); |
38 | if (retval < 0) | 38 | if (retval < 0) |
39 | return retval; | 39 | return retval; |
40 | return search_binary_handler(bprm,regs); | 40 | return search_binary_handler(bprm); |
41 | } | 41 | } |
42 | 42 | ||
43 | static struct linux_binfmt loader_format = { | 43 | static struct linux_binfmt loader_format = { |
diff --git a/arch/alpha/kernel/entry.S b/arch/alpha/kernel/entry.S index a7607832dd4f..f62a994ef126 100644 --- a/arch/alpha/kernel/entry.S +++ b/arch/alpha/kernel/entry.S | |||
@@ -612,47 +612,24 @@ ret_from_kernel_thread: | |||
612 | * Special system calls. Most of these are special in that they either | 612 | * Special system calls. Most of these are special in that they either |
613 | * have to play switch_stack games or in some way use the pt_regs struct. | 613 | * have to play switch_stack games or in some way use the pt_regs struct. |
614 | */ | 614 | */ |
615 | .align 4 | ||
616 | .globl sys_fork | ||
617 | .ent sys_fork | ||
618 | sys_fork: | ||
619 | .prologue 0 | ||
620 | mov $sp, $21 | ||
621 | bsr $1, do_switch_stack | ||
622 | bis $31, SIGCHLD, $16 | ||
623 | mov $31, $17 | ||
624 | mov $31, $18 | ||
625 | mov $31, $19 | ||
626 | mov $31, $20 | ||
627 | jsr $26, alpha_clone | ||
628 | bsr $1, undo_switch_stack | ||
629 | ret | ||
630 | .end sys_fork | ||
631 | 615 | ||
616 | .macro fork_like name | ||
632 | .align 4 | 617 | .align 4 |
633 | .globl sys_clone | 618 | .globl alpha_\name |
634 | .ent sys_clone | 619 | .ent alpha_\name |
635 | sys_clone: | 620 | alpha_\name: |
636 | .prologue 0 | 621 | .prologue 0 |
637 | mov $sp, $21 | ||
638 | bsr $1, do_switch_stack | 622 | bsr $1, do_switch_stack |
639 | /* $16, $17, $18, $19, $20 come from the user. */ | 623 | jsr $26, sys_\name |
640 | jsr $26, alpha_clone | 624 | ldq $26, 56($sp) |
641 | bsr $1, undo_switch_stack | 625 | lda $sp, SWITCH_STACK_SIZE($sp) |
642 | ret | 626 | ret |
643 | .end sys_clone | 627 | .end alpha_\name |
628 | .endm | ||
644 | 629 | ||
645 | .align 4 | 630 | fork_like fork |
646 | .globl sys_vfork | 631 | fork_like vfork |
647 | .ent sys_vfork | 632 | fork_like clone |
648 | sys_vfork: | ||
649 | .prologue 0 | ||
650 | mov $sp, $16 | ||
651 | bsr $1, do_switch_stack | ||
652 | jsr $26, alpha_vfork | ||
653 | bsr $1, undo_switch_stack | ||
654 | ret | ||
655 | .end sys_vfork | ||
656 | 633 | ||
657 | .align 4 | 634 | .align 4 |
658 | .globl sys_sigreturn | 635 | .globl sys_sigreturn |
@@ -661,8 +638,6 @@ sys_sigreturn: | |||
661 | .prologue 0 | 638 | .prologue 0 |
662 | lda $9, ret_from_straced | 639 | lda $9, ret_from_straced |
663 | cmpult $26, $9, $9 | 640 | cmpult $26, $9, $9 |
664 | mov $sp, $17 | ||
665 | lda $18, -SWITCH_STACK_SIZE($sp) | ||
666 | lda $sp, -SWITCH_STACK_SIZE($sp) | 641 | lda $sp, -SWITCH_STACK_SIZE($sp) |
667 | jsr $26, do_sigreturn | 642 | jsr $26, do_sigreturn |
668 | bne $9, 1f | 643 | bne $9, 1f |
@@ -678,8 +653,6 @@ sys_rt_sigreturn: | |||
678 | .prologue 0 | 653 | .prologue 0 |
679 | lda $9, ret_from_straced | 654 | lda $9, ret_from_straced |
680 | cmpult $26, $9, $9 | 655 | cmpult $26, $9, $9 |
681 | mov $sp, $17 | ||
682 | lda $18, -SWITCH_STACK_SIZE($sp) | ||
683 | lda $sp, -SWITCH_STACK_SIZE($sp) | 656 | lda $sp, -SWITCH_STACK_SIZE($sp) |
684 | jsr $26, do_rt_sigreturn | 657 | jsr $26, do_rt_sigreturn |
685 | bne $9, 1f | 658 | bne $9, 1f |
diff --git a/arch/alpha/kernel/process.c b/arch/alpha/kernel/process.c index 51987dcf79b8..b5d0d0923699 100644 --- a/arch/alpha/kernel/process.c +++ b/arch/alpha/kernel/process.c | |||
@@ -235,51 +235,28 @@ release_thread(struct task_struct *dead_task) | |||
235 | } | 235 | } |
236 | 236 | ||
237 | /* | 237 | /* |
238 | * "alpha_clone()".. By the time we get here, the | ||
239 | * non-volatile registers have also been saved on the | ||
240 | * stack. We do some ugly pointer stuff here.. (see | ||
241 | * also copy_thread) | ||
242 | * | ||
243 | * Notice that "fork()" is implemented in terms of clone, | ||
244 | * with parameters (SIGCHLD, 0). | ||
245 | */ | ||
246 | int | ||
247 | alpha_clone(unsigned long clone_flags, unsigned long usp, | ||
248 | int __user *parent_tid, int __user *child_tid, | ||
249 | unsigned long tls_value, struct pt_regs *regs) | ||
250 | { | ||
251 | if (!usp) | ||
252 | usp = rdusp(); | ||
253 | |||
254 | return do_fork(clone_flags, usp, regs, 0, parent_tid, child_tid); | ||
255 | } | ||
256 | |||
257 | int | ||
258 | alpha_vfork(struct pt_regs *regs) | ||
259 | { | ||
260 | return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, rdusp(), | ||
261 | regs, 0, NULL, NULL); | ||
262 | } | ||
263 | |||
264 | /* | ||
265 | * Copy an alpha thread.. | 238 | * Copy an alpha thread.. |
266 | */ | 239 | */ |
267 | 240 | ||
268 | int | 241 | int |
269 | copy_thread(unsigned long clone_flags, unsigned long usp, | 242 | copy_thread(unsigned long clone_flags, unsigned long usp, |
270 | unsigned long arg, | 243 | unsigned long arg, |
271 | struct task_struct * p, struct pt_regs * regs) | 244 | struct task_struct *p) |
272 | { | 245 | { |
273 | extern void ret_from_fork(void); | 246 | extern void ret_from_fork(void); |
274 | extern void ret_from_kernel_thread(void); | 247 | extern void ret_from_kernel_thread(void); |
275 | 248 | ||
276 | struct thread_info *childti = task_thread_info(p); | 249 | struct thread_info *childti = task_thread_info(p); |
277 | struct pt_regs *childregs = task_pt_regs(p); | 250 | struct pt_regs *childregs = task_pt_regs(p); |
251 | struct pt_regs *regs = current_pt_regs(); | ||
278 | struct switch_stack *childstack, *stack; | 252 | struct switch_stack *childstack, *stack; |
279 | unsigned long settls; | 253 | unsigned long settls; |
280 | 254 | ||
281 | childstack = ((struct switch_stack *) childregs) - 1; | 255 | childstack = ((struct switch_stack *) childregs) - 1; |
282 | if (unlikely(!regs)) { | 256 | childti->pcb.ksp = (unsigned long) childstack; |
257 | childti->pcb.flags = 1; /* set FEN, clear everything else */ | ||
258 | |||
259 | if (unlikely(p->flags & PF_KTHREAD)) { | ||
283 | /* kernel thread */ | 260 | /* kernel thread */ |
284 | memset(childstack, 0, | 261 | memset(childstack, 0, |
285 | sizeof(struct switch_stack) + sizeof(struct pt_regs)); | 262 | sizeof(struct switch_stack) + sizeof(struct pt_regs)); |
@@ -288,12 +265,17 @@ copy_thread(unsigned long clone_flags, unsigned long usp, | |||
288 | childstack->r10 = arg; | 265 | childstack->r10 = arg; |
289 | childregs->hae = alpha_mv.hae_cache, | 266 | childregs->hae = alpha_mv.hae_cache, |
290 | childti->pcb.usp = 0; | 267 | childti->pcb.usp = 0; |
291 | childti->pcb.ksp = (unsigned long) childstack; | ||
292 | childti->pcb.flags = 1; /* set FEN, clear everything else */ | ||
293 | return 0; | 268 | return 0; |
294 | } | 269 | } |
270 | /* Note: if CLONE_SETTLS is not set, then we must inherit the | ||
271 | value from the parent, which will have been set by the block | ||
272 | copy in dup_task_struct. This is non-intuitive, but is | ||
273 | required for proper operation in the case of a threaded | ||
274 | application calling fork. */ | ||
275 | if (clone_flags & CLONE_SETTLS) | ||
276 | childti->pcb.unique = regs->r20; | ||
277 | childti->pcb.usp = usp ?: rdusp(); | ||
295 | *childregs = *regs; | 278 | *childregs = *regs; |
296 | settls = regs->r20; | ||
297 | childregs->r0 = 0; | 279 | childregs->r0 = 0; |
298 | childregs->r19 = 0; | 280 | childregs->r19 = 0; |
299 | childregs->r20 = 1; /* OSF/1 has some strange fork() semantics. */ | 281 | childregs->r20 = 1; /* OSF/1 has some strange fork() semantics. */ |
@@ -301,22 +283,6 @@ copy_thread(unsigned long clone_flags, unsigned long usp, | |||
301 | stack = ((struct switch_stack *) regs) - 1; | 283 | stack = ((struct switch_stack *) regs) - 1; |
302 | *childstack = *stack; | 284 | *childstack = *stack; |
303 | childstack->r26 = (unsigned long) ret_from_fork; | 285 | childstack->r26 = (unsigned long) ret_from_fork; |
304 | childti->pcb.usp = usp; | ||
305 | childti->pcb.ksp = (unsigned long) childstack; | ||
306 | childti->pcb.flags = 1; /* set FEN, clear everything else */ | ||
307 | |||
308 | /* Set a new TLS for the child thread? Peek back into the | ||
309 | syscall arguments that we saved on syscall entry. Oops, | ||
310 | except we'd have clobbered it with the parent/child set | ||
311 | of r20. Read the saved copy. */ | ||
312 | /* Note: if CLONE_SETTLS is not set, then we must inherit the | ||
313 | value from the parent, which will have been set by the block | ||
314 | copy in dup_task_struct. This is non-intuitive, but is | ||
315 | required for proper operation in the case of a threaded | ||
316 | application calling fork. */ | ||
317 | if (clone_flags & CLONE_SETTLS) | ||
318 | childti->pcb.unique = settls; | ||
319 | |||
320 | return 0; | 286 | return 0; |
321 | } | 287 | } |
322 | 288 | ||
diff --git a/arch/alpha/kernel/signal.c b/arch/alpha/kernel/signal.c index 32575f85507d..336393c9c11f 100644 --- a/arch/alpha/kernel/signal.c +++ b/arch/alpha/kernel/signal.c | |||
@@ -160,10 +160,10 @@ extern char compile_time_assert | |||
160 | #define INSN_CALLSYS 0x00000083 | 160 | #define INSN_CALLSYS 0x00000083 |
161 | 161 | ||
162 | static long | 162 | static long |
163 | restore_sigcontext(struct sigcontext __user *sc, struct pt_regs *regs, | 163 | restore_sigcontext(struct sigcontext __user *sc, struct pt_regs *regs) |
164 | struct switch_stack *sw) | ||
165 | { | 164 | { |
166 | unsigned long usp; | 165 | unsigned long usp; |
166 | struct switch_stack *sw = (struct switch_stack *)regs - 1; | ||
167 | long i, err = __get_user(regs->pc, &sc->sc_pc); | 167 | long i, err = __get_user(regs->pc, &sc->sc_pc); |
168 | 168 | ||
169 | current_thread_info()->restart_block.fn = do_no_restart_syscall; | 169 | current_thread_info()->restart_block.fn = do_no_restart_syscall; |
@@ -215,9 +215,9 @@ restore_sigcontext(struct sigcontext __user *sc, struct pt_regs *regs, | |||
215 | registers and transfer control from userland. */ | 215 | registers and transfer control from userland. */ |
216 | 216 | ||
217 | asmlinkage void | 217 | asmlinkage void |
218 | do_sigreturn(struct sigcontext __user *sc, struct pt_regs *regs, | 218 | do_sigreturn(struct sigcontext __user *sc) |
219 | struct switch_stack *sw) | ||
220 | { | 219 | { |
220 | struct pt_regs *regs = current_pt_regs(); | ||
221 | sigset_t set; | 221 | sigset_t set; |
222 | 222 | ||
223 | /* Verify that it's a good sigcontext before using it */ | 223 | /* Verify that it's a good sigcontext before using it */ |
@@ -228,7 +228,7 @@ do_sigreturn(struct sigcontext __user *sc, struct pt_regs *regs, | |||
228 | 228 | ||
229 | set_current_blocked(&set); | 229 | set_current_blocked(&set); |
230 | 230 | ||
231 | if (restore_sigcontext(sc, regs, sw)) | 231 | if (restore_sigcontext(sc, regs)) |
232 | goto give_sigsegv; | 232 | goto give_sigsegv; |
233 | 233 | ||
234 | /* Send SIGTRAP if we're single-stepping: */ | 234 | /* Send SIGTRAP if we're single-stepping: */ |
@@ -249,9 +249,9 @@ give_sigsegv: | |||
249 | } | 249 | } |
250 | 250 | ||
251 | asmlinkage void | 251 | asmlinkage void |
252 | do_rt_sigreturn(struct rt_sigframe __user *frame, struct pt_regs *regs, | 252 | do_rt_sigreturn(struct rt_sigframe __user *frame) |
253 | struct switch_stack *sw) | ||
254 | { | 253 | { |
254 | struct pt_regs *regs = current_pt_regs(); | ||
255 | sigset_t set; | 255 | sigset_t set; |
256 | 256 | ||
257 | /* Verify that it's a good ucontext_t before using it */ | 257 | /* Verify that it's a good ucontext_t before using it */ |
@@ -262,7 +262,7 @@ do_rt_sigreturn(struct rt_sigframe __user *frame, struct pt_regs *regs, | |||
262 | 262 | ||
263 | set_current_blocked(&set); | 263 | set_current_blocked(&set); |
264 | 264 | ||
265 | if (restore_sigcontext(&frame->uc.uc_mcontext, regs, sw)) | 265 | if (restore_sigcontext(&frame->uc.uc_mcontext, regs)) |
266 | goto give_sigsegv; | 266 | goto give_sigsegv; |
267 | 267 | ||
268 | /* Send SIGTRAP if we're single-stepping: */ | 268 | /* Send SIGTRAP if we're single-stepping: */ |
diff --git a/arch/alpha/kernel/srmcons.c b/arch/alpha/kernel/srmcons.c index 5d5865204a1d..59b7bbad8394 100644 --- a/arch/alpha/kernel/srmcons.c +++ b/arch/alpha/kernel/srmcons.c | |||
@@ -205,7 +205,6 @@ static const struct tty_operations srmcons_ops = { | |||
205 | static int __init | 205 | static int __init |
206 | srmcons_init(void) | 206 | srmcons_init(void) |
207 | { | 207 | { |
208 | tty_port_init(&srmcons_singleton.port); | ||
209 | setup_timer(&srmcons_singleton.timer, srmcons_receive_chars, | 208 | setup_timer(&srmcons_singleton.timer, srmcons_receive_chars, |
210 | (unsigned long)&srmcons_singleton); | 209 | (unsigned long)&srmcons_singleton); |
211 | if (srm_is_registered_console) { | 210 | if (srm_is_registered_console) { |
@@ -215,6 +214,9 @@ srmcons_init(void) | |||
215 | driver = alloc_tty_driver(MAX_SRM_CONSOLE_DEVICES); | 214 | driver = alloc_tty_driver(MAX_SRM_CONSOLE_DEVICES); |
216 | if (!driver) | 215 | if (!driver) |
217 | return -ENOMEM; | 216 | return -ENOMEM; |
217 | |||
218 | tty_port_init(&srmcons_singleton.port); | ||
219 | |||
218 | driver->driver_name = "srm"; | 220 | driver->driver_name = "srm"; |
219 | driver->name = "srm"; | 221 | driver->name = "srm"; |
220 | driver->major = 0; /* dynamic */ | 222 | driver->major = 0; /* dynamic */ |
@@ -227,6 +229,7 @@ srmcons_init(void) | |||
227 | err = tty_register_driver(driver); | 229 | err = tty_register_driver(driver); |
228 | if (err) { | 230 | if (err) { |
229 | put_tty_driver(driver); | 231 | put_tty_driver(driver); |
232 | tty_port_destroy(&srmcons_singleton.port); | ||
230 | return err; | 233 | return err; |
231 | } | 234 | } |
232 | srmcons_driver = driver; | 235 | srmcons_driver = driver; |
diff --git a/arch/alpha/kernel/systbls.S b/arch/alpha/kernel/systbls.S index 2ac6b45c3e00..4284ec798ec9 100644 --- a/arch/alpha/kernel/systbls.S +++ b/arch/alpha/kernel/systbls.S | |||
@@ -12,7 +12,7 @@ | |||
12 | sys_call_table: | 12 | sys_call_table: |
13 | .quad alpha_ni_syscall /* 0 */ | 13 | .quad alpha_ni_syscall /* 0 */ |
14 | .quad sys_exit | 14 | .quad sys_exit |
15 | .quad sys_fork | 15 | .quad alpha_fork |
16 | .quad sys_read | 16 | .quad sys_read |
17 | .quad sys_write | 17 | .quad sys_write |
18 | .quad alpha_ni_syscall /* 5 */ | 18 | .quad alpha_ni_syscall /* 5 */ |
@@ -76,7 +76,7 @@ sys_call_table: | |||
76 | .quad sys_getpgrp | 76 | .quad sys_getpgrp |
77 | .quad sys_getpagesize | 77 | .quad sys_getpagesize |
78 | .quad alpha_ni_syscall /* 65 */ | 78 | .quad alpha_ni_syscall /* 65 */ |
79 | .quad sys_vfork | 79 | .quad alpha_vfork |
80 | .quad sys_newstat | 80 | .quad sys_newstat |
81 | .quad sys_newlstat | 81 | .quad sys_newlstat |
82 | .quad alpha_ni_syscall | 82 | .quad alpha_ni_syscall |
@@ -330,7 +330,7 @@ sys_call_table: | |||
330 | .quad sys_ni_syscall /* 309: old get_kernel_syms */ | 330 | .quad sys_ni_syscall /* 309: old get_kernel_syms */ |
331 | .quad sys_syslog /* 310 */ | 331 | .quad sys_syslog /* 310 */ |
332 | .quad sys_reboot | 332 | .quad sys_reboot |
333 | .quad sys_clone | 333 | .quad alpha_clone |
334 | .quad sys_uselib | 334 | .quad sys_uselib |
335 | .quad sys_mlock | 335 | .quad sys_mlock |
336 | .quad sys_munlock /* 315 */ | 336 | .quad sys_munlock /* 315 */ |