linux-ide.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Aalderd Bouwman <aalderd.boac@wanadoo.nl>
To: Tejun Heo <htejun@gmail.com>
Cc: boac@wanadoo.nl, linux-ide@vger.kernel.org
Subject: Re: Hotplug drives on vt8251 with ahci module
Date: Sat, 24 Jun 2006 20:02:53 +0200	[thread overview]
Message-ID: <1151172173.4307.0.camel@anja> (raw)
In-Reply-To: <449B6583.1090303@gmail.com>

The dmesg will say enough I think:

libata version 1.30 loaded.
ahci 0000:00:0f.0: version 1.3
ACPI: PCI Interrupt 0000:00:0f.0[B] -> Link [LNKB] -> GSI 10 (level,
low) -> IRQ 10
ahci 0000:00:0f.0: AHCI 0001.0000 32 slots 4 ports 3 Gbps 0xf impl SATA
mode
ahci 0000:00:0f.0: flags: 64bit ncq pm led clo pmp pio slum part
ata1: SATA max UDMA/133 cmd 0xE0488D00 ctl 0x0 bmdma 0x0 irq 10
ata2: SATA max UDMA/133 cmd 0xE0488D80 ctl 0x0 bmdma 0x0 irq 10
ata3: SATA max UDMA/133 cmd 0xE0488E00 ctl 0x0 bmdma 0x0 irq 10
ata4: SATA max UDMA/133 cmd 0xE0488E80 ctl 0x0 bmdma 0x0 irq 10
scsi0 : ahci
ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
ata1.00: configured for UDMA/133
scsi1 : ahci
ata2: SATA link up 1.5 Gbps (SStatus 113 SControl 300)
ata2.00: configured for UDMA/133
scsi2 : ahci
ata3: SATA link down (SStatus 0 SControl 300)
scsi3 : ahci
ata4: SATA link down (SStatus 0 SControl 300)
  Vendor: ATA       Model: ST3808110AS       Rev: 3.AA
  Type:   Direct-Access                      ANSI SCSI revision: 05
SCSI device sda: 156301488 512-byte hdwr sectors (80026 MB)
sda: Write Protect is off
sda: Mode Sense: 00 3a 00 00
SCSI device sda: drive cache: write back
SCSI device sda: 156301488 512-byte hdwr sectors (80026 MB)
sda: Write Protect is off
sda: Mode Sense: 00 3a 00 00
SCSI device sda: drive cache: write back
 sda: sda1 sda2 sda3 sda4 < sda5 sda6 >
sd 0:0:0:0: Attached scsi disk sda
sd 0:0:0:0: Attached scsi generic sg0 type 0
  Vendor: ATA       Model: Maxtor 6Y080M0    Rev: YAR5
  Type:   Direct-Access                      ANSI SCSI revision: 05
SCSI device sdb: 160086528 512-byte hdwr sectors (81964 MB)
sdb: Write Protect is off
sdb: Mode Sense: 00 3a 00 00
SCSI device sdb: drive cache: write back
SCSI device sdb: 160086528 512-byte hdwr sectors (81964 MB)
sdb: Write Protect is off
sdb: Mode Sense: 00 3a 00 00
SCSI device sdb: drive cache: write back
 sdb: sdb1 sdb2
