Due to the IRQ processing, we can generate another IRQ that can come before we
end the previous one, so we lost it. E.g. when transmitting a character.

To allow the processing in SMP machines, we ack the IRQ at the beginning of the
IRQ handler.

Signed-off-by: Samuel Iglesias Gonsalvez <sigles...@igalia.com>
---
 drivers/ipack/devices/ipoctal.c |    8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/ipack/devices/ipoctal.c b/drivers/ipack/devices/ipoctal.c
index 45920f5..d57ac61 100644
--- a/drivers/ipack/devices/ipoctal.c
+++ b/drivers/ipack/devices/ipoctal.c
@@ -223,14 +223,14 @@ static irqreturn_t ipoctal_irq_handler(void *arg)
        unsigned int i;
        struct ipoctal *ipoctal = (struct ipoctal *) arg;
 
-       /* Check all channels */
-       for (i = 0; i < NR_CHANNELS; i++)
-               ipoctal_irq_channel(&ipoctal->channel[i]);
-
        /* Clear the IPack device interrupt */
        readw(ipoctal->int_space + ACK_INT_REQ0);
        readw(ipoctal->int_space + ACK_INT_REQ1);
 
+       /* Check all channels */
+       for (i = 0; i < NR_CHANNELS; i++)
+               ipoctal_irq_channel(&ipoctal->channel[i]);
+
        return IRQ_HANDLED;
 }
 
-- 
1.7.10.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to