Re: [PATCH][RFC] per isr in_progress markers

From: Zwane Mwaikambo (zwane@mwaikambo.name)
Date: Sun Sep 08 2002 - 08:31:01 EST


On Sun, 8 Sep 2002, Ingo Molnar wrote:

> if we didnt disable the IRQ line then an additional interrupt would be
> triggered when [*] is done.

We should be safe from that since ->end() is called after the handler at
at that stage the irq line is still disabled due to us not ack'ing in
->ack()

> it could perhaps be handled the following way:
>
> disable IRQ line
> ack APIC
> -> call handler
> while (work_left) {
> ack interrupt on the card [*]
> enable IRQ line [**]
> [... full processing ...]
> }
>
> so after [**] is done we could accept new interrupts, and the amount of
> time we keep the irq line disabled should be small. Obviously this means
> driver level changes.

After looking at the code at bit more the following would still work for
level triggered via ioapic. Due to that specific irq line being
effectively disabled until we hit ->end.

desc->handler->ack();
action->handler()
while(work_to_do) {
        ack_interrupt_on_card(); <-- unmask_irq_line in here too
        do_isr_work();
}
...
desc->handler->end();

So it looks like your previous suggestion of driver modification still
stands, would it be safe then to do a real ack in the isr (for the ioapic
case)?

        Zwane

-- 
function.linuxpower.ca

- 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/



This archive was generated by hypermail 2b29 : Sun Sep 15 2002 - 22:00:14 EST