lkml.org 
[lkml]   [2005]   [Oct]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [Question] one question about 'current' in scheduler_tick()
Steven Rostedt wrote:

>Hi Liyu (once again :-)
>
>On Mon, 17 Oct 2005, liyu wrote:
>
>
>
>>Hi, All.
>>
>> I found scheduler_tick() use current macro to get task_struct of
>>current task.
>>
>> I seen scheduler_tick() is called every timer interrupt at most
>>time. In this
>>case, I think scheduler_tick() is in interrupt context (enter kernel by
>>interrupt),
>>
>>
>
>Yes, scheduler_tick is called from interrupt context.
>
>
>
>>So I have a hunch that there have not thread_info which it need in
>>kernel stack. But
>>It seem it can work perfectly.
>>
>>
>
>Although it is said that you can't access user memory from an interrupt
>context, the reasons are simple. One, most user memory access can
>schedule, and an interrupt service routine must not schedule. Also, an
>interrupt service routine can happen on any thread, so you can't be sure
>what thread is there.
>
>But, when an interrupt goes off, whatever thread is running is still
>there. The thread's context _is_ still there. The changing to the
>interrupt stack takes special care to make sure that current still works.
>So a copy of the thread_info is also done. Look in the do_IRQ in
>arch/i386/kernel/irq.c and search for 4KSTACKS. You will see there the
>copying of thread_info.
>
>
>
>> I can not understand this. Would any expert like explain clearly for
>>it ?
>>
>>
>>
>
>Hope this helps,
>
>-- Steve
>
>-
>To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>the body of a message to majordomo@vger.kernel.org
>More majordomo info at http://vger.kernel.org/majordomo-info.html
>Please read the FAQ at http://www.tux.org/lkml/
>
>
>
>
Hi Steve, Thanks once again :)

I searched arch/i386/kernel/irq.c, and got this line of code:

irqctx->tinfo.task = curctx->tinfo.task;

I think it just is answer that I want to get. It seem interrupt
stack is
created at top of the original kernel stack. Are my words right?

In passing, How 'current' work in this case when we disable 4KSTACK?
I just found these code only be compiled when we define CONFIG_4KSTACK,
but cann't found #else branch relevantly.


-liyu






-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-10-17 11:03    [W:0.099 / U:0.356 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site