/[pkg-src]/trunk/kernel26-xen/patches-2.6.25-r1/1083-2.6.25-xen-Handle-Xen-exception-stack-it-is-different-from-bar.patch |
Annotation of /trunk/kernel26-xen/patches-2.6.25-r1/1083-2.6.25-xen-Handle-Xen-exception-stack-it-is-different-from-bar.patch
Parent Directory | Revision Log
Revision 606 -
(hide annotations)
(download)
Thu May 22 23:13:13 2008 UTC (16 years ago) by niro
File size: 1511 byte(s)
Thu May 22 23:13:13 2008 UTC (16 years ago) by niro
File size: 1511 byte(s)
-ver bump to 2.6.25-magellan-r1: - linux-2.6.25.4 - fbcondecor-0.9.4 - squashfs-3.3 - unionfs-2.3.3 - tuxonice-3.0-rc7 - linux-phc-0.3.0 - acpi-dstd-0.9a - reiser4 - xen-3.2.0 . ipw3945-1.2.2
1 | niro | 606 | From ae6e8b1f9015e6c70f6945063bc4002926e81d4f Mon Sep 17 00:00:00 2001 |
2 | From: Eduardo Habkost <ehabkost@redhat.com> | ||
3 | Date: Mon, 24 Dec 2007 17:22:58 -0200 | ||
4 | Subject: [PATCH] Handle Xen exception stack (it is different from baremetal stack) (FIXME) | ||
5 | |||
6 | Now Oopses make sense! :D | ||
7 | |||
8 | FIXME: This needs to be handled differently at runtime, not compile time. | ||
9 | |||
10 | Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> | ||
11 | --- | ||
12 | arch/x86/kernel/entry_64.S | 18 ++++++++++++++++++ | ||
13 | 1 files changed, 18 insertions(+), 0 deletions(-) | ||
14 | |||
15 | diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S | ||
16 | index 3fedbd6..d026834 100644 | ||
17 | --- a/arch/x86/kernel/entry_64.S | ||
18 | +++ b/arch/x86/kernel/entry_64.S | ||
19 | @@ -728,11 +728,28 @@ ENTRY(spurious_interrupt) | ||
20 | apicinterrupt SPURIOUS_APIC_VECTOR,smp_spurious_interrupt | ||
21 | END(spurious_interrupt) | ||
22 | |||
23 | + | ||
24 | +/* Xen register handling */ | ||
25 | +#ifdef CONFIG_XEN | ||
26 | + /*FIXME: select this at runtime */ | ||
27 | + .macro xen_fix_stack | ||
28 | + movq (%rsp),%rcx | ||
29 | + CFI_RESTORE rcx | ||
30 | + movq 8(%rsp),%r11 | ||
31 | + CFI_RESTORE r11 | ||
32 | + addq $0x10,%rsp /* skip rcx and r11 */ | ||
33 | + CFI_ADJUST_CFA_OFFSET -0x10 | ||
34 | + .endm | ||
35 | +#else | ||
36 | + .macro xen_fix_stack | ||
37 | + .endm | ||
38 | +#endif | ||
39 | /* | ||
40 | * Exception entry points. | ||
41 | */ | ||
42 | .macro zeroentry sym | ||
43 | INTR_FRAME | ||
44 | + xen_fix_stack | ||
45 | pushq $0 /* push error code/oldrax */ | ||
46 | CFI_ADJUST_CFA_OFFSET 8 | ||
47 | pushq %rax /* push real oldrax to the rdi slot */ | ||
48 | @@ -745,6 +762,7 @@ END(spurious_interrupt) | ||
49 | |||
50 | .macro errorentry sym | ||
51 | XCPT_FRAME | ||
52 | + xen_fix_stack | ||
53 | pushq %rax | ||
54 | CFI_ADJUST_CFA_OFFSET 8 | ||
55 | CFI_REL_OFFSET rax,0 | ||
56 | -- | ||
57 | 1.5.4.1 | ||
58 |