Subject: Re: uvm_vslock / uvm_vsunlock problems
To: Stephan Uphoff <ups@stups.com>
From: Simon Burge <simonb@wasabisystems.com>
List: tech-kern
Date: 07/11/2003 10:10:54
Hi Stephan,
Stephan Uphoff wrote:
> uvm_vslock() is used in physio and sys___sysctl to wire user process memory.
> uvm_vsunlock() later unwires the memory if it is not in a wired map entry.
>
> Problem 1:
> -----------
> uvm_vslock assumes that once a page is wired - it will stay wired until
> uvm_vsunlock (potentially) unwires it.
> This is not true for mmaped file pages when the file is truncated.
> (All managed mappings are released - page is freed)
>
> [ ... ]
>
> Solutions:
> ----------
> sys___sysctl can probably use a kernel buffer for the (hopefully few)
> occasions
> where copying is not allowed to block. (And copyout from the kernel buffer
> when it is save to do so)
> ( I assume this is the reason for the wiring but was too lazy to verify )
At least for the sysctl case, we could be talking about a reasonably
significant chunk of memory here - ps's fetching of the process table
comes to mind. On my home server, this is 225 processes * 608 bytes
= 136kB right now. It seems silly to malloc all that when the user
program has that storage available too.
Or am I misunderstanding what you're suggesting?
Simon.
--
Simon Burge <simonb@wasabisystems.com>
NetBSD Support and Service: http://www.wasabisystems.com/