From 3aea2ae08850f2f6e9ddab451e004adf78d42ddd Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Mon, 28 Sep 2015 11:27:55 -0400 Subject: [PATCH] aarch64: allocate membarrier system call number 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 --- configure.ac | 2 +- urcu/arch/aarch64.h | 64 ++++++++++++++++++++++++++++++++++++++++++ urcu/uatomic/aarch64.h | 41 +++++++++++++++++++++++++++ 3 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 urcu/arch/aarch64.h create mode 100644 urcu/uatomic/aarch64.h diff --git a/configure.ac b/configure.ac index 10a1589..f1a8076 100644 --- a/configure.ac +++ b/configure.ac @@ -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 index 0000000..946e1c6 --- /dev/null +++ b/urcu/arch/aarch64.h @@ -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 + * + * 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 +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +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 + +#endif /* _URCU_ARCH_AARCH64_H */ diff --git a/urcu/uatomic/aarch64.h b/urcu/uatomic/aarch64.h new file mode 100644 index 0000000..58698ce --- /dev/null +++ b/urcu/uatomic/aarch64.h @@ -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 +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define UATOMIC_HAS_ATOMIC_BYTE +#define UATOMIC_HAS_ATOMIC_SHORT + +#ifdef __cplusplus +} +#endif + +#include + +#endif /* _URCU_ARCH_UATOMIC_AARCH64_H */ -- 2.34.1