On Sat, Dec 18, 2010 at 11:35:42AM +0100, Joel Dahl wrote: > On 18-12-2010 3:17, Alan Cox wrote: > > Joel Dahl wrote: > > > On 09-12-2010 20:16, Alan Cox wrote: > > > > > >> Author: alc > > >> Date: Thu Dec 9 20:16:00 2010 > > >> New Revision: 216333 > > >> URL: http://svn.freebsd.org/changeset/base/216333 > > >> > > >> Log: > > >> When r207410 eliminated the acquisition and release of the page queues > > >> lock from pmap_extract_and_hold(), it didn't take into account that > > >> pmap_pte_quick() sometimes requires the page queues lock to be held. > > >> This change reimplements pmap_extract_and_hold() such that it no > > >> longer uses pmap_pte_quick(), and thus never requires the page queues > > >> lock. > > >> > > >> For consistency, adopt the same idiom as used by the new > > >> implementation of pmap_extract_and_hold() in pmap_extract() and > > >> pmap_mincore(). It also happens to make these functions shorter. > > >> > > > > > > Hi Alan, > > > > > > This commit makes my laptop hang everytime I quit X. I just get a black > > > screen and the machine won't respond to any keys. Everything works if I > > > go back to r216330. > > > > > > > > > > Can you please try the following change? > > I'm afraid the patch didn't make any difference. It still hangs.
I already looked at the similar report. It seems that the driver allocates a page using kmem_alloc_contig(), then creates OBJT_SG object, and changes the mapping to use the fictitious page instantiated by sg object. Since kmem_free() sees wired mapping, it calls vm_fault_unwire(), which is incompatible with fictitious wired pages. I cannot guarantee that this is definitely what happens, but backtrace looked plausible.
pgpeC7JREs10N.pgp
Description: PGP signature