Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 457da70e authored by Jeremy Fitzhardinge's avatar Jeremy Fitzhardinge Committed by Ingo Molnar
Browse files

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: default avatarJeremy 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: default avatarIngo Molnar <mingo@elte.hu>
parent e7b37895
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -98,7 +98,7 @@ ENTRY(ia32_sysenter_target)
	CFI_SIGNAL_FRAME
	CFI_SIGNAL_FRAME
	CFI_DEF_CFA	rsp,0
	CFI_DEF_CFA	rsp,0
	CFI_REGISTER	rsp,rbp
	CFI_REGISTER	rsp,rbp
	SWAPGS
	SWAPGS_UNSAFE_STACK
	movq	%gs:pda_kernelstack, %rsp
	movq	%gs:pda_kernelstack, %rsp
	addq	$(PDA_STACKOFFSET),%rsp	
	addq	$(PDA_STACKOFFSET),%rsp	
	/*
	/*
@@ -210,7 +210,7 @@ ENTRY(ia32_cstar_target)
	CFI_DEF_CFA	rsp,PDA_STACKOFFSET
	CFI_DEF_CFA	rsp,PDA_STACKOFFSET
	CFI_REGISTER	rip,rcx
	CFI_REGISTER	rip,rcx
	/*CFI_REGISTER	rflags,r11*/
	/*CFI_REGISTER	rflags,r11*/
	SWAPGS
	SWAPGS_UNSAFE_STACK
	movl	%esp,%r8d
	movl	%esp,%r8d
	CFI_REGISTER	rsp,r8
	CFI_REGISTER	rsp,r8
	movq	%gs:pda_kernelstack,%rsp
	movq	%gs:pda_kernelstack,%rsp