* [PATCH] unicore32 fix: remove arch-specific futex support
@ 2011-03-30 8:48 Guan Xuetao
2011-03-30 12:17 ` Arnd Bergmann
0 siblings, 1 reply; 7+ messages in thread
From: Guan Xuetao @ 2011-03-30 8:48 UTC (permalink / raw)
To: Arnd Bergmann; +Cc: linux-kernel, linux-arch
The futex functions in unicore32 are not used and verified,
so just replaced by asm-generic version.
Signed-off-by: Guan Xuetao <gxt@mprc.pku.edu.cn>
---
arch/unicore32/Makefile | 2 +-
arch/unicore32/include/asm/futex.h | 143 ------------------------------------
2 files changed, 1 insertions(+), 144 deletions(-)
delete mode 100644 arch/unicore32/include/asm/futex.h
diff --git a/arch/unicore32/Makefile b/arch/unicore32/Makefile
index e08d6d3..76a8bee 100644
--- a/arch/unicore32/Makefile
+++ b/arch/unicore32/Makefile
@@ -48,7 +48,7 @@ ASM_GENERIC_HEADERS += bitsperlong.h bug.h bugs.h
ASM_GENERIC_HEADERS += cputime.h current.h
ASM_GENERIC_HEADERS += device.h div64.h
ASM_GENERIC_HEADERS += emergency-restart.h errno.h
-ASM_GENERIC_HEADERS += fb.h fcntl.h ftrace.h
+ASM_GENERIC_HEADERS += fb.h fcntl.h ftrace.h futex.h
ASM_GENERIC_HEADERS += hardirq.h hw_irq.h
ASM_GENERIC_HEADERS += ioctl.h ioctls.h ipcbuf.h irq_regs.h
ASM_GENERIC_HEADERS += kdebug.h kmap_types.h
diff --git a/arch/unicore32/include/asm/futex.h b/arch/unicore32/include/asm/futex.h
deleted file mode 100644
index 07dea61..0000000
--- a/arch/unicore32/include/asm/futex.h
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * linux/arch/unicore32/include/asm/futex.h
- *
- * Code specific to PKUnity SoC and UniCore ISA
- *
- * Copyright (C) 2001-2010 GUAN Xue-tao
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-#ifndef __UNICORE_FUTEX_H__
-#define __UNICORE_FUTEX_H__
-
-#ifdef __KERNEL__
-
-#include <linux/futex.h>
-#include <linux/preempt.h>
-#include <linux/uaccess.h>
-#include <linux/errno.h>
-
-#define __futex_atomic_op(insn, ret, oldval, uaddr, oparg) \
- __asm__ __volatile__( \
- "1: ldw.u %1, [%2]\n" \
- " " insn "\n" \
- "2: stw.u %0, [%2]\n" \
- " mov %0, #0\n" \
- "3:\n" \
- " .pushsection __ex_table,\"a\"\n" \
- " .align 3\n" \
- " .long 1b, 4f, 2b, 4f\n" \
- " .popsection\n" \
- " .pushsection .fixup,\"ax\"\n" \
- "4: mov %0, %4\n" \
- " b 3b\n" \
- " .popsection" \
- : "=&r" (ret), "=&r" (oldval) \
- : "r" (uaddr), "r" (oparg), "Ir" (-EFAULT) \
- : "cc", "memory")
-
-static inline int
-futex_atomic_op_inuser(int encoded_op, int __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(int)))
- return -EFAULT;
-
- pagefault_disable(); /* implies preempt_disable() */
-
- switch (op) {
- case FUTEX_OP_SET:
- __futex_atomic_op("mov %0, %3", ret, oldval, uaddr, oparg);
- break;
- case FUTEX_OP_ADD:
- __futex_atomic_op("add %0, %1, %3", ret, oldval, uaddr, oparg);
- break;
- case FUTEX_OP_OR:
- __futex_atomic_op("or %0, %1, %3", ret, oldval, uaddr, oparg);
- break;
- case FUTEX_OP_ANDN:
- __futex_atomic_op("and %0, %1, %3",
- ret, oldval, uaddr, ~oparg);
- break;
- case FUTEX_OP_XOR:
- __futex_atomic_op("xor %0, %1, %3", ret, oldval, uaddr, oparg);
- break;
- default:
- ret = -ENOSYS;
- }
-
- pagefault_enable(); /* subsumes preempt_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;
- }
- }
- return ret;
-}
-
-static inline int
-futex_atomic_cmpxchg_inatomic(int __user *uaddr, int oldval, int newval)
-{
- int val;
-
- if (!access_ok(VERIFY_WRITE, uaddr, sizeof(int)))
- return -EFAULT;
-
- pagefault_disable(); /* implies preempt_disable() */
-
- __asm__ __volatile__("@futex_atomic_cmpxchg_inatomic\n"
- "1: ldw.u %0, [%3]\n"
- " cmpxor.a %0, %1\n"
- " bne 3f\n"
- "2: stw.u %2, [%3]\n"
- "3:\n"
- " .pushsection __ex_table,\"a\"\n"
- " .align 3\n"
- " .long 1b, 4f, 2b, 4f\n"
- " .popsection\n"
- " .pushsection .fixup,\"ax\"\n"
- "4: mov %0, %4\n"
- " b 3b\n"
- " .popsection"
- : "=&r" (val)
- : "r" (oldval), "r" (newval), "r" (uaddr), "Ir" (-EFAULT)
- : "cc", "memory");
-
- pagefault_enable(); /* subsumes preempt_enable() */
-
- return val;
-}
-
-#endif /* __KERNEL__ */
-#endif /* __UNICORE_FUTEX_H__ */
--
1.6.2.2
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH] unicore32 fix: remove arch-specific futex support
2011-03-30 8:48 [PATCH] unicore32 fix: remove arch-specific futex support Guan Xuetao
@ 2011-03-30 12:17 ` Arnd Bergmann
2011-03-30 12:27 ` Thomas Gleixner
0 siblings, 1 reply; 7+ messages in thread
From: Arnd Bergmann @ 2011-03-30 12:17 UTC (permalink / raw)
To: Guan Xuetao, Paul Mundt; +Cc: linux-kernel, linux-arch
On Wednesday 30 March 2011, Guan Xuetao wrote:
> The futex functions in unicore32 are not used and verified,
> so just replaced by asm-generic version.
>
> Signed-off-by: Guan Xuetao <gxt@mprc.pku.edu.cn>
Note that the a working futex implementation would be really useful
to get efficient multithreaded applications. On uniprocessor
machines, this can easily be done by disabling interrupts, like
you also do for spinlock and atomic.
I believe we could actually copy the arch/sh/include/asm/futex-irq.h
implementation to include/asm-generic and use that whenever CONFIG_SMP
is disabled. That would also help a lot of other architectures.
Arnd
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] unicore32 fix: remove arch-specific futex support
2011-03-30 12:17 ` Arnd Bergmann
@ 2011-03-30 12:27 ` Thomas Gleixner
2011-03-30 12:40 ` Arnd Bergmann
0 siblings, 1 reply; 7+ messages in thread
From: Thomas Gleixner @ 2011-03-30 12:27 UTC (permalink / raw)
To: Arnd Bergmann; +Cc: Guan Xuetao, Paul Mundt, linux-kernel, linux-arch
On Wed, 30 Mar 2011, Arnd Bergmann wrote:
> On Wednesday 30 March 2011, Guan Xuetao wrote:
> > The futex functions in unicore32 are not used and verified,
> > so just replaced by asm-generic version.
> >
> > Signed-off-by: Guan Xuetao <gxt@mprc.pku.edu.cn>
>
> Note that the a working futex implementation would be really useful
> to get efficient multithreaded applications. On uniprocessor
> machines, this can easily be done by disabling interrupts, like
> you also do for spinlock and atomic.
>
> I believe we could actually copy the arch/sh/include/asm/futex-irq.h
> implementation to include/asm-generic and use that whenever CONFIG_SMP
> is disabled. That would also help a lot of other architectures.
The problem is that you need cmpxchg in user space as well.
ARM does this with some syscall magic for machines which do not have
cmpxchg.
tglx
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] unicore32 fix: remove arch-specific futex support
2011-03-30 12:27 ` Thomas Gleixner
@ 2011-03-30 12:40 ` Arnd Bergmann
2011-03-30 12:50 ` Thomas Gleixner
2011-03-31 10:16 ` Guan Xuetao
0 siblings, 2 replies; 7+ messages in thread
From: Arnd Bergmann @ 2011-03-30 12:40 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: Guan Xuetao, Paul Mundt, linux-kernel, linux-arch
On Wednesday 30 March 2011, Thomas Gleixner wrote:
> The problem is that you need cmpxchg in user space as well.
>
> ARM does this with some syscall magic for machines which do not have
> cmpxchg.
Ah, right. I wonder how sh does it.
I also remember that the original unicore32 ABI had support for a cmpxchg
system call, but that was removed with the move to the generic syscall
table.
It is of course possible to add it back using the __NR_arch_specific_syscall
entry point.
Arnd
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] unicore32 fix: remove arch-specific futex support
2011-03-30 12:40 ` Arnd Bergmann
@ 2011-03-30 12:50 ` Thomas Gleixner
2011-03-31 10:16 ` Guan Xuetao
1 sibling, 0 replies; 7+ messages in thread
From: Thomas Gleixner @ 2011-03-30 12:50 UTC (permalink / raw)
To: Arnd Bergmann; +Cc: Guan Xuetao, Paul Mundt, linux-kernel, linux-arch
On Wed, 30 Mar 2011, Arnd Bergmann wrote:
> On Wednesday 30 March 2011, Thomas Gleixner wrote:
> > The problem is that you need cmpxchg in user space as well.
> >
> > ARM does this with some syscall magic for machines which do not have
> > cmpxchg.
>
> Ah, right. I wonder how sh does it.
>
> I also remember that the original unicore32 ABI had support for a cmpxchg
> system call, but that was removed with the move to the generic syscall
> table.
>
> It is of course possible to add it back using the __NR_arch_specific_syscall
> entry point.
Either that or you take a trap. None of them is pretty.
If the only purpose is futex support, then we can add an extra flag to
the futex ops and handle it there via asm-generic/futex.h. That would
avoid an extra syscall in the contended case.
Thanks,
tglx
^ permalink raw reply [flat|nested] 7+ messages in thread
* RE: [PATCH] unicore32 fix: remove arch-specific futex support
2011-03-30 12:40 ` Arnd Bergmann
2011-03-30 12:50 ` Thomas Gleixner
@ 2011-03-31 10:16 ` Guan Xuetao
2011-04-01 9:09 ` Arnd Bergmann
1 sibling, 1 reply; 7+ messages in thread
From: Guan Xuetao @ 2011-03-31 10:16 UTC (permalink / raw)
To: 'Arnd Bergmann', 'Thomas Gleixner'
Cc: 'Paul Mundt', linux-kernel, linux-arch
> -----Original Message-----
> From: Arnd Bergmann [mailto:arnd@arndb.de]
> Sent: Wednesday, March 30, 2011 8:40 PM
> To: Thomas Gleixner
> Cc: Guan Xuetao; Paul Mundt; linux-kernel@vger.kernel.org; linux-arch@vger.kernel.org
> Subject: Re: [PATCH] unicore32 fix: remove arch-specific futex support
>
> On Wednesday 30 March 2011, Thomas Gleixner wrote:
> > The problem is that you need cmpxchg in user space as well.
> >
> > ARM does this with some syscall magic for machines which do not have
> > cmpxchg.
>
> Ah, right. I wonder how sh does it.
>
> I also remember that the original unicore32 ABI had support for a cmpxchg
> system call, but that was removed with the move to the generic syscall
> table.
>
> It is of course possible to add it back using the __NR_arch_specific_syscall
> entry point.
>
> Arnd
For cmpxchg, we have both system call and kuser_cmpxchg supports in old abi
which are similar to arm.
The performance of system call version is too poor, so it could be only used for test.
Thanks & Regards
Guan Xuetao
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] unicore32 fix: remove arch-specific futex support
2011-03-31 10:16 ` Guan Xuetao
@ 2011-04-01 9:09 ` Arnd Bergmann
0 siblings, 0 replies; 7+ messages in thread
From: Arnd Bergmann @ 2011-04-01 9:09 UTC (permalink / raw)
To: Guan Xuetao
Cc: 'Thomas Gleixner', 'Paul Mundt', linux-kernel,
linux-arch
On Thursday 31 March 2011, Guan Xuetao wrote:
> For cmpxchg, we have both system call and kuser_cmpxchg supports in old abi
> which are similar to arm.
> The performance of system call version is too poor, so it could be only used for test.
>
Let's forget about doing futex support for unicore32 then and use your original
patch.
Acked-by: Arnd Bergmann <arnd@arndb.de>
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2011-04-01 9:09 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-03-30 8:48 [PATCH] unicore32 fix: remove arch-specific futex support Guan Xuetao
2011-03-30 12:17 ` Arnd Bergmann
2011-03-30 12:27 ` Thomas Gleixner
2011-03-30 12:40 ` Arnd Bergmann
2011-03-30 12:50 ` Thomas Gleixner
2011-03-31 10:16 ` Guan Xuetao
2011-04-01 9:09 ` Arnd Bergmann
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox