Re: [Question] one question about 'current' in scheduler_tick()

From: Steven Rostedt
Date: Mon Oct 17 2005 - 03:24:29 EST


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@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/