Hello!
I'm busy debugging a broken harddisk driver of an embedded device and have traced down the error condition. In the irq-handler there is a race condition that can lead to another irq of the same type being issued while the irq-handler hasn't terminated yet (only a few ns or us missing...). Since an irq cannot be interrupted by an irq of the same level, the irq gets lost and things start to go wrong badly. Now I'm not at all a kernel-guru so I need to ask for a tiny thing that should solve this problem: in a 2.4 kernel, how do I leave irq-level (without doing a "return") so that the irq-handler get interruptible? In assembly this would just mean to clear the irq-bit in the processor's status register (talking about ARM) but I don't know how to do this in C. Surely there is a kernel function for this?
Thanks a lot, Philipp.