Re: [PATCH] pata_sil680 suspend/resume

Guennadi Liakhovetski
2007-03-01T22:11:58Z

Tejun,

I tracked this change down to your patch:
http://marc.theaimsgroup.com/?t=115012763500002&r=1&w=2 (approximately).
(Interestingly, Jeff submitted the respective cumulative libata patch last
year on my birthday:-( ) Also, there's a Ubuntu bug report:
https://launchpad.net/ubuntu/+source/linux-source-2.6.20/+bug/76431
identical to what I see, although I cannot check if it worked before
2.6.20. Could you, please, comment how is this supposed to work? In
particular, what shoud trigger the EH action, leading to setting the
ATA_DFLAG_SUSPENDED flag? Below again my earlier post for reference.

Thanks
Guennadi

On Wed, 28 Feb 2007, Guennadi Liakhovetski wrote:

> On Mon, 26 Feb 2007, Guennadi Liakhovetski wrote:
>
> > With a post 2.6.20 kernel from powerpc.git I cannot suspend at all:
> >
> > pata_sil680 0000:00:0c.0: suspend
> > ata1: suspend failed, device 0 still active
> > pci_device_suspend(): ata_pci_device_suspend+0x0/0x74() returns -16
> > suspend_device(): pci_device_suspend+0x0/0xac() returns -16
> > Could not suspend device 0000:00:0c.0: error -16
>
> AFAICS, "still active" is printed from ata_host_suspend() if a device
> (disk) on the host to be suspended doesn't have ATA_DFLAG_SUSPENDED flag
> set. This flag is only set in ata_eh_suspend(), which is only called from
> ata_eh_recover(), like this:
>
> generic_error_handler()
> ata_bmdma_drive_eh()
> ata_do_eh()
> ata_eh_recover()
> ata_eh_suspend()
> dev->flags |= ATA_DFLAG_SUSPENDED;
>
> but I don't understand why the error handler should be envoked? Should the
> "disk" be suspended before the host and is it when the eh should set the
> flag? If my guess is right - why doesn't the disk get suspended on my
> machine? Shall I suspend it explicitely from userspace? I do "hdparm -Y",
> and it does stop spinning", but I still get the error.
>
> Thanks
> Guennadi
> ---
> Guennadi Liakhovetski
>

---
Guennadi Liakhovetski