Hello. On 02-06-2013 11:58, Tejun Heo wrote:
The driver's interrupt handling code is too picky in deciding whether it should handle an interrupt or not which causes completely unneeded spurious interrupts. Thus make sata_rcar_{ata|serr}_interrupt() *void*; add ATA status register read to sata_rcar_ata_interrupt() to clear an unexpected ATA interrupt -- it doesn't get cleared by writing to the SATAINTSTAT register in the interrupt mode we use.
Also, in sata_rcar_ata_interrupt() we should check SATAINTSTAT register only for enabled interrupts and we should clear only those interrupts that we have read as active first time around, because else we have a race and risk clearing an interrupt that can occur between read and write of the SATAINTSTAT register and never registering it...
Signed-off-by: Sergei Shtylyov <sergei.shtylyov@xxxxxxxxxxxxxxxxxx>
Darn, I forgot to Cc: stable@xxxxxxxxxxxxxxx again.
Applied to libata/for-3.10-fixes w/ stable cc'd. BTW, the driver generates the following compile warning.
CC drivers/ata/sata_rcar.o drivers/ata/sata_rcar.c: In function ‘sata_rcar_thaw’: drivers/ata/sata_rcar.c:183:2: warning: large integer implicitly truncated to unsigned type [-Woverflow]
It compiles without warnings for me, IIRC. What version of gcc are you using?
Care to fix it?
I'll look into it...
Thanks.
MBR, Sergei -- To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html