Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1573201
| From | Stafford Horne <shorne@gmail.com> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [PATCH v2 09/23] openrisc: add optimized atomic operations |
| Date | 2017-02-03 17:00 +0100 |
| Message-ID | <t6Orf-3Ei-7@gated-at.bofh.it> (permalink) |
| References | <t6Ohz-3Ax-5@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
From: Stefan Kristiansson <stefan.kristiansson@saunalahti.fi>
Using the l.lwa and l.swa atomic instruction pair.
Most openrisc processor cores provide these instructions now. If the
instructions are not available emulation is provided.
Signed-off-by: Stefan Kristiansson <stefan.kristiansson@saunalahti.fi>
[shorne@gmail.com: remove OPENRISC_HAVE_INST_LWA_SWA config suggesed by
Alan Cox https://lkml.org/lkml/2014/7/23/666]
Signed-off-by: Stafford Horne <shorne@gmail.com>
---
arch/openrisc/include/asm/Kbuild | 1 -
arch/openrisc/include/asm/atomic.h | 53 ++++++++++++++++++++++++++++++++++++++
2 files changed, 53 insertions(+), 1 deletion(-)
create mode 100644 arch/openrisc/include/asm/atomic.h
diff --git a/arch/openrisc/include/asm/Kbuild b/arch/openrisc/include/asm/Kbuild
index 15e6ed5..1cedd63 100644
--- a/arch/openrisc/include/asm/Kbuild
+++ b/arch/openrisc/include/asm/Kbuild
@@ -1,7 +1,6 @@
header-y += ucontext.h
-generic-y += atomic.h
generic-y += auxvec.h
generic-y += barrier.h
generic-y += bitsperlong.h
diff --git a/arch/openrisc/include/asm/atomic.h b/arch/openrisc/include/asm/atomic.h
new file mode 100644
index 0000000..67f0b30
--- /dev/null
+++ b/arch/openrisc/include/asm/atomic.h
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2014 Stefan Kristiansson <stefan.kristiansson@saunalahti.fi>
+ *
+ * This file is licensed under the terms of the GNU General Public License
+ * version 2. This program is licensed "as is" without any warranty of any
+ * kind, whether express or implied.
+ */
+
+#ifndef __ASM_OPENRISC_ATOMIC_H
+#define __ASM_OPENRISC_ATOMIC_H
+
+#include <linux/types.h>
+
+static inline int atomic_add_return(int i, atomic_t *v)
+{
+ int tmp;
+
+ __asm__ __volatile__(
+ "1: l.lwa %0,0(%1) \n"
+ " l.add %0,%0,%2 \n"
+ " l.swa 0(%1),%0 \n"
+ " l.bnf 1b \n"
+ " l.nop \n"
+ : "=&r"(tmp)
+ : "r"(&v->counter), "r"(i)
+ : "cc", "memory");
+
+ return tmp;
+}
+
+static inline int atomic_sub_return(int i, atomic_t *v)
+{
+ int tmp;
+
+ __asm__ __volatile__(
+ "1: l.lwa %0,0(%1) \n"
+ " l.sub %0,%0,%2 \n"
+ " l.swa 0(%1),%0 \n"
+ " l.bnf 1b \n"
+ " l.nop \n"
+ : "=&r"(tmp)
+ : "r"(&v->counter), "r"(i)
+ : "cc", "memory");
+
+ return tmp;
+}
+
+#define atomic_add_return atomic_add_return
+#define atomic_sub_return atomic_sub_return
+
+#include <asm-generic/atomic.h>
+
+#endif /* __ASM_OPENRISC_ATOMIC_H */
--
2.9.3
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCH v2 00/23] OpenRISC patches from backlog for 4.11 Stafford Horne <shorne@gmail.com> - 2017-02-03 16:50 +0100 [PATCH v2 07/23] openrisc: add atomic bitops Stafford Horne <shorne@gmail.com> - 2017-02-03 17:00 +0100 [PATCH v2 06/23] openrisc: add l.lwa/l.swa emulation Stafford Horne <shorne@gmail.com> - 2017-02-03 17:00 +0100 [PATCH v2 09/23] openrisc: add optimized atomic operations Stafford Horne <shorne@gmail.com> - 2017-02-03 17:00 +0100 [PATCH v2 12/23] openrisc: remove unnecessary stddef.h include Stafford Horne <shorne@gmail.com> - 2017-02-03 17:00 +0100 [PATCH v2 23/23] arch/openrisc/lib/memcpy.c: use correct OR1200 option Stafford Horne <shorne@gmail.com> - 2017-02-03 17:00 +0100 [PATCH v2 10/23] openrisc: add spinlock implementation Stafford Horne <shorne@gmail.com> - 2017-02-03 17:00 +0100 [PATCH v2 21/23] openrisc: entry: Fix delay slot detection Stafford Horne <shorne@gmail.com> - 2017-02-03 17:00 +0100 [PATCH v2 17/23] openrisc: Add .gitignore Stafford Horne <shorne@gmail.com> - 2017-02-03 17:00 +0100 [PATCH v2 04/23] openrisc: head: use THREAD_SIZE instead of magic constant Stafford Horne <shorne@gmail.com> - 2017-02-03 17:00 +0100 [PATCH v2 15/23] openrisc: Add optimized memset Stafford Horne <shorne@gmail.com> - 2017-02-03 17:00 +0100 [PATCH v2 20/23] openrisc: entry: Whitespace and comment cleanups Stafford Horne <shorne@gmail.com> - 2017-02-03 17:00 +0100 [PATCH v2 22/23] openrisc: head: Move init strings to rodata section Stafford Horne <shorne@gmail.com> - 2017-02-03 17:00 +0100 [PATCH v2 05/23] openrisc: head: refactor out tlb flush into it's own function Stafford Horne <shorne@gmail.com> - 2017-02-03 17:00 +0100 [PATCH v2 03/23] openrisc: tlb miss handler optimizations Stafford Horne <shorne@gmail.com> - 2017-02-03 17:00 +0100 [PATCH v2 11/23] openrisc: add futex_atomic_* implementations Stafford Horne <shorne@gmail.com> - 2017-02-03 17:00 +0100 [PATCH v2 14/23] openrisc: Initial support for the idle state Stafford Horne <shorne@gmail.com> - 2017-02-03 17:00 +0100 [PATCH v2 19/23] scripts/checkstack.pl: Add openrisc support Stafford Horne <shorne@gmail.com> - 2017-02-03 17:00 +0100
csiph-web