1/* -*- mode: asm -*- 2 * 3 * linux/arch/m68k/kernel/entry.S 4 * 5 * Copyright (C) 1991, 1992 Linus Torvalds 6 * 7 * This file is subject to the terms and conditions of the GNU General Public 8 * License. See the file README.legal in the main directory of this archive 9 * for more details. 10 * 11 * Linux/m68k support by Hamish Macdonald 12 * 13 * 68060 fixes by Jesper Skov 14 * 15 */ 16 17/* 18 * entry.S contains the system-call and fault low-level handling routines. 19 * This also contains the timer-interrupt handler, as well as all interrupts 20 * and faults that can result in a task-switch. 21 * 22 * NOTE: This code handles signal-recognition, which happens every time 23 * after a timer-interrupt and after each system call. 24 * 25 */ 26 27/* 28 * 12/03/96 Jes: Currently we only support m68k single-cpu systems, so 29 * all pointers that used to be 'current' are now entry 30 * number 0 in the 'current_set' list. 31 * 32 * 6/05/00 RZ: addedd writeback completion after return from sighandler 33 * for 68040 34 */ 35 36#include <linux/config.h> 37#include <linux/linkage.h> 38#include <asm/entry.h> 39#include <asm/errno.h> 40#include <asm/setup.h> 41#include <asm/segment.h> 42#include <asm/traps.h> 43#include <asm/unistd.h> 44 45#include <asm/asm-offsets.h> 46 47.globl system_call, buserr, trap, resume 48.globl inthandler, sys_call_table 49.globl sys_fork, sys_clone, sys_vfork 50.globl ret_from_interrupt, bad_interrupt 51 52.text 53ENTRY(buserr) 54 SAVE_ALL_INT 55 GET_CURRENT(%d0) 56 movel %sp,%sp@- | stack frame pointer argument 57 bsrl buserr_c 58 addql #4,%sp 59 jra .Lret_from_exception 60 61ENTRY(trap) 62 SAVE_ALL_INT 63 GET_CURRENT(%d0) 64 movel %sp,%sp@- | stack frame pointer argument 65 bsrl trap_c 66 addql #4,%sp 67 jra .Lret_from_exception 68 69 | After a fork we jump here directly from resume, 70 | so that %d1 contains the previous task 71 | schedule_tail now used regardless of CONFIG_SMP 72ENTRY(ret_from_fork) 73 movel %d1,%sp@- 74 jsr schedule_tail 75 addql #4,%sp 76 jra .Lret_from_exception 77 78do_trace_entry: 79 movel #-ENOSYS,%sp@(PT_D0) | needed for strace 80 subql #4,%sp 81 SAVE_SWITCH_STACK 82 jbsr syscall_trace 83 RESTORE_SWITCH_STACK 84 addql #4,%sp 85 movel %sp@(PT_ORIG_D0),%d0 86 cmpl #NR_syscalls,%d0 87 jcs syscall 88badsys: 89 movel #-ENOSYS,%sp@(PT_D0) 90 jra ret_from_syscall 91 92do_trace_exit: 93 subql #4,%sp 94 SAVE_SWITCH_STACK 95 jbsr syscall_trace 96 RESTORE_SWITCH_STACK 97 addql #4,%sp 98 jra .Lret_from_exception 99 100ENTRY(ret_from_signal) 101 RESTORE_SWITCH_STACK 102 addql #4,%sp 103/* on 68040 complete pending writebacks if any */ 104#ifdef CONFIG_M68040 105 bfextu %sp@(PT_VECTOR){#0,#4},%d0 106 subql #7,%d0 | bus error frame ? 107 jbne 1f 108 movel %sp,%sp@- 109 jbsr berr_040cleanup 110 addql #4,%sp 1111: 112#endif 113 jra .Lret_from_exception 114 115ENTRY(system_call) 116 SAVE_ALL_SYS 117 118 GET_CURRENT(%d1) 119 | save top of frame 120 movel %sp,%curptr@(TASK_THREAD+THREAD_ESP0) 121 122 | syscall trace? 123 tstb %curptr@(TASK_INFO+TINFO_FLAGS+2) 124 jmi do_trace_entry 125 cmpl #NR_syscalls,%d0 126 jcc badsys 127syscall: 128 jbsr @(sys_call_table,%d0:l:4)@(0) 129 movel %d0,%sp@(PT_D0) | save the return value 130ret_from_syscall: 131 |oriw #0x0700,%sr 132 movew %curptr@(TASK_INFO+TINFO_FLAGS+2),%d0 133 jne syscall_exit_work 1341: RESTORE_ALL 135 136syscall_exit_work: 137 btst #5,%sp@(PT_SR) | check if returning to kernel 138 bnes 1b | if so, skip resched, signals 139 lslw #1,%d0 140 jcs do_trace_exit 141 jmi do_delayed_trace 142 lslw #8,%d0 143 jmi do_signal_return 144 pea resume_userspace 145 jra schedule 146 147 148ENTRY(ret_from_exception) 149.Lret_from_exception: 150 btst #5,%sp@(PT_SR) | check if returning to kernel 151 bnes 1f | if so, skip resched, signals 152 | only allow interrupts when we are really the last one on the 153 | kernel stack, otherwise stack overflow can occur during 154 | heavy interrupt load 155 andw #ALLOWINT,%sr 156 157resume_userspace: 158 moveb %curptr@(TASK_INFO+TINFO_FLAGS+3),%d0 159 jne exit_work 1601: RESTORE_ALL 161 162exit_work: 163 | save top of frame 164 movel %sp,%curptr@(TASK_THREAD+THREAD_ESP0) 165 lslb #1,%d0 166 jmi do_signal_return 167 pea resume_userspace 168 jra schedule 169 170 171do_signal_return: 172 |andw #ALLOWINT,%sr 173 subql #4,%sp | dummy return address 174 SAVE_SWITCH_STACK 175 pea %sp@(SWITCH_STACK_SIZE) 176 clrl %sp@- 177 bsrl do_signal 178 addql #8,%sp 179 RESTORE_SWITCH_STACK 180 addql #4,%sp 181 jbra resume_userspace 182 183do_delayed_trace: 184 bclr #7,%sp@(PT_SR) | clear trace bit in SR 185 pea 1 | send SIGTRAP 186 movel %curptr,%sp@- 187 pea LSIGTRAP 188 jbsr send_sig 189 addql #8,%sp 190 addql #4,%sp 191 jbra resume_userspace 192 193 194#if 0 195#ifdef CONFIG_AMIGA 196ami_inthandler: 197 addql #1,irq_stat+CPUSTAT_LOCAL_IRQ_COUNT 198 SAVE_ALL_INT 199 GET_CURRENT(%d0) 200 201 bfextu %sp@(PT_VECTOR){#4,#12},%d0 202 movel %d0,%a0 203 addql #1,%a0@(kstat+STAT_IRQ-VECOFF(VEC_SPUR)) 204 movel %a0@(autoirq_list-VECOFF(VEC_SPUR)),%a0 205 206| amiga vector int handler get the req mask instead of irq vector 207 lea CUSTOMBASE,%a1 208 movew %a1@(C_INTREQR),%d0 209 andw %a1@(C_INTENAR),%d0 210 211| prepare stack (push frame pointer, dev_id & req mask) 212 pea %sp@ 213 movel %a0@(IRQ_DEVID),%sp@- 214 movel %d0,%sp@- 215 pea %pc@(ret_from_interrupt:w) 216 jbra @(IRQ_HANDLER,%a0)@(0) 217 218ENTRY(nmi_handler) 219 rte 220#endif 221#endif 222 223/* 224** This is the main interrupt handler, responsible for calling process_int() 225*/ 226inthandler: 227 SAVE_ALL_INT 228 GET_CURRENT(%d0) 229 addqb #1,%curptr@(TASK_INFO+TINFO_PREEMPT+2) 230 | put exception # in d0 231 bfextu %sp@(PT_VECTOR){#4,#10},%d0 232 233 movel %sp,%sp@- 234 movel %d0,%sp@- | put vector # on stack 235#if defined(MACH_Q40_ONLY) && defined(CONFIG_BLK_DEV_FD) 236 btstb #4,0xff000000 | Q40 floppy needs very special treatment ... 237 jbeq 1f 238 btstb #3,0xff000004 239 jbeq 1f 240 jbsr floppy_hardint 241 jbra 3f 2421: 243#endif 244 jbsr process_int | process the IRQ 2453: addql #8,%sp | pop parameters off stack 246 247ret_from_interrupt: 248 subqb #1,%curptr@(TASK_INFO+TINFO_PREEMPT+2) 249 jeq 1f 2502: 251 RESTORE_ALL 2521: 253 moveq #(~ALLOWINT>>8)&0xff,%d0 254 andb %sp@(PT_SR),%d0 255 jne 2b 256 257 /* check if we need to do software interrupts */ 258 tstl irq_stat+CPUSTAT_SOFTIRQ_PENDING 259 jeq .Lret_from_exception 260 pea ret_from_exception 261 jra do_softirq 262 263 264/* Handler for uninitialized and spurious interrupts */ 265 266bad_interrupt: 267 addql #1,num_spurious 268 rte 269 270ENTRY(sys_fork) 271 SAVE_SWITCH_STACK 272 pea %sp@(SWITCH_STACK_SIZE) 273 jbsr m68k_fork 274 addql #4,%sp 275 RESTORE_SWITCH_STACK 276 rts 277 278ENTRY(sys_clone) 279 SAVE_SWITCH_STACK 280 pea %sp@(SWITCH_STACK_SIZE) 281 jbsr m68k_clone 282 addql #4,%sp 283 RESTORE_SWITCH_STACK 284 rts 285 286ENTRY(sys_vfork) 287 SAVE_SWITCH_STACK 288 pea %sp@(SWITCH_STACK_SIZE) 289 jbsr m68k_vfork 290 addql #4,%sp 291 RESTORE_SWITCH_STACK 292 rts 293 294ENTRY(sys_sigsuspend) 295 SAVE_SWITCH_STACK 296 pea %sp@(SWITCH_STACK_SIZE) 297 jbsr do_sigsuspend 298 addql #4,%sp 299 RESTORE_SWITCH_STACK 300 rts 301 302ENTRY(sys_rt_sigsuspend) 303 SAVE_SWITCH_STACK 304 pea %sp@(SWITCH_STACK_SIZE) 305 jbsr do_rt_sigsuspend 306 addql #4,%sp 307 RESTORE_SWITCH_STACK 308 rts 309 310ENTRY(sys_sigreturn) 311 SAVE_SWITCH_STACK 312 jbsr do_sigreturn 313 RESTORE_SWITCH_STACK 314 rts 315 316ENTRY(sys_rt_sigreturn) 317 SAVE_SWITCH_STACK 318 jbsr do_rt_sigreturn 319 RESTORE_SWITCH_STACK 320 rts 321 322resume: 323 /* 324 * Beware - when entering resume, prev (the current task) is 325 * in a0, next (the new task) is in a1,so don't change these 326 * registers until their contents are no longer needed. 327 */ 328 329 /* save sr */ 330 movew %sr,%a0@(TASK_THREAD+THREAD_SR) 331 332 /* save fs (sfc,%dfc) (may be pointing to kernel memory) */ 333 movec %sfc,%d0 334 movew %d0,%a0@(TASK_THREAD+THREAD_FS) 335 336 /* save usp */ 337 /* it is better to use a movel here instead of a movew 8*) */ 338 movec %usp,%d0 339 movel %d0,%a0@(TASK_THREAD+THREAD_USP) 340 341 /* save non-scratch registers on stack */ 342 SAVE_SWITCH_STACK 343 344 /* save current kernel stack pointer */ 345 movel %sp,%a0@(TASK_THREAD+THREAD_KSP) 346 347 /* save floating point context */ 348#ifndef CONFIG_M68KFPU_EMU_ONLY 349#ifdef CONFIG_M68KFPU_EMU 350 tstl m68k_fputype 351 jeq 3f 352#endif 353 fsave %a0@(TASK_THREAD+THREAD_FPSTATE) 354 355#if defined(CONFIG_M68060) 356#if !defined(CPU_M68060_ONLY) 357 btst #3,m68k_cputype+3 358 beqs 1f 359#endif 360 /* The 060 FPU keeps status in bits 15-8 of the first longword */ 361 tstb %a0@(TASK_THREAD+THREAD_FPSTATE+2) 362 jeq 3f 363#if !defined(CPU_M68060_ONLY) 364 jra 2f 365#endif 366#endif /* CONFIG_M68060 */ 367#if !defined(CPU_M68060_ONLY) 3681: tstb %a0@(TASK_THREAD+THREAD_FPSTATE) 369 jeq 3f 370#endif 3712: fmovemx %fp0-%fp7,%a0@(TASK_THREAD+THREAD_FPREG) 372 fmoveml %fpcr/%fpsr/%fpiar,%a0@(TASK_THREAD+THREAD_FPCNTL) 3733: 374#endif /* CONFIG_M68KFPU_EMU_ONLY */ 375 /* Return previous task in %d1 */ 376 movel %curptr,%d1 377 378 /* switch to new task (a1 contains new task) */ 379 movel %a1,%curptr 380 381 /* restore floating point context */ 382#ifndef CONFIG_M68KFPU_EMU_ONLY 383#ifdef CONFIG_M68KFPU_EMU 384 tstl m68k_fputype 385 jeq 4f 386#endif 387#if defined(CONFIG_M68060) 388#if !defined(CPU_M68060_ONLY) 389 btst #3,m68k_cputype+3 390 beqs 1f 391#endif 392 /* The 060 FPU keeps status in bits 15-8 of the first longword */ 393 tstb %a1@(TASK_THREAD+THREAD_FPSTATE+2) 394 jeq 3f 395#if !defined(CPU_M68060_ONLY) 396 jra 2f 397#endif 398#endif /* CONFIG_M68060 */ 399#if !defined(CPU_M68060_ONLY) 4001: tstb %a1@(TASK_THREAD+THREAD_FPSTATE) 401 jeq 3f 402#endif 4032: fmovemx %a1@(TASK_THREAD+THREAD_FPREG),%fp0-%fp7 404 fmoveml %a1@(TASK_THREAD+THREAD_FPCNTL),%fpcr/%fpsr/%fpiar 4053: frestore %a1@(TASK_THREAD+THREAD_FPSTATE) 4064: 407#endif /* CONFIG_M68KFPU_EMU_ONLY */ 408 409 /* restore the kernel stack pointer */ 410 movel %a1@(TASK_THREAD+THREAD_KSP),%sp 411 412 /* restore non-scratch registers */ 413 RESTORE_SWITCH_STACK 414 415 /* restore user stack pointer */ 416 movel %a1@(TASK_THREAD+THREAD_USP),%a0 417 movel %a0,%usp 418 419 /* restore fs (sfc,%dfc) */ 420 movew %a1@(TASK_THREAD+THREAD_FS),%a0 421 movec %a0,%sfc 422 movec %a0,%dfc 423 424 /* restore status register */ 425 movew %a1@(TASK_THREAD+THREAD_SR),%sr 426 427 rts 428 429.data 430ALIGN 431sys_call_table: 432 .long sys_ni_syscall /* 0 - old "setup()" system call*/ 433 .long sys_exit 434 .long sys_fork 435 .long sys_read 436 .long sys_write 437 .long sys_open /* 5 */ 438 .long sys_close 439 .long sys_waitpid 440 .long sys_creat 441 .long sys_link 442 .long sys_unlink /* 10 */ 443 .long sys_execve 444 .long sys_chdir 445 .long sys_time 446 .long sys_mknod 447 .long sys_chmod /* 15 */ 448 .long sys_chown16 449 .long sys_ni_syscall /* old break syscall holder */ 450 .long sys_stat 451 .long sys_lseek 452 .long sys_getpid /* 20 */ 453 .long sys_mount 454 .long sys_oldumount 455 .long sys_setuid16 456 .long sys_getuid16 457 .long sys_stime /* 25 */ 458 .long sys_ptrace 459 .long sys_alarm 460 .long sys_fstat 461 .long sys_pause 462 .long sys_utime /* 30 */ 463 .long sys_ni_syscall /* old stty syscall holder */ 464 .long sys_ni_syscall /* old gtty syscall holder */ 465 .long sys_access 466 .long sys_nice 467 .long sys_ni_syscall /* 35 */ /* old ftime syscall holder */ 468 .long sys_sync 469 .long sys_kill 470 .long sys_rename 471 .long sys_mkdir 472 .long sys_rmdir /* 40 */ 473 .long sys_dup 474 .long sys_pipe 475 .long sys_times 476 .long sys_ni_syscall /* old prof syscall holder */ 477 .long sys_brk /* 45 */ 478 .long sys_setgid16 479 .long sys_getgid16 480 .long sys_signal 481 .long sys_geteuid16 482 .long sys_getegid16 /* 50 */ 483 .long sys_acct 484 .long sys_umount /* recycled never used phys() */ 485 .long sys_ni_syscall /* old lock syscall holder */ 486 .long sys_ioctl 487 .long sys_fcntl /* 55 */ 488 .long sys_ni_syscall /* old mpx syscall holder */ 489 .long sys_setpgid 490 .long sys_ni_syscall /* old ulimit syscall holder */ 491 .long sys_ni_syscall 492 .long sys_umask /* 60 */ 493 .long sys_chroot 494 .long sys_ustat 495 .long sys_dup2 496 .long sys_getppid 497 .long sys_getpgrp /* 65 */ 498 .long sys_setsid 499 .long sys_sigaction 500 .long sys_sgetmask 501 .long sys_ssetmask 502 .long sys_setreuid16 /* 70 */ 503 .long sys_setregid16 504 .long sys_sigsuspend 505 .long sys_sigpending 506 .long sys_sethostname 507 .long sys_setrlimit /* 75 */ 508 .long sys_old_getrlimit 509 .long sys_getrusage 510 .long sys_gettimeofday 511 .long sys_settimeofday 512 .long sys_getgroups16 /* 80 */ 513 .long sys_setgroups16 514 .long old_select 515 .long sys_symlink 516 .long sys_lstat 517 .long sys_readlink /* 85 */ 518 .long sys_uselib 519 .long sys_swapon 520 .long sys_reboot 521 .long old_readdir 522 .long old_mmap /* 90 */ 523 .long sys_munmap 524 .long sys_truncate 525 .long sys_ftruncate 526 .long sys_fchmod 527 .long sys_fchown16 /* 95 */ 528 .long sys_getpriority 529 .long sys_setpriority 530 .long sys_ni_syscall /* old profil syscall holder */ 531 .long sys_statfs 532 .long sys_fstatfs /* 100 */ 533 .long sys_ni_syscall /* ioperm for i386 */ 534 .long sys_socketcall 535 .long sys_syslog 536 .long sys_setitimer 537 .long sys_getitimer /* 105 */ 538 .long sys_newstat 539 .long sys_newlstat 540 .long sys_newfstat 541 .long sys_ni_syscall 542 .long sys_ni_syscall /* 110 */ /* iopl for i386 */ 543 .long sys_vhangup 544 .long sys_ni_syscall /* obsolete idle() syscall */ 545 .long sys_ni_syscall /* vm86old for i386 */ 546 .long sys_wait4 547 .long sys_swapoff /* 115 */ 548 .long sys_sysinfo 549 .long sys_ipc 550 .long sys_fsync 551 .long sys_sigreturn 552 .long sys_clone /* 120 */ 553 .long sys_setdomainname 554 .long sys_newuname 555 .long sys_cacheflush /* modify_ldt for i386 */ 556 .long sys_adjtimex 557 .long sys_mprotect /* 125 */ 558 .long sys_sigprocmask 559 .long sys_ni_syscall /* old "create_module" */ 560 .long sys_init_module 561 .long sys_delete_module 562 .long sys_ni_syscall /* 130 - old "get_kernel_syms" */ 563 .long sys_quotactl 564 .long sys_getpgid 565 .long sys_fchdir 566 .long sys_bdflush 567 .long sys_sysfs /* 135 */ 568 .long sys_personality 569 .long sys_ni_syscall /* for afs_syscall */ 570 .long sys_setfsuid16 571 .long sys_setfsgid16 572 .long sys_llseek /* 140 */ 573 .long sys_getdents 574 .long sys_select 575 .long sys_flock 576 .long sys_msync 577 .long sys_readv /* 145 */ 578 .long sys_writev 579 .long sys_getsid 580 .long sys_fdatasync 581 .long sys_sysctl 582 .long sys_mlock /* 150 */ 583 .long sys_munlock 584 .long sys_mlockall 585 .long sys_munlockall 586 .long sys_sched_setparam 587 .long sys_sched_getparam /* 155 */ 588 .long sys_sched_setscheduler 589 .long sys_sched_getscheduler 590 .long sys_sched_yield 591 .long sys_sched_get_priority_max 592 .long sys_sched_get_priority_min /* 160 */ 593 .long sys_sched_rr_get_interval 594 .long sys_nanosleep 595 .long sys_mremap 596 .long sys_setresuid16 597 .long sys_getresuid16 /* 165 */ 598 .long sys_getpagesize 599 .long sys_ni_syscall /* old sys_query_module */ 600 .long sys_poll 601 .long sys_nfsservctl 602 .long sys_setresgid16 /* 170 */ 603 .long sys_getresgid16 604 .long sys_prctl 605 .long sys_rt_sigreturn 606 .long sys_rt_sigaction 607 .long sys_rt_sigprocmask /* 175 */ 608 .long sys_rt_sigpending 609 .long sys_rt_sigtimedwait 610 .long sys_rt_sigqueueinfo 611 .long sys_rt_sigsuspend 612 .long sys_pread64 /* 180 */ 613 .long sys_pwrite64 614 .long sys_lchown16; 615 .long sys_getcwd 616 .long sys_capget 617 .long sys_capset /* 185 */ 618 .long sys_sigaltstack 619 .long sys_sendfile 620 .long sys_ni_syscall /* streams1 */ 621 .long sys_ni_syscall /* streams2 */ 622 .long sys_vfork /* 190 */ 623 .long sys_getrlimit 624 .long sys_mmap2 625 .long sys_truncate64 626 .long sys_ftruncate64 627 .long sys_stat64 /* 195 */ 628 .long sys_lstat64 629 .long sys_fstat64 630 .long sys_chown 631 .long sys_getuid 632 .long sys_getgid /* 200 */ 633 .long sys_geteuid 634 .long sys_getegid 635 .long sys_setreuid 636 .long sys_setregid 637 .long sys_getgroups /* 205 */ 638 .long sys_setgroups 639 .long sys_fchown 640 .long sys_setresuid 641 .long sys_getresuid 642 .long sys_setresgid /* 210 */ 643 .long sys_getresgid 644 .long sys_lchown 645 .long sys_setuid 646 .long sys_setgid 647 .long sys_setfsuid /* 215 */ 648 .long sys_setfsgid 649 .long sys_pivot_root 650 .long sys_ni_syscall 651 .long sys_ni_syscall 652 .long sys_getdents64 /* 220 */ 653 .long sys_gettid 654 .long sys_tkill 655 .long sys_setxattr 656 .long sys_lsetxattr 657 .long sys_fsetxattr /* 225 */ 658 .long sys_getxattr 659 .long sys_lgetxattr 660 .long sys_fgetxattr 661 .long sys_listxattr 662 .long sys_llistxattr /* 230 */ 663 .long sys_flistxattr 664 .long sys_removexattr 665 .long sys_lremovexattr 666 .long sys_fremovexattr 667 .long sys_futex /* 235 */ 668 .long sys_sendfile64 669 .long sys_mincore 670 .long sys_madvise 671 .long sys_fcntl64 672 .long sys_readahead /* 240 */ 673 .long sys_io_setup 674 .long sys_io_destroy 675 .long sys_io_getevents 676 .long sys_io_submit 677 .long sys_io_cancel /* 245 */ 678 .long sys_fadvise64 679 .long sys_exit_group 680 .long sys_lookup_dcookie 681 .long sys_epoll_create 682 .long sys_epoll_ctl /* 250 */ 683 .long sys_epoll_wait 684 .long sys_remap_file_pages 685 .long sys_set_tid_address 686 .long sys_timer_create 687 .long sys_timer_settime /* 255 */ 688 .long sys_timer_gettime 689 .long sys_timer_getoverrun 690 .long sys_timer_delete 691 .long sys_clock_settime 692 .long sys_clock_gettime /* 260 */ 693 .long sys_clock_getres 694 .long sys_clock_nanosleep 695 .long sys_statfs64 696 .long sys_fstatfs64 697 .long sys_tgkill /* 265 */ 698 .long sys_utimes 699 .long sys_fadvise64_64 700 .long sys_mbind 701 .long sys_get_mempolicy 702 .long sys_set_mempolicy /* 270 */ 703 .long sys_mq_open 704 .long sys_mq_unlink 705 .long sys_mq_timedsend 706 .long sys_mq_timedreceive 707 .long sys_mq_notify /* 275 */ 708 .long sys_mq_getsetattr 709 .long sys_waitid 710 .long sys_ni_syscall /* for sys_vserver */ 711 .long sys_add_key 712 .long sys_request_key /* 280 */ 713 .long sys_keyctl 714 715