diff options
author | Jeremy Fitzhardinge <jeremy@goop.org> | 2008-06-25 00:19:27 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-07-08 07:13:37 -0400 |
commit | c7245da6ae7e5208504ff027c4e0eec69b788651 (patch) | |
tree | 47767af25940999d36f4682dd3e0820c1580092a /arch/x86/kernel/paravirt_patch_64.c | |
parent | d75cd22fdd5f7d203fb60014d426942df33dd9a6 (diff) |
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 'arch/x86/kernel/paravirt_patch_64.c')
-rw-r--r-- | arch/x86/kernel/paravirt_patch_64.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/arch/x86/kernel/paravirt_patch_64.c b/arch/x86/kernel/paravirt_patch_64.c index 4a170552b85..d4c0712a3e6 100644 --- a/arch/x86/kernel/paravirt_patch_64.c +++ b/arch/x86/kernel/paravirt_patch_64.c | |||
@@ -15,7 +15,7 @@ DEF_NATIVE(pv_cpu_ops, clts, "clts"); | |||
15 | DEF_NATIVE(pv_cpu_ops, wbinvd, "wbinvd"); | 15 | DEF_NATIVE(pv_cpu_ops, wbinvd, "wbinvd"); |
16 | 16 | ||
17 | /* the three commands give us more control to how to return from a syscall */ | 17 | /* the three commands give us more control to how to return from a syscall */ |
18 | DEF_NATIVE(pv_cpu_ops, usersp_sysret, "movq %gs:" __stringify(pda_oldrsp) ", %rsp; swapgs; sysretq;"); | 18 | DEF_NATIVE(pv_cpu_ops, usergs_sysret, "swapgs; sysretq;"); |
19 | DEF_NATIVE(pv_cpu_ops, swapgs, "swapgs"); | 19 | DEF_NATIVE(pv_cpu_ops, swapgs, "swapgs"); |
20 | 20 | ||
21 | unsigned native_patch(u8 type, u16 clobbers, void *ibuf, | 21 | unsigned native_patch(u8 type, u16 clobbers, void *ibuf, |
@@ -35,7 +35,7 @@ unsigned native_patch(u8 type, u16 clobbers, void *ibuf, | |||
35 | PATCH_SITE(pv_irq_ops, irq_enable); | 35 | PATCH_SITE(pv_irq_ops, irq_enable); |
36 | PATCH_SITE(pv_irq_ops, irq_disable); | 36 | PATCH_SITE(pv_irq_ops, irq_disable); |
37 | PATCH_SITE(pv_cpu_ops, iret); | 37 | PATCH_SITE(pv_cpu_ops, iret); |
38 | PATCH_SITE(pv_cpu_ops, usersp_sysret); | 38 | PATCH_SITE(pv_cpu_ops, usergs_sysret); |
39 | PATCH_SITE(pv_cpu_ops, swapgs); | 39 | PATCH_SITE(pv_cpu_ops, swapgs); |
40 | PATCH_SITE(pv_mmu_ops, read_cr2); | 40 | PATCH_SITE(pv_mmu_ops, read_cr2); |
41 | PATCH_SITE(pv_mmu_ops, read_cr3); | 41 | PATCH_SITE(pv_mmu_ops, read_cr3); |