> spin_lock(&bus->lock); > irq_received = readl(bus->base + ASPEED_I2C_INTR_STS_REG); > + if (!irq_received) > + return IRQ_NONE; > + > /* Ack all interrupts except for Rx done */ > writel(irq_received & ~ASPEED_I2CD_INTR_RX_DONE, > bus->base + ASPEED_I2C_INTR_STS_REG); > > > I think it's a right fix for the issue. At least, we need to prevent > any driver state corruption. The state machine would run correctly if > we filtering the garbage interrupt out. Just unlock the spinlock before you return...
Attachment:
signature.asc
Description: PGP signature