mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 03:27:44 -04:00
[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: Krzysztof Ha?asa <[email protected]> Acked-by: Andrey Utkin <[email protected]> Tested-by: Andrey Utkin <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
This commit is contained in:
parent
b31eb901c4
commit
3c787b108f
1 changed files with 2 additions and 8 deletions
|
|
@ -105,11 +105,8 @@ static irqreturn_t solo_isr(int irq, void *data)
|
|||
if (!status)
|
||||
return IRQ_NONE;
|
||||
|
||||
if (status & ~solo_dev->irq_mask) {
|
||||
solo_reg_write(solo_dev, SOLO_IRQ_STAT,
|
||||
status & ~solo_dev->irq_mask);
|
||||
status &= solo_dev->irq_mask;
|
||||
}
|
||||
/* Acknowledge all interrupts immediately */
|
||||
solo_reg_write(solo_dev, SOLO_IRQ_STAT, status);
|
||||
|
||||
if (status & SOLO_IRQ_PCI_ERR)
|
||||
solo_p2m_error_isr(solo_dev);
|
||||
|
|
@ -132,9 +129,6 @@ static irqreturn_t solo_isr(int irq, void *data)
|
|||
if (status & SOLO_IRQ_G723)
|
||||
solo_g723_isr(solo_dev);
|
||||
|
||||
/* Clear all interrupts handled */
|
||||
solo_reg_write(solo_dev, SOLO_IRQ_STAT, status);
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue