aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorBodo Stroesser <bstroesser@fujitsu-siemens.com>2005-01-11 03:14:35 -0800
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-01-11 03:14:35 -0800
commit6b566c8b58e0f1426e75ebe68dbb21b405acece3 (patch)
tree90c9f89025babe6b1331bf07a6cf699f4a4a3364 /arch
parenteac56c48447816d89c81d042a35427c4c7d51dd7 (diff)
downloadhistory-6b566c8b58e0f1426e75ebe68dbb21b405acece3.tar.gz
[PATCH] UML: Use va_copy
In arch/um/kernel/skas/uaccess.c, the simple assignment va_list args = *((va_list *) arg_ptr); is used in do_buffer_op() to obtain a copy of a va_list, that was delivered as a pointer only. But this construction doesn't compile on s390. Instead, va_copy() and va_end() should be used (see "man va_start"). Signed-off-by: Bodo Stroesser <bstroesser@fujitsu-siemens.com> Signed-off-by: Jeff Dike <jdike@addtoit.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch')
-rw-r--r--arch/um/kernel/skas/uaccess.c26
1 files changed, 17 insertions, 9 deletions
diff --git a/arch/um/kernel/skas/uaccess.c b/arch/um/kernel/skas/uaccess.c
index 77048cd6775cb7..6d559db8f86572 100644
--- a/arch/um/kernel/skas/uaccess.c
+++ b/arch/um/kernel/skas/uaccess.c
@@ -54,15 +54,23 @@ static int do_op(unsigned long addr, int len, int is_write,
static void do_buffer_op(void *jmpbuf, void *arg_ptr)
{
- va_list args = *((va_list *) arg_ptr);
- unsigned long addr = va_arg(args, unsigned long);
- int len = va_arg(args, int);
- int is_write = va_arg(args, int);
- int (*op)(unsigned long, int, void *) = va_arg(args, void *);
- void *arg = va_arg(args, void *);
- int *res = va_arg(args, int *);
- int size = min(PAGE_ALIGN(addr) - addr, (unsigned long) len);
- int remain = len, n;
+ va_list args;
+ unsigned long addr;
+ int len, is_write, size, remain, n;
+ int (*op)(unsigned long, int, void *);
+ void *arg;
+ int *res;
+
+ va_copy(args, *(va_list *)arg_ptr);
+ addr = va_arg(args, unsigned long);
+ len = va_arg(args, int);
+ is_write = va_arg(args, int);
+ op = va_arg(args, void *);
+ arg = va_arg(args, void *);
+ res = va_arg(args, int *);
+ va_end(args);
+ size = min(PAGE_ALIGN(addr) - addr, (unsigned long) len);
+ remain = len;
current->thread.fault_catcher = jmpbuf;
n = do_op(addr, size, is_write, op, arg);