Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
4feb8f8f
cloud-kernel
项目概览
openanolis
/
cloud-kernel
大约 1 年 前同步成功
通知
158
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
4feb8f8f
编写于
1月 23, 2006
作者:
R
Ralf Baechle
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[MIPS] Bullet proof uaccess.h against 4.0.1 miss-compilation.
Signed-off-by:
N
Ralf Baechle
<
ralf@linux-mips.org
>
上级
c03bc121
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
36 addition
and
35 deletion
+36
-35
include/asm-mips/uaccess.h
include/asm-mips/uaccess.h
+36
-35
未找到文件。
include/asm-mips/uaccess.h
浏览文件 @
4feb8f8f
...
...
@@ -202,49 +202,49 @@ struct __large_struct { unsigned long buf[100]; };
* Yuck. We need two variants, one for 64bit operation and one
* for 32 bit mode and old iron.
*/
#ifdef __mips64
#define __GET_USER_DW(ptr) __get_user_asm("ld", ptr)
#else
#define __GET_USER_DW(ptr) __get_user_asm_ll32(ptr)
#ifdef CONFIG_32BIT
#define __GET_USER_DW(val, ptr) __get_user_asm_ll32(val, ptr)
#endif
#ifdef CONFIG_64BIT
#define __GET_USER_DW(val, ptr) __get_user_asm(val, "ld", ptr)
#endif
#define __get_user_nocheck(x,ptr,size) \
({ \
__typeof(*(ptr)) __gu_val = (__typeof(*(ptr))) 0; \
long __gu_err = 0; \
\
extern
void
__get_user_unknown
(
void
);
#define __get_user_common(val, size, ptr) \
do { \
switch (size) { \
case 1: __get_user_asm("lb", ptr); break; \
case 2: __get_user_asm("lh", ptr); break; \
case 4: __get_user_asm("lw", ptr); break; \
case 8: __GET_USER_DW(ptr); break; \
case 1: __get_user_asm(
val,
"lb", ptr); break; \
case 2: __get_user_asm(
val,
"lh", ptr); break; \
case 4: __get_user_asm(
val,
"lw", ptr); break; \
case 8: __GET_USER_DW(
val,
ptr); break; \
default: __get_user_unknown(); break; \
} \
(x) = (__typeof__(*(ptr))) __gu_val; \
} while (0)
#define __get_user_nocheck(x,ptr,size) \
({ \
long __gu_err; \
\
__get_user_common((x), size, ptr); \
__gu_err; \
})
#define __get_user_check(x,ptr,size) \
({ \
const __typeof__(*(ptr)) __user * __gu_addr = (ptr); \
__typeof__(*(ptr)) __gu_val = 0; \
long __gu_err = -EFAULT; \
const void __user * __gu_ptr = (ptr); \
\
if (likely(access_ok(VERIFY_READ, __gu_ptr, size))) \
__get_user_common((x), size, __gu_ptr); \
\
if (likely(access_ok(VERIFY_READ, __gu_addr, size))) { \
switch (size) { \
case 1: __get_user_asm("lb", __gu_addr); break; \
case 2: __get_user_asm("lh", __gu_addr); break; \
case 4: __get_user_asm("lw", __gu_addr); break; \
case 8: __GET_USER_DW(__gu_addr); break; \
default: __get_user_unknown(); break; \
} \
} \
(x) = (__typeof__(*(ptr))) __gu_val; \
__gu_err; \
})
#define __get_user_asm(insn, addr) \
#define __get_user_asm(
val,
insn, addr) \
{ \
long __gu_tmp; \
\
__asm__ __volatile__( \
"1: " insn " %1, %3 \n" \
"2: \n" \
...
...
@@ -255,14 +255,16 @@ struct __large_struct { unsigned long buf[100]; };
" .section __ex_table,\"a\" \n" \
" "__UA_ADDR "\t1b, 3b \n" \
" .previous \n" \
: "=r" (__gu_err), "=r" (__gu_
val
) \
: "=r" (__gu_err), "=r" (__gu_
tmp
) \
: "0" (0), "o" (__m(addr)), "i" (-EFAULT)); \
\
(val) = (__typeof__(val)) __gu_tmp; \
}
/*
* Get a long long 64 using 32 bit registers.
*/
#define __get_user_asm_ll32(addr) \
#define __get_user_asm_ll32(
val,
addr) \
{ \
__asm__ __volatile__( \
"1: lw %1, (%3) \n" \
...
...
@@ -278,21 +280,20 @@ struct __large_struct { unsigned long buf[100]; };
" " __UA_ADDR " 1b, 4b \n" \
" " __UA_ADDR " 2b, 4b \n" \
" .previous \n" \
: "=r" (__gu_err), "=&r" (
__gu_val)
\
: "=r" (__gu_err), "=&r" (
val)
\
: "0" (0), "r" (addr), "i" (-EFAULT)); \
}
extern
void
__get_user_unknown
(
void
);
/*
* Yuck. We need two variants, one for 64bit operation and one
* for 32 bit mode and old iron.
*/
#ifdef __mips64
#define __PUT_USER_DW(ptr) __put_user_asm("sd", ptr)
#else
#ifdef CONFIG_32BIT
#define __PUT_USER_DW(ptr) __put_user_asm_ll32(ptr)
#endif
#ifdef CONFIG_64BIT
#define __PUT_USER_DW(ptr) __put_user_asm("sd", ptr)
#endif
#define __put_user_nocheck(x,ptr,size) \
({ \
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录