But __context_switch will be
invoked only when system is scheduled. During the initialization, Xen invokes percpu_traps_init
and cpu_init to initialize a physical cpu. In this two functions, tss will be assigned
with a value from guest_cpu_user_regs. But till this time, __context_switch has
never been invoked. In other words, idle_domain’s tss is assigned with a trivial
value. After all, when Xen is in the idle domain, a stack switch will occur when
a interrupt occurs. Is it correct?
Another question is about percpu_traps_init
whick code is following:
char *stack_bottom, *stack;
stack_bottom = (char *)get_stack_bottom();
stack = (char *)((unsigned
long)stack_bottom & ~(STACK_SIZE - 1));
Double-fault handler has its own per-CPU 2kB stack. */
= (unsigned long)&stack;
handler has its own per-CPU 1kB stack. */
init_tss[cpu].ist = (unsigned long)&stack;
Trampoline for SYSCALL entry from long mode.
the NMI and DF stacks. */
wrmsr(MSR_LSTAR, (unsigned long)stack, ((unsigned long)stack>>32));
%rsp, saversp(%rip) */
stack = 0x48;
stack = 0x89;
stack = 0x25;
*(u32 *)&stack = (stack_bottom - &stack) - 16;
The question is about the variables, “stack” and “stack_bottom”.
At this moment, if guest_cpu_user_regs has not been initialized, “stack_bottom”
will be zero when the cpu is the first physical cpu ( its stack is initialized with
zero in file boot.S). And then “stack” will be zero, too. Is it correct?
Xin B [mailto:xin.b.li@xxxxxxxxx]
发送时间: 2007年8月6日 23:50
收件人: 李亚琼; xen-devel@xxxxxxxxxxxxxxxxxxx
主题: RE: [Xen-devel] About TSS initialization when Xen booting.
In __context_switch, there is a memcpy to do this
On Behalf Of 李亚琼
Sent: Monday, August 06, 2007 8:46
Subject: [Xen-devel] About TSS
initialization when Xen booting.
I have a doubt on the Tss initialization. In the function cpu_init(),t->rsp0
But I can’t find where the guest_cpu_user_regs has been initialized. Anybody
can help me?