summaryrefslogtreecommitdiff
path: root/ANDROID_3.4.5/arch/frv/kernel/futex.c
diff options
context:
space:
mode:
authorSrikant Patnaik2015-01-11 12:28:04 +0530
committerSrikant Patnaik2015-01-11 12:28:04 +0530
commit871480933a1c28f8a9fed4c4d34d06c439a7a422 (patch)
tree8718f573808810c2a1e8cb8fb6ac469093ca2784 /ANDROID_3.4.5/arch/frv/kernel/futex.c
parent9d40ac5867b9aefe0722bc1f110b965ff294d30d (diff)
downloadFOSSEE-netbook-kernel-source-871480933a1c28f8a9fed4c4d34d06c439a7a422.tar.gz
FOSSEE-netbook-kernel-source-871480933a1c28f8a9fed4c4d34d06c439a7a422.tar.bz2
FOSSEE-netbook-kernel-source-871480933a1c28f8a9fed4c4d34d06c439a7a422.zip
Moved, renamed, and deleted files
The original directory structure was scattered and unorganized. Changes are basically to make it look like kernel structure.
Diffstat (limited to 'ANDROID_3.4.5/arch/frv/kernel/futex.c')
-rw-r--r--ANDROID_3.4.5/arch/frv/kernel/futex.c242
1 files changed, 0 insertions, 242 deletions
diff --git a/ANDROID_3.4.5/arch/frv/kernel/futex.c b/ANDROID_3.4.5/arch/frv/kernel/futex.c
deleted file mode 100644
index d155ca9e..00000000
--- a/ANDROID_3.4.5/arch/frv/kernel/futex.c
+++ /dev/null
@@ -1,242 +0,0 @@
-/* futex.c: futex operations
- *
- * Copyright (C) 2005 Red Hat, Inc. All Rights Reserved.
- * Written by David Howells (dhowells@redhat.com)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version
- * 2 of the License, or (at your option) any later version.
- */
-
-#include <linux/futex.h>
-#include <linux/uaccess.h>
-#include <asm/futex.h>
-#include <asm/errno.h>
-
-/*
- * the various futex operations; MMU fault checking is ignored under no-MMU
- * conditions
- */
-static inline int atomic_futex_op_xchg_set(int oparg, u32 __user *uaddr, int *_oldval)
-{
- int oldval, ret;
-
- asm("0: \n"
- " orcc gr0,gr0,gr0,icc3 \n" /* set ICC3.Z */
- " ckeq icc3,cc7 \n"
- "1: ld.p %M0,%1 \n" /* LD.P/ORCR must be atomic */
- " orcr cc7,cc7,cc3 \n" /* set CC3 to true */
- "2: cst.p %3,%M0 ,cc3,#1 \n"
- " corcc gr29,gr29,gr0 ,cc3,#1 \n" /* clear ICC3.Z if store happens */
- " beq icc3,#0,0b \n"
- " setlos 0,%2 \n"
- "3: \n"
- ".subsection 2 \n"
- "4: setlos %5,%2 \n"
- " bra 3b \n"
- ".previous \n"
- ".section __ex_table,\"a\" \n"
- " .balign 8 \n"
- " .long 1b,4b \n"
- " .long 2b,4b \n"
- ".previous"
- : "+U"(*uaddr), "=&r"(oldval), "=&r"(ret), "=r"(oparg)
- : "3"(oparg), "i"(-EFAULT)
- : "memory", "cc7", "cc3", "icc3"
- );
-
- *_oldval = oldval;
- return ret;
-}
-
-static inline int atomic_futex_op_xchg_add(int oparg, u32 __user *uaddr, int *_oldval)
-{
- int oldval, ret;
-
- asm("0: \n"
- " orcc gr0,gr0,gr0,icc3 \n" /* set ICC3.Z */
- " ckeq icc3,cc7 \n"
- "1: ld.p %M0,%1 \n" /* LD.P/ORCR must be atomic */
- " orcr cc7,cc7,cc3 \n" /* set CC3 to true */
- " add %1,%3,%3 \n"
- "2: cst.p %3,%M0 ,cc3,#1 \n"
- " corcc gr29,gr29,gr0 ,cc3,#1 \n" /* clear ICC3.Z if store happens */
- " beq icc3,#0,0b \n"
- " setlos 0,%2 \n"
- "3: \n"
- ".subsection 2 \n"
- "4: setlos %5,%2 \n"
- " bra 3b \n"
- ".previous \n"
- ".section __ex_table,\"a\" \n"
- " .balign 8 \n"
- " .long 1b,4b \n"
- " .long 2b,4b \n"
- ".previous"
- : "+U"(*uaddr), "=&r"(oldval), "=&r"(ret), "=r"(oparg)
- : "3"(oparg), "i"(-EFAULT)
- : "memory", "cc7", "cc3", "icc3"
- );
-
- *_oldval = oldval;
- return ret;
-}
-
-static inline int atomic_futex_op_xchg_or(int oparg, u32 __user *uaddr, int *_oldval)
-{
- int oldval, ret;
-
- asm("0: \n"
- " orcc gr0,gr0,gr0,icc3 \n" /* set ICC3.Z */
- " ckeq icc3,cc7 \n"
- "1: ld.p %M0,%1 \n" /* LD.P/ORCR must be atomic */
- " orcr cc7,cc7,cc3 \n" /* set CC3 to true */
- " or %1,%3,%3 \n"
- "2: cst.p %3,%M0 ,cc3,#1 \n"
- " corcc gr29,gr29,gr0 ,cc3,#1 \n" /* clear ICC3.Z if store happens */
- " beq icc3,#0,0b \n"
- " setlos 0,%2 \n"
- "3: \n"
- ".subsection 2 \n"
- "4: setlos %5,%2 \n"
- " bra 3b \n"
- ".previous \n"
- ".section __ex_table,\"a\" \n"
- " .balign 8 \n"
- " .long 1b,4b \n"
- " .long 2b,4b \n"
- ".previous"
- : "+U"(*uaddr), "=&r"(oldval), "=&r"(ret), "=r"(oparg)
- : "3"(oparg), "i"(-EFAULT)
- : "memory", "cc7", "cc3", "icc3"
- );
-
- *_oldval = oldval;
- return ret;
-}
-
-static inline int atomic_futex_op_xchg_and(int oparg, u32 __user *uaddr, int *_oldval)
-{
- int oldval, ret;
-
- asm("0: \n"
- " orcc gr0,gr0,gr0,icc3 \n" /* set ICC3.Z */
- " ckeq icc3,cc7 \n"
- "1: ld.p %M0,%1 \n" /* LD.P/ORCR must be atomic */
- " orcr cc7,cc7,cc3 \n" /* set CC3 to true */
- " and %1,%3,%3 \n"
- "2: cst.p %3,%M0 ,cc3,#1 \n"
- " corcc gr29,gr29,gr0 ,cc3,#1 \n" /* clear ICC3.Z if store happens */
- " beq icc3,#0,0b \n"
- " setlos 0,%2 \n"
- "3: \n"
- ".subsection 2 \n"
- "4: setlos %5,%2 \n"
- " bra 3b \n"
- ".previous \n"
- ".section __ex_table,\"a\" \n"
- " .balign 8 \n"
- " .long 1b,4b \n"
- " .long 2b,4b \n"
- ".previous"
- : "+U"(*uaddr), "=&r"(oldval), "=&r"(ret), "=r"(oparg)
- : "3"(oparg), "i"(-EFAULT)
- : "memory", "cc7", "cc3", "icc3"
- );
-
- *_oldval = oldval;
- return ret;
-}
-
-static inline int atomic_futex_op_xchg_xor(int oparg, u32 __user *uaddr, int *_oldval)
-{
- int oldval, ret;
-
- asm("0: \n"
- " orcc gr0,gr0,gr0,icc3 \n" /* set ICC3.Z */
- " ckeq icc3,cc7 \n"
- "1: ld.p %M0,%1 \n" /* LD.P/ORCR must be atomic */
- " orcr cc7,cc7,cc3 \n" /* set CC3 to true */
- " xor %1,%3,%3 \n"
- "2: cst.p %3,%M0 ,cc3,#1 \n"
- " corcc gr29,gr29,gr0 ,cc3,#1 \n" /* clear ICC3.Z if store happens */
- " beq icc3,#0,0b \n"
- " setlos 0,%2 \n"
- "3: \n"
- ".subsection 2 \n"
- "4: setlos %5,%2 \n"
- " bra 3b \n"
- ".previous \n"
- ".section __ex_table,\"a\" \n"
- " .balign 8 \n"
- " .long 1b,4b \n"
- " .long 2b,4b \n"
- ".previous"
- : "+U"(*uaddr), "=&r"(oldval), "=&r"(ret), "=r"(oparg)
- : "3"(oparg), "i"(-EFAULT)
- : "memory", "cc7", "cc3", "icc3"
- );
-
- *_oldval = oldval;
- return ret;
-}
-
-/*****************************************************************************/
-/*
- * do the futex operations
- */
-int futex_atomic_op_inuser(int encoded_op, u32 __user *uaddr)
-{
- int op = (encoded_op >> 28) & 7;
- int cmp = (encoded_op >> 24) & 15;
- int oparg = (encoded_op << 8) >> 20;
- int cmparg = (encoded_op << 20) >> 20;
- int oldval = 0, ret;
-
- if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
- oparg = 1 << oparg;
-
- if (!access_ok(VERIFY_WRITE, uaddr, sizeof(u32)))
- return -EFAULT;
-
- pagefault_disable();
-
- switch (op) {
- case FUTEX_OP_SET:
- ret = atomic_futex_op_xchg_set(oparg, uaddr, &oldval);
- break;
- case FUTEX_OP_ADD:
- ret = atomic_futex_op_xchg_add(oparg, uaddr, &oldval);
- break;
- case FUTEX_OP_OR:
- ret = atomic_futex_op_xchg_or(oparg, uaddr, &oldval);
- break;
- case FUTEX_OP_ANDN:
- ret = atomic_futex_op_xchg_and(~oparg, uaddr, &oldval);
- break;
- case FUTEX_OP_XOR:
- ret = atomic_futex_op_xchg_xor(oparg, uaddr, &oldval);
- break;
- default:
- ret = -ENOSYS;
- break;
- }
-
- pagefault_enable();
-
- if (!ret) {
- switch (cmp) {
- case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
- case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
- case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
- case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
- case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
- case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
- default: ret = -ENOSYS; break;
- }
- }
-
- return ret;
-
-} /* end futex_atomic_op_inuser() */