x86: make lazy %gs optional on x86_32
authorTejun Heo <tj@kernel.org>
Mon, 9 Feb 2009 13:17:40 +0000 (22:17 +0900)
committerIngo Molnar <mingo@elte.hu>
Mon, 9 Feb 2009 23:42:00 +0000 (00:42 +0100)
commitccbeed3a05908d201b47b6c3dd1a373138bba566
treee834d548c70426aa3885dd2169be1a79be4a617b
parentd9a89a26e02ef9ed03f74a755a8b4d8f3a066622
x86: make lazy %gs optional on x86_32

Impact: pt_regs changed, lazy gs handling made optional, add slight
        overhead to SAVE_ALL, simplifies error_code path a bit

On x86_32, %gs hasn't been used by kernel and handled lazily.  pt_regs
doesn't have place for it and gs is saved/loaded only when necessary.
In preparation for stack protector support, this patch makes lazy %gs
handling optional by doing the followings.

* Add CONFIG_X86_32_LAZY_GS and place for gs in pt_regs.

* Save and restore %gs along with other registers in entry_32.S unless
  LAZY_GS.  Note that this unfortunately adds "pushl $0" on SAVE_ALL
  even when LAZY_GS.  However, it adds no overhead to common exit path
  and simplifies entry path with error code.

* Define different user_gs accessors depending on LAZY_GS and add
  lazy_save_gs() and lazy_load_gs() which are noop if !LAZY_GS.  The
  lazy_*_gs() ops are used to save, load and clear %gs lazily.

* Define ELF_CORE_COPY_KERNEL_REGS() which always read %gs directly.

xen and lguest changes need to be verified.

Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Jeremy Fitzhardinge <jeremy@xensource.com>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/Kconfig
arch/x86/include/asm/elf.h
arch/x86/include/asm/mmu_context.h
arch/x86/include/asm/ptrace.h
arch/x86/include/asm/system.h
arch/x86/kernel/asm-offsets_32.c
arch/x86/kernel/entry_32.S
arch/x86/kernel/process_32.c
arch/x86/kernel/ptrace.c
arch/x86/lguest/boot.c
arch/x86/xen/enlighten.c