FYI, the IRQF_DISABLED flag has been removed from linux kernel entirely, please refer this update.
The main two rationales that brought entire elimination to the flag was
- If multiple devices share a single physical interrupt line (because
of hardware cost), it not only allows the interrupt it handles but
also other interrupt signals that share the same physical interrupt
- Also, when the interrupt ensues while one interrupt is being
processed, it may overrun the kernel stack because the current
interrupt context should be saved onto the kernel stack to handle
Also, importantly, 99.999% of the kernel interrupt handler should finish as early as possible, and note that some deferring mechanism help. Therefore, having an IRQF_DISABLED flag depending on the interrupt's characteristics (whether it is fast or slow) is meaningless.
And to answer your question, it doesn't process the interrupts one by one when you unset IRQF_DISABLED flag because another interrupt can interrupt your interrupt handler execution; and that was the reason why overflow can occur when the flag is unset. Also, please refer to this article for further information