projects
/
powerpc.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge ../linux-2.6
[powerpc.git]
/
include
/
asm-powerpc
/
uaccess.h
diff --git
a/include/asm-powerpc/uaccess.h
b/include/asm-powerpc/uaccess.h
index
33af730
..
d83fc29
100644
(file)
--- a/
include/asm-powerpc/uaccess.h
+++ b/
include/asm-powerpc/uaccess.h
@@
-7,6
+7,7
@@
#include <linux/sched.h>
#include <linux/errno.h>
#include <asm/processor.h>
#include <linux/sched.h>
#include <linux/errno.h>
#include <asm/processor.h>
+#include <asm/page.h>
#define VERIFY_READ 0
#define VERIFY_WRITE 1
#define VERIFY_READ 0
#define VERIFY_WRITE 1
@@
-120,14
+121,6
@@
struct exception_table_entry {
extern long __put_user_bad(void);
extern long __put_user_bad(void);
-#ifdef __powerpc64__
-#define __EX_TABLE_ALIGN "3"
-#define __EX_TABLE_TYPE "llong"
-#else
-#define __EX_TABLE_ALIGN "2"
-#define __EX_TABLE_TYPE "long"
-#endif
-
/*
* We don't tell gcc that we are accessing memory, but this is OK
* because we do not write to any memory gcc knows about, so there
/*
* We don't tell gcc that we are accessing memory, but this is OK
* because we do not write to any memory gcc knows about, so there
@@
-142,11
+135,12
@@
extern long __put_user_bad(void);
" b 2b\n" \
".previous\n" \
".section __ex_table,\"a\"\n" \
" b 2b\n" \
".previous\n" \
".section __ex_table,\"a\"\n" \
- " .
align " __EX_TABLE_ALIGN "\n"
\
-
" ."__EX_TABLE_TYPE" 1b,3b\n"
\
+ " .
balign %5\n"
\
+
PPC_LONG "1b,3b\n"
\
".previous" \
: "=r" (err) \
".previous" \
: "=r" (err) \
- : "r" (x), "b" (addr), "i" (-EFAULT), "0" (err))
+ : "r" (x), "b" (addr), "i" (-EFAULT), "0" (err),\
+ "i"(sizeof(unsigned long)))
#ifdef __powerpc64__
#define __put_user_asm2(x, ptr, retval) \
#ifdef __powerpc64__
#define __put_user_asm2(x, ptr, retval) \
@@
-162,12
+156,13
@@
extern long __put_user_bad(void);
" b 3b\n" \
".previous\n" \
".section __ex_table,\"a\"\n" \
" b 3b\n" \
".previous\n" \
".section __ex_table,\"a\"\n" \
- " .
align " __EX_TABLE_ALIGN "\n"
\
-
" ." __EX_TABLE_TYPE " 1b,4b\n"
\
-
" ." __EX_TABLE_TYPE " 2b,4b\n"
\
+ " .
balign %5\n"
\
+
PPC_LONG "1b,4b\n"
\
+
PPC_LONG "2b,4b\n"
\
".previous" \
: "=r" (err) \
".previous" \
: "=r" (err) \
- : "r" (x), "b" (addr), "i" (-EFAULT), "0" (err))
+ : "r" (x), "b" (addr), "i" (-EFAULT), "0" (err),\
+ "i"(sizeof(unsigned long)))
#endif /* __powerpc64__ */
#define __put_user_size(x, ptr, size, retval) \
#endif /* __powerpc64__ */
#define __put_user_size(x, ptr, size, retval) \
@@
-185,9
+180,11
@@
do { \
#define __put_user_nocheck(x, ptr, size) \
({ \
long __pu_err; \
#define __put_user_nocheck(x, ptr, size) \
({ \
long __pu_err; \
- might_sleep(); \
+ __typeof__(*(ptr)) __user *__pu_addr = (ptr); \
+ if (!is_kernel_addr((unsigned long)__pu_addr)) \
+ might_sleep(); \
__chk_user_ptr(ptr); \
__chk_user_ptr(ptr); \
- __put_user_size((x),
(ptr), (size), __pu_err);
\
+ __put_user_size((x),
__pu_addr, (size), __pu_err);
\
__pu_err; \
})
__pu_err; \
})
@@
-213,11
+210,12
@@
extern long __get_user_bad(void);
" b 2b\n" \
".previous\n" \
".section __ex_table,\"a\"\n" \
" b 2b\n" \
".previous\n" \
".section __ex_table,\"a\"\n" \
- " .
align "__EX_TABLE_ALIGN "\n"
\
-
" ." __EX_TABLE_TYPE " 1b,3b\n"
\
+ " .
balign %5\n"
\
+
PPC_LONG "1b,3b\n"
\
".previous" \
: "=r" (err), "=r" (x) \
".previous" \
: "=r" (err), "=r" (x) \
- : "b" (addr), "i" (-EFAULT), "0" (err))
+ : "b" (addr), "i" (-EFAULT), "0" (err), \
+ "i"(sizeof(unsigned long)))
#ifdef __powerpc64__
#define __get_user_asm2(x, addr, err) \
#ifdef __powerpc64__
#define __get_user_asm2(x, addr, err) \
@@
-235,12
+233,13
@@
extern long __get_user_bad(void);
" b 3b\n" \
".previous\n" \
".section __ex_table,\"a\"\n" \
" b 3b\n" \
".previous\n" \
".section __ex_table,\"a\"\n" \
- " .
align " __EX_TABLE_ALIGN "\n"
\
-
" ." __EX_TABLE_TYPE " 1b,4b\n"
\
-
" ." __EX_TABLE_TYPE " 2b,4b\n"
\
+ " .
balign %5\n"
\
+
PPC_LONG "1b,4b\n"
\
+
PPC_LONG "2b,4b\n"
\
".previous" \
: "=r" (err), "=&r" (x) \
".previous" \
: "=r" (err), "=&r" (x) \
- : "b" (addr), "i" (-EFAULT), "0" (err))
+ : "b" (addr), "i" (-EFAULT), "0" (err), \
+ "i"(sizeof(unsigned long)))
#endif /* __powerpc64__ */
#define __get_user_size(x, ptr, size, retval) \
#endif /* __powerpc64__ */
#define __get_user_size(x, ptr, size, retval) \
@@
-262,9
+261,11
@@
do { \
({ \
long __gu_err; \
unsigned long __gu_val; \
({ \
long __gu_err; \
unsigned long __gu_val; \
+ const __typeof__(*(ptr)) __user *__gu_addr = (ptr); \
__chk_user_ptr(ptr); \
__chk_user_ptr(ptr); \
- might_sleep(); \
- __get_user_size(__gu_val, (ptr), (size), __gu_err); \
+ if (!is_kernel_addr((unsigned long)__gu_addr)) \
+ might_sleep(); \
+ __get_user_size(__gu_val, __gu_addr, (size), __gu_err); \
(x) = (__typeof__(*(ptr)))__gu_val; \
__gu_err; \
})
(x) = (__typeof__(*(ptr)))__gu_val; \
__gu_err; \
})
@@
-274,9
+275,11
@@
do { \
({ \
long __gu_err; \
long long __gu_val; \
({ \
long __gu_err; \
long long __gu_val; \
+ const __typeof__(*(ptr)) __user *__gu_addr = (ptr); \
__chk_user_ptr(ptr); \
__chk_user_ptr(ptr); \
- might_sleep(); \
- __get_user_size(__gu_val, (ptr), (size), __gu_err); \
+ if (!is_kernel_addr((unsigned long)__gu_addr)) \
+ might_sleep(); \
+ __get_user_size(__gu_val, __gu_addr, (size), __gu_err); \
(x) = (__typeof__(*(ptr)))__gu_val; \
__gu_err; \
})
(x) = (__typeof__(*(ptr)))__gu_val; \
__gu_err; \
})