aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorJeremy Fitzhardinge <jeremy@goop.org>2008-06-25 00:19:27 -0400
committerIngo Molnar <mingo@elte.hu>2008-07-08 13:13:37 +0200
commitc7245da6ae7e5208504ff027c4e0eec69b788651 (patch)
tree47767af25940999d36f4682dd3e0820c1580092a /include
parentd75cd22fdd5f7d203fb60014d426942df33dd9a6 (diff)
downloadkernel_samsung_aries-c7245da6ae7e5208504ff027c4e0eec69b788651.zip
kernel_samsung_aries-c7245da6ae7e5208504ff027c4e0eec69b788651.tar.gz
kernel_samsung_aries-c7245da6ae7e5208504ff027c4e0eec69b788651.tar.bz2
x86/paravirt, 64-bit: don't restore user rsp within sysret
There's no need to combine restoring the user rsp within the sysret pvop, so split it out. This makes the pvop's semantics closer to the machine instruction. Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citirx.com> Cc: xen-devel <xen-devel@lists.xensource.com> Cc: Stephen Tweedie <sct@redhat.com> Cc: Eduardo Habkost <ehabkost@redhat.com> Cc: Mark McLoughlin <markmc@redhat.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'include')
-rw-r--r--include/asm-x86/irqflags.h3
-rw-r--r--include/asm-x86/paravirt.h8
2 files changed, 5 insertions, 6 deletions
diff --git a/include/asm-x86/irqflags.h b/include/asm-x86/irqflags.h
index 99ee525..544836c 100644
--- a/include/asm-x86/irqflags.h
+++ b/include/asm-x86/irqflags.h
@@ -112,8 +112,7 @@ static inline unsigned long __raw_local_irq_save(void)
#ifdef CONFIG_X86_64
#define INTERRUPT_RETURN iretq
-#define USERSP_SYSRET \
- movq %gs:pda_oldrsp, %rsp; \
+#define USERGS_SYSRET \
swapgs; \
sysretq;
#else
diff --git a/include/asm-x86/paravirt.h b/include/asm-x86/paravirt.h
index 2668903..dad5b41 100644
--- a/include/asm-x86/paravirt.h
+++ b/include/asm-x86/paravirt.h
@@ -143,7 +143,7 @@ struct pv_cpu_ops {
/* These three are jmp to, not actually called. */
void (*irq_enable_sysexit)(void);
- void (*usersp_sysret)(void);
+ void (*usergs_sysret)(void);
void (*iret)(void);
void (*swapgs)(void);
@@ -1505,10 +1505,10 @@ static inline unsigned long __raw_local_irq_save(void)
movq %rax, %rcx; \
xorq %rax, %rax;
-#define USERSP_SYSRET \
- PARA_SITE(PARA_PATCH(pv_cpu_ops, PV_CPU_usersp_sysret), \
+#define USERGS_SYSRET \
+ PARA_SITE(PARA_PATCH(pv_cpu_ops, PV_CPU_usergs_sysret), \
CLBR_NONE, \
- jmp PARA_INDIRECT(pv_cpu_ops+PV_CPU_usersp_sysret))
+ jmp PARA_INDIRECT(pv_cpu_ops+PV_CPU_usergs_sysret))
#endif
#endif /* __ASSEMBLY__ */