-#ifndef _ARCH_S390_H
-#define _ARCH_S390_H
+#ifndef _URCU_ARCH_S390_H
+#define _URCU_ARCH_S390_H
/*
* Trivial definitions for the S390 architecture based on information from the
* IN THE SOFTWARE.
*/
-#include <compiler.h>
-#include "config.h"
+#include <urcu/compiler.h>
+#include <urcu/config.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
#define CONFIG_HAVE_MEM_COHERENCY
+#define CACHE_LINE_SIZE 128
+
+#ifndef __SIZEOF_LONG__
+#ifdef __s390x__
+#define __SIZEOF_LONG__ 8
+#else
+#define __SIZEOF_LONG__ 4
+#endif
+#endif
+
#ifndef BITS_PER_LONG
#define BITS_PER_LONG (__SIZEOF_LONG__ * 8)
#endif
#define mb() __asm__ __volatile__("bcr 15,0" : : : "memory")
-#define rmb() __asm__ __volatile__("bcr 15,0" : : : "memory");
-#define wmb() __asm__ __volatile__("bcr 15,0" : : : "memory");
+#define rmb() __asm__ __volatile__("bcr 15,0" : : : "memory")
+#define wmb() __asm__ __volatile__("bcr 15,0" : : : "memory")
#define mc() barrier()
#define rmc() barrier()
#define wmc() barrier()
+#ifdef CONFIG_RCU_SMP
#define smp_mb() mb()
#define smp_rmb() rmb()
#define smp_wmb() wmb()
#define smp_mc() mc()
#define smp_rmc() rmc()
#define smp_wmc() wmc()
+#else
+#define smp_mb() barrier()
+#define smp_rmb() barrier()
+#define smp_wmb() barrier()
+#define smp_mc() barrier()
+#define smp_rmc() barrier()
+#define smp_wmc() barrier()
+#endif
/* Nop everywhere except on alpha. */
#define smp_read_barrier_depends()
return cycles;
}
-#endif /* _ARCH_S390_H */
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _URCU_ARCH_S390_H */