2004-09-18 22:59:46

by Cyril Wattebled

[permalink] [raw]
Subject: init_tss problem

Hi,
I'm trying to understand some piece of kernel code and I've come to this :
In arch/i386/kernel/process.c:
struct tss_struct *tss = &per_cpu(init_tss, cpu);
I don't know what init_tss is.
It's defined in asm/processor.h with the macro DEFINE_PER_CPU
(tss_struct, init_tss)
which basically does extern tss_struct init_tss.
But this init_tss has to be declared somewhere to be used as extern ...
I've searched the entire code for any reference to it but I only found it in
arch/x86_64/kernel/init_task.c which is normaly not compiled on my system.
I'm in a dead end ... anyone .. help ?
Thanks
--
Cyril Wattebled
[email protected]


2004-09-19 09:31:37

by Remi Colinet

[permalink] [raw]
Subject: Re: init_tss problem

Cyril Wattebled wrote:

> Hi,
> I'm trying to understand some piece of kernel code and I've come to
> this :
> In arch/i386/kernel/process.c:
> struct tss_struct *tss = &per_cpu(init_tss, cpu);
> I don't know what init_tss is.
> It's defined in asm/processor.h with the macro DEFINE_PER_CPU
> (tss_struct, init_tss)
> which basically does extern tss_struct init_tss.
> But this init_tss has to be declared somewhere to be used as extern ...
> I've searched the entire code for any reference to it but I only found
> it in
> arch/x86_64/kernel/init_task.c which is normaly not compiled on my
> system.
> I'm in a dead end ... anyone .. help ?
> Thanks

TSS is a Task State Segment. It is defined in include/asm-i386/processor.h.
init_tss is the Task State Segment used by the statically forked init
process. (process 0)

Each CPU has its own tss.

This segment is used by i386 and x86_64 CPUs to store the CPU/process
context. Could be used to have hardware context switch (not used by Linux).

In order to have a clean understanding about TSS (and more generally
i386), you should have a look at the i386 Intel specifiction, manual vol
3 (system programming manual)
Then, you could also read the AMD64 specification if you wish to
understand x86_64...

Regards
Remi