Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1431651

Re: [PATCH v4 22/29] x86/asm: Move 'status' from struct thread_info to struct thread_struct

From Andy Lutomirski <luto@amacapital.net>
Newsgroups linux.kernel
Subject Re: [PATCH v4 22/29] x86/asm: Move 'status' from struct thread_info to struct thread_struct
Date 2016-06-27 02:30 +0200
Message-ID <rOsB4-1om-5@gated-at.bofh.it> (permalink)
References <rOqfT-8f8-5@gated-at.bofh.it> <rOqpz-5R-7@gated-at.bofh.it> <rOs81-Zx-1@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


On Sun, Jun 26, 2016 at 4:55 PM, Brian Gerst <brgerst@gmail.com> wrote:
> On Sun, Jun 26, 2016 at 5:55 PM, Andy Lutomirski <luto@kernel.org> wrote:
>> Becuase sched.h and thread_info.h are a tangled mess, I turned
>> in_compat_syscall into a macro.  If we had current_thread_struct()
>> or similar and we could use it from thread_info.h, then this would
>> be a bit cleaner.
>>
>> Signed-off-by: Andy Lutomirski <luto@kernel.org>
>> ---
>>  arch/x86/entry/common.c            |  4 ++--
>>  arch/x86/include/asm/processor.h   | 12 ++++++++++++
>>  arch/x86/include/asm/syscall.h     | 23 +++++------------------
>>  arch/x86/include/asm/thread_info.h | 23 ++++-------------------
>>  arch/x86/kernel/asm-offsets.c      |  1 -
>>  arch/x86/kernel/fpu/init.c         |  1 -
>>  arch/x86/kernel/process_64.c       |  4 ++--
>>  arch/x86/kernel/ptrace.c           |  2 +-
>>  8 files changed, 26 insertions(+), 44 deletions(-)
>>
>> diff --git a/arch/x86/entry/common.c b/arch/x86/entry/common.c
>> index ec138e538c44..c4150bec7982 100644
>> --- a/arch/x86/entry/common.c
>> +++ b/arch/x86/entry/common.c
>> @@ -271,7 +271,7 @@ __visible inline void prepare_exit_to_usermode(struct pt_regs *regs)
>>          * syscalls.  The fixup is exercised by the ptrace_syscall_32
>>          * selftest.
>>          */
>> -       ti->status &= ~TS_COMPAT;
>> +       current->thread.status &= ~TS_COMPAT;
>>  #endif
>>
>>         user_enter();
>> @@ -369,7 +369,7 @@ static __always_inline void do_syscall_32_irqs_on(struct pt_regs *regs)
>>         unsigned int nr = (unsigned int)regs->orig_ax;
>>
>>  #ifdef CONFIG_IA32_EMULATION
>> -       ti->status |= TS_COMPAT;
>> +       current->thread.status |= TS_COMPAT;
>>  #endif
>>
>>         if (READ_ONCE(ti->flags) & _TIF_WORK_SYSCALL_ENTRY) {
>> diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
>> index a2e20d6d01fe..a75e720f6402 100644
>> --- a/arch/x86/include/asm/processor.h
>> +++ b/arch/x86/include/asm/processor.h
>> @@ -388,6 +388,9 @@ struct thread_struct {
>>         unsigned short          fsindex;
>>         unsigned short          gsindex;
>>  #endif
>> +
>> +       u32                     status;         /* thread synchronous flags */
>> +
>>  #ifdef CONFIG_X86_32
>>         unsigned long           ip;
>>  #endif
>> @@ -437,6 +440,15 @@ struct thread_struct {
>>  };
>>
>>  /*
>> + * Thread-synchronous status.
>> + *
>> + * This is different from the flags in that nobody else
>> + * ever touches our thread-synchronous status, so we don't
>> + * have to worry about atomic accesses.
>> + */
>> +#define TS_COMPAT              0x0002  /* 32bit syscall active (64BIT)*/
>> +
>> +/*
>>   * Set IOPL bits in EFLAGS from given mask
>>   */
>>  static inline void native_set_iopl_mask(unsigned mask)
>> diff --git a/arch/x86/include/asm/syscall.h b/arch/x86/include/asm/syscall.h
>> index 999b7cd2e78c..17229e7e2a1c 100644
>> --- a/arch/x86/include/asm/syscall.h
>> +++ b/arch/x86/include/asm/syscall.h
>> @@ -60,7 +60,7 @@ static inline long syscall_get_error(struct task_struct *task,
>>          * TS_COMPAT is set for 32-bit syscall entries and then
>>          * remains set until we return to user mode.
>>          */
>> -       if (task_thread_info(task)->status & TS_COMPAT)
>> +       if (task->thread.status & TS_COMPAT)
>>                 /*
>>                  * Sign-extend the value so (int)-EFOO becomes (long)-EFOO
>>                  * and will match correctly in comparisons.
>> @@ -116,7 +116,7 @@ static inline void syscall_get_arguments(struct task_struct *task,
>>                                          unsigned long *args)
>>  {
>>  # ifdef CONFIG_IA32_EMULATION
>> -       if (task_thread_info(task)->status & TS_COMPAT)
>> +       if (task->thread.status & TS_COMPAT)
>>                 switch (i) {
>>                 case 0:
>>                         if (!n--) break;
>> @@ -177,7 +177,7 @@ static inline void syscall_set_arguments(struct task_struct *task,
>>                                          const unsigned long *args)
>>  {
>>  # ifdef CONFIG_IA32_EMULATION
>> -       if (task_thread_info(task)->status & TS_COMPAT)
>> +       if (task->thread.status & TS_COMPAT)
>>                 switch (i) {
>>                 case 0:
>>                         if (!n--) break;
>> @@ -234,21 +234,8 @@ static inline void syscall_set_arguments(struct task_struct *task,
>>
>>  static inline int syscall_get_arch(void)
>>  {
>> -#ifdef CONFIG_IA32_EMULATION
>> -       /*
>> -        * TS_COMPAT is set for 32-bit syscall entry and then
>> -        * remains set until we return to user mode.
>> -        *
>> -        * TIF_IA32 tasks should always have TS_COMPAT set at
>> -        * system call time.
>> -        *
>> -        * x32 tasks should be considered AUDIT_ARCH_X86_64.
>> -        */
>> -       if (task_thread_info(current)->status & TS_COMPAT)
>> -               return AUDIT_ARCH_I386;
>> -#endif
>> -       /* Both x32 and x86_64 are considered "64-bit". */
>> -       return AUDIT_ARCH_X86_64;
>> +       /* x32 tasks should be considered AUDIT_ARCH_X86_64. */
>> +       return in_ia32_syscall() ? AUDIT_ARCH_I386 : AUDIT_ARCH_X86_64;
>>  }
>>  #endif /* CONFIG_X86_32 */
>>
>> diff --git a/arch/x86/include/asm/thread_info.h b/arch/x86/include/asm/thread_info.h
>> index b45ffdda3549..7b42c1e462ac 100644
>> --- a/arch/x86/include/asm/thread_info.h
>> +++ b/arch/x86/include/asm/thread_info.h
>> @@ -55,7 +55,6 @@ struct task_struct;
>>  struct thread_info {
>>         struct task_struct      *task;          /* main task structure */
>>         __u32                   flags;          /* low level flags */
>> -       __u32                   status;         /* thread synchronous flags */
>>         __u32                   cpu;            /* current CPU */
>>  };
>>
>> @@ -211,28 +210,14 @@ static inline unsigned long current_stack_pointer(void)
>>
>>  #endif
>>
>> -/*
>> - * Thread-synchronous status.
>> - *
>> - * This is different from the flags in that nobody else
>> - * ever touches our thread-synchronous status, so we don't
>> - * have to worry about atomic accesses.
>> - */
>> -#define TS_COMPAT              0x0002  /* 32bit syscall active (64BIT)*/
>> -
>>  #ifndef __ASSEMBLY__
>>
>> -static inline bool in_ia32_syscall(void)
>> -{
>>  #ifdef CONFIG_X86_32
>> -       return true;
>> -#endif
>> -#ifdef CONFIG_IA32_EMULATION
>> -       if (current_thread_info()->status & TS_COMPAT)
>> -               return true;
>> +#define in_ia32_syscall() true
>> +#else
>> +#define in_ia32_syscall() (IS_ENABLED(CONFIG_IA32_EMULATION) && \
>> +                          current->thread.status & TS_COMPAT)
>>  #endif
>> -       return false;
>> -}
>>
>>  /*
>>   * Force syscall return via IRET by making it look as if there was
>> diff --git a/arch/x86/kernel/asm-offsets.c b/arch/x86/kernel/asm-offsets.c
>> index 2bd5c6ff7ee7..a91a6ead24a2 100644
>> --- a/arch/x86/kernel/asm-offsets.c
>> +++ b/arch/x86/kernel/asm-offsets.c
>> @@ -30,7 +30,6 @@
>>  void common(void) {
>>         BLANK();
>>         OFFSET(TI_flags, thread_info, flags);
>> -       OFFSET(TI_status, thread_info, status);
>
> TI_status can be deleted.  It's last users were removed in commit ee08c6bd.

Indeed.

Just to double-check: are you saying that this patch is okay?

--Andy

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH v4 00/29] virtually mapped stacks and thread_info cleanup Andy Lutomirski <luto@kernel.org> - 2016-06-27 00:00 +0200
  [PATCH v4 07/29] mm: Fix memcg stack accounting for sub-page stacks Andy Lutomirski <luto@kernel.org> - 2016-06-27 00:00 +0200
  [PATCH v4 24/29] x86/entry: Get rid of pt_regs_to_thread_info() Andy Lutomirski <luto@kernel.org> - 2016-06-27 00:00 +0200
  [PATCH v4 10/29] x86/die: Don't try to recover from an OOPS on a non-default stack Andy Lutomirski <luto@kernel.org> - 2016-06-27 00:00 +0200
    Re: [PATCH v4 10/29] x86/die: Don't try to recover from an OOPS on a  non-default stack Borislav Petkov <bp@alien8.de> - 2016-07-02 19:30 +0200
      Re: [PATCH v4 10/29] x86/die: Don't try to recover from an OOPS on a  non-default stack Josh Poimboeuf <jpoimboe@redhat.com> - 2016-07-02 20:40 +0200
        Re: [PATCH v4 10/29] x86/die: Don't try to recover from an OOPS on a  non-default stack Borislav Petkov <bp@alien8.de> - 2016-07-03 11:50 +0200
        Re: [PATCH v4 10/29] x86/die: Don't try to recover from an OOPS on a  non-default stack Andy Lutomirski <luto@amacapital.net> - 2016-07-03 16:30 +0200
          Re: [PATCH v4 10/29] x86/die: Don't try to recover from an OOPS on a  non-default stack Borislav Petkov <bp@alien8.de> - 2016-07-03 20:50 +0200
  [PATCH v4 12/29] x86/dumpstack: When dumping stack bytes due to OOPS, start with regs->sp Andy Lutomirski <luto@kernel.org> - 2016-06-27 00:00 +0200
  [PATCH v4 06/29] mm: Track NR_KERNEL_STACK in KiB instead of number of stacks Andy Lutomirski <luto@kernel.org> - 2016-06-27 00:00 +0200
  [PATCH v4 14/29] x86/dumpstack/64: Handle faults when printing the "Stack:" part of an OOPS Andy Lutomirski <luto@kernel.org> - 2016-06-27 00:00 +0200
  [PATCH v4 26/29] sched: Allow putting thread_info into task_struct Andy Lutomirski <luto@kernel.org> - 2016-06-27 00:00 +0200
  [PATCH v4 08/29] dma-api: Teach the "DMA-from-stack" check about vmapped stacks Andy Lutomirski <luto@kernel.org> - 2016-06-27 00:00 +0200
    Re: [PATCH v4 08/29] dma-api: Teach the "DMA-from-stack" check about  vmapped stacks Borislav Petkov <bp@alien8.de> - 2016-06-30 21:40 +0200
      Re: [PATCH v4 08/29] dma-api: Teach the "DMA-from-stack" check about  vmapped stacks Andy Lutomirski <luto@amacapital.net> - 2016-07-06 15:30 +0200
  [PATCH v4 25/29] um: Stop conflating task_struct::stack with thread_info Andy Lutomirski <luto@kernel.org> - 2016-06-27 00:10 +0200
    Re: [PATCH v4 25/29] um: Stop conflating task_struct::stack with thread_info Andy Lutomirski <luto@amacapital.net> - 2016-06-27 01:50 +0200
    Re: [PATCH v4 25/29] um: Stop conflating task_struct::stack with thread_info Brian Gerst <brgerst@gmail.com> - 2016-06-27 01:50 +0200
  [PATCH v4 22/29] x86/asm: Move 'status' from struct thread_info to struct thread_struct Andy Lutomirski <luto@kernel.org> - 2016-06-27 00:10 +0200
    Re: [PATCH v4 22/29] x86/asm: Move 'status' from struct thread_info  to struct thread_struct Brian Gerst <brgerst@gmail.com> - 2016-06-27 02:00 +0200
      Re: [PATCH v4 22/29] x86/asm: Move 'status' from struct thread_info  to struct thread_struct Andy Lutomirski <luto@amacapital.net> - 2016-06-27 02:30 +0200
        Re: [PATCH v4 22/29] x86/asm: Move 'status' from struct thread_info  to struct thread_struct Brian Gerst <brgerst@gmail.com> - 2016-06-27 02:40 +0200
          Re: [PATCH v4 22/29] x86/asm: Move 'status' from struct thread_info  to struct thread_struct Andy Lutomirski <luto@amacapital.net> - 2016-06-27 02:50 +0200
  [PATCH v4 19/29] signal: Consolidate {TS,TLF}_RESTORE_SIGMASK code Andy Lutomirski <luto@kernel.org> - 2016-06-27 00:10 +0200
  [PATCH v4 15/29] x86/mm/64: Enable vmapped stacks Andy Lutomirski <luto@kernel.org> - 2016-06-27 00:10 +0200
    Re: [PATCH v4 15/29] x86/mm/64: Enable vmapped stacks Brian Gerst <brgerst@gmail.com> - 2016-06-27 17:10 +0200
      Re: [PATCH v4 15/29] x86/mm/64: Enable vmapped stacks Brian Gerst <brgerst@gmail.com> - 2016-06-27 17:20 +0200
        Re: [PATCH v4 15/29] x86/mm/64: Enable vmapped stacks Andy Lutomirski <luto@amacapital.net> - 2016-06-27 17:30 +0200
          Re: [PATCH v4 15/29] x86/mm/64: Enable vmapped stacks Andy Lutomirski <luto@amacapital.net> - 2016-06-27 18:00 +0200
            Re: [PATCH v4 15/29] x86/mm/64: Enable vmapped stacks Brian Gerst <brgerst@gmail.com> - 2016-06-27 18:20 +0200
              Re: [PATCH v4 15/29] x86/mm/64: Enable vmapped stacks Andy Lutomirski <luto@amacapital.net> - 2016-06-27 18:40 +0200
                Re: [PATCH v4 15/29] x86/mm/64: Enable vmapped stacks Brian Gerst <brgerst@gmail.com> - 2016-06-27 19:10 +0200
                Re: [PATCH v4 15/29] x86/mm/64: Enable vmapped stacks Brian Gerst <brgerst@gmail.com> - 2016-06-27 19:30 +0200
            Re: [PATCH v4 15/29] x86/mm/64: Enable vmapped stacks Linus Torvalds <torvalds@linux-foundation.org> - 2016-06-27 19:30 +0200
              Re: [PATCH v4 15/29] x86/mm/64: Enable vmapped stacks Andy Lutomirski <luto@amacapital.net> - 2016-06-27 19:40 +0200
  [PATCH v4 18/29] x86: Move addr_limit to thread_struct Andy Lutomirski <luto@kernel.org> - 2016-06-27 00:10 +0200
  [PATCH v4 17/29] x86: Move uaccess_err and sig_on_uaccess_err to thread_struct Andy Lutomirski <luto@kernel.org> - 2016-06-27 00:10 +0200
  [PATCH v4 03/29] x86/mm/hotplug: Don't remove PGD entries in remove_pagetable() Andy Lutomirski <luto@kernel.org> - 2016-06-27 00:10 +0200
  [PATCH v4 23/29] kdb: Use task_cpu() instead of task_thread_info()->cpu Andy Lutomirski <luto@kernel.org> - 2016-06-27 00:10 +0200
  [PATCH v4 16/29] x86/mm: Improve stack-overflow #PF handling Andy Lutomirski <luto@kernel.org> - 2016-06-27 00:10 +0200
  [PATCH v4 20/29] x86/smp: Remove stack_smp_processor_id() Andy Lutomirski <luto@kernel.org> - 2016-06-27 00:10 +0200
  [PATCH v4 02/29] rxrpc: Avoid using stack memory in SG lists in rxkad Andy Lutomirski <luto@kernel.org> - 2016-06-27 00:10 +0200
    Re: [PATCH v4 02/29] rxrpc: Avoid using stack memory in SG lists in rxkad David Howells <dhowells@redhat.com> - 2016-06-28 09:40 +0200
      Re: [PATCH v4 02/29] rxrpc: Avoid using stack memory in SG lists in  rxkad Herbert Xu <herbert@gondor.apana.org.au> - 2016-06-28 09:40 +0200
        Re: [PATCH v4 02/29] rxrpc: Avoid using stack memory in SG lists in rxkad David Howells <dhowells@redhat.com> - 2016-06-28 11:10 +0200
          Re: [PATCH v4 02/29] rxrpc: Avoid using stack memory in SG lists in  rxkad Herbert Xu <herbert@gondor.apana.org.au> - 2016-06-28 11:50 +0200
    Re: [PATCH v4 02/29] rxrpc: Avoid using stack memory in SG lists in rxkad David Howells <dhowells@redhat.com> - 2016-06-28 09:50 +0200
    Re: [PATCH v4 02/29] rxrpc: Avoid using stack memory in SG lists in rxkad David Howells <dhowells@redhat.com> - 2016-06-28 10:00 +0200
  [PATCH v4 04/29] x86/cpa: In populate_pgd, don't set the pgd entry until it's populated Andy Lutomirski <luto@kernel.org> - 2016-06-27 00:10 +0200
    Re: [PATCH v4 04/29] x86/cpa: In populate_pgd, don't set the pgd  entry until it's populated Borislav Petkov <bp@alien8.de> - 2016-06-28 21:10 +0200
      Re: [PATCH v4 04/29] x86/cpa: In populate_pgd, don't set the pgd  entry until it's populated Andy Lutomirski <luto@amacapital.net> - 2016-06-28 21:10 +0200
  [PATCH v4 01/29] bluetooth: Switch SMP to crypto_cipher_encrypt_one() Andy Lutomirski <luto@kernel.org> - 2016-06-27 00:10 +0200
    Re: [PATCH v4 01/29] bluetooth: Switch SMP to crypto_cipher_encrypt_one() Marcel Holtmann <marcel@holtmann.org> - 2016-06-27 08:00 +0200
      Re: [PATCH v4 01/29] bluetooth: Switch SMP to  crypto_cipher_encrypt_one() Ingo Molnar <mingo@kernel.org> - 2016-06-27 11:00 +0200
        Re: [PATCH v4 01/29] bluetooth: Switch SMP to crypto_cipher_encrypt_one() Marcel Holtmann <marcel@holtmann.org> - 2016-06-28 00:40 +0200
          Re: [PATCH v4 01/29] bluetooth: Switch SMP to crypto_cipher_encrypt_one() Andy Lutomirski <luto@amacapital.net> - 2016-06-28 00:40 +0200
            Re: [PATCH v4 01/29] bluetooth: Switch SMP to crypto_cipher_encrypt_one() Marcel Holtmann <marcel@holtmann.org> - 2016-07-04 20:00 +0200
              Re: [PATCH v4 01/29] bluetooth: Switch SMP to crypto_cipher_encrypt_one() Andy Lutomirski <luto@amacapital.net> - 2016-07-06 15:20 +0200
  [PATCH v4 21/29] x86/smp: Remove unnecessary initialization of thread_info::cpu Andy Lutomirski <luto@kernel.org> - 2016-06-27 00:10 +0200
  Re: [PATCH v4 02/29] rxrpc: Avoid using stack memory in SG lists in  rxkad Herbert Xu <herbert@gondor.apana.org.au> - 2016-06-28 10:00 +0200
    Re: [PATCH v4 02/29] rxrpc: Avoid using stack memory in SG lists in rxkad David Howells <dhowells@redhat.com> - 2016-06-28 11:00 +0200
      Re: [PATCH v4 02/29] rxrpc: Avoid using stack memory in SG lists in  rxkad Herbert Xu <herbert@gondor.apana.org.au> - 2016-06-28 11:50 +0200
        Re: [PATCH v4 02/29] rxrpc: Avoid using stack memory in SG lists in rxkad David Howells <dhowells@redhat.com> - 2016-06-28 12:10 +0200
          Re: [PATCH v4 02/29] rxrpc: Avoid using stack memory in SG lists in rxkad David Howells <dhowells@redhat.com> - 2016-06-28 15:30 +0200

csiph-web