Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
9138d413
cloud-kernel
项目概览
openanolis
/
cloud-kernel
接近 2 年 前同步成功
通知
169
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看板
提交
9138d413
编写于
6月 25, 2015
作者:
V
Vineet Gupta
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ARC: Add llock/scond to futex backend
Signed-off-by:
N
Vineet Gupta
<
vgupta@synopsys.com
>
上级
70d93d89
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
42 addition
and
6 deletion
+42
-6
arch/arc/include/asm/futex.h
arch/arc/include/asm/futex.h
+42
-6
未找到文件。
arch/arc/include/asm/futex.h
浏览文件 @
9138d413
...
@@ -16,12 +16,40 @@
...
@@ -16,12 +16,40 @@
#include <linux/uaccess.h>
#include <linux/uaccess.h>
#include <asm/errno.h>
#include <asm/errno.h>
#ifdef CONFIG_ARC_HAS_LLSC
#define __futex_atomic_op(insn, ret, oldval, uaddr, oparg)\
\
__asm__ __volatile__( \
"1: llock %1, [%2] \n" \
insn "\n" \
"2: scond %0, [%2] \n" \
" bnz 1b \n" \
" mov %0, 0 \n" \
"3: \n" \
" .section .fixup,\"ax\" \n" \
" .align 4 \n" \
"4: mov %0, %4 \n" \
" b 3b \n" \
" .previous \n" \
" .section __ex_table,\"a\" \n" \
" .align 4 \n" \
" .word 1b, 4b \n" \
" .word 2b, 4b \n" \
" .previous \n" \
\
: "=&r" (ret), "=&r" (oldval) \
: "r" (uaddr), "r" (oparg), "ir" (-EFAULT) \
: "cc", "memory")
#else
/* !CONFIG_ARC_HAS_LLSC */
#define __futex_atomic_op(insn, ret, oldval, uaddr, oparg)\
#define __futex_atomic_op(insn, ret, oldval, uaddr, oparg)\
\
\
__asm__ __volatile__( \
__asm__ __volatile__( \
"1: ld
%1, [%2]
\n" \
"1: ld
%1, [%2]
\n" \
insn "\n" \
insn "\n" \
"2: st
%0, [%2]
\n" \
"2: st
%0, [%2]
\n" \
" mov %0, 0 \n" \
" mov %0, 0 \n" \
"3: \n" \
"3: \n" \
" .section .fixup,\"ax\" \n" \
" .section .fixup,\"ax\" \n" \
...
@@ -39,6 +67,8 @@
...
@@ -39,6 +67,8 @@
: "r" (uaddr), "r" (oparg), "ir" (-EFAULT) \
: "r" (uaddr), "r" (oparg), "ir" (-EFAULT) \
: "cc", "memory")
: "cc", "memory")
#endif
static
inline
int
futex_atomic_op_inuser
(
int
encoded_op
,
u32
__user
*
uaddr
)
static
inline
int
futex_atomic_op_inuser
(
int
encoded_op
,
u32
__user
*
uaddr
)
{
{
int
op
=
(
encoded_op
>>
28
)
&
7
;
int
op
=
(
encoded_op
>>
28
)
&
7
;
...
@@ -123,11 +153,17 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr, u32 oldval,
...
@@ -123,11 +153,17 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr, u32 oldval,
pagefault_disable
();
pagefault_disable
();
/* TBD : can use llock/scond */
__asm__
__volatile__
(
__asm__
__volatile__
(
"1: ld %0, [%3]
\n
"
#ifdef CONFIG_ARC_HAS_LLSC
" brne %0, %1, 3f
\n
"
"1: llock %0, [%3]
\n
"
"2: st %2, [%3]
\n
"
" brne %0, %1, 3f
\n
"
"2: scond %2, [%3]
\n
"
" bnz 1b
\n
"
#else
"1: ld %0, [%3]
\n
"
" brne %0, %1, 3f
\n
"
"2: st %2, [%3]
\n
"
#endif
"3:
\n
"
"3:
\n
"
" .section .fixup,
\"
ax
\"
\n
"
" .section .fixup,
\"
ax
\"
\n
"
"4: mov %0, %4
\n
"
"4: mov %0, %4
\n
"
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录