Signed-off-by: Andrew Morton --- 25-akpm/mm/memory.c | 7 +++++++ 1 files changed, 7 insertions(+) diff -puN mm/memory.c~get_user_pages-latency-fix mm/memory.c --- 25/mm/memory.c~get_user_pages-latency-fix 2004-07-13 15:49:55.657522560 -0700 +++ 25-akpm/mm/memory.c 2004-07-13 15:51:47.694490352 -0700 @@ -710,6 +710,7 @@ int get_user_pages(struct task_struct *t int i; int vm_io; unsigned int flags; + int nr_pages = 0; /* * Require read or write permissions. @@ -773,6 +774,12 @@ int get_user_pages(struct task_struct *t struct page *map = NULL; int lookup_write = write; + if ((++nr_pages & 63) == 0) { + spin_unlock(&mm->page_table_lock); + cpu_relax(); + spin_lock(&mm->page_table_lock); + } + /* * We don't follow pagetables for VM_IO regions - they * may have no pageframes. _