Commit a18ff1bde0c3da9ece3ba60e6eae2ef87f91a12e
Committed by
Linus Torvalds
1 parent
57ac895a7f
Exists in
master
and in
20 other branches
uml: speed up exec
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>
Showing 1 changed file with 11 additions and 1 deletions Side-by-side Diff
arch/um/kernel/skas/exec.c
... | ... | @@ -17,7 +17,17 @@ |
17 | 17 | |
18 | 18 | void flush_thread_skas(void) |
19 | 19 | { |
20 | - force_flush_all(); | |
20 | + void *data = NULL; | |
21 | + unsigned long end = proc_mm ? task_size : CONFIG_STUB_START; | |
22 | + int ret; | |
23 | + | |
24 | + ret = unmap(¤t->mm->context.skas.id, 0, end, 1, &data); | |
25 | + if(ret){ | |
26 | + printk("flush_thread_skas - clearing address space failed, " | |
27 | + "err = %d\n", ret); | |
28 | + force_sig(SIGKILL, current); | |
29 | + } | |
30 | + | |
21 | 31 | switch_mm_skas(¤t->mm->context.skas.id); |
22 | 32 | } |
23 | 33 |