From c56004901fa5dcf55f92318f192ab3c0e87db2d1 Mon Sep 17 00:00:00 2001 From: Jeff Dike Date: Sat, 3 Sep 2005 15:57:36 -0700 Subject: [PATCH] uml: TLB operation batching This adds VM op batching to skas0. Rather than having a context switch to and from the userspace stub for each address space change, we write a number of operations to the stub data page and invoke a different stub which loops over them and executes them all in one go. The operations are stored as [ system call number, arg1, arg2, ... ] tuples. The set is terminated by a system call number of 0. Single operations, i.e. page faults, are handled in the old way, since that is slightly more efficient. For a kernel build, a minority (~1/4) of the operations are part of a set. These sets averaged ~100 in length, so for this quarter, the context switching overhead is greatly reduced. Signed-off-by: Jeff Dike Cc: Paolo Giarrusso Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- arch/um/sys-i386/stub.S | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'arch/um/sys-i386') diff --git a/arch/um/sys-i386/stub.S b/arch/um/sys-i386/stub.S index 2f2c70a8f04..a0f9506312d 100644 --- a/arch/um/sys-i386/stub.S +++ b/arch/um/sys-i386/stub.S @@ -6,3 +6,20 @@ syscall_stub: int $0x80 mov %eax, UML_CONFIG_STUB_DATA int3 + + .globl batch_syscall_stub +batch_syscall_stub: + mov $UML_CONFIG_STUB_DATA, %esp +again: pop %eax + cmpl $0, %eax + jz done + pop %ebx + pop %ecx + pop %edx + pop %esi + pop %edi + pop %ebp + int $0x80 + mov %eax, UML_CONFIG_STUB_DATA + jmp again +done: int3 -- cgit v1.2.3