public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Tejun Heo <tj@kernel.org>
To: mingo@elte.hu, linux-kernel@vger.kernel.org, brgerst@gmail.com
Cc: Tejun Heo <tj@kernel.org>
Subject: [PATCH 01/10] x86: update canary handling during switch
Date: Wed, 21 Jan 2009 17:46:09 +0900	[thread overview]
Message-ID: <1232527578-1960-2-git-send-email-tj@kernel.org> (raw)
In-Reply-To: <1232527578-1960-1-git-send-email-tj@kernel.org>

Impact: cleanup

In switch_to(), instead of taking offset to irq_stack_union.stack,
make it a proper percpu access using __percpu_arg() and per_cpu_var().

Signed-off-by: Tejun Heo <tj@kernel.org>
---
 arch/x86/include/asm/system.h |   15 +++++++++------
 1 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/arch/x86/include/asm/system.h b/arch/x86/include/asm/system.h
index 52eb748..2fcc70b 100644
--- a/arch/x86/include/asm/system.h
+++ b/arch/x86/include/asm/system.h
@@ -89,13 +89,15 @@ do {									\
 #ifdef CONFIG_CC_STACKPROTECTOR
 #define __switch_canary							  \
 	"movq %P[task_canary](%%rsi),%%r8\n\t"				  \
-	"movq %%r8,%%gs:%P[gs_canary]\n\t"
-#define __switch_canary_param						  \
-	, [task_canary] "i" (offsetof(struct task_struct, stack_canary))  \
-	, [gs_canary] "i" (offsetof(union irq_stack_union, stack_canary))
+	"movq %%r8,"__percpu_arg([gs_canary])"\n\t"
+#define __switch_canary_oparam						  \
+	, [gs_canary] "=m" (per_cpu_var(irq_stack_union.stack_canary))
+#define __switch_canary_iparam						  \
+	, [task_canary] "i" (offsetof(struct task_struct, stack_canary))
 #else	/* CC_STACKPROTECTOR */
 #define __switch_canary
-#define __switch_canary_param
+#define __switch_canary_oparam
+#define __switch_canary_iparam
 #endif	/* CC_STACKPROTECTOR */
 
 /* Save restore flags to clear handle leaking NT */
@@ -114,13 +116,14 @@ do {									\
 	     "jc   ret_from_fork\n\t"					  \
 	     RESTORE_CONTEXT						  \
 	     : "=a" (last)					  	  \
+	       __switch_canary_oparam					  \
 	     : [next] "S" (next), [prev] "D" (prev),			  \
 	       [threadrsp] "i" (offsetof(struct task_struct, thread.sp)), \
 	       [ti_flags] "i" (offsetof(struct thread_info, flags)),	  \
 	       [tif_fork] "i" (TIF_FORK),			  	  \
 	       [thread_info] "i" (offsetof(struct task_struct, stack)),   \
 	       [current_task] "m" (per_cpu_var(current_task))		  \
-	       __switch_canary_param					  \
+	       __switch_canary_iparam					  \
 	     : "memory", "cc" __EXTRA_CLOBBER)
 #endif
 
-- 
1.6.0.2


  reply	other threads:[~2009-01-21  8:46 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-01-21  8:46 [PATCHSET linux-2.6-x86:core/percpu] x86: misc clean up and unify x86_32/64 code paths Tejun Heo
2009-01-21  8:46 ` Tejun Heo [this message]
2009-01-21  8:46 ` [PATCH 02/10] x86: clean up gdt_page definition Tejun Heo
2009-01-21  8:46 ` [PATCH 03/10] x86: fix percpu_write with 64-bit constants Tejun Heo
2009-01-21  8:46 ` [PATCH 04/10] x86: set %fs to __KERNEL_PERCPU unconditionally for x86_32 Tejun Heo
2009-01-21  8:46 ` [PATCH 05/10] x86: merge mmu_context.h Tejun Heo
2009-01-21  8:46 ` [PATCH 06/10] x86: merge irq_regs.h Tejun Heo
2009-01-21  8:46 ` [PATCH 07/10] x86: uv cleanup Tejun Heo
2009-01-21  8:46 ` [PATCH 08/10] x86: prepare for tlb merge Tejun Heo
2009-01-21  8:46 ` [PATCH 09/10] x86: make x86_32 use tlb_64.c Tejun Heo
2009-01-21  8:46 ` [PATCH 10/10] x86: rename tlb_64.c to tlb.c Tejun Heo
2009-01-21  9:26 ` [PATCHSET linux-2.6-x86:core/percpu] x86: misc clean up and unify x86_32/64 code paths Ingo Molnar
2009-01-21  9:35   ` Ingo Molnar
2009-01-21 10:43     ` Ingo Molnar
2009-01-21 11:02       ` Ingo Molnar
2009-01-21 11:20         ` Tejun Heo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1232527578-1960-2-git-send-email-tj@kernel.org \
    --to=tj@kernel.org \
    --cc=brgerst@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox