Messages in this thread Patch in this message | | | Date | Mon, 6 Jan 2003 03:12:50 +0100 | From | Luca Barbieri <> | Subject | [PATCH] Introduce TIF_IRET and use it to disable sysexit |
| |
This patch introduces a new flag called TIF_IRET and uses it in place of TIF_SIGPENDING when that flag is used to force return via iret.
This avoids the overhead of calling do_signal and makes the code easier to understand.
diff --exclude-from=/home/ldb/src/exclude -urNdp --exclude='speedtouch.*' --exclude='atmsar.*' linux-2.5.54/arch/i386/kernel/ioport.c linux-2.5.54-ldb/arch/i386/kernel/ioport.c --- linux-2.5.54/arch/i386/kernel/ioport.c 2003-01-02 04:21:56.000000000 +0100 +++ linux-2.5.54-ldb/arch/i386/kernel/ioport.c 2003-01-04 19:06:07.000000000 +0100 @@ -124,6 +124,6 @@ asmlinkage int sys_iopl(unsigned long un } regs->eflags = (regs->eflags & 0xffffcfff) | (level << 12); /* Make sure we return the long way (not sysenter) */ - set_thread_flag(TIF_SIGPENDING); + set_thread_flag(TIF_IRET); return 0; } diff --exclude-from=/home/ldb/src/exclude -urNdp --exclude='speedtouch.*' --exclude='atmsar.*' linux-2.5.54/arch/i386/kernel/process.c linux-2.5.54-ldb/arch/i386/kernel/process.c --- linux-2.5.54/arch/i386/kernel/process.c 2003-01-02 04:20:49.000000000 +0100 +++ linux-2.5.54-ldb/arch/i386/kernel/process.c 2003-01-04 19:06:07.000000000 +0100 @@ -561,7 +561,7 @@ asmlinkage int sys_execve(struct pt_regs if (error == 0) { current->ptrace &= ~PT_DTRACE; /* Make sure we don't return using sysenter.. */ - set_thread_flag(TIF_SIGPENDING); + set_thread_flag(TIF_IRET); } putname(filename); out: diff --exclude-from=/home/ldb/src/exclude -urNdp --exclude='speedtouch.*' --exclude='atmsar.*' linux-2.5.54/arch/i386/kernel/signal.c linux-2.5.54-ldb/arch/i386/kernel/signal.c --- linux-2.5.54/arch/i386/kernel/signal.c 2003-01-02 04:21:53.000000000 +0100 +++ linux-2.5.54-ldb/arch/i386/kernel/signal.c 2003-01-04 19:06:07.000000000 +0100 @@ -617,4 +619,6 @@ void do_notify_resume(struct pt_regs *re /* deal with pending signal delivery */ if (thread_info_flags & _TIF_SIGPENDING) do_signal(regs,oldset); + + clear_thread_flag(TIF_IRET); } diff --exclude-from=/home/ldb/src/exclude -urNdp --exclude='speedtouch.*' --exclude='atmsar.*' linux-2.5.54/include/asm-i386/thread_info.h linux-2.5.54-ldb/include/asm-i386/thread_info.h --- linux-2.5.54/include/asm-i386/thread_info.h 2003-01-02 04:21:09.000000000 +0100 +++ linux-2.5.54-ldb/include/asm-i386/thread_info.h 2003-01-04 19:06:07.000000000 +0100 @@ -110,6 +110,7 @@ static inline struct thread_info *curren #define TIF_SIGPENDING 2 /* signal pending */ #define TIF_NEED_RESCHED 3 /* rescheduling necessary */ #define TIF_SINGLESTEP 4 /* restore singlestep on return to user mode */ +#define TIF_IRET 5 /* return with iret */ #define TIF_USEDFPU 16 /* FPU was used by this task this quantum (SMP) */ #define TIF_POLLING_NRFLAG 17 /* true if poll_idle() is polling TIF_NEED_RESCHED */ @@ -118,6 +119,7 @@ static inline struct thread_info *curren #define _TIF_SIGPENDING (1<<TIF_SIGPENDING) #define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED) #define _TIF_SINGLESTEP (1<<TIF_SINGLESTEP) +#define _TIF_IRET (1<<TIF_IRET) #define _TIF_USEDFPU (1<<TIF_USEDFPU) #define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG) [unhandled content-type:application/pgp-signature] | |