2000-12-21 21:12:35

by Sourav Sen

[permalink] [raw]
Subject: Wiring down Pages


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)
--------------------------------------------------------------------------------



2000-12-21 21:38:19

by Rik van Riel

[permalink] [raw]
Subject: Re: Wiring down Pages

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/

2000-12-21 23:30:21

by robert read

[permalink] [raw]
Subject: Re: Wiring down Pages

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

2000-12-22 11:56:38

by Rik van Riel

[permalink] [raw]
Subject: Re: Wiring down Pages

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/