Subject: Re: SysV SHM locking and reallocating support
To: None <unex@linija.org>
From: YAMAMOTO Takashi <yamt@mwd.biglobe.ne.jp>
List: tech-kern
Date: 09/29/2006 12:29:38
> yamt@mwd.biglobe.ne.jp (YAMAMOTO Takashi) wrote:
> > if they are supposed to lock backing store (ie. aobj) even when
> > there is no mappings, uvm_map_pageable is not appropriate.
> I am not sure, but according to Solaris source they maps a memory if
> she is not already mapped. At shmem_lock():
> http://cvs.opensolaris.org/source/xref/on/usr/src/uts/common/os/shm.c
> Am I wrong? Wouldn't uvm_map_pageable() be fine in this case?
i'm not sure about solaris api.
my guess is:
1. allocate a temporary address space. (as_alloc)
2. map a shm it into #1.
3. call a uvm_map_pageable equivalent,
which pins pages into #1. (as_ctl)
4. pin pages again. (lock_again)
5. cleanup side effects (#1 - #3.)
is it right?
> > what you need is something like getpages -> pagewire -> dropswap.
> Sorry, for my poor knowlege of UVM, but can you explain more how to do
> this? At least I understand it should be something like:
>
> (*uobj->pgops->pgo_get)(..);
> loop for each page {
> uvm_pagewire(pg);
> uvmpd_dropswap(pg) or uao_dropswap(uobj, page_index)?
> }
yes, something like that.
you should ensure to break page loans as well.
solaris's way seems inefficient, but can be simpler. it's a tradeoff.
YAMAMOTO Takashi