Commit 3c787b10 authored by Krzysztof Hałasa's avatar Krzysztof Hałasa Committed by Mauro Carvalho Chehab

[media] solo6x10: fix a race in IRQ handler

The IRQs have to be acknowledged before they are serviced, otherwise some events
may be skipped. Also, acknowledging IRQs just before returning from the handler
doesn't leave enough time for the device to deassert the INTx line, and for
bridges to propagate this change. This resulted in twice the IRQ rate on ARMv6
dual core CPU.
Signed-off-by: default avatarKrzysztof Ha?asa <khalasa@piap.pl>
Acked-by: default avatarAndrey Utkin <andrey.utkin@corp.bluecherry.net>
Tested-by: default avatarAndrey Utkin <andrey.utkin@corp.bluecherry.net>
Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
parent b31eb901
...@@ -105,11 +105,8 @@ static irqreturn_t solo_isr(int irq, void *data) ...@@ -105,11 +105,8 @@ static irqreturn_t solo_isr(int irq, void *data)
if (!status) if (!status)
return IRQ_NONE; return IRQ_NONE;
if (status & ~solo_dev->irq_mask) { /* Acknowledge all interrupts immediately */
solo_reg_write(solo_dev, SOLO_IRQ_STAT, solo_reg_write(solo_dev, SOLO_IRQ_STAT, status);
status & ~solo_dev->irq_mask);
status &= solo_dev->irq_mask;
}
if (status & SOLO_IRQ_PCI_ERR) if (status & SOLO_IRQ_PCI_ERR)
solo_p2m_error_isr(solo_dev); solo_p2m_error_isr(solo_dev);
...@@ -132,9 +129,6 @@ static irqreturn_t solo_isr(int irq, void *data) ...@@ -132,9 +129,6 @@ static irqreturn_t solo_isr(int irq, void *data)
if (status & SOLO_IRQ_G723) if (status & SOLO_IRQ_G723)
solo_g723_isr(solo_dev); solo_g723_isr(solo_dev);
/* Clear all interrupts handled */
solo_reg_write(solo_dev, SOLO_IRQ_STAT, status);
return IRQ_HANDLED; 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