Subject: Re: possible UVM deadlock
To: Matthias Drochner <drochner@zelux6.zel.kfa-juelich.de>
From: Chuck Cranor <chuck@maria.wustl.edu>
List: tech-kern
Date: 07/18/1998 13:02:29
>What happens is that processes sleep in "anonget2"
>(uvm_fault.c:uvmfault_anonget()) forever.

what is happening is that the fault routine has found the page
it wants, but someone has it marked PG_BUSY.   in order to resolve
the fault, the faulting process must set PG_WANTED, and wait
until the page is no longer busy.   

it is the responsibility of what ever set PG_BUSY to clear it
and send a wakeup if PG_WANTED is set.   if this doesn't happen,
then you can get a deadlock like what you are seeing.


>Some more details:
>The page has the PG_BUSY, the PQ_ANON and the
>PQ_INACTIVE flags set. (PG_WANTED is set by
>uvmfault_anonget().)
>Does somebody have a helpful idea?

what you need to do is track down who set PG_BUSY and why
they never seem to be clearing it.    there is code to
help you do this... define UVM_PAGE_TRKOWN and recompile.
then when you do DDB "show page" it will tell you who
it thinks the owner of the page is (hopefully).
(look for UVM_PAGE_TRKOWN in uvm_map.c [uvm_page_printit()]).

chuck