Mikael Pettersson wrote:
> On Tue, 24 Jul 2007 17:32:29 +0900, Tejun Heo wrote:
>> Mikael Pettersson wrote:
>>> This machine has a known good Samsung SATA DVD on ICH8 [8086:2820].
>>> With kernel 2.6.23-rc1 I now get the following:
>>>
>>>> ata_piix 0000:00:1f.2: version 2.11
>>>> ata_piix 0000:00:1f.2: MAP [ P0 P2 P1 P3 ]
>>>> ACPI: PCI Interrupt 0000:00:1f.2[B] -> GSI 19 (level, low) -> IRQ 19
>>>> PCI: Setting latency timer of device 0000:00:1f.2 to 64
>>>> scsi2 : ata_piix
>>>> scsi3 : ata_piix
>>>> ata3: SATA max UDMA/133 cmd 0x0001ec00 ctl 0x0001e882 bmdma 0x0001e400 irq 
>>>> 19
>>>> ata4: SATA max UDMA/133 cmd 0x0001e800 ctl 0x0001e482 bmdma 0x0001e408 irq 
>>>> 19
>>>> ata4.00: ATAPI: TSSTcorpCD/DVDW SH-S183A, SB00, max UDMA/33
>>>> ata4.00: applying bridge limits
>>>> ata4.00: configured for UDMA/33
>>>> ata4: EH pending after completion, repeating EH (cnt=4)
>>>> scsi 3:0:0:0: CD-ROM            TSSTcorp CD/DVDW SH-S183A SB00 PQ: 0 ANSI: 
>>>> 5
>>> The "EH pending after completion" is new and did not occur with 2.6.22.
>>> Apart from that message, things seem fine.
>> Hmmm... That means someone requested EH while EH was in progress.
>> Weird.  Can you apply the attached patch and report what the kernel
>> says?  Thanks.
> 
> Here it is. As you can see from the traces, the machine also has a
> pdc20269 controller driven by pata_pdc2027x.

Hmm... I missed one path.  Can you please try the attached patch?  Thanks.

-- 
tejun
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index 88e2dd0..3a7c97e 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -6403,7 +6403,7 @@ int ata_host_register(struct ata_host *host, struct scsi_host_template *sht)
 
 			ehi->probe_mask = (1 << ATA_MAX_DEVICES) - 1;
 			ehi->action |= ATA_EH_SOFTRESET;
-			ehi->flags |= ATA_EHI_NO_AUTOPSY | ATA_EHI_QUIET;
+			ehi->flags |= ATA_EHI_NO_AUTOPSY/* | ATA_EHI_QUIET*/;
 
 			ap->pflags &= ~ATA_PFLAG_INITIALIZING;
 			ap->pflags |= ATA_PFLAG_LOADING;
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
index 9aa62a0..c0ce3ce 100644
--- a/drivers/ata/libata-eh.c
+++ b/drivers/ata/libata-eh.c
@@ -536,6 +536,12 @@ void ata_qc_schedule_eh(struct ata_queued_cmd *qc)
 	 * this function completes.
 	 */
 	scsi_req_abort_cmd(qc->scsicmd);
+
+	if (ap->pflags & ATA_PFLAG_LOADING) {
+		printk("EH scheduled with LOADING set cmd=%02x cdb=%02x emask=%02x\n",
+		       qc->tf.command, qc->cdb[0], qc->err_mask);
+		dump_stack();
+	}
 }
 
 /**
@@ -558,6 +564,11 @@ void ata_port_schedule_eh(struct ata_port *ap)
 	ap->pflags |= ATA_PFLAG_EH_PENDING;
 	scsi_schedule_eh(ap->scsi_host);
 
+	if (ap->pflags & ATA_PFLAG_LOADING) {
+		printk("EH scheduled with LOADING set\n");
+		dump_stack();
+	}
+
 	DPRINTK("port EH scheduled\n");
 }
 

Reply via email to