sd 1:0:0:0: Attached scsi disk sdb
sd 1:0:0:0: Attached scsi generic sg1 type 0
ReiserFS: sda5: found reiserfs format "3.6" with standard journal
ReiserFS: sda5: using ordered data mode
ReiserFS: sda5: journal params: device sda5, size 8192, journal first
block 18, max trans len 1024, max batch 900, max commit age 30, max
trans age 30
ReiserFS: sda5: checking transaction log (sda5)
ReiserFS: sda5: Using r5 hash to sort names
ReiserFS: sdb1: found reiserfs format "3.6" with standard journal
ReiserFS: sdb1: using ordered data mode
ReiserFS: sdb1: journal params: device sdb1, size 8192, journal first
block 18, max trans len 1024, max batch 900, max commit age 30, max
trans age 30
ReiserFS: sdb1: checking transaction log (sdb1)
ReiserFS: sdb1: Using r5 hash to sort names
ata2: exception Emask 0x10 SAct 0x0 SErr 0x30000 action 0x2 frozen
ata2: (irq_stat 0x04400000, PHY RDY changed)
ata2: soft resetting port
ata2: SATA link down (SStatus 1 SControl 300)
ata2: failed to recover some devices, retrying in 5 secs
ata2: hard resetting port
ata2: SATA link down (SStatus 0 SControl 300)
ata2: failed to recover some devices, retrying in 5 secs
ata2: hard resetting port
ata2: SATA link down (SStatus 0 SControl 300)
ata2.00: disabled
ata2: EH complete
ata2.00: detaching (SCSI 1:0:0:0)
ata2: exception Emask 0x10 SAct 0x0 SErr 0x4060000 action 0x2 frozen
ata2: (irq_stat 0x00000040, connection status changed)
ata2: waiting for device to spin up (8 secs)
ata2: soft resetting port
ata2: port is slow to respond, please be patient
ata2: port failed to respond (30 secs)
ata2: softreset failed (device not ready)
ata2: softreset failed, retrying in 5 secs
ata2: hard resetting port
ata2: port is slow to respond, please be patient
ata2: port failed to respond (30 secs)
ata2: softreset failed (device not ready)
ata2: follow-up softreset failed, retrying in 5 secs
ata2: hard resetting port
ata2: port is slow to respond, please be patient
ata2: port failed to respond (30 secs)
ata2: softreset failed (device not ready)
ata2: reset failed, giving up
ata2: EH complete
ata1.00: disabled
ACPI: PCI interrupt for device 0000:00:0f.0 disabled

Aalderd.

