]> err.no Git - linux-2.6/commitdiff
uml: speed up exec
authorJeff Dike <jdike@addtoit.com>
Sun, 6 May 2007 21:51:19 +0000 (14:51 -0700)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Mon, 7 May 2007 19:13:02 +0000 (12:13 -0700)
flush_thread doesn't need to do a full page table walk in order to clear the
address space.  It knows what the end result needs to be, so it can call unmap
directly.

This results in a 10-20% speedup in an exec from bash.

Signed-off-by: Jeff Dike <jdike@linux.intel.com>
Cc: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
arch/um/kernel/skas/exec.c

index 54b795951372a8034cf40d30be457897d01b1c25..580eb6468949f56646732119d07745013dc36d95 100644 (file)
 
 void flush_thread_skas(void)
 {
-       force_flush_all();
+       void *data = NULL;
+       unsigned long end = proc_mm ? task_size : CONFIG_STUB_START;
+       int ret;
+
+       ret = unmap(&current->mm->context.skas.id, 0, end, 1, &data);
+       if(ret){
+               printk("flush_thread_skas - clearing address space failed, "
+                      "err = %d\n", ret);
+               force_sig(SIGKILL, current);
+       }
+
        switch_mm_skas(&current->mm->context.skas.id);
 }