Re: [PATCH] ATA disk spin-down for -current

Michael Collette <[email protected]>
Newsgroups gmane.os.freebsd.devel.mobile
Message-ID <[email protected]>
I was thinking my suspend mode problems on my Thinkpad T23 were behind me here 
on FreeBSD 4.8.  Been going weeks without having a glitch, then just last 
night...

Put my lappy into suspend mode.  Unplugged my cabling to take it into the 
other room to read some PDF's I had just downloaded.  Opened the lid, and it 
glitched on me.  I should note that I was going from being plugged in to 
operating on battery.

I never do see anything in any of the logs.  When it glitches I see my KDE 
desktop for about 30 seconds totally frozen.  Then this thing just does a 
hard reboot on its own.  Tons of fsck fun on the following boot.

Unfortunately this is extremely difficult to reproduce.  I don't know what 
kind of impact your patch will have on 5-CURRENT, but it would appear that 
under 4-STABLE there is still a problem here.

Later on,

Cliff L. Biffle wrote:
> Allo all.  I've ported the 4.x patch that enabled ATA disk spin-down to
> the
> 5.x kernel.  (It looks like it'd also work on recent 4.x.)  Since I got
> the original patch out of this list's archives, I thought I'd send it
> back.
> 
> Basically this just updates the ata_command calls to the new LBA format
> rather than the older C/H/S.
> 
> I'm relatively unfamiliar with the ATA subsystem, and I -think- putting
> the
> suspend call after ATA_UNLOCK_CH is correct.  If anyone knows better, let
> me know.
> 
> Anyway, I've been using this on my laptop with great success.  Suspend
> time is set (in seconds) in hw.ata.suspend; this must be done at boot in
> loader.conf, as it's read-only at runtime.
> 
> Comments?  Corrections?
> 
> -Cliff L. Biffle
> 
> --- src/sys/dev/ata/ata-disk.c.orig	Fri Apr 11 12:50:37 2003
> +++ src/sys/dev/ata/ata-disk.c	Fri Apr 11 13:05:54 2003
> @@ -70,9 +70,11 @@
>  static int ata_dma = 1;
>  static int ata_wc = 1;
>  static int ata_tags = 0;
> +static int ata_suspend = 0;
>  TUNABLE_INT("hw.ata.ata_dma", &ata_dma);
>  TUNABLE_INT("hw.ata.wc", &ata_wc);
>  TUNABLE_INT("hw.ata.tags", &ata_tags);
> +TUNABLE_INT("hw.ata.suspend", &ata_suspend);
>  static MALLOC_DEFINE(M_AD, "AD driver", "ATA disk driver");
>  
>  /* sysctl vars */
> @@ -83,6 +85,8 @@
>  "ATA disk write caching");
>  SYSCTL_INT(_hw_ata, OID_AUTO, tags, CTLFLAG_RD, &ata_tags, 0,
>  "ATA disk tagged queuing support");
> +SYSCTL_INT(_hw_ata, OID_AUTO, suspend, CTLFLAG_RD, &ata_suspend, 0,
> +	   "ATA disk suspend timer");
>  
>  void
>  ad_attach(struct ata_device *atadev)
> @@ -185,6 +189,12 @@
>  #endif
>      ATA_UNLOCK_CH(atadev->channel);
>  
> +	 if(ata_suspend > 0) {
> +		 /* attempt suspend mode.  The drive uses increments of ten seconds */
> +		 if(ata_command(atadev, 0xe2, 0, ata_suspend/10, 0, ATA_WAIT_INTR))
> +			 ata_prtdev(atadev, "suspend mode failed.");
> +	 }
> +
>      adp->disk.d_open = adopen;
>      adp->disk.d_close = adclose;
>      adp->disk.d_strategy = adstrategy;
> @@ -856,6 +866,11 @@
>      ata_command(atadev, ATA_C_SET_MULTI, 0,
>  adp->transfersize / DEV_BSIZE, 0, ATA_WAIT_READY);
>      atadev->setmode(atadev, adp->device->mode);
> +	 if(ata_suspend > 0) {
> +		 /* attempt suspend mode.  The drive uses increments of ten seconds */
> +		 if(ata_command(atadev, 0xe2, 0, ata_suspend/10, 0, ATA_WAIT_READY))
> +			 ata_prtdev(atadev, "suspend mode failed.");
> +	 }
>  }
>  
>  void
> 
> _______________________________________________
> [email protected] mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-mobile
> To unsubscribe, send any mail to "[email protected]"

-- 
"Outside of a dog, a book is man's best friend. Inside of a dog, it's too dark 
to read."
 - Groucho Marx
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-mobile
To unsubscribe, send any mail to "[email protected]"
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.