On Fri, 2006-06-23 at 12:52 +0900, Tejun Heo wrote:
> [CC'ing Bastiaan Jacques]
> 
> Hello, Aalderd.
> 
> Aalderd Bouwman wrote:
> > The same turn on/off action with rmmod ahci will work properly I think:
> > (I have test that action 3 times)
> 
> Great.
> 
> > As you see the disconnect of a drive is detected.
> > Is the message: 'failed to recover some devices' correct?
> > This message apears twice.
> 
> AFAICS, libata EH is behaving as expected.  The problem, again, is that 
> more often than not, the via controller seems to lock up after certain 
> events.  In the message you just posted, ata14 fails to recover after 
> power-on.
> 
> Hmmm.. Looking at the log, it occurs to me that it might be because the 
> controller can't receive D2H FIS after hardreset.  Can you try the 
> attached patch?
> 
> Bastiaan, I'm shooting in the dark, so please don't hesitate to step in.
> 
> plain text document attachment (patch)
> diff --git a/drivers/scsi/ahci.c b/drivers/scsi/ahci.c
> index e261b37..fe12927 100644
> --- a/drivers/scsi/ahci.c
> +++ b/drivers/scsi/ahci.c
> @@ -164,6 +164,7 @@ enum {
>  
>  	/* ap->flags bits */
>  	AHCI_FLAG_RESET_NEEDS_CLO	= (1 << 24),
> +	AHCI_FLAG_NO_HRST_D2H_FIS	= (1 << 25),
>  };
>  
>  struct ahci_cmd_hdr {
> @@ -277,7 +278,8 @@ static const struct ata_port_info ahci_p
>  		.host_flags	= ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
>  				  ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA |
>  				  ATA_FLAG_SKIP_D2H_BSY |
> -				  AHCI_FLAG_RESET_NEEDS_CLO,
> +				  AHCI_FLAG_RESET_NEEDS_CLO |
> +				  AHCI_FLAG_NO_HRST_D2H_FIS,
>  		.pio_mask	= 0x1f, /* pio0-4 */
>  		.udma_mask	= 0x7f, /* udma0-6 ; FIXME */
>  		.port_ops	= &ahci_ops,
> @@ -703,14 +705,18 @@ static int ahci_hardreset(struct ata_por
>  	tf.command = 0xff;
>  	ata_tf_to_fis(&tf, d2h_fis, 0);
>  
> -	rc = sata_std_hardreset(ap, class);
> -
> -	ahci_start_engine(ap);
> +	if (!(ap->flags & AHCI_FLAG_NO_HRST_D2H_FIS)) {
> +		rc = sata_std_hardreset(ap, class);
> +		ahci_start_engine(ap);
>  
> -	if (rc == 0 && ata_port_online(ap))
> -		*class = ahci_dev_classify(ap);
> -	if (*class == ATA_DEV_UNKNOWN)
> -		*class = ATA_DEV_NONE;
> +		if (rc == 0 && ata_port_online(ap))
> +			*class = ahci_dev_classify(ap);
> +		if (*class == ATA_DEV_UNKNOWN)
> +			*class = ATA_DEV_NONE;
> +	} else {
> +		rc = sata_do_hardreset(ap);
> +		ahci_start_engine(ap);
> +	}
>  
>  	DPRINTK("EXIT, rc=%d, class=%u\n", rc, *class);
>  	return rc;
> diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c
> index 89c3fbe..9d6ed7e 100644
> --- a/drivers/scsi/libata-core.c
> +++ b/drivers/scsi/libata-core.c
> @@ -2517,6 +2517,46 @@ int sata_phy_resume(struct ata_port *ap,
>  	return sata_phy_debounce(ap, params);
>  }
>  
> +int sata_do_hardreset(struct ata_port *ap)
> +{
> +	u32 scontrol;
> +	int rc;
> +
> +	if (sata_set_spd_needed(ap)) {
> +		/* SATA spec says nothing about how to reconfigure
> +		 * spd.  To be on the safe side, turn off phy during
> +		 * reconfiguration.  This works for at least ICH7 AHCI
> +		 * and Sil3124.
> +		 */
> +		if ((rc = sata_scr_read(ap, SCR_CONTROL, &scontrol)))
> +			return rc;
> +
> +		scontrol = (scontrol & 0x0f0) | 0x302;
> +
> +		if ((rc = sata_scr_write(ap, SCR_CONTROL, scontrol)))
> +			return rc;
> +
> +		sata_set_spd(ap);
> +	}
> +
> +	/* issue phy wake/reset */
> +	if ((rc = sata_scr_read(ap, SCR_CONTROL, &scontrol)))
> +		return rc;
> +
> +	scontrol = (scontrol & 0x0f0) | 0x301;
> +
> +	if ((rc = sata_scr_write_flush(ap, SCR_CONTROL, scontrol)))
> +		return rc;
> +
> +	/* Couldn't find anything in SATA I/II specs, but AHCI-1.1
> +	 * 10.4.2 says at least 1 ms.
> +	 */
> +	msleep(1);
> +
> +	/* bring phy back */
> +	return sata_phy_resume(ap, sata_deb_timing_eh);
> +}
> +
>  static void ata_wait_spinup(struct ata_port *ap)
>  {
>  	struct ata_eh_context *ehc = &ap->eh_context;
> @@ -2670,44 +2710,16 @@ int ata_std_softreset(struct ata_port *a
>   */
>  int sata_std_hardreset(struct ata_port *ap, unsigned int *class)
>  {
> -	u32 scontrol;
>  	int rc;
>  
>  	DPRINTK("ENTER\n");
>  
> -	if (sata_set_spd_needed(ap)) {
> -		/* SATA spec says nothing about how to reconfigure
> -		 * spd.  To be on the safe side, turn off phy during
> -		 * reconfiguration.  This works for at least ICH7 AHCI
> -		 * and Sil3124.
> -		 */
> -		if ((rc = sata_scr_read(ap, SCR_CONTROL, &scontrol)))
> -			return rc;
> -
> -		scontrol = (scontrol & 0x0f0) | 0x302;
> -
> -		if ((rc = sata_scr_write(ap, SCR_CONTROL, scontrol)))
> -			return rc;
> -
> -		sata_set_spd(ap);
> -	}
> -
> -	/* issue phy wake/reset */
> -	if ((rc = sata_scr_read(ap, SCR_CONTROL, &scontrol)))
> -		return rc;
> -
> -	scontrol = (scontrol & 0x0f0) | 0x301;
> -
> -	if ((rc = sata_scr_write_flush(ap, SCR_CONTROL, scontrol)))
> +	/* reset the phy */
> +	rc = sata_do_hardreset(ap);
> +	if (rc) {
> +		ata_port_printk(ap, KERN_ERR, "COMRESET failed (%d)\n", rc);
>  		return rc;
> -
> -	/* Couldn't find anything in SATA I/II specs, but AHCI-1.1
> -	 * 10.4.2 says at least 1 ms.
> -	 */
> -	msleep(1);
> -
> -	/* bring phy back */
> -	sata_phy_resume(ap, sata_deb_timing_eh);
> +	}
>  
>  	/* TODO: phy layer with polling, timeouts, etc. */
>  	if (ata_port_offline(ap)) {
> @@ -5833,6 +5845,7 @@ EXPORT_SYMBOL_GPL(sata_phy_resume);
>  EXPORT_SYMBOL_GPL(sata_phy_reset);
>  EXPORT_SYMBOL_GPL(__sata_phy_reset);
>  EXPORT_SYMBOL_GPL(ata_bus_reset);
> +EXPORT_SYMBOL_GPL(sata_do_hardreset);
>  EXPORT_SYMBOL_GPL(ata_std_prereset);
>  EXPORT_SYMBOL_GPL(ata_std_softreset);
>  EXPORT_SYMBOL_GPL(sata_std_hardreset);
> diff --git a/include/linux/libata.h b/include/linux/libata.h
> index 6b3c3af..533ed44 100644
> --- a/include/linux/libata.h
> +++ b/include/linux/libata.h
> @@ -631,6 +631,7 @@ extern void ata_bus_reset(struct ata_por
>  extern int sata_set_spd(struct ata_port *ap);
>  extern int sata_phy_debounce(struct ata_port *ap, const unsigned long *param);
>  extern int sata_phy_resume(struct ata_port *ap, const unsigned long *param);
> +extern int sata_do_hardreset(struct ata_port *ap);
>  extern int ata_std_prereset(struct ata_port *ap);
>  extern int ata_std_softreset(struct ata_port *ap, unsigned int *classes);
>  extern int sata_std_hardreset(struct ata_port *ap, unsigned int *class);
> diff --git a/patches/series b/patches/series
> index 9415c25..84b70e4 100644


      parent reply	other threads:[~2006-06-24 18:00 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-06-21  7:42 Hotplug drives on vt8251 with ahci module Aalderd Bouwman
2006-06-21 14:01 ` Tejun Heo
2006-06-22  7:16   ` Aalderd Bouwman
2006-06-22  7:34     ` Tejun Heo
2006-06-22 12:16       ` Mark Lord
2006-06-23 11:42         ` Tejun Heo
2006-06-22 13:00   ` Aalderd Bouwman
2006-06-23  3:52     ` Tejun Heo
2006-06-23  8:12       ` Tejun Heo
2006-06-24 18:02       ` Aalderd Bouwman [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1151172173.4307.0.camel@anja \
    --to=aalderd.boac@wanadoo.nl \
    --cc=boac@wanadoo.nl \
    --cc=htejun@gmail.com \
    --cc=linux-ide@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).