Eamonn Hamilton wrote:
Hi Mark. It bisected down to the following: e3472cbe5c10a91c737405cd706142787736392c is first bad commit commit e3472cbe5c10a91c737405cd706142787736392c Author: Albert Lee <albertcc@xxxxxxxxxx> Date: Thu Dec 7 11:37:58 2006 +0800 libata: let ATA_FLAG_PIO_POLLING use polling pio for ATA_PROT_NODATA Even if ATA_FLAG_PIO_POLLING is set, libata uses irq pio for the ATA_PROT_NODATA protocol. This patch let ATA_FLAG_PIO_POLLING use polling pio for the ATA_PROT_NODATA protocol. Signed-off-by: Albert Lee <albertcc@xxxxxxxxxx> Signed-off-by: Jeff Garzik <jeff@xxxxxxxxxx> ---
..
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 8816e30..d2e6863 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -4960,6 +4960,7 @@ unsigned int ata_qc_issue_prot(struct ata_queued_cmd *qc) if (ap->flags & ATA_FLAG_PIO_POLLING) { switch (qc->tf.protocol) { case ATA_PROT_PIO: + case ATA_PROT_NODATA: case ATA_PROT_ATAPI: case ATA_PROT_ATAPI_NODATA: qc->tf.flags |= ATA_TFLAG_POLLING;
..
Now, why it dies after that, I don't know, it's one flag being added. I guess I could try the latest kernel with that removed and see what happens?
.. You certainly could. That routine is now in libata-sff.c, but otherwise looks the same as you found it. Mmm.. I seem to recall seeing some funny biz in this area when I was working on sata_mv last year.. time to fire up the test rig and poke around more at this stuff. Ideally, I'd like to tell sata_mv to use IRQs for all commands, rather than the polling that the ATA_FLAG_PIO_POLLING induces. But there was something funny about it at the time, so I left it. Cheers -- 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