Hi,
I am a novice in this exciting kernel world, so
my questions may be a bit naive, please bear with me.(I am student at
IISc, Bangalore).
Suppose I want to wire-down( as they call in BSD ) a page in
memory, how I go about doing that? (I guess by setting the PG_locked bit
of the flags field in the struct page, I can do it, am I right?)
sourav
--------------------------------------------------------------------------------
SOURAV SEN MSc(Engg.) CSA IISc BANGALORE URL : www2.csa.iisc.ernet.in/~sourav
ROOM NO : N-78 TEL :(080)309-2454(HOSTEL) (080)309-2906 (COMP LAB)
--------------------------------------------------------------------------------
On Fri, 22 Dec 2000, Sourav Sen wrote:
> Suppose I want to wire-down( as they call in BSD ) a page
> in memory, how I go about doing that? (I guess by setting the
> PG_locked bit of the flags field in the struct page, I can do
> it, am I right?)
Linux simply uses page->count for this. By using the page->count,
multiple parts of the kernel can pin the same page in memory at
different times and unlock them at different times without any
locking/unlocking conflicts...
page_cache_get(page); <= increases page->count
<your critical stuff here>
page_cache_drop(page); <= removes your extra count
regards,
Rik
--
Hollywood goes for world dumbination,
Trailer at 11.
http://www.surriel.com/
http://www.conectiva.com/ http://distro.conectiva.com.br/
On Thu, Dec 21, 2000 at 06:46:33PM -0200, Rik van Riel wrote:
>
> page_cache_drop(page); <= removes your extra count
I can't find that function, do you mean page_cache_free() and
page_cache_release(), both are aliases for __free_page(). Maybe we
need another alias. :)
Should non-page cache related code use get_page() and __free_page()
directly? Or should the page_cache_* macros be used everywhere?
robert
On Thu, 21 Dec 2000, Robert Read wrote:
> On Thu, Dec 21, 2000 at 06:46:33PM -0200, Rik van Riel wrote:
> >
> > page_cache_drop(page); <= removes your extra count
>
> I can't find that function, do you mean page_cache_free() and
> page_cache_release(), both are aliases for __free_page(). Maybe
> we need another alias. :)
page_cache_release(), indeed. My bad...
> Should non-page cache related code use get_page() and
> __free_page() directly? Or should the page_cache_* macros be
> used everywhere?
The non-page cache related code should use get_page() and
__free_page() (put_page?) directly. There may come a day
where the pagecache page size can be different from the
page size ...
regards,
Rik
--
Hollywood goes for world dumbination,
Trailer at 11.
http://www.surriel.com/
http://www.conectiva.com/ http://distro.conectiva.com.br/