diff options
author | Jeremy Fitzhardinge <jeremy@goop.org> | 2008-06-26 10:28:51 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-07-08 07:16:02 -0400 |
commit | 457da70ec09ca78e8fda5d5ab3659248f844a376 (patch) | |
tree | c3c5b99aad81d263f8c31a6ab5d4836aa30dad33 /arch/x86/ia32/ia32entry.S | |
parent | e7b3789524eecc96213dd69d6686efd429235051 (diff) |
x86/paravirt: groundwork for 64-bit Xen support, fix
Ingo Molnar wrote:
> * Jeremy Fitzhardinge <jeremy@goop.org> wrote:
>
>
>>> It quickly broke the build in testing:
>>>
>>> include/asm/pgalloc.h: In function ‘paravirt_pgd_free':
>>> include/asm/pgalloc.h:14: error: parameter name omitted
>>> arch/x86/kernel/entry_64.S: In file included from
>>> arch/x86/kernel/traps_64.c:51:include/asm/pgalloc.h: In function
>>> ‘paravirt_pgd_free':
>>> include/asm/pgalloc.h:14: error: parameter name omitted
>>>
>>>
>> No, looks like my fault. The non-PARAVIRT version of
>> paravirt_pgd_free() is:
>>
>> static inline void paravirt_pgd_free(struct mm_struct *mm, pgd_t *) {}
>>
>> but C doesn't like missing parameter names, even if unused.
>>
>> This should fix it:
>>
>
> that fixed the build but now we've got a boot crash with this config:
>
> time.c: Detected 2010.304 MHz processor.
> spurious 8259A interrupt: IRQ7.
> BUG: unable to handle kernel NULL pointer dereference at 0000000000000000
> IP: [<0000000000000000>]
> PGD 0
> Thread overran stack, or stack corrupted
> Oops: 0010 [1] SMP
> CPU 0
>
> with:
>
> http://redhat.com/~mingo/misc/config-Thu_Jun_26_12_46_46_CEST_2008.bad
>
Use SWAPGS_UNSAFE_STACK in ia32entry.S in the places where the active
stack is the usermode stack.
Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.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>
Cc: Vegard Nossum <vegard.nossum@gmail.com>
Cc: Nick Piggin <npiggin@suse.de>
Cc: Yinghai Lu <yhlu.kernel@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/ia32/ia32entry.S')
-rw-r--r-- | arch/x86/ia32/ia32entry.S | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/arch/x86/ia32/ia32entry.S b/arch/x86/ia32/ia32entry.S index 9740b6a2df35..24e4d4928d65 100644 --- a/arch/x86/ia32/ia32entry.S +++ b/arch/x86/ia32/ia32entry.S | |||
@@ -98,7 +98,7 @@ ENTRY(ia32_sysenter_target) | |||
98 | CFI_SIGNAL_FRAME | 98 | CFI_SIGNAL_FRAME |
99 | CFI_DEF_CFA rsp,0 | 99 | CFI_DEF_CFA rsp,0 |
100 | CFI_REGISTER rsp,rbp | 100 | CFI_REGISTER rsp,rbp |
101 | SWAPGS | 101 | SWAPGS_UNSAFE_STACK |
102 | movq %gs:pda_kernelstack, %rsp | 102 | movq %gs:pda_kernelstack, %rsp |
103 | addq $(PDA_STACKOFFSET),%rsp | 103 | addq $(PDA_STACKOFFSET),%rsp |
104 | /* | 104 | /* |
@@ -210,7 +210,7 @@ ENTRY(ia32_cstar_target) | |||
210 | CFI_DEF_CFA rsp,PDA_STACKOFFSET | 210 | CFI_DEF_CFA rsp,PDA_STACKOFFSET |
211 | CFI_REGISTER rip,rcx | 211 | CFI_REGISTER rip,rcx |
212 | /*CFI_REGISTER rflags,r11*/ | 212 | /*CFI_REGISTER rflags,r11*/ |
213 | SWAPGS | 213 | SWAPGS_UNSAFE_STACK |
214 | movl %esp,%r8d | 214 | movl %esp,%r8d |
215 | CFI_REGISTER rsp,r8 | 215 | CFI_REGISTER rsp,r8 |
216 | movq %gs:pda_kernelstack,%rsp | 216 | movq %gs:pda_kernelstack,%rsp |