Re: What is the function of arch/x86/purgatory/purgatory.c?

From: Larry Finger
Date: Sat Dec 17 2016 - 14:56:45 EST


On 12/17/2016 01:46 PM, Al Viro wrote:
On Sat, Dec 17, 2016 at 11:52:05AM -0600, Larry Finger wrote:

Upon examination of the routine, I can see that if purgatory() should be
static, then none of the code here will ever be accessed by any part of the
kernel. Is there some bit of magic that is above my understanding, or is
this a useless bit of code that has been forgotten and should be removed?

I don't know what is and what is not above your understanding, but grepping
in that area (grep -w purgatory arch/x86/purgatory/*) does catch this:
arch/x86/purgatory/setup-x86_64.S: call purgatory
which is hardly magic - looks like a function call. Looking into that
file shows
purgatory_start:
.code64

/* Load a gdt so I know what the segment registers are */
lgdt gdt(%rip)

/* load the data segments */
movl $0x18, %eax /* data segment */
movl %eax, %ds
movl %eax, %es
movl %eax, %ss
movl %eax, %fs
movl %eax, %gs

/* Setup a stack */
leaq lstack_end(%rip), %rsp

/* Call the C code */
call purgatory
jmp entry64

which pretty much confirms that - it's called from purgatory_start().

Thanks for the explanation.

Larry