Bartlomiej Zolnierkiewicz wrote:
vi drivers/ide/ide-io.c +906 and note:
void ide_timer_expiry (unsigned long data) { ide_expiry_t *expiry = hwif->expiry; ... unsigned long wait = -1; ... if (expiry) { ... wait = expiry(drive); if (wait > 0) { /* continue */
also note that in include/linux/ide.h:883:
typedef int (ide_expiry_t)(ide_drive_t *);
doesn't this mean that expiry returns int, and wait therefore should be int as well?
It does... and it seems like it could cause insanely long timeouts for:
* ATA_DMA_ERR error in dma_timer_expiry()
* commands without ->expiry in tc86c001_timer_expiry() (TC86C001 IDE controller only)
This is 2.6.29 material, care to make a patch?
Er, it's not that bad as it gets cast back to *int* when calling ide_dma_timer_expiry().
This case yes, however look at "wait > 0" one:
On -1 returned from ->expiry code sets "rather" long timeouts (4294967295/HZ on 32-bit...).
Ah... ignore me then. :-< 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