|
|
|
|
|
|
|
|
|
|
xen-devel
Re: 答复: [Xen-devel] About TSS initialization when Xen booting.
On Tue, 2007-08-07 at 09:27 +0800, 李亚琼 wrote:
> Thanks, Xin!
>
> 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?
get_cpu_info returns a pointer into the stack. guest_cpu_user_regs is a
member of the structure this pointer points to (but not a pointer
itself). It has been arranged so that guest_cpu_user_regs overlaps the
part of the stack where entry.S will save the guests registers (mainly
in the SAVE_ALL macro).
This should make sense because the TSS is being initialised with exactly
the value you wish the stack to have when transitioning to ring0.
> 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?
Remember that guest_cpu_user_regs isn't a pointer, it's just a member of
a struct so it's address will currently be the address of that struct
plus an offset.
Ian.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
|
|
|
|