[PATCH 0/1] Fast headers: Make task_struct::thread constant size

Ingo Molnar posted 1 patch 1 year, 10 months ago
arch/x86/include/asm/fpu/sched.h |  2 +-
arch/x86/include/asm/processor.h | 14 ++++++--------
arch/x86/kernel/fpu/context.h    |  4 ++--
arch/x86/kernel/fpu/core.c       | 51 ++++++++++++++++++++++++++-------------------------
arch/x86/kernel/fpu/init.c       | 28 ++++++++++++++++++----------
arch/x86/kernel/fpu/regset.c     | 22 +++++++++++-----------
arch/x86/kernel/fpu/signal.c     | 18 +++++++++---------
arch/x86/kernel/fpu/xstate.c     | 22 +++++++++++-----------
arch/x86/kernel/fpu/xstate.h     |  6 +++---
arch/x86/kernel/process.c        |  6 +++---
arch/x86/kernel/signal.c         |  6 +++---
arch/x86/kernel/traps.c          |  2 +-
arch/x86/math-emu/fpu_aux.c      |  2 +-
arch/x86/math-emu/fpu_entry.c    |  4 ++--
arch/x86/math-emu/fpu_system.h   |  2 +-
arch/x86/mm/extable.c            |  2 +-
include/linux/sched.h            | 13 +++----------
17 files changed, 102 insertions(+), 102 deletions(-)
[PATCH 0/1] Fast headers: Make task_struct::thread constant size
Posted by Ingo Molnar 1 year, 10 months ago
Turn thread.fpu into a pointer. Since most FPU code internals work by passing
around the FPU pointer already, the code generation impact is small.

This allows us to remove the old kludge of task_struct being variable size:

  struct task_struct {

       ...
       /*
        * New fields for task_struct should be added above here, so that
        * they are included in the randomized portion of task_struct.
        */
       randomized_struct_fields_end

       /* CPU-specific state of this task: */
       struct thread_struct            thread;

       /*
        * WARNING: on x86, 'thread_struct' contains a variable-sized
        * structure.  It *MUST* be at the end of 'task_struct'.
        *
        * Do not put anything below here!
        */
  };

... which creates a number of problems, such as requiring thread_struct to be
the last member of the struct - not allowing it to be struct-randomized, etc.

But the primary motivation is to allow the decoupling of task_struct from
hardware details (<asm/processor.h> in particular), and to eventually allow
the per-task infrastructure:

   DECLARE_PER_TASK(type, name);
   ...
   per_task(current, name) = val;

... which requires task_struct to be a constant size struct.

The fpu_thread_struct_whitelist() quirk to hardened usercopy can be removed,
now that the FPU structure is not embedded in the task struct anymore, which
reduces text footprint a bit.

Ingo Molnar (1):
  headers/deps: x86/fpu: Make task_struct::thread constant size

 arch/x86/include/asm/fpu/sched.h |  2 +-
 arch/x86/include/asm/processor.h | 14 ++++++--------
 arch/x86/kernel/fpu/context.h    |  4 ++--
 arch/x86/kernel/fpu/core.c       | 51 ++++++++++++++++++++++++++-------------------------
 arch/x86/kernel/fpu/init.c       | 28 ++++++++++++++++++----------
 arch/x86/kernel/fpu/regset.c     | 22 +++++++++++-----------
 arch/x86/kernel/fpu/signal.c     | 18 +++++++++---------
 arch/x86/kernel/fpu/xstate.c     | 22 +++++++++++-----------
 arch/x86/kernel/fpu/xstate.h     |  6 +++---
 arch/x86/kernel/process.c        |  6 +++---
 arch/x86/kernel/signal.c         |  6 +++---
 arch/x86/kernel/traps.c          |  2 +-
 arch/x86/math-emu/fpu_aux.c      |  2 +-
 arch/x86/math-emu/fpu_entry.c    |  4 ++--
 arch/x86/math-emu/fpu_system.h   |  2 +-
 arch/x86/mm/extable.c            |  2 +-
 include/linux/sched.h            | 13 +++----------
 17 files changed, 102 insertions(+), 102 deletions(-)

-- 
2.40.1