lkml.org 
[lkml]   [2009]   [Jan]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH] alpha: use syscall wrappers
    Convert OSF syscalls and add alpha specific SYSCALL_ALIAS() macro.

    Signed-off-by: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
    ---
    arch/alpha/Kconfig | 1 +
    arch/alpha/kernel/entry.S | 2 +-
    arch/alpha/kernel/osf_sys.c | 113 +++++++++++++++++++------------------------
    arch/alpha/kernel/signal.c | 18 ++++----
    arch/alpha/kernel/systbls.S | 52 ++++++++++----------
    include/linux/syscalls.h | 5 ++
    6 files changed, 92 insertions(+), 99 deletions(-)

    diff --git a/arch/alpha/Kconfig b/arch/alpha/Kconfig
    index 6110197..9fb8aae 100644
    --- a/arch/alpha/Kconfig
    +++ b/arch/alpha/Kconfig
    @@ -8,6 +8,7 @@ config ALPHA
    select HAVE_AOUT
    select HAVE_IDE
    select HAVE_OPROFILE
    + select HAVE_SYSCALL_WRAPPERS
    help
    The Alpha is a 64-bit general-purpose processor designed and
    marketed by the Digital Equipment Corporation of blessed memory,
    diff --git a/arch/alpha/kernel/entry.S b/arch/alpha/kernel/entry.S
    index aa2e50c..e4a54b6 100644
    --- a/arch/alpha/kernel/entry.S
    +++ b/arch/alpha/kernel/entry.S
    @@ -933,7 +933,7 @@ sys_execve:
    osf_sigprocmask:
    .prologue 0
    mov $sp, $18
    - jmp $31, do_osf_sigprocmask
    + jmp $31, sys_osf_sigprocmask
    .end osf_sigprocmask

    .align 4
    diff --git a/arch/alpha/kernel/osf_sys.c b/arch/alpha/kernel/osf_sys.c
    index 18a3ea1..ae41f09 100644
    --- a/arch/alpha/kernel/osf_sys.c
    +++ b/arch/alpha/kernel/osf_sys.c
    @@ -54,8 +54,7 @@ extern int do_pipe(int *);
    * identical to OSF as we don't return 0 on success, but doing otherwise
    * would require changes to libc. Hopefully this is good enough.
    */
    -asmlinkage unsigned long
    -osf_brk(unsigned long brk)
    +SYSCALL_DEFINE1(osf_brk, unsigned long, brk)
    {
    unsigned long retval = sys_brk(brk);
    if (brk && brk != retval)
    @@ -66,9 +65,9 @@ osf_brk(unsigned long brk)
    /*
    * This is pure guess-work..
    */
    -asmlinkage int
    -osf_set_program_attributes(unsigned long text_start, unsigned long text_len,
    - unsigned long bss_start, unsigned long bss_len)
    +SYSCALL_DEFINE4(osf_set_program_attributes, unsigned long, text_start,
    + unsigned long, text_len, unsigned long, bss_start,
    + unsigned long, bss_len)
    {
    struct mm_struct *mm;

    @@ -146,9 +145,9 @@ Efault:
    return -EFAULT;
    }

    -asmlinkage int
    -osf_getdirentries(unsigned int fd, struct osf_dirent __user *dirent,
    - unsigned int count, long __user *basep)
    +SYSCALL_DEFINE4(osf_getdirentries, unsigned int, fd,
    + struct osf_dirent __user *, dirent, unsigned int, count,
    + long __user *, basep)
    {
    int error;
    struct file *file;
    @@ -177,9 +176,9 @@ osf_getdirentries(unsigned int fd, struct osf_dirent __user *dirent,

    #undef NAME_OFFSET

    -asmlinkage unsigned long
    -osf_mmap(unsigned long addr, unsigned long len, unsigned long prot,
    - unsigned long flags, unsigned long fd, unsigned long off)
    +SYSCALL_DEFINE6(osf_mmap, unsigned long, addr, unsigned long, len,
    + unsigned long, prot, unsigned long, flags, unsigned long, fd,
    + unsigned long, off)
    {
    struct file *file = NULL;
    unsigned long ret = -EBADF;
    @@ -254,8 +253,8 @@ do_osf_statfs(struct dentry * dentry, struct osf_statfs __user *buffer,
    return error;
    }

    -asmlinkage int
    -osf_statfs(char __user *pathname, struct osf_statfs __user *buffer, unsigned long bufsiz)
    +SYSCALL_DEFINE3(osf_statfs, char __user *, pathname,
    + struct osf_statfs __user *, buffer, unsigned long, bufsiz)
    {
    struct path path;
    int retval;
    @@ -268,8 +267,8 @@ osf_statfs(char __user *pathname, struct osf_statfs __user *buffer, unsigned lon
    return retval;
    }

    -asmlinkage int
    -osf_fstatfs(unsigned long fd, struct osf_statfs __user *buffer, unsigned long bufsiz)
    +SYSCALL_DEFINE3(osf_fstatfs, unsigned long, fd,
    + struct osf_statfs __user *, buffer, unsigned long, bufsiz)
    {
    struct file *file;
    int retval;
    @@ -368,8 +367,8 @@ osf_procfs_mount(char *dirname, struct procfs_args __user *args, int flags)
    return do_mount("", dirname, "proc", flags, NULL);
    }

    -asmlinkage int
    -osf_mount(unsigned long typenr, char __user *path, int flag, void __user *data)
    +SYSCALL_DEFINE4(osf_mount, unsigned long, typenr, char __user *, path,
    + int, flag, void __user *, data)
    {
    int retval = -EINVAL;
    char *name;
    @@ -399,8 +398,7 @@ osf_mount(unsigned long typenr, char __user *path, int flag, void __user *data)
    return retval;
    }

    -asmlinkage int
    -osf_utsname(char __user *name)
    +SYSCALL_DEFINE1(osf_utsname, char __user *, name)
    {
    int error;

    @@ -423,14 +421,12 @@ osf_utsname(char __user *name)
    return error;
    }

    -asmlinkage unsigned long
    -sys_getpagesize(void)
    +SYSCALL_DEFINE0(getpagesize)
    {
    return PAGE_SIZE;
    }

    -asmlinkage unsigned long
    -sys_getdtablesize(void)
    +SYSCALL_DEFINE0(getdtablesize)
    {
    return sysctl_nr_open;
    }
    @@ -438,8 +434,7 @@ sys_getdtablesize(void)
    /*
    * For compatibility with OSF/1 only. Use utsname(2) instead.
    */
    -asmlinkage int
    -osf_getdomainname(char __user *name, int namelen)
    +SYSCALL_DEFINE2(osf_getdomainname, char __user *, name, int, namelen)
    {
    unsigned len;
    int i;
    @@ -527,8 +522,8 @@ enum pl_code {
    PL_DEL = 5, PL_FDEL = 6
    };

    -asmlinkage long
    -osf_proplist_syscall(enum pl_code code, union pl_args __user *args)
    +SYSCALL_DEFINE2(osf_proplist_syscall, enum pl_code, code,
    + union pl_args __user *, args)
    {
    long error;
    int __user *min_buf_size_ptr;
    @@ -567,8 +562,8 @@ osf_proplist_syscall(enum pl_code code, union pl_args __user *args)
    return error;
    }

    -asmlinkage int
    -osf_sigstack(struct sigstack __user *uss, struct sigstack __user *uoss)
    +SYSCALL_DEFINE2(osf_sigstack, struct sigstack __user *, uss,
    + struct sigstack __user *, uoss)
    {
    unsigned long usp = rdusp();
    unsigned long oss_sp = current->sas_ss_sp + current->sas_ss_size;
    @@ -608,8 +603,7 @@ osf_sigstack(struct sigstack __user *uss, struct sigstack __user *uoss)
    return error;
    }

    -asmlinkage long
    -osf_sysinfo(int command, char __user *buf, long count)
    +SYSCALL_DEFINE3(osf_sysinfo, int, command, char __user *, buf, long, count)
    {
    char *sysinfo_table[] = {
    utsname()->sysname,
    @@ -647,9 +641,8 @@ osf_sysinfo(int command, char __user *buf, long count)
    return err;
    }

    -asmlinkage unsigned long
    -osf_getsysinfo(unsigned long op, void __user *buffer, unsigned long nbytes,
    - int __user *start, void __user *arg)
    +SYSCALL_DEFINE5(osf_getsysinfo, unsigned long, op, void __user *, buffer,
    + unsigned long, nbytes, int __user *, start, void __user *, arg)
    {
    unsigned long w;
    struct percpu_struct *cpu;
    @@ -705,9 +698,8 @@ osf_getsysinfo(unsigned long op, void __user *buffer, unsigned long nbytes,
    return -EOPNOTSUPP;
    }

    -asmlinkage unsigned long
    -osf_setsysinfo(unsigned long op, void __user *buffer, unsigned long nbytes,
    - int __user *start, void __user *arg)
    +SYSCALL_DEFINE5(osf_setsysinfo, unsigned long, op, void __user *, buffer,
    + unsigned long, nbytes, int __user *, start, void __user *, arg)
    {
    switch (op) {
    case SSI_IEEE_FP_CONTROL: {
    @@ -880,8 +872,8 @@ jiffies_to_timeval32(unsigned long jiffies, struct timeval32 *value)
    value->tv_sec = jiffies / HZ;
    }

    -asmlinkage int
    -osf_gettimeofday(struct timeval32 __user *tv, struct timezone __user *tz)
    +SYSCALL_DEFINE2(osf_gettimeofday, struct timeval32 __user *, tv,
    + struct timezone __user *, tz)
    {
    if (tv) {
    struct timeval ktv;
    @@ -896,8 +888,8 @@ osf_gettimeofday(struct timeval32 __user *tv, struct timezone __user *tz)
    return 0;
    }

    -asmlinkage int
    -osf_settimeofday(struct timeval32 __user *tv, struct timezone __user *tz)
    +SYSCALL_DEFINE2(osf_settimeofday, struct timeval32 __user *, tv,
    + struct timezone __user *, tz)
    {
    struct timespec kts;
    struct timezone ktz;
    @@ -916,8 +908,7 @@ osf_settimeofday(struct timeval32 __user *tv, struct timezone __user *tz)
    return do_sys_settimeofday(tv ? &kts : NULL, tz ? &ktz : NULL);
    }

    -asmlinkage int
    -osf_getitimer(int which, struct itimerval32 __user *it)
    +SYSCALL_DEFINE2(osf_getitimer, int, which, struct itimerval32 __user *, it)
    {
    struct itimerval kit;
    int error;
    @@ -929,8 +920,8 @@ osf_getitimer(int which, struct itimerval32 __user *it)
    return error;
    }

    -asmlinkage int
    -osf_setitimer(int which, struct itimerval32 __user *in, struct itimerval32 __user *out)
    +SYSCALL_DEFINE3(osf_setitimer, int, which, struct itimerval32 __user *, in,
    + struct itimerval32 __user *, out)
    {
    struct itimerval kin, kout;
    int error;
    @@ -952,8 +943,8 @@ osf_setitimer(int which, struct itimerval32 __user *in, struct itimerval32 __use

    }

    -asmlinkage int
    -osf_utimes(char __user *filename, struct timeval32 __user *tvs)
    +SYSCALL_DEFINE2(osf_utimes, char __user *, filename,
    + struct timeval32 __user *, tvs)
    {
    struct timespec tv[2];

    @@ -979,9 +970,8 @@ osf_utimes(char __user *filename, struct timeval32 __user *tvs)
    #define MAX_SELECT_SECONDS \
    ((unsigned long) (MAX_SCHEDULE_TIMEOUT / HZ)-1)

    -asmlinkage int
    -osf_select(int n, fd_set __user *inp, fd_set __user *outp, fd_set __user *exp,
    - struct timeval32 __user *tvp)
    +SYSCALL_DEFINE5(osf_select, int, n, fd_set __user *, inp, fd_set __user *, outp,
    + fd_set __user *, exp, struct timeval32 __user *, tvp)
    {
    struct timespec end_time, *to = NULL;
    if (tvp) {
    @@ -1026,8 +1016,7 @@ struct rusage32 {
    long ru_nivcsw; /* involuntary " */
    };

    -asmlinkage int
    -osf_getrusage(int who, struct rusage32 __user *ru)
    +SYSCALL_DEFINE2(osf_getrusage, int, who, struct rusage32 __user *, ru)
    {
    struct rusage32 r;

    @@ -1053,9 +1042,8 @@ osf_getrusage(int who, struct rusage32 __user *ru)
    return copy_to_user(ru, &r, sizeof(r)) ? -EFAULT : 0;
    }

    -asmlinkage long
    -osf_wait4(pid_t pid, int __user *ustatus, int options,
    - struct rusage32 __user *ur)
    +SYSCALL_DEFINE4(osf_wait4, pid_t, pid, int __user *, ustatus, int, options,
    + struct rusage32 __user *, ur)
    {
    struct rusage r;
    long ret, err;
    @@ -1101,8 +1089,8 @@ osf_wait4(pid_t pid, int __user *ustatus, int options,
    * seems to be a timeval pointer, and I suspect the second
    * one is the time remaining.. Ho humm.. No documentation.
    */
    -asmlinkage int
    -osf_usleep_thread(struct timeval32 __user *sleep, struct timeval32 __user *remain)
    +SYSCALL_DEFINE2(osf_usleep_thread, struct timeval32 __user *, sleep,
    + struct timeval32 __user *, remain)
    {
    struct timeval tmp;
    unsigned long ticks;
    @@ -1155,8 +1143,7 @@ struct timex32 {
    int :32; int :32; int :32; int :32;
    };

    -asmlinkage int
    -sys_old_adjtimex(struct timex32 __user *txc_p)
    +SYSCALL_DEFINE1(old_adjtimex, struct timex32 __user *, txc_p)
    {
    struct timex txc;
    int ret;
    @@ -1267,8 +1254,8 @@ osf_fix_iov_len(const struct iovec __user *iov, unsigned long count)
    return 0;
    }

    -asmlinkage ssize_t
    -osf_readv(unsigned long fd, const struct iovec __user * vector, unsigned long count)
    +SYSCALL_DEFINE3(osf_readv, unsigned long, fd,
    + const struct iovec __user *, vector, unsigned long, count)
    {
    if (unlikely(personality(current->personality) == PER_OSF4))
    if (osf_fix_iov_len(vector, count))
    @@ -1276,8 +1263,8 @@ osf_readv(unsigned long fd, const struct iovec __user * vector, unsigned long co
    return sys_readv(fd, vector, count);
    }

    -asmlinkage ssize_t
    -osf_writev(unsigned long fd, const struct iovec __user * vector, unsigned long count)
    +SYSCALL_DEFINE3(osf_writev, unsigned long, fd,
    + const struct iovec __user *, vector, unsigned long, count)
    {
    if (unlikely(personality(current->personality) == PER_OSF4))
    if (osf_fix_iov_len(vector, count))
    diff --git a/arch/alpha/kernel/signal.c b/arch/alpha/kernel/signal.c
    index 410af4f..df65eaa 100644
    --- a/arch/alpha/kernel/signal.c
    +++ b/arch/alpha/kernel/signal.c
    @@ -19,6 +19,7 @@
    #include <linux/tty.h>
    #include <linux/binfmts.h>
    #include <linux/bitops.h>
    +#include <linux/syscalls.h>

    #include <asm/uaccess.h>
    #include <asm/sigcontext.h>
    @@ -51,8 +52,8 @@ static void do_signal(struct pt_regs *, struct switch_stack *,
    * Note that we don't need to acquire the kernel lock for SMP
    * operation, as all of this is local to this thread.
    */
    -asmlinkage unsigned long
    -do_osf_sigprocmask(int how, unsigned long newmask, struct pt_regs *regs)
    +SYSCALL_DEFINE3(osf_sigprocmask, int, how, unsigned long, newmask,
    + struct pt_regs *, regs)
    {
    unsigned long oldmask = -EINVAL;

    @@ -81,9 +82,9 @@ do_osf_sigprocmask(int how, unsigned long newmask, struct pt_regs *regs)
    return oldmask;
    }

    -asmlinkage int
    -osf_sigaction(int sig, const struct osf_sigaction __user *act,
    - struct osf_sigaction __user *oact)
    +SYSCALL_DEFINE3(osf_sigaction, int, sig,
    + const struct osf_sigaction __user *, act,
    + struct osf_sigaction __user *, oact)
    {
    struct k_sigaction new_ka, old_ka;
    int ret;
    @@ -112,10 +113,9 @@ osf_sigaction(int sig, const struct osf_sigaction __user *act,
    return ret;
    }

    -asmlinkage long
    -sys_rt_sigaction(int sig, const struct sigaction __user *act,
    - struct sigaction __user *oact,
    - size_t sigsetsize, void __user *restorer)
    +SYSCALL_DEFINE5(rt_sigaction, int, sig, const struct sigaction __user *, act,
    + struct sigaction __user *, oact,
    + size_t, sigsetsize, void __user *, restorer)
    {
    struct k_sigaction new_ka, old_ka;
    int ret;
    diff --git a/arch/alpha/kernel/systbls.S b/arch/alpha/kernel/systbls.S
    index 9d9e3a9..95c9aef 100644
    --- a/arch/alpha/kernel/systbls.S
    +++ b/arch/alpha/kernel/systbls.S
    @@ -17,7 +17,7 @@ sys_call_table:
    .quad sys_write
    .quad alpha_ni_syscall /* 5 */
    .quad sys_close
    - .quad osf_wait4
    + .quad sys_osf_wait4
    .quad alpha_ni_syscall
    .quad sys_link
    .quad sys_unlink /* 10 */
    @@ -27,11 +27,11 @@ sys_call_table:
    .quad sys_mknod
    .quad sys_chmod /* 15 */
    .quad sys_chown
    - .quad osf_brk
    + .quad sys_osf_brk
    .quad alpha_ni_syscall
    .quad sys_lseek
    .quad sys_getxpid /* 20 */
    - .quad osf_mount
    + .quad sys_osf_mount
    .quad sys_umount
    .quad sys_setuid
    .quad sys_getxuid
    @@ -53,7 +53,7 @@ sys_call_table:
    .quad alpha_ni_syscall /* 40 */
    .quad sys_dup
    .quad sys_alpha_pipe
    - .quad osf_set_program_attributes
    + .quad sys_osf_set_program_attributes
    .quad alpha_ni_syscall
    .quad sys_open /* 45 */
    .quad alpha_ni_syscall
    @@ -81,7 +81,7 @@ sys_call_table:
    .quad sys_newlstat
    .quad alpha_ni_syscall
    .quad alpha_ni_syscall /* 70 */
    - .quad osf_mmap
    + .quad sys_osf_mmap
    .quad alpha_ni_syscall
    .quad sys_munmap
    .quad sys_mprotect
    @@ -94,17 +94,17 @@ sys_call_table:
    .quad sys_setgroups /* 80 */
    .quad alpha_ni_syscall
    .quad sys_setpgid
    - .quad osf_setitimer
    + .quad sys_osf_setitimer
    .quad alpha_ni_syscall
    .quad alpha_ni_syscall /* 85 */
    - .quad osf_getitimer
    + .quad sys_osf_getitimer
    .quad sys_gethostname
    .quad sys_sethostname
    .quad sys_getdtablesize
    .quad sys_dup2 /* 90 */
    .quad sys_newfstat
    .quad sys_fcntl
    - .quad osf_select
    + .quad sys_osf_select
    .quad sys_poll
    .quad sys_fsync /* 95 */
    .quad sys_setpriority
    @@ -123,22 +123,22 @@ sys_call_table:
    .quad alpha_ni_syscall
    .quad alpha_ni_syscall /* 110 */
    .quad sys_sigsuspend
    - .quad osf_sigstack
    + .quad sys_osf_sigstack
    .quad sys_recvmsg
    .quad sys_sendmsg
    .quad alpha_ni_syscall /* 115 */
    - .quad osf_gettimeofday
    - .quad osf_getrusage
    + .quad sys_osf_gettimeofday
    + .quad sys_osf_getrusage
    .quad sys_getsockopt
    .quad alpha_ni_syscall
    #ifdef CONFIG_OSF4_COMPAT
    - .quad osf_readv /* 120 */
    - .quad osf_writev
    + .quad sys_osf_readv /* 120 */
    + .quad sys_osf_writev
    #else
    .quad sys_readv /* 120 */
    .quad sys_writev
    #endif
    - .quad osf_settimeofday
    + .quad sys_osf_settimeofday
    .quad sys_fchown
    .quad sys_fchmod
    .quad sys_recvfrom /* 125 */
    @@ -154,7 +154,7 @@ sys_call_table:
    .quad sys_socketpair /* 135 */
    .quad sys_mkdir
    .quad sys_rmdir
    - .quad osf_utimes
    + .quad sys_osf_utimes
    .quad alpha_ni_syscall
    .quad alpha_ni_syscall /* 140 */
    .quad sys_getpeername
    @@ -172,16 +172,16 @@ sys_call_table:
    .quad alpha_ni_syscall
    .quad alpha_ni_syscall
    .quad alpha_ni_syscall /* 155 */
    - .quad osf_sigaction
    + .quad sys_osf_sigaction
    .quad alpha_ni_syscall
    .quad alpha_ni_syscall
    - .quad osf_getdirentries
    - .quad osf_statfs /* 160 */
    - .quad osf_fstatfs
    + .quad sys_osf_getdirentries
    + .quad sys_osf_statfs /* 160 */
    + .quad sys_osf_fstatfs
    .quad alpha_ni_syscall
    .quad alpha_ni_syscall
    .quad alpha_ni_syscall
    - .quad osf_getdomainname /* 165 */
    + .quad sys_osf_getdomainname /* 165 */
    .quad sys_setdomainname
    .quad alpha_ni_syscall
    .quad alpha_ni_syscall
    @@ -224,7 +224,7 @@ sys_call_table:
    .quad sys_semctl
    .quad sys_semget /* 205 */
    .quad sys_semop
    - .quad osf_utsname
    + .quad sys_osf_utsname
    .quad sys_lchown
    .quad sys_shmat
    .quad sys_shmctl /* 210 */
    @@ -258,23 +258,23 @@ sys_call_table:
    .quad alpha_ni_syscall
    .quad alpha_ni_syscall
    .quad alpha_ni_syscall /* 240 */
    - .quad osf_sysinfo
    + .quad sys_osf_sysinfo
    .quad alpha_ni_syscall
    .quad alpha_ni_syscall
    - .quad osf_proplist_syscall
    + .quad sys_osf_proplist_syscall
    .quad alpha_ni_syscall /* 245 */
    .quad alpha_ni_syscall
    .quad alpha_ni_syscall
    .quad alpha_ni_syscall
    .quad alpha_ni_syscall
    .quad alpha_ni_syscall /* 250 */
    - .quad osf_usleep_thread
    + .quad sys_osf_usleep_thread
    .quad alpha_ni_syscall
    .quad alpha_ni_syscall
    .quad sys_sysfs
    .quad alpha_ni_syscall /* 255 */
    - .quad osf_getsysinfo
    - .quad osf_setsysinfo
    + .quad sys_osf_getsysinfo
    + .quad sys_osf_setsysinfo
    .quad alpha_ni_syscall
    .quad alpha_ni_syscall
    .quad alpha_ni_syscall /* 260 */
    diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h
    index 16875f8..0eda02f 100644
    --- a/include/linux/syscalls.h
    +++ b/include/linux/syscalls.h
    @@ -108,9 +108,14 @@ struct old_linux_dirent;
    asm ("\t.globl " #alias "\n\t.set " #alias ", " #name "\n" \
    "\t.globl ." #alias "\n\t.set ." #alias ", ." #name)
    #else
    +#ifdef CONFIG_ALPHA
    +#define SYSCALL_ALIAS(alias, name) \
    + asm ( #alias " = " #name "\n\t.globl " #alias)
    +#else
    #define SYSCALL_ALIAS(alias, name) \
    asm ("\t.globl " #alias "\n\t.set " #alias ", " #name)
    #endif
    +#endif

    #ifdef CONFIG_HAVE_SYSCALL_WRAPPERS


    \
     
     \ /
      Last update: 2009-01-27 09:39    [W:2.932 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site