Re: Race condition in interrupt handling

"Mai, Haohui" <[email protected]> Tue, 13 Apr 2010 08:34:17 -0500
Newsgroups gmane.comp.micro-kernel.l4.l4ka.general
Message-ID <[email protected]>
The interrupt is re-enabled by after local_apic.EOI() is called, which 
means interrupt is enabled in irq_thread(). Therefore, irq_thread() can 
be preempted by an interrupt at that time.

I enabled the trace statement at api/v4/interrupt.cc:172, what I can saw 
during debugging is something like:

IRQ12 (curr=IRQ_12)

I do enable SMP in the kernel, but I don't think I enable any migration 
right now, so everything should be running on CPU 0.

Haohui


On 04/13/2010 08:02 AM, Jan Stoess wrote:
>
> This seems fishy to me. intctrl_t::unmask() should only be called by 
> irq_thread, which resides on the CPU the IRQ is routed to. Since it is 
> in the kernel, how can the new IRQ be delivered to the CPU at the 
> point you're referring to with (1) INTERRUPT COMES HERE? Again, does 
> this happen during IRQ migration? Maybe you can use the tracebuffer 
> (potentially even inserting some tracing statements at the critical 
> points yourself, e.g. via TRACE_IRQ_DETAILS() and tp_irq_mask, latter 
> of which you can set in the KDB menu, in the tracebuffer submenu "y") 
> and dump a corresponding trace log to this list?
>
> Thanks again,
>
> -Jan
>
> --
>
> Jan Stoess
>
> KIT/UKa System Architecture Group
>
> Phone: +49 (721) 608-4056
>
> Fax: +49 (721) 608-7664
>
> http://os.ibds.kit.edu/stoess
>