Commit d56cd47c authored by Federico Vaga's avatar Federico Vaga

kernel: swap irq ack between VIC and GN4124

We ack the GN4124 **before** the VIC. The other way around makes the
interrupt handling timing dependent. For instance. When the VIC
VIC_CTL_EMU_LEN_W is too short it may happens that the VIC asserts
the interrupt **before** the GN4124 is acked; then, so do not receive
interrupts anymore from the GN4124 because it misses the VIC edge.
Signed-off-by: Federico Vaga's avatarFederico Vaga <federico.vaga@cern.ch>
Signed-off-by: Michel Arruat's avatarMichel Arruat <michel.arruat@cern.ch>
parent 86b5196f
......@@ -150,10 +150,18 @@ static irqreturn_t spec_vic_irq_handler(int id, void *data)
*/
spin_lock(&spec->irq_lock);
rv = spec_vic_irq_dispatch(spec);
/*
* We ack the GN4124 **before** the VIC. The other way around makes the
* interrupt handling timing dependent. For instance. When the VIC
* VIC_CTL_EMU_LEN_W is too short it may happens that the VIC asserts
* the interrupt **before** the GN4124 is acked; then, so do not receive
* interrupts anymore from the GN4124 because it misses the VIC edge.
*/
spec_shared_irq_ack(fmc);
spec_vic_irq_ack(spec, 0);
spin_unlock(&spec->irq_lock);
spec_shared_irq_ack(fmc);
return IRQ_HANDLED;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment