summaryrefslogtreecommitdiff
path: root/drivers/ipack/devices/ipoctal.c
diff options
context:
space:
mode:
authorSamuel Iglesias Gonsalvez <siglesias@igalia.com>2012-12-10 10:50:04 (GMT)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-01-16 02:24:38 (GMT)
commit21d27ed4616c9a7f2886c4159b4c409f73f96e76 (patch)
tree55d3cb66981320b757ced8532c63d5a0ec397b70 /drivers/ipack/devices/ipoctal.c
parenta3882b7814fb3a5b7ea211e421451b1c4685f8f9 (diff)
downloadlinux-21d27ed4616c9a7f2886c4159b4c409f73f96e76.tar.xz
ipack/devices/ipoctal: ack IRQ before processing it
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 <siglesias@igalia.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/ipack/devices/ipoctal.c')
-rw-r--r--drivers/ipack/devices/ipoctal.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/ipack/devices/ipoctal.c b/drivers/ipack/devices/ipoctal.c
index 09e3a8e..9cd5572 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;
}