1
0
mirror of https://github.com/DigitalDevices/dddvb.git synced 2023-10-10 13:37:43 +02:00

loop over remote link interrupt status to prevent race condition

This commit is contained in:
Ralph Metzler 2015-09-20 01:45:11 +02:00
parent 0393ab4db4
commit dd78dae68b

View File

@ -4465,15 +4465,13 @@ static void gtl_irq_handler(unsigned long priv)
struct ddb *dev = link->dev; struct ddb *dev = link->dev;
u32 s, off = 32 * link->nr, tag = DDB_LINK_TAG(link->nr); u32 s, off = 32 * link->nr, tag = DDB_LINK_TAG(link->nr);
s = ddbreadl(dev, tag | INTERRUPT_STATUS); while ((s = ddbreadl(dev, tag | INTERRUPT_STATUS))) {
//printk("gtl_irq %08x = %08x\n", tag | INTERRUPT_STATUS, s); ddbwritel(dev, s, tag | INTERRUPT_ACK);
if (!s) LINK_IRQ_HANDLE(0);
return; LINK_IRQ_HANDLE(1);
ddbwritel(dev, s, tag | INTERRUPT_ACK); LINK_IRQ_HANDLE(2);
LINK_IRQ_HANDLE(0); LINK_IRQ_HANDLE(3);
LINK_IRQ_HANDLE(1); }
LINK_IRQ_HANDLE(2);
LINK_IRQ_HANDLE(3);
#else #else
printk("gtlirq\n"); printk("gtlirq\n");
tasklet_schedule(&link->tasklet); tasklet_schedule(&link->tasklet);