Messages in this thread | | | From | Andy Lutomirski <> | Date | Tue, 24 Mar 2015 12:08:32 -0700 | Subject | Re: [PATCH] x86/asm/entry/64: Merge the field offset into the THREAD_INFO() macro |
| |
On Tue, Mar 24, 2015 at 11:44 AM, Ingo Molnar <mingo@kernel.org> wrote: > From 11e2761ba0969466299b7109eba749d2292e8796 Mon Sep 17 00:00:00 2001 > From: Ingo Molnar <mingo@kernel.org> > Date: Tue, 24 Mar 2015 19:18:41 +0100 > Subject: [PATCH] x86/asm/entry/64: Merge the field offset into the THREAD_INFO() macro > > Before: > > TI_sysenter_return+THREAD_INFO(%rsp,3*8),%r10d > > After: > > movl THREAD_INFO(TI_sysenter_return, %rsp, 3*8), %r10d > > to turn it into a clear thread_info accessor.
LGTM (in either order), but I'd fix the nice docs that you just introduced, too.
Acked-by: Andy Lutomirski <luto@kernel.org>
> > No code changed: > > md5: > fb4cb2b3ce05d89940ca304efc8ff183 ia32entry.o.before.asm > fb4cb2b3ce05d89940ca304efc8ff183 ia32entry.o.after.asm > > e39f2958a5d1300158e276e4f7663263 entry_64.o.before.asm > e39f2958a5d1300158e276e4f7663263 entry_64.o.after.asm > > Cc: Alexei Starovoitov <ast@plumgrid.com> > Cc: Andy Lutomirski <luto@amacapital.net> > Cc: Andy Lutomirski <luto@kernel.org> > Cc: Borislav Petkov <bp@alien8.de> > Cc: Borislav Petkov <bp@suse.de> > Cc: Denys Vlasenko <dvlasenk@redhat.com> > Cc: Frederic Weisbecker <fweisbec@gmail.com> > Cc: H. Peter Anvin <hpa@zytor.com> > Cc: Kees Cook <keescook@chromium.org> > Cc: Linus Torvalds <torvalds@linux-foundation.org> > Cc: Oleg Nesterov <oleg@redhat.com> > Cc: Steven Rostedt <rostedt@goodmis.org> > Cc: Will Drewry <wad@chromium.org> > Signed-off-by: Ingo Molnar <mingo@kernel.org> > --- > arch/x86/ia32/ia32entry.S | 30 +++++++++++++++--------------- > arch/x86/include/asm/thread_info.h | 4 ++-- > arch/x86/kernel/entry_64.S | 4 ++-- > 3 files changed, 19 insertions(+), 19 deletions(-) > > diff --git a/arch/x86/ia32/ia32entry.S b/arch/x86/ia32/ia32entry.S > index acbff3fb96a1..32e94aec6073 100644 > --- a/arch/x86/ia32/ia32entry.S > +++ b/arch/x86/ia32/ia32entry.S > @@ -127,7 +127,7 @@ ENTRY(ia32_sysenter_target) > CFI_REL_OFFSET rsp,0 > pushfq_cfi > /*CFI_REL_OFFSET rflags,0*/ > - movl TI_sysenter_return+THREAD_INFO(%rsp,3*8),%r10d > + movl THREAD_INFO(TI_sysenter_return, %rsp, 3*8), %r10d > CFI_REGISTER rip,r10 > pushq_cfi $__USER32_CS > /*CFI_REL_OFFSET cs,0*/ > @@ -159,8 +159,8 @@ ENTRY(ia32_sysenter_target) > jnz sysenter_fix_flags > sysenter_flags_fixed: > > - orl $TS_COMPAT,TI_status+THREAD_INFO(%rsp,SIZEOF_PTREGS) > - testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags+THREAD_INFO(%rsp,SIZEOF_PTREGS) > + orl $TS_COMPAT, THREAD_INFO(TI_status, %rsp, SIZEOF_PTREGS) > + testl $_TIF_WORK_SYSCALL_ENTRY, THREAD_INFO(TI_flags, %rsp, SIZEOF_PTREGS) > CFI_REMEMBER_STATE > jnz sysenter_tracesys > cmpq $(IA32_NR_syscalls-1),%rax > @@ -177,10 +177,10 @@ ENTRY(ia32_sysenter_target) > movq %rax,RAX(%rsp) > DISABLE_INTERRUPTS(CLBR_NONE) > TRACE_IRQS_OFF > - testl $_TIF_ALLWORK_MASK,TI_flags+THREAD_INFO(%rsp,SIZEOF_PTREGS) > + testl $_TIF_ALLWORK_MASK, THREAD_INFO(TI_flags, %rsp, SIZEOF_PTREGS) > jnz sysexit_audit > sysexit_from_sys_call: > - andl $~TS_COMPAT,TI_status+THREAD_INFO(%rsp,SIZEOF_PTREGS) > + andl $~TS_COMPAT,THREAD_INFO(TI_status, %rsp, SIZEOF_PTREGS) > /* clear IF, that popfq doesn't enable interrupts early */ > andl $~0x200,EFLAGS(%rsp) > movl RIP(%rsp),%edx /* User %eip */ > @@ -225,7 +225,7 @@ ENTRY(ia32_sysenter_target) > .endm > > .macro auditsys_exit exit > - testl $(_TIF_ALLWORK_MASK & ~_TIF_SYSCALL_AUDIT),TI_flags+THREAD_INFO(%rsp,SIZEOF_PTREGS) > + testl $(_TIF_ALLWORK_MASK & ~_TIF_SYSCALL_AUDIT), THREAD_INFO(TI_flags, %rsp, SIZEOF_PTREGS) > jnz ia32_ret_from_sys_call > TRACE_IRQS_ON > ENABLE_INTERRUPTS(CLBR_NONE) > @@ -240,7 +240,7 @@ ENTRY(ia32_sysenter_target) > movl $(_TIF_ALLWORK_MASK & ~_TIF_SYSCALL_AUDIT),%edi > DISABLE_INTERRUPTS(CLBR_NONE) > TRACE_IRQS_OFF > - testl %edi,TI_flags+THREAD_INFO(%rsp,SIZEOF_PTREGS) > + testl %edi, THREAD_INFO(TI_flags, %rsp, SIZEOF_PTREGS) > jz \exit > CLEAR_RREGS > jmp int_with_check > @@ -262,7 +262,7 @@ ENTRY(ia32_sysenter_target) > > sysenter_tracesys: > #ifdef CONFIG_AUDITSYSCALL > - testl $(_TIF_WORK_SYSCALL_ENTRY & ~_TIF_SYSCALL_AUDIT),TI_flags+THREAD_INFO(%rsp,SIZEOF_PTREGS) > + testl $(_TIF_WORK_SYSCALL_ENTRY & ~_TIF_SYSCALL_AUDIT), THREAD_INFO(TI_flags, %rsp, SIZEOF_PTREGS) > jz sysenter_auditsys > #endif > SAVE_EXTRA_REGS > @@ -346,8 +346,8 @@ ENTRY(ia32_cstar_target) > 1: movl (%r8),%r9d > _ASM_EXTABLE(1b,ia32_badarg) > ASM_CLAC > - orl $TS_COMPAT,TI_status+THREAD_INFO(%rsp,SIZEOF_PTREGS) > - testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags+THREAD_INFO(%rsp,SIZEOF_PTREGS) > + orl $TS_COMPAT, THREAD_INFO(TI_status, %rsp, SIZEOF_PTREGS) > + testl $_TIF_WORK_SYSCALL_ENTRY, THREAD_INFO(TI_flags, %rsp, SIZEOF_PTREGS) > CFI_REMEMBER_STATE > jnz cstar_tracesys > cmpq $IA32_NR_syscalls-1,%rax > @@ -364,10 +364,10 @@ ENTRY(ia32_cstar_target) > movq %rax,RAX(%rsp) > DISABLE_INTERRUPTS(CLBR_NONE) > TRACE_IRQS_OFF > - testl $_TIF_ALLWORK_MASK,TI_flags+THREAD_INFO(%rsp,SIZEOF_PTREGS) > + testl $_TIF_ALLWORK_MASK, THREAD_INFO(TI_flags, %rsp, SIZEOF_PTREGS) > jnz sysretl_audit > sysretl_from_sys_call: > - andl $~TS_COMPAT,TI_status+THREAD_INFO(%rsp,SIZEOF_PTREGS) > + andl $~TS_COMPAT, THREAD_INFO(TI_status, %rsp, SIZEOF_PTREGS) > RESTORE_RSI_RDI_RDX > movl RIP(%rsp),%ecx > CFI_REGISTER rip,rcx > @@ -402,7 +402,7 @@ ENTRY(ia32_cstar_target) > > cstar_tracesys: > #ifdef CONFIG_AUDITSYSCALL > - testl $(_TIF_WORK_SYSCALL_ENTRY & ~_TIF_SYSCALL_AUDIT),TI_flags+THREAD_INFO(%rsp,SIZEOF_PTREGS) > + testl $(_TIF_WORK_SYSCALL_ENTRY & ~_TIF_SYSCALL_AUDIT), THREAD_INFO(TI_flags, %rsp, SIZEOF_PTREGS) > jz cstar_auditsys > #endif > xchgl %r9d,%ebp > @@ -469,8 +469,8 @@ ENTRY(ia32_syscall) > this could be a problem. */ > ALLOC_PT_GPREGS_ON_STACK > SAVE_C_REGS_EXCEPT_R891011 > - orl $TS_COMPAT,TI_status+THREAD_INFO(%rsp,SIZEOF_PTREGS) > - testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags+THREAD_INFO(%rsp,SIZEOF_PTREGS) > + orl $TS_COMPAT, THREAD_INFO(TI_status, %rsp, SIZEOF_PTREGS) > + testl $_TIF_WORK_SYSCALL_ENTRY, THREAD_INFO(TI_flags, %rsp, SIZEOF_PTREGS) > jnz ia32_tracesys > cmpq $(IA32_NR_syscalls-1),%rax > ja ia32_badsys > diff --git a/arch/x86/include/asm/thread_info.h b/arch/x86/include/asm/thread_info.h > index 813dfbb867a7..224285b674ca 100644 > --- a/arch/x86/include/asm/thread_info.h > +++ b/arch/x86/include/asm/thread_info.h > @@ -222,7 +222,7 @@ static inline unsigned long current_stack_pointer(void) > * currently at exactly SIZEOF_PTREGS bytes away from the top of the > * stack: > * > - * mov TI_flags+THREAD_INFO(%rsp, SIZEOF_PTREGS), %eax > + * mov THREAD_INFO(TI_flags, %rsp, SIZEOF_PTREGS), %eax > * > * will translate to: > * > @@ -230,7 +230,7 @@ static inline unsigned long current_stack_pointer(void) > * > * which is below the current RSP by almost 16K. > */ > -#define THREAD_INFO(reg, off) ((off)-THREAD_SIZE)(reg) > +#define THREAD_INFO(field, reg, off) ((field)+(off)-THREAD_SIZE)(reg) > > #endif > > diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S > index df04ee069b1f..8f01a4f1cf9e 100644 > --- a/arch/x86/kernel/entry_64.S > +++ b/arch/x86/kernel/entry_64.S > @@ -249,7 +249,7 @@ GLOBAL(system_call_after_swapgs) > pushq_cfi_reg r11 /* pt_regs->r11 */ > sub $(6*8),%rsp /* pt_regs->bp,bx,r12-15 not saved */ > > - testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags+THREAD_INFO(%rsp,SIZEOF_PTREGS) > + testl $_TIF_WORK_SYSCALL_ENTRY, THREAD_INFO(TI_flags, %rsp, SIZEOF_PTREGS) > jnz tracesys > system_call_fastpath: > #if __SYSCALL_MASK == ~0 > @@ -267,7 +267,7 @@ GLOBAL(system_call_after_swapgs) > * Has incompletely filled pt_regs, iret frame is also incomplete. > */ > ret_from_sys_call: > - testl $_TIF_ALLWORK_MASK,TI_flags+THREAD_INFO(%rsp,SIZEOF_PTREGS) > + testl $_TIF_ALLWORK_MASK, THREAD_INFO(TI_flags, %rsp, SIZEOF_PTREGS) > jnz int_ret_from_sys_call /* Go the slow path */ > > LOCKDEP_SYS_EXIT
-- Andy Lutomirski AMA Capital Management, LLC
| |