Thread (4 messages) 4 messages, 3 authors, 2011-09-16

thread_info address calculation

From: kirjanov@gmail.com (Denis Kirjanov)
Date: 2011-09-16 11:56:29

It's the same thing as you read:
THREAD size is 8kb so the operation looks like the following:
current_stack_pointer & ~(8191) == current_stack_pointet & 0xFFFFFE00
(last 13 bits are 0)

On Fri, Sep 16, 2011 at 3:38 PM, Vijay Chauhan [off-list ref] wrote:
Hi list,

I would like to know how the thread_info address is calculated? As per
the LKD book:
struct thread_info is stored on the kernel stack. On x86, current is
calculated by masking out the 13 least-significant bits of the stack
pointer to obtain the thread_info structure.This is done by the
current_thread_info() function.The assembly is shown here:
movl $-8192, %eax
andl %esp, %eax
This assumes that the stack size is 8KB.

But in code i found that:
/* how to get the thread information struct from C */
static inline struct thread_info *current_thread_info(void)
{
? ? ? ?return (struct thread_info *)
? ? ? ? ? ? ? ?(current_stack_pointer & ~(THREAD_SIZE - 1));
}

/* how to get the current stack pointer from C */
static inline unsigned long current_stack_pointer(void)
{
? ? ? ?unsigned long sp;
? ? ? ?asm("mov sp,%0; ":"=r" (sp));
? ? ? ?return sp;
}

Could anyone help me in explaining the current_stack_pointer and
(current_stack_pointer & ~(THREAD_SIZE - 1)) calculation? This is not
as mentioned in the book.

If page size is 4KB and 2 page per process kernel stack is used then
THREAD_Size will be 8KB.

Thanks,
Vijay

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies at kernelnewbies.org
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies


-- 
Regards,
Denis
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help