Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 12 Sep 2013 21:23:39 -0400
From:      "J.R. Oldroyd" <fbsd@opal.com>
To:        John Baldwin <jhb@freebsd.org>
Cc:        freebsd-acpi@freebsd.org
Subject:   Re: panic after acpi suspend/resume 9.1, 9.2rc3
Message-ID:  <20130912212339.3b446e73@shibato>
In-Reply-To: <201309091654.27160.jhb@freebsd.org>
References:  <20130908172454.15812086@shibato> <201309091122.30193.jhb@freebsd.org> <20130909145744.63fcba85@shibato> <201309091654.27160.jhb@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
--Sig_/91/B65Hd0S1PoDOMY+KL+UI
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

On Mon, 9 Sep 2013 16:54:27 -0400 John Baldwin <jhb@freebsd.org> wrote:
>
> > >=20
> > > > (kgdb) list *0xffffffff80ceddcd
> > > > 0xffffffff80ceddcd is in pmap_enter (../../../amd64/amd64/pmap.c:35=
77).
> > > > 3572            if ((m->oflags & VPO_UNMANAGED) =3D=3D 0) {
> > > > 3573                    newpte |=3D PG_MANAGED;
> > > > 3574                    pv =3D get_pv_entry(pmap, &lock);
> > > > 3575                    pv->pv_va =3D va;
> > > > 3576                    CHANGE_PV_LIST_LOCK_TO_PHYS(&lock, pa);
> > > > 3577                    TAILQ_INSERT_TAIL(&m->md.pv_list, pv, pv_li=
st);
> > > > 3578                    if ((newpte & PG_RW) !=3D 0)
> > > > 3579                            vm_page_aflag_set(m, PGA_WRITEABLE);
> > > > 3580            }
> > > > 3581
> > >=20
> > > So it seems like pv_list of a page might be busted?  Can you try look=
ing at
> > > the disassembly to see if you can find 'm' in one of the registers?
> > >=20
> >=20
> > Sure, here you go...
> >=20
> > (kgdb) print m
> > $1 =3D 0xfffffe00b260b430
> > (kgdb) print m->md.pv_list
> > $4 =3D {tqh_first =3D 0x0, tqh_last =3D 0x0}
>=20
> Eh, tqh_last shouldn't bmd.pv_liste NULL here IIRC.  I think it should po=
int at
> &tqh_first.
>=20

I had a quick look at the code for this list.

md.pv_list is initialized in pmap_page_init() and there's also a
similar piece of init in pmap_init(), both in sys/amd64/amd64/pmap.c
and also in the other arch's.

But I have little background on how the VM code is supposed to be
initialized or saved on suspend and re-inited on resume.  It'd take
me ages to work out what should be going on here.

What's the best course of action here...?  Open a PR and hand-over to
someone with more background in these areas?

	-jr

--Sig_/91/B65Hd0S1PoDOMY+KL+UI
Content-Type: application/pgp-signature; name=signature.asc
Content-Disposition: attachment; filename=signature.asc

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.19 (FreeBSD)

iEYEARECAAYFAlIyaSMACgkQls33urr0k4ls0QCfSUJTi9q9e/wQ75c1/O/zIZ7z
X/UAni1PblYvBGhADL10hR6VSX8Vjif1
=0zVN
-----END PGP SIGNATURE-----

--Sig_/91/B65Hd0S1PoDOMY+KL+UI--



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