lkml.org 
[lkml]   [2009]   [Dec]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip:x86/asm] x86: Merge sys_iopl
    Commit-ID:  27f59559d63375a4d59e7c720a439d9f0b47edad
    Gitweb: http://git.kernel.org/tip/27f59559d63375a4d59e7c720a439d9f0b47edad
    Author: Brian Gerst <brgerst@gmail.com>
    AuthorDate: Wed, 9 Dec 2009 19:01:52 -0500
    Committer: H. Peter Anvin <hpa@zytor.com>
    CommitDate: Wed, 9 Dec 2009 16:28:10 -0800

    x86: Merge sys_iopl

    Change 32-bit sys_iopl to PTREGSCALL1, and merge with 64-bit.

    Signed-off-by: Brian Gerst <brgerst@gmail.com>
    LKML-Reference: <1260403316-5679-3-git-send-email-brgerst@gmail.com>
    Signed-off-by: H. Peter Anvin <hpa@zytor.com>
    ---
    arch/x86/include/asm/syscalls.h | 6 +-----
    arch/x86/kernel/entry_32.S | 2 +-
    arch/x86/kernel/ioport.c | 28 +++++-----------------------
    3 files changed, 7 insertions(+), 29 deletions(-)

    diff --git a/arch/x86/include/asm/syscalls.h b/arch/x86/include/asm/syscalls.h
    index 372b76e..4b694cd 100644
    --- a/arch/x86/include/asm/syscalls.h
    +++ b/arch/x86/include/asm/syscalls.h
    @@ -18,6 +18,7 @@
    /* Common in X86_32 and X86_64 */
    /* kernel/ioport.c */
    asmlinkage long sys_ioperm(unsigned long, unsigned long, int);
    +long sys_iopl(unsigned int, struct pt_regs *);

    /* kernel/process.c */
    int sys_fork(struct pt_regs *);
    @@ -35,8 +36,6 @@ asmlinkage int sys_get_thread_area(struct user_desc __user *);

    /* X86_32 only */
    #ifdef CONFIG_X86_32
    -/* kernel/ioport.c */
    -long sys_iopl(struct pt_regs *);

    /* kernel/process_32.c */
    int sys_clone(struct pt_regs *);
    @@ -70,9 +69,6 @@ int sys_vm86(struct pt_regs *);
    #else /* CONFIG_X86_32 */

    /* X86_64 only */
    -/* kernel/ioport.c */
    -asmlinkage long sys_iopl(unsigned int, struct pt_regs *);
    -
    /* kernel/process_64.c */
    asmlinkage long sys_clone(unsigned long, unsigned long,
    void __user *, void __user *,
    diff --git a/arch/x86/kernel/entry_32.S b/arch/x86/kernel/entry_32.S
    index 34dbfa9..ab7fcef 100644
    --- a/arch/x86/kernel/entry_32.S
    +++ b/arch/x86/kernel/entry_32.S
    @@ -758,7 +758,7 @@ ptregs_##name: \
    addl $4,%esp; \
    ret

    -PTREGSCALL0(iopl)
    +PTREGSCALL1(iopl)
    PTREGSCALL0(fork)
    PTREGSCALL0(clone)
    PTREGSCALL0(vfork)
    diff --git a/arch/x86/kernel/ioport.c b/arch/x86/kernel/ioport.c
    index 99c4d30..85ecc7c 100644
    --- a/arch/x86/kernel/ioport.c
    +++ b/arch/x86/kernel/ioport.c
    @@ -103,9 +103,10 @@ asmlinkage long sys_ioperm(unsigned long from, unsigned long num, int turn_on)
    * on system-call entry - see also fork() and the signal handling
    * code.
    */
    -static int do_iopl(unsigned int level, struct pt_regs *regs)
    +long sys_iopl(unsigned int level, struct pt_regs *regs)
    {
    unsigned int old = (regs->flags >> 12) & 3;
    + struct thread_struct *t = &current->thread;

    if (level > 3)
    return -EINVAL;
    @@ -115,29 +116,10 @@ static int do_iopl(unsigned int level, struct pt_regs *regs)
    return -EPERM;
    }
    regs->flags = (regs->flags & ~X86_EFLAGS_IOPL) | (level << 12);
    -
    - return 0;
    -}
    -
    #ifdef CONFIG_X86_32
    -long sys_iopl(struct pt_regs *regs)
    -{
    - unsigned int level = regs->bx;
    - struct thread_struct *t = &current->thread;
    - int rc;
    -
    - rc = do_iopl(level, regs);
    - if (rc < 0)
    - goto out;
    -
    t->iopl = level << 12;
    set_iopl_mask(t->iopl);
    -out:
    - return rc;
    -}
    -#else
    -asmlinkage long sys_iopl(unsigned int level, struct pt_regs *regs)
    -{
    - return do_iopl(level, regs);
    -}
    #endif
    +
    + return 0;
    +}

    \
     
     \ /
      Last update: 2009-12-10 01:49    [W:0.056 / U:0.256 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site