--- linux-2.6.17.noarch.orig/drivers/infiniband/hw/ipath/ipath_user_pages.c 2006-06-18 03:49:35.000000000 +0200 +++ linux-2.6.17.noarch-vs2.0/drivers/infiniband/hw/ipath/ipath_user_pages.c 2006-06-19 20:17:10.000000000 +0200 @@ -32,6 +32,7 @@ #include #include +#include #include "ipath_kernel.h" @@ -71,7 +72,8 @@ static int __get_user_pages(unsigned lon lock_limit = current->signal->rlim[RLIMIT_MEMLOCK].rlim_cur >> PAGE_SHIFT; - if (num_pages > lock_limit) { + if (num_pages > lock_limit || + !vx_vmlocked_avail(current->mm, num_pages)) { ret = -ENOMEM; goto bail; } @@ -88,7 +89,7 @@ static int __get_user_pages(unsigned lon goto bail_release; } - current->mm->locked_vm += num_pages; + vx_vmlocked_add(current->mm, num_pages); ret = 0; goto bail; @@ -157,7 +158,7 @@ void ipath_release_user_pages(struct pag __ipath_release_user_pages(p, num_pages, 1); - current->mm->locked_vm -= num_pages; + vx_vmlocked_sub(current->mm, num_pages); up_write(¤t->mm->mmap_sem); } @@ -173,7 +174,7 @@ static void user_pages_account(void *ptr struct ipath_user_pages_work *work = ptr; down_write(&work->mm->mmap_sem); - work->mm->locked_vm -= work->num_pages; + vx_vmlocked_sub(work->mm, work->num_pages); up_write(&work->mm->mmap_sem); mmput(work->mm); kfree(work);