Re: [2.6.28-rc] Sata soft reset filling log

From: Tejun Heo
Date: Mon Dec 22 2008 - 02:15:23 EST


Hello,

(cc'ing Mark)

Justin Madru wrote:
> Well, it's good to hear that you don't think my drive is failing (sure
> hope it's not failing!)

Yeap, it's your DVD drive.

> I posted the full dmesg in reply to Alan in
> http://lkml.org/lkml/2008/12/19/30.

Ah.. oops, missed the other messages. Sorry.

> Also, more information about my computer can be found at:
> http://jdserver.homelinux.org/bugreports/
> If you need me to run anything else not found in the above links then
> let me know.

Ah.. strange. The command protocol is ATAPI_PROT_NODATA and the drive
should be setting DRQ to receive CDB but it's not doing that.
Strange. It could be that the drive is a little bit tardy with DRQ -
ie. setting DRQ after clearing BUSY and ata_piix is now successfully
hitting the small window for some reason.

Does the attached patch make any difference?

Thanks.

--
tejun
diff --git a/drivers/ata/libata-sff.c b/drivers/ata/libata-sff.c
index 4b47394..0630ac3 100644
--- a/drivers/ata/libata-sff.c
+++ b/drivers/ata/libata-sff.c
@@ -1120,6 +1120,20 @@ fsm_start:
*/
poll_next = (qc->tf.flags & ATA_TFLAG_POLLING);

+ {
+ int cnt = 0;
+
+ while (!(status & (ATA_DRQ | ATA_ERR | ATA_DF)) &&
+ cnt < 100) {
+ status = ap->ops->sff_check_status(ap);
+ cnt++;
+ }
+
+ if (cnt)
+ ata_port_printk(ap, KERN_INFO, "XXX DRQ set after %d tries\n",
+ cnt);
+ }
+
/* check device status */
if (unlikely((status & ATA_DRQ) == 0)) {
/* handle BSY=0, DRQ=0 as error */