Hi Subin,<br><br><div class="gmail_quote">On Sat, Dec 10, 2011 at 7:35 AM, subin gangadharan <span dir="ltr">&lt;<a href="mailto:subingangadharan@gmail.com">subingangadharan@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Hi Guys,<br>
<br>
I have a question related to task switching.Basically when user space<br>
application switches to kernel (through sys calls),<br>
which stack will be used for the user app.Mainly I want to know how<br>
the current pointer implementation works.<br>
I saw that in arm they are masking the sp with ~(THREAD_SIZE -1) and<br>
getting the current thread info and from there its<br>
taking the task pointer.<br>
<br>
So here I am a little confused about the stack pointer since when it<br>
switches the kernel it will be supervisory mode,so which<br>
sp it&#39;s referencing.I know it will be a supervisory stack,but how this<br>
stack will be related with the user app.<br></blockquote><div><br>Every thread gets a kernel stack (typically of around 8K, although this can vary by config options and architecture). This stack is created when the thread is created. Whenever the code transitions from kernel space into user space, the kernel sp is saved and the user sp is restored. When calling from user-space into kernel space, the user-sp is saved and the kernel-sp is restored.<br>
<br>Each thread has some thread-info which is stored on the low end of the stack. Since the stacks are 8K is size and 8K aligned (or some other power of 2 in size and the same power of 2 aligned), you can do a simple masking operation with the sp to retrieve the thread-info.<br>
<br></div></div>-- <br>Dave Hylands<br>Shuswap, BC, Canada<br><a href="http://www.davehylands.com" target="_blank">http://www.davehylands.com</a><br>