<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:΢ÈíÑźÚ
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>
Hi Subin:<BR>
&nbsp;<BR>
&nbsp;&nbsp;&nbsp;&nbsp; i am not familiar with other architecture, but for ARM, Linux Kernel 2.6.35, i checked the function handle_level_irq()and handle_edge_irq() in chip.c, both of them will call handle_IRQ_event() which is in handle.c. and the function handle_IRQ_event() will call the interrupt handler written by user. Kernel does not open interrupt(ARM CPSR I bit)when calling interrupt handler in handle_IRQ_event() function. this is only for top-half interrupt handling.&nbsp; for bottom-half, it is no doubt that the interrupt will be opened.<BR>
&nbsp;<BR>
&nbsp;&nbsp;&nbsp;&nbsp; so if you register a interrupt by request_irq(), the interrupt handler will&nbsp;be called with irq disabled. i tested on Cortex-A9 dual core platform, it is right.<BR>
&nbsp;<BR>
<BR>&nbsp;<BR>
<DIV>
<DIV id=SkyDrivePlaceholder></DIV>&gt; Date: Thu, 23 Feb 2012 11:12:06 -0600<BR>&gt; Subject: Re: pagetables used in interrupt context<BR>&gt; From: subingangadharan@gmail.com<BR>&gt; To: buyit@live.cn<BR>&gt; CC: c.a.subramaniam@gmail.com; dhylands@gmail.com; kernelnewbies@kernelnewbies.org<BR>&gt; <BR>&gt; Hi ,<BR>&gt; <BR>&gt; &gt; can support nest interrupt if it wants(2.6.35 does not support this). and it<BR>&gt; &gt; is very simple to use the interrupted thread's kernel mode stack as the<BR>&gt; &gt; interrupt context. if kernel use a specific stack which is for interrupt<BR>&gt; <BR>&gt; Thanks for the crystal clear explanation of the page table usage in<BR>&gt; interrupt context. I have one more doubt, so in 2.6.35 as you said it<BR>&gt; doesn't support<BR>&gt; nested interrupt, does it mean that all other interrupts are<BR>&gt; completely disabled, (I mean no other can interrupt the processor)<BR>&gt; while executing an interrupt handler.<BR>&gt; <BR>&gt; <BR>&gt; <BR>&gt; 2012/2/23 ²·ß®Ìì &lt;buyit@live.cn&gt;:<BR>&gt; &gt; Hi :<BR>&gt; &gt;<BR>&gt; &gt; for ARM architecture, from the point of my view, interrupt can be<BR>&gt; &gt; handled in IRQ, SVC, or SYSTEM modes.<BR>&gt; &gt; 1.if kernel handles interrupt in IRQ mode, it can use separate specific<BR>&gt; &gt; stack of IRQ mode to handle interrupt,but it cannot support nest interupt,<BR>&gt; &gt; suppose you are running interrupt handler in IRQ mode, a new coming<BR>&gt; &gt; interrupt will corrupt the lr_irq which is used for current function.<BR>&gt; &gt; 2. if kernel handles interrupt in SYSTEM mode, the sequences will be :<BR>&gt; &gt; hardware interrupt occurs--&gt;IRQ mode--&gt;SYSTEM mode --&gt;call<BR>&gt; &gt; interrupt handler.<BR>&gt; &gt; kernel can support nest interrupt well by this way, the problem is<BR>&gt; &gt; SYSTEM mode use the same register with USER mode, which means kernel will<BR>&gt; &gt; use the interrupted thread's user mode stack, this will leake information<BR>&gt; &gt; of kernel to user space, so it is not a good idea, although i did this for<BR>&gt; &gt; many years for OMAP chipset(the OS is not linux, it is mixed by REX and my<BR>&gt; &gt; own design.).<BR>&gt; &gt; 3. Linux kernel choose the last one, handle interrupt in SVC mode, which<BR>&gt; &gt; can support nest interrupt if it wants(2.6.35 does not support this). and it<BR>&gt; &gt; is very simple to use the interrupted thread's kernel mode stack as the<BR>&gt; &gt; interrupt context. if kernel use a specific stack which is for interrupt<BR>&gt; &gt; only, the sequences will be : hardware interrupt occurs--&gt;IRQ mode--&gt;SVC<BR>&gt; &gt; mode--&gt;backup sp register of interrupted thread to it's TCB---&gt;set sp<BR>&gt; &gt; register to be the specific kernel stack address--&gt;call interrupt<BR>&gt; &gt; handler---&gt;restore sp of interrupted thread---&gt;return from interrupt.<BR>&gt; &gt; this is a little complicated compared with the current design. so i<BR>&gt; &gt; agree with the current design.<BR>&gt; &gt;<BR>&gt; &gt;<BR>&gt; &gt; Best Regards<BR>&gt; &gt;<BR>&gt; &gt;&gt; Date: Thu, 23 Feb 2012 08:41:28 -0600<BR>&gt; &gt;<BR>&gt; &gt;&gt; Subject: Re: pagetables used in interrupt context<BR>&gt; &gt;&gt; From: c.a.subramaniam@gmail.com<BR>&gt; &gt;&gt; To: buyit@live.cn<BR>&gt; &gt;&gt; CC: dhylands@gmail.com; subingangadharan@gmail.com;<BR>&gt; &gt;&gt; kernelnewbies@kernelnewbies.org<BR>&gt; &gt;<BR>&gt; &gt;&gt;<BR>&gt; &gt;&gt; On Thu, Feb 23, 2012 at 6:52 AM, ²·ß®Ìì &lt;buyit@live.cn&gt; wrote:<BR>&gt; &gt;&gt; &gt; Hi Subin:<BR>&gt; &gt;&gt; &gt;<BR>&gt; &gt;&gt; &gt; for kernel version 2.6.35, ARM architecture, when interrupt occurs,<BR>&gt; &gt;&gt; &gt; kernel will change from USER/SVC mode to IRQ mode,backup some registers<BR>&gt; &gt;&gt; &gt; and<BR>&gt; &gt;&gt; &gt; change to SVC mode immediately, handle the real interrupt handler in SVC<BR>&gt; &gt;&gt; &gt; mode, which people say in interrupt context.<BR>&gt; &gt;&gt; &gt; kernel will use the stack(interrupt context) of interrupted thread to<BR>&gt; &gt;&gt; &gt; handle the interrupt, and there is no MMU operation which do page table<BR>&gt; &gt;&gt; &gt; switch.<BR>&gt; &gt;&gt; &gt; so the thread which is interrupted by interrupt, it's kernel mode stack<BR>&gt; &gt;&gt; &gt; will be choosed as the interrupt context of current interrupt.<BR>&gt; &gt;&gt; &gt;<BR>&gt; &gt;&gt; Thanks ! thats a terse explanation! Can you please mention why we do<BR>&gt; &gt;&gt; not have a IRQ stack (in terms of size of the stack) to do the<BR>&gt; &gt;&gt; processing?<BR>&gt; &gt;&gt; &gt;<BR>&gt; &gt;&gt; &gt;&gt; Date: Tue, 21 Feb 2012 19:18:32 -0700<BR>&gt; &gt;&gt; &gt;&gt; Subject: Re: pagetables used in interrupt context<BR>&gt; &gt;&gt; &gt;&gt; From: subingangadharan@gmail.com<BR>&gt; &gt;&gt; &gt;&gt; To: dhylands@gmail.com<BR>&gt; &gt;&gt; &gt;&gt; CC: kernelnewbies@kernelnewbies.org<BR>&gt; &gt;&gt; &gt;<BR>&gt; &gt;&gt; &gt;&gt;<BR>&gt; &gt;&gt; &gt;&gt; Thank you for clearing my doubt.<BR>&gt; &gt;&gt; &gt;&gt;<BR>&gt; &gt;&gt; &gt;&gt; On Mon, Feb 20, 2012 at 8:39 PM, Dave Hylands &lt;dhylands@gmail.com&gt;<BR>&gt; &gt;&gt; &gt;&gt; wrote:<BR>&gt; &gt;&gt; &gt;&gt; &gt; Hi Subin,<BR>&gt; &gt;&gt; &gt;&gt; &gt;<BR>&gt; &gt;&gt; &gt;&gt; &gt; On Mon, Feb 20, 2012 at 6:47 PM, subin gangadharan<BR>&gt; &gt;&gt; &gt;&gt; &gt; &lt;subingangadharan@gmail.com&gt; wrote:<BR>&gt; &gt;&gt; &gt;&gt; &gt;&gt; Hi All,<BR>&gt; &gt;&gt; &gt;&gt; &gt;&gt;<BR>&gt; &gt;&gt; &gt;&gt; &gt;&gt; Please correct me if I am wrong. In linux each process will have its<BR>&gt; &gt;&gt; &gt;&gt; &gt;&gt; own page tables, so when a interrupt happens processor will switch<BR>&gt; &gt;&gt; &gt;&gt; &gt;&gt; to<BR>&gt; &gt;&gt; &gt;&gt; &gt;&gt; interrupt context<BR>&gt; &gt;&gt; &gt;&gt; &gt;&gt; and execute the proper handler. So my doubt, if this is the case,<BR>&gt; &gt;&gt; &gt;&gt; &gt;&gt; interrupt hanlder will be using the pagetables of the interrupted<BR>&gt; &gt;&gt; &gt;&gt; &gt;&gt; process or is there a separate page table for this.<BR>&gt; &gt;&gt; &gt;&gt; &gt;<BR>&gt; &gt;&gt; &gt;&gt; &gt; Yep - that's right. Conceptually you can imagine that the kernel page<BR>&gt; &gt;&gt; &gt;&gt; &gt; tables are replicated in each process, so when the interrupt occurs,<BR>&gt; &gt;&gt; &gt;&gt; &gt; the kernel mappings will always be in effect regardless of which task<BR>&gt; &gt;&gt; &gt;&gt; &gt; is running. How this is actually achieved may vary from architecture<BR>&gt; &gt;&gt; &gt;&gt; &gt; to architecture.<BR>&gt; &gt;&gt; &gt;&gt; &gt;<BR>&gt; &gt;&gt; &gt;&gt; &gt; --<BR>&gt; &gt;&gt; &gt;&gt; &gt; Dave Hylands<BR>&gt; &gt;&gt; &gt;&gt; &gt; Shuswap, BC, Canada<BR>&gt; &gt;&gt; &gt;&gt; &gt; http://www.davehylands.com<BR>&gt; &gt;&gt; &gt;&gt;<BR>&gt; &gt;&gt; &gt;&gt;<BR>&gt; &gt;&gt; &gt;&gt;<BR>&gt; &gt;&gt; &gt;&gt; --<BR>&gt; &gt;&gt; &gt;&gt; With Regards<BR>&gt; &gt;&gt; &gt;&gt; Subin Gangadharan<BR>&gt; &gt;&gt; &gt;&gt;<BR>&gt; &gt;&gt; &gt;&gt; I am not afraid and I am also not afraid of being afraid.<BR>&gt; &gt;&gt; &gt;&gt;<BR>&gt; &gt;&gt; &gt;&gt; _______________________________________________<BR>&gt; &gt;&gt; &gt;&gt; Kernelnewbies mailing list<BR>&gt; &gt;&gt; &gt;&gt; Kernelnewbies@kernelnewbies.org<BR>&gt; &gt;&gt; &gt;&gt; http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies<BR>&gt; &gt;&gt; &gt;<BR>&gt; &gt;&gt; &gt; _______________________________________________<BR>&gt; &gt;&gt; &gt; Kernelnewbies mailing list<BR>&gt; &gt;&gt; &gt; Kernelnewbies@kernelnewbies.org<BR>&gt; &gt;&gt; &gt; http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies<BR>&gt; &gt;&gt; &gt;<BR>&gt; &gt;&gt;<BR>&gt; &gt;&gt; _______________________________________________<BR>&gt; &gt;&gt; Kernelnewbies mailing list<BR>&gt; &gt;&gt; Kernelnewbies@kernelnewbies.org<BR>&gt; &gt;&gt; http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies<BR>&gt; <BR>&gt; <BR>&gt; <BR>&gt; -- <BR>&gt; With Regards<BR>&gt; Subin Gangadharan<BR>&gt; <BR>&gt; I am not afraid and I am also not afraid of being afraid.<BR></DIV>                                               </div></body>
</html>