forked from Minki/linux
fab95c55e3
do_longjmp used to be needed when UML didn't have its own implementation of setjmp and longjmp. They came from libc, and couldn't be called directly from kernel code, as the libc jmp_buf couldn't be imported there. do_longjmp was a userspace function which served to provide longjmp access to kernel code. This is gone, and a number of void * pointers can now be jmp_buf *. Signed-off-by: Jeff Dike <jdike@linux.intel.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
31 lines
749 B
C
31 lines
749 B
C
/*
|
|
* Copyright (C) 2001 Chris Emerson (cemerson@chiark.greenend.org.uk)
|
|
* Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com)
|
|
* Licensed under the GPL
|
|
*/
|
|
|
|
/* These are here rather than tt/uaccess.c because skas mode needs them in
|
|
* order to do SIGBUS recovery when a tmpfs mount runs out of room.
|
|
*/
|
|
|
|
#include <linux/string.h>
|
|
#include "os.h"
|
|
|
|
void __do_copy(void *to, const void *from, int n)
|
|
{
|
|
memcpy(to, from, n);
|
|
}
|
|
|
|
|
|
int __do_copy_to_user(void *to, const void *from, int n,
|
|
void **fault_addr, jmp_buf **fault_catcher)
|
|
{
|
|
unsigned long fault;
|
|
int faulted;
|
|
|
|
fault = __do_user_copy(to, from, n, fault_addr, fault_catcher,
|
|
__do_copy, &faulted);
|
|
if(!faulted) return(0);
|
|
else return(n - (fault - (unsigned long) to));
|
|
}
|