aarch64: allocate membarrier system call number
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mon, 28 Sep 2015 15:27:55 +0000 (11:27 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mon, 28 Sep 2015 15:27:55 +0000 (11:27 -0400)
Now that the membarrier system call is allocated on aarch64, allocate
its number in our architecture header if the system headers don't
allocate it. This allows using the membarrier system call as soon as
implemented in the kernel, even if the distribution has old kernel
headers.

Do so by creating headers specifically for aarch64, which rely on the
gcc atomic and memory barrier builtins.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
configure.ac
urcu/arch/aarch64.h [new file with mode: 0644]
urcu/uatomic/aarch64.h [new file with mode: 0644]

index 10a1589e9884d21bdc0c636ec0a2b0c6d22e132b..f1a8076f41c6b775ae8d0172b25e5b4879183c16 100644 (file)
@@ -88,7 +88,7 @@ AS_CASE([$host_cpu],
        [alpha*], [ARCHTYPE="alpha"],
        [ia64], [ARCHTYPE="gcc"],
        [arm*], [ARCHTYPE="arm"],
-       [aarch64], [ARCHTYPE="gcc"],
+       [aarch64], [ARCHTYPE="aarch64"],
        [mips*], [ARCHTYPE="mips"],
        [tile*], [ARCHTYPE="gcc"],
        [hppa*], [ARCHTYPE="hppa"],
diff --git a/urcu/arch/aarch64.h b/urcu/arch/aarch64.h
new file mode 100644 (file)
index 0000000..946e1c6
--- /dev/null
@@ -0,0 +1,64 @@
+#ifndef _URCU_ARCH_AARCH64_H
+#define _URCU_ARCH_AARCH64_H
+
+/*
+ * arch/aarch64.h: definitions for aarch64 architecture
+ *
+ * Copyright (c) 2010 Paul E. McKenney, IBM Corporation.
+ * Copyright (c) 2009-2015 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <urcu/compiler.h>
+#include <urcu/config.h>
+#include <urcu/syscall-compat.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdlib.h>
+#include <sys/time.h>
+
+typedef unsigned long long cycles_t;
+
+static inline cycles_t caa_get_cycles (void)
+{
+       cycles_t thetime;
+       struct timeval tv;
+
+       if (gettimeofday(&tv, NULL) != 0)
+               return 0;
+       thetime = ((cycles_t)tv.tv_sec) * 1000000ULL + ((cycles_t)tv.tv_usec);
+       return (cycles_t)thetime;
+}
+
+/*
+ * Define the membarrier system call number if not yet available in the
+ * system headers. aarch64 implements asm-generic/unistd.h system call
+ * numbers.
+ */
+#ifndef __NR_membarrier
+#define __NR_membarrier                283
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <urcu/arch/generic.h>
+
+#endif /* _URCU_ARCH_AARCH64_H */
diff --git a/urcu/uatomic/aarch64.h b/urcu/uatomic/aarch64.h
new file mode 100644 (file)
index 0000000..58698ce
--- /dev/null
@@ -0,0 +1,41 @@
+#ifndef _URCU_ARCH_UATOMIC_AARCH64_H
+#define _URCU_ARCH_UATOMIC_AARCH64_H
+
+/*
+ * Copyright (c) 1991-1994 by Xerox Corporation.  All rights reserved.
+ * Copyright (c) 1996-1999 by Silicon Graphics.  All rights reserved.
+ * Copyright (c) 1999-2004 Hewlett-Packard Development Company, L.P.
+ * Copyright (c) 2009-2015 Mathieu Desnoyers
+ * Copyright (c) 2010      Paul E. McKenney, IBM Corporation
+ *                        (Adapted from uatomic_arch_ppc.h)
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
+ * OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ *
+ * Permission is hereby granted to use or copy this program
+ * for any purpose,  provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is granted,
+ * provided the above notices are retained, and a notice that the code was
+ * modified is included with the above copyright notice.
+ *
+ * Code inspired from libuatomic_ops-1.2, inherited in part from the
+ * Boehm-Demers-Weiser conservative garbage collector.
+ */
+
+#include <urcu/compiler.h>
+#include <urcu/system.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define UATOMIC_HAS_ATOMIC_BYTE
+#define UATOMIC_HAS_ATOMIC_SHORT
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <urcu/uatomic/generic.h>
+
+#endif /* _URCU_ARCH_UATOMIC_AARCH64_H */
This page took 0.035386 seconds and 4 git commands to generate.