Vlad Codrea wrote: > Tejun Heo wrote: > >> [cc'ing Albert Lee. Hi!] >> >> Vlad Codrea wrote: >> >> >>>> Okay, now that you're on libata driver, it's easier for me to debug. >>>> Can you apply the attached patch over 2.6.20 and report what the kernel >>>> says? (the patch will apply with some noise, it's okay) >>>> >>> >>> I've applied your patch and recompiled the kernel, but the new dmesg >>> (attached as dmesg_2.txt) doesn't seem to have changed much. >>> >> >> >> Hmmm.. that's weird, can you please try the attached patch? >> >> Albert, can you take a look at this one? I'm pretty sure you know much >> better about this than me. The whole thread can be read at... >> >> http://thread.gmane.org/gmane.linux.ide/17052 >> >> Thanks. >> >> > > > I've attached the dmesg after applying this patch. There is now a new > line reading "ata2.00: ata_eh_analyze_tf, AC_ERR_HSM, 0x58". > This device is configured as MWDMA2: ata2.00: ATAPI, max MWDMA2, CDB intr ata2.00: configured for MWDMA2 The state machine should start at HSM_ST_FIRST to transfer CDB then transit to HSM_ST_LAST after DMA is completed. Device status 0x58 looks good for HSM_ST_FIRST, maybe libata is seeing 0x58 in the HSM_ST_LAST state? Hi Vlad, Could you please also apply the attached HSM debug patch and collect the dmesg, thanks. -- albert --- linux-2.6.20.3/drivers/ata/libata-core.c 2007-03-15 12:13:12.000000000 +0800 +++ linux-2.6.20.3-mod/drivers/ata/libata-core.c 2007-03-15 12:13:55.000000000 +0800 @@ -4371,8 +4371,9 @@ int ata_hsm_move(struct ata_port *ap, st WARN_ON(in_wq != ata_hsm_ok_in_wq(ap, qc)); fsm_start: - DPRINTK("ata%u: protocol %d task_state %d (dev_stat 0x%X)\n", - ap->id, qc->tf.protocol, ap->hsm_task_state, status); + if (is_atapi_taskfile(&qc->tf)) + printk(KERN_ERR "ata%u: protocol %d task_state %d (dev_stat 0x%X)\n", + ap->id, qc->tf.protocol, ap->hsm_task_state, status); switch (ap->hsm_task_state) { case HSM_ST_FIRST: @@ -5091,8 +5092,9 @@ inline unsigned int ata_host_intr (struc struct ata_eh_info *ehi = &ap->eh_info; u8 status, host_stat = 0; - VPRINTK("ata%u: protocol %d task_state %d\n", - ap->id, qc->tf.protocol, ap->hsm_task_state); + if (is_atapi_taskfile(&qc->tf)) + printk(KERN_ERR "ata%u: protocol %d task_state %d\n", + ap->id, qc->tf.protocol, ap->hsm_task_state); /* Check whether we are expecting interrupt in this state */ switch (ap->hsm_task_state) { - 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