OSDN Git Service

x86: get rid of pt_regs argument of iopl(2)
authorAl Viro <viro@zeniv.linux.org.uk>
Tue, 20 Nov 2012 03:00:52 +0000 (22:00 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Sun, 3 Feb 2013 23:16:24 +0000 (18:16 -0500)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
arch/x86/ia32/ia32entry.S
arch/x86/include/asm/syscalls.h
arch/x86/kernel/entry_32.S
arch/x86/kernel/entry_64.S
arch/x86/kernel/ioport.c
arch/x86/syscalls/syscall_32.tbl
arch/x86/um/sys_call_table_32.c

index 102ff7c..74bc91e 100644 (file)
@@ -467,7 +467,6 @@ GLOBAL(\label)
        PTREGSCALL stub32_execve, compat_sys_execve, %rcx
        PTREGSCALL stub32_fork, sys_fork, %rdi
        PTREGSCALL stub32_vfork, sys_vfork, %rdi
-       PTREGSCALL stub32_iopl, sys_iopl, %rsi
 
        ALIGN
 GLOBAL(stub32_clone)
index 58b7e3e..76be6f2 100644 (file)
@@ -18,7 +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 *);
+asmlinkage long sys_iopl(unsigned int);
 
 /* kernel/ldt.c */
 asmlinkage int sys_modify_ldt(int, void __user *, unsigned long);
index 6ed91d9..415c634 100644 (file)
@@ -738,7 +738,6 @@ ENTRY(ptregs_##name) ; \
        CFI_ENDPROC; \
 ENDPROC(ptregs_##name)
 
-PTREGSCALL1(iopl)
 PTREGSCALL0(sigreturn)
 PTREGSCALL0(rt_sigreturn)
 PTREGSCALL2(vm86)
index 2f2f57a..4486fee 100644 (file)
@@ -828,23 +828,6 @@ int_restore_rest:
        CFI_ENDPROC
 END(system_call)
 
-/*
- * Certain special system calls that need to save a complete full stack frame.
- */
-       .macro PTREGSCALL label,func,arg
-ENTRY(\label)
-       PARTIAL_FRAME 1 8               /* offset 8: return address */
-       subq $REST_SKIP, %rsp
-       CFI_ADJUST_CFA_OFFSET REST_SKIP
-       call save_rest
-       DEFAULT_FRAME 0 8               /* offset 8: return address */
-       leaq 8(%rsp), \arg      /* pt_regs pointer */
-       call \func
-       jmp ptregscall_common
-       CFI_ENDPROC
-END(\label)
-       .endm
-
        .macro FORK_LIKE func
 ENTRY(stub_\func)
        CFI_STARTPROC
@@ -861,10 +844,22 @@ ENTRY(stub_\func)
 END(stub_\func)
        .endm
 
+       .macro FIXED_FRAME label,func
+ENTRY(\label)
+       CFI_STARTPROC
+       PARTIAL_FRAME 0 8               /* offset 8: return address */
+       FIXUP_TOP_OF_STACK %r11, 8-ARGOFFSET
+       call \func
+       RESTORE_TOP_OF_STACK %r11, 8-ARGOFFSET
+       ret
+       CFI_ENDPROC
+END(\label)
+       .endm
+
        FORK_LIKE  clone
        FORK_LIKE  fork
        FORK_LIKE  vfork
-       PTREGSCALL stub_iopl, sys_iopl, %rsi
+       FIXED_FRAME stub_iopl, sys_iopl
 
 ENTRY(ptregscall_common)
        DEFAULT_FRAME 1 8       /* offset 8: return address */
index 8c96897..4ddaf66 100644 (file)
@@ -93,8 +93,9 @@ 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.
  */
-long sys_iopl(unsigned int level, struct pt_regs *regs)
+SYSCALL_DEFINE1(iopl, unsigned int, level)
 {
+       struct pt_regs *regs = current_pt_regs();
        unsigned int old = (regs->flags >> 12) & 3;
        struct thread_struct *t = &current->thread;
 
index 28e3fa9..aa15a7a 100644 (file)
 107    i386    lstat                   sys_newlstat                    compat_sys_newlstat
 108    i386    fstat                   sys_newfstat                    compat_sys_newfstat
 109    i386    olduname                sys_uname
-110    i386    iopl                    ptregs_iopl                     stub32_iopl
+110    i386    iopl                    sys_iopl
 111    i386    vhangup                 sys_vhangup
 112    i386    idle
 113    i386    vm86old                 ptregs_vm86old                  sys32_vm86_warning
index a0c3b0d..5cc2bce 100644 (file)
@@ -24,7 +24,6 @@
 
 #define old_mmap sys_old_mmap
 
-#define ptregs_iopl sys_iopl
 #define ptregs_vm86old sys_vm86old
 #define ptregs_vm86 sys_vm86