linux-ide.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: sata suspend resume ...
       [not found]         ` <Pine.LNX.4.64.0604212108010.7531@blonde.wat.veritas.com>
@ 2006-04-21 21:36           ` Jeff Garzik
  2006-04-23 12:58             ` Hugh Dickins
  0 siblings, 1 reply; 3+ messages in thread
From: Jeff Garzik @ 2006-04-21 21:36 UTC (permalink / raw)
  To: Hugh Dickins
  Cc: Pavel Machek, Arkadiusz Miskiewicz, Jeff Chua, Matt Mackall,
	Jens Axboe, Linux Kernel, linux-ide@vger.kernel.org

Hugh Dickins wrote:
> --- 2.6.17-rc2/drivers/scsi/libata-core.c	2006-04-19 09:14:11.000000000 +0100
> +++ linux/drivers/scsi/libata-core.c	2006-04-21 20:55:48.000000000 +0100
> @@ -4288,6 +4288,7 @@ int ata_device_resume(struct ata_port *a
>  {
>  	if (ap->flags & ATA_FLAG_SUSPENDED) {
>  		ap->flags &= ~ATA_FLAG_SUSPENDED;
> +		ata_busy_sleep(ap, ATA_TMOUT_BOOT_QUICK, ATA_TMOUT_BOOT);
>  		ata_set_mode(ap);
>  	}


This is helpful to narrow down the problem, but its a bit of a layering 
violation.  In the current code, all functions called by 
ata_device_{suspend,resume}() are high level functions, which uses 
ata_qc_issue/ata_qc_complete high level API to address the device.

In contrast, ata_busy_sleep() sticks its hands deep into the host state 
machine, and gives the tree a good hard shake.  :)  Consider that 
ata_busy_sleep() doesn't make sense for unusual cases like 
ATA-over-ethernet (AoE), or other tunnelled ATA transports.

It may very well be that ata_busy_sleep() is the proper solution for 
your hardware, but it isn't applicable to all hardware.

So you really want an ata_make_sure_bus_is_awake_and_working() called at 
that location.  ata_busy_sleep()'s purpose is to bring a PATA-like bus 
to the bus-idle state.  So, when working on suspend/resume, the software 
needs to have points at which the bus state is controlled/queried/asserted.

	Jeff



^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: sata suspend resume ...
  2006-04-21 21:36           ` sata suspend resume Jeff Garzik
@ 2006-04-23 12:58             ` Hugh Dickins
  2006-04-29 18:06               ` Hugh Dickins
  0 siblings, 1 reply; 3+ messages in thread
From: Hugh Dickins @ 2006-04-23 12:58 UTC (permalink / raw)
  To: Jeff Garzik
  Cc: Pavel Machek, Arkadiusz Miskiewicz, Jeff Chua, Matt Mackall,
	Jens Axboe, Linux Kernel, linux-ide@vger.kernel.org

Thanks for taking a look, and replying in such detail, Jeff
(I'm afraid you overestimate my understanding of this area!)

On Fri, 21 Apr 2006, Jeff Garzik wrote:
> This is helpful to narrow down the problem, but its a bit of a layering
> violation.  In the current code, all functions called by
> ata_device_{suspend,resume}() are high level functions, which uses
> ata_qc_issue/ata_qc_complete high level API to address the device.

Ah, that's a pity.  I see what you mean.

> In contrast, ata_busy_sleep() sticks its hands deep into the host state
> machine, and gives the tree a good hard shake.  :)

Though that seems a considerable overstatement: ata_busy_sleep doesn't
shake anything, it just hangs around reading and testing a flag (in a
bewildering series of slightly different loops).  I guess even reading
status must be viewed as "a good hard shake" at this upper level.

> Consider that
> ata_busy_sleep() doesn't make sense for unusual cases like ATA-over-ethernet
> (AoE), or other tunnelled ATA transports.
> 
> It may very well be that ata_busy_sleep() is the proper solution for your
> hardware, but it isn't applicable to all hardware.

Can it do harm on any hardware to wait for ATA_BUSY to clear there?
Would it be less of a violation to do it in ata_scsi_device_resume?
Or should ata_piix.c have its own .resume to add this in?  Or....

> So you really want an ata_make_sure_bus_is_awake_and_working() called at that
> location.  ata_busy_sleep()'s purpose is to bring a PATA-like bus to the
> bus-idle state.  So, when working on suspend/resume, the software needs to
> have points at which the bus state is controlled/queried/asserted.

As you can see from my questions, I haven't a clue around here.  So for
now I'll just have to keep that ata_busy_sleep with the patches I apply
to my kernel, until someone with a clue makes it redundant.  And it is
now there in the LKML archives for those who find it useful.

Hugh

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: sata suspend resume ...
  2006-04-23 12:58             ` Hugh Dickins
@ 2006-04-29 18:06               ` Hugh Dickins
  0 siblings, 0 replies; 3+ messages in thread
From: Hugh Dickins @ 2006-04-29 18:06 UTC (permalink / raw)
  To: Jeff Garzik
  Cc: Pavel Machek, Arkadiusz Miskiewicz, Jeff Chua, Matt Mackall,
	Jens Axboe, Linux Kernel, linux-ide@vger.kernel.org

On Sun, 23 Apr 2006, Hugh Dickins wrote:
> On Fri, 21 Apr 2006, Jeff Garzik wrote:
> 
> > So you really want an ata_make_sure_bus_is_awake_and_working() called at that
> > location.  ata_busy_sleep()'s purpose is to bring a PATA-like bus to the
> > bus-idle state.  So, when working on suspend/resume, the software needs to
> > have points at which the bus state is controlled/queried/asserted.
> 
> As you can see from my questions, I haven't a clue around here.  So for
> now I'll just have to keep that ata_busy_sleep with the patches I apply
> to my kernel, until someone with a clue makes it redundant.  And it is
> now there in the LKML archives for those who find it useful.

I'm glad to report that my ata_busy_sleep is already unnecessary in
2.6.17-rc2-mm1 (and probably in at least -rc1-mm3 before it): unlike in
2.6.17-rc3, T43p resumes reliably from RAM with unpatched libata-core.c.
Something has gone seriously right!  Thanks...

Hugh

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2006-04-29 18:06 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <Pine.LNX.4.64.0604192324040.29606@indiana.corp.fedex.com>
     [not found] ` <Pine.LNX.4.64.0604191659230.7660@blonde.wat.veritas.com>
     [not found]   ` <20060420134713.GA2360@ucw.cz>
     [not found]     ` <Pine.LNX.4.64.0604211333050.4891@blonde.wat.veritas.com>
     [not found]       ` <20060421163930.GA1648@elf.ucw.cz>
     [not found]         ` <Pine.LNX.4.64.0604212108010.7531@blonde.wat.veritas.com>
2006-04-21 21:36           ` sata suspend resume Jeff Garzik
2006-04-23 12:58             ` Hugh Dickins
2006-04-29 18:06               ` Hugh Dickins

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).