[patch] VM accounting change

From: Terence Ripperda
Date: Thu Nov 11 2004 - 17:40:35 EST


I apologize for not having more first hand info on this problem.

I've been told that recent changes in vm accounting in mmap have
caused some problems with our driver during mmap.

the problem seems to stem from us oring vma->vm_flags w/ (VM_LOCKED
| VM_IO). we do this for agp and pci pages that are mapped to push
buffers. VM_LOCKED since we don't want the pages to move and VM_IO so
they are not dumped during a core dump.

I've been told that the new vm accounting changes call
make_pages_present() for all pages in a vma range marked VM_LOCKED and
that this causes problems with our driver. the attached patch modifies
this to not call make_pages_present() if VM_IO is also set.

what I'm unclear on is if this is a valid fix. should
make_pages_present work for memory ranges that are already mapped and
locked down (via PG_reserved)? are we wrong in using (VM_IO |
VM_LOCKED) for our pages? is this fix correct?

Thanks,
Terence



diff -ru linux-2.6.10-rc1-bk8/mm/mmap.c linux-2.6.10-rc1-bk8-2/mm/mmap.c
--- linux-2.6.10-rc1-bk8/mm/mmap.c 2004-11-06 15:04:28.000000000 +0100
+++ linux-2.6.10-rc1-bk8-2/mm/mmap.c 2004-11-06 15:39:47.000000000 +0100
@@ -1011,7 +1011,8 @@
__vm_stat_account(mm, vm_flags, file, len >> PAGE_SHIFT);
if (vm_flags & VM_LOCKED) {
mm->locked_vm += len >> PAGE_SHIFT;
- make_pages_present(addr, addr + len);
+ if (!(vm_flags & VM_IO))
+ make_pages_present(addr, addr + len);
}
if (flags & MAP_POPULATE) {
up_write(&mm->mmap_sem);