RE: setup_thread_stack

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




 

Date: Tue, 17 Jul 2012 21:15:50 +0200
Subject: setup_thread_stack
From: francesco.scali@xxxxxxxxx
To: kernelnewbies@xxxxxxxxxxxxxxxxx

Hi, 
I'm totally new to kernel code, just trying to understand the basics of the core subsystems.
During the do_fork call, there is a call to dup_task_struct, which in turn calls setup_thread_stack. 
What's  this call supposed to do? Inside I can see a call to the "task_thread_info" macro, but I don't quite understand it:

#define task_thread_info(task) ((struct thread_info *)(task)->stack)

can a task_struct be cast to a thread_info? perhaps my C knowledge should be improved..I know :(

Sorry for the trivial question..just trying to understand :)
 
it is nothing about C, but architecture of kernel. kernel put thread_info of every process at the bottom of stack.
please reference thread_info.h for your specific cpu architecture:
/*
 * how to get the thread information struct from C
 */
static inline struct thread_info *current_thread_info(void) __attribute_const__;
static inline struct thread_info *current_thread_info(void)
{
 register unsigned long sp asm ("sp");
 return (struct thread_info *)(sp & ~(THREAD_SIZE - 1));
}
because kernel put thread_info at the bottom of stack, so when one process is running, kernel can use above inline
function to get the thread_info conveniently.
 

Regards,

Francesco


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

[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux