Explorar el Código

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>
Samuel Iglesias Gonsalvez hace 13 años
padre
commit
21d27ed461
Se han modificado 1 ficheros con 4 adiciones y 4 borrados
  1. 4 4
      drivers/ipack/devices/ipoctal.c

+ 4 - 4
drivers/ipack/devices/ipoctal.c

@@ -223,14 +223,14 @@ static irqreturn_t ipoctal_irq_handler(void *arg)
 	unsigned int i;
 	unsigned int i;
 	struct ipoctal *ipoctal = (struct ipoctal *) arg;
 	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 */
 	/* Clear the IPack device interrupt */
 	readw(ipoctal->int_space + ACK_INT_REQ0);
 	readw(ipoctal->int_space + ACK_INT_REQ0);
 	readw(ipoctal->int_space + ACK_INT_REQ1);
 	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;
 	return IRQ_HANDLED;
 }
 }