2009-09-20 03:02:00

by Max Laier

[permalink] [raw]
Subject: page_migration question

Hello,

I read Documentation/vm/page_migration but couldn't find the information I'm
looking for. Specifically, what locks am I supposed to hold/not hold while
calling migrate_prep() and migrate_pages()? Currently migrate_prep() seems to
deadlock for reasons beyond me. Any help appreciated.

--
/"\ Best regards, | [email protected]
\ / Max Laier | ICQ #67774661
X http://pf4freebsd.love2party.net/ | mlaier@EFnet
/ \ ASCII Ribbon Campaign | Against HTML Mail and News


2009-09-20 12:33:15

by Christoph Lameter

[permalink] [raw]
Subject: Re: page_migration question

On Sun, 20 Sep 2009, Max Laier wrote:

> I read Documentation/vm/page_migration but couldn't find the information I'm
> looking for. Specifically, what locks am I supposed to hold/not hold while
> calling migrate_prep() and migrate_pages()? Currently migrate_prep() seems to
> deadlock for reasons beyond me. Any help appreciated.

No locks need to be held while calling migrate prep. The pages to be
migrated must have been isolated from the LRU and a refcount be taken for
migrate_pages to work. Look at the implementation of sys_migratepages and
sys_mbind and sys_movepages.

2009-09-24 02:30:44

by Kamezawa Hiroyuki

[permalink] [raw]
Subject: Re: page_migration question

On Sun, 20 Sep 2009 08:30:15 -0400 (EDT)
Christoph Lameter <[email protected]> wrote:

> On Sun, 20 Sep 2009, Max Laier wrote:
>
> > I read Documentation/vm/page_migration but couldn't find the information I'm
> > looking for. Specifically, what locks am I supposed to hold/not hold while
> > calling migrate_prep() and migrate_pages()? Currently migrate_prep() seems to
> > deadlock for reasons beyond me. Any help appreciated.
>
> No locks need to be held while calling migrate prep. The pages to be
> migrated must have been isolated from the LRU and a refcount be taken for
> migrate_pages to work. Look at the implementation of sys_migratepages and
> sys_mbind and sys_movepages.
>

If you find migrate_prep() hangs, please check your other cpus are available to
run workqueue. It calls lru_add_drain_all()=>schedule_on_each_cpu().

Thanks,
-Kame