On 2/10/23 10:56, Samuel Thibault wrote: > So in the end, I'd tend to think that it's up to queue_intr to do the > unmasking, like it does now, while spl is still high and thus we don't > risk nesting. That way it's the in-kernel intr handler that knows > whether to mask/unmask or not. I.e. it'd be like this: > > - interrupt.S raises spl (thus IF cleared) > - interrupt.S EOI > - interrupt.S calls the handler > - for pure in-kernel handlers, they do whatever they want with IF > cleared. > - when a userland handler is registers, queue_intr masks the irq. > - interrupt.S lowers spl with splx_cli, thus IF still cleared > - iret, that clears the IF > > - later on, userland acks the IRQ, that unmasks the irq > > Is that not already very close to what we have currently?
Yes this is very close to what we have now. I think we just need to remove the if >=16 part to do it for all interrupts and remove the EOI call in irq_acknowledge. Damien