summaryrefslogtreecommitdiffstats
path: root/arch/x86_64
diff options
context:
space:
mode:
authorLee Schermerhorn <Lee.Schermerhorn@hp.com>2006-04-22 02:35:48 -0700
committerLinus Torvalds <torvalds@g5.osdl.org>2006-04-22 09:19:52 -0700
commit304dbdb7a4fbb7f40a6ad5c5836fdd456c233c63 (patch)
tree2bdd71bb0ab19422362e9d3999f975ae27206965 /arch/x86_64
parent3b5fd59fdd2e656dd4d10f2cedb41a7519b131b2 (diff)
downloadop-kernel-dev-304dbdb7a4fbb7f40a6ad5c5836fdd456c233c63.zip
op-kernel-dev-304dbdb7a4fbb7f40a6ad5c5836fdd456c233c63.tar.gz
[PATCH] add migratepage address space op to shmem
Basic problem: pages of a shared memory segment can only be migrated once. In 2.6.16 through 2.6.17-rc1, shared memory mappings do not have a migratepage address space op. Therefore, migrate_pages() falls back to default processing. In this path, it will try to pageout() dirty pages. Once a shared memory page has been migrated it becomes dirty, so migrate_pages() will try to page it out. However, because the page count is 3 [cache + current + pte], pageout() will return PAGE_KEEP because is_page_cache_freeable() returns false. This will abort all subsequent migrations. This patch adds a migratepage address space op to shared memory segments to avoid taking the default path. We use the "migrate_page()" function because it knows how to migrate dirty pages. This allows shared memory segment pages to migrate, subject to other conditions such as # pte's referencing the page [page_mapcount(page)], when requested. I think this is safe. If we're migrating a shared memory page, then we found the page via a page table, so it must be in memory. Can be verified with memtoy and the shmem-mbind-test script, both available at: http://free.linux.hp.com/~lts/Tools/ Signed-off-by: Lee Schermerhorn <lee.schermerhorn@hp.com> Acked-by: Christoph Lameter <clameter@sgi.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch/x86_64')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud