Re: [PATCH 2/3] x86: Unify and fix init sp0

2015-03-11 Thread Borislav Petkov
On Tue, Mar 10, 2015 at 11:05:59AM -0700, Andy Lutomirski wrote:
> x86_32 and x86_64 need slightly different sp0 values, and x86_32's was
> incorrect for init.  (This never mattered -- the init thread never
> runs user code, so we never used sp0 for anything.)

Damn old x86 cruft - sp0 is the stack pointer for CPL0 in the TSS. Had
to go dig that out.

> Fix it and mostly unify them.
> 
> Signed-off-by: Andy Lutomirski 

Acked-by: Borislav Petkov 

-- 
Regards/Gruss,
Boris.

ECO tip #101: Trim your mails when you reply.
--
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 2/3] x86: Unify and fix init sp0

2015-03-11 Thread Borislav Petkov
On Tue, Mar 10, 2015 at 11:05:59AM -0700, Andy Lutomirski wrote:
 x86_32 and x86_64 need slightly different sp0 values, and x86_32's was
 incorrect for init.  (This never mattered -- the init thread never
 runs user code, so we never used sp0 for anything.)

Damn old x86 cruft - sp0 is the stack pointer for CPL0 in the TSS. Had
to go dig that out.

 Fix it and mostly unify them.
 
 Signed-off-by: Andy Lutomirski l...@amacapital.net

Acked-by: Borislav Petkov b...@suse.de

-- 
Regards/Gruss,
Boris.

ECO tip #101: Trim your mails when you reply.
--
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH 2/3] x86: Unify and fix init sp0

2015-03-10 Thread Andy Lutomirski
x86_32 and x86_64 need slightly different sp0 values, and x86_32's was
incorrect for init.  (This never mattered -- the init thread never
runs user code, so we never used sp0 for anything.)

Fix it and mostly unify them.

Signed-off-by: Andy Lutomirski 
---
 arch/x86/include/asm/processor.h | 7 +--
 arch/x86/kernel/process.c| 2 +-
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
index 88d9aa745898..fc6d8d0d8d53 100644
--- a/arch/x86/include/asm/processor.h
+++ b/arch/x86/include/asm/processor.h
@@ -811,6 +811,9 @@ static inline void spin_lock_prefetch(const void *x)
prefetchw(x);
 }
 
+#define TOP_OF_INIT_STACK ((unsigned long)_stack + sizeof(init_stack) - \
+  TOP_OF_KERNEL_STACK_PADDING)
+
 #ifdef CONFIG_X86_32
 /*
  * User space process size: 3GB (default).
@@ -821,7 +824,7 @@ static inline void spin_lock_prefetch(const void *x)
 #define STACK_TOP_MAX  STACK_TOP
 
 #define INIT_THREAD  {   \
-   .sp0= sizeof(init_stack) + (long)_stack, \
+   .sp0= TOP_OF_INIT_STACK,  \
.vm86_info  = NULL,   \
.sysenter_cs= __KERNEL_CS,\
.io_bitmap_ptr  = NULL,   \
@@ -883,7 +886,7 @@ extern unsigned long thread_saved_pc(struct task_struct 
*tsk);
 #define STACK_TOP_MAX  TASK_SIZE_MAX
 
 #define INIT_THREAD  { \
-   .sp0 = (unsigned long)_stack + sizeof(init_stack) \
+   .sp0 = TOP_OF_INIT_STACK \
 }
 
 /*
diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c
index f4c0af7fc3a0..12b1cf606ddf 100644
--- a/arch/x86/kernel/process.c
+++ b/arch/x86/kernel/process.c
@@ -39,7 +39,7 @@
  */
 __visible DEFINE_PER_CPU_SHARED_ALIGNED(struct tss_struct, cpu_tss) = {
.x86_tss = {
-   .sp0 = (unsigned long)_stack + sizeof(init_stack),
+   .sp0 = TOP_OF_INIT_STACK,
 #ifdef CONFIG_X86_32
.ss0 = __KERNEL_DS,
.ss1 = __KERNEL_CS,
-- 
2.3.0

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH 2/3] x86: Unify and fix init sp0

2015-03-10 Thread Andy Lutomirski
x86_32 and x86_64 need slightly different sp0 values, and x86_32's was
incorrect for init.  (This never mattered -- the init thread never
runs user code, so we never used sp0 for anything.)

Fix it and mostly unify them.

Signed-off-by: Andy Lutomirski l...@amacapital.net
---
 arch/x86/include/asm/processor.h | 7 +--
 arch/x86/kernel/process.c| 2 +-
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
index 88d9aa745898..fc6d8d0d8d53 100644
--- a/arch/x86/include/asm/processor.h
+++ b/arch/x86/include/asm/processor.h
@@ -811,6 +811,9 @@ static inline void spin_lock_prefetch(const void *x)
prefetchw(x);
 }
 
+#define TOP_OF_INIT_STACK ((unsigned long)init_stack + sizeof(init_stack) - \
+  TOP_OF_KERNEL_STACK_PADDING)
+
 #ifdef CONFIG_X86_32
 /*
  * User space process size: 3GB (default).
@@ -821,7 +824,7 @@ static inline void spin_lock_prefetch(const void *x)
 #define STACK_TOP_MAX  STACK_TOP
 
 #define INIT_THREAD  {   \
-   .sp0= sizeof(init_stack) + (long)init_stack, \
+   .sp0= TOP_OF_INIT_STACK,  \
.vm86_info  = NULL,   \
.sysenter_cs= __KERNEL_CS,\
.io_bitmap_ptr  = NULL,   \
@@ -883,7 +886,7 @@ extern unsigned long thread_saved_pc(struct task_struct 
*tsk);
 #define STACK_TOP_MAX  TASK_SIZE_MAX
 
 #define INIT_THREAD  { \
-   .sp0 = (unsigned long)init_stack + sizeof(init_stack) \
+   .sp0 = TOP_OF_INIT_STACK \
 }
 
 /*
diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c
index f4c0af7fc3a0..12b1cf606ddf 100644
--- a/arch/x86/kernel/process.c
+++ b/arch/x86/kernel/process.c
@@ -39,7 +39,7 @@
  */
 __visible DEFINE_PER_CPU_SHARED_ALIGNED(struct tss_struct, cpu_tss) = {
.x86_tss = {
-   .sp0 = (unsigned long)init_stack + sizeof(init_stack),
+   .sp0 = TOP_OF_INIT_STACK,
 #ifdef CONFIG_X86_32
.ss0 = __KERNEL_DS,
.ss1 = __KERNEL_CS,
-- 
2.3.0

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/