Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 03 May 2005 17:54:09 +0200
From:      =?ISO-8859-1?Q?S=F8ren_Schmidt?= <sos@DeepCore.dk>
To:        Andrew Heybey <ath@niksun.com>
Cc:        sos@FreeBSD.ORG
Subject:   Re: ATA mkIII suspend problem
Message-ID:  <42779EA1.4040100@DeepCore.dk>
In-Reply-To: <20050503114732.65bce180@stiegl.mj.niksun.com>
References:  <20050503114732.65bce180@stiegl.mj.niksun.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Andrew Heybey wrote:
> I just tried RELENG_5 as of last week and the latest (April 13) ATA
> mkIII patches from http://people.freebsd.org/~sos/ATA/ on my laptop.=20
> Unfortunately, it breaks suspend-to-RAM (S3).
>=20
> History:
>=20
> I first tried RELENG_5 on the laptop (a Toshiba Tecra M2V) in January
> and suspend did not work (the laptop hung after reinitializing the ATA
> controller). Then I tried the first release of ATA mkIII. That first
> version of the new ATA code made suspend work, and I was happy.
>=20
> Last week, I tried upgrading to the latest RELENG_5 and the newest ATA
> mkIII code, and now after suspending the kernel panics when reiniting
> the ATA device(s) in ata-all.c:ata_reinit(), about line 217:
>=20
>     /* reinit the children and delete any that fails */
>     if (!device_get_children(dev, &children, &nchildren)) {
> 	mtx_lock(&Giant);       /* newbus suckage it needs Giant */
> 	for (i =3D 0; i < nchildren; i++) {
> 	    if (children[i] && device_is_attached(children[i]))
> 		if (ATA_REINIT(children[i])) {
> 		    if (ch->running->dev =3D=3D children[i]) {
> 			^^^^^^^^^^^^^^^^
> 			device_printf(ch->running->dev,
> 				      "FAILURE - device detached\n");
> 			ch->running->dev =3D NULL;
> 			ch->running =3D NULL;
> 		    }
> 		    device_delete_child(dev, children[i]);
> 		}
> 	}
> 	free(children, M_TEMP);
> 	mtx_unlock(&Giant);     /* newbus suckage dealt with, release Giant */=

>     }
>=20
> The problem is that ch->running is NULL at this point.
>=20
> Any suggestions on how to further debug or fix?

Thats been fixed since in -current just replace the line with:

if (ch->running && ch->running->dev =3D=3D children[i]) {

--=20

-S=F8ren




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?42779EA1.4040100>