b6d1b3ac69
1 OBS-URL: https://build.opensuse.org/request/show/335424 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/dapl?expand=0&rev=4
127 lines
3.9 KiB
Diff
127 lines
3.9 KiB
Diff
dapl/udapl/linux/dapl_osd.h | 37 +++++++++++++++++++++++++++++-
|
|
test/dapltest/mdep/linux/dapl_mdep_user.c | 2 -
|
|
test/dapltest/mdep/linux/dapl_mdep_user.h | 9 ++++++-
|
|
3 files changed, 45 insertions(+), 3 deletions(-)
|
|
|
|
Index: dapl-2.0.42/dapl/udapl/linux/dapl_osd.h
|
|
===================================================================
|
|
--- dapl-2.0.42.orig/dapl/udapl/linux/dapl_osd.h 2014-04-07 19:27:35.000000000 +0200
|
|
+++ dapl-2.0.42/dapl/udapl/linux/dapl_osd.h 2015-08-11 11:21:10.335431479 +0200
|
|
@@ -49,7 +49,9 @@
|
|
#error UNDEFINED OS TYPE
|
|
#endif /* __linux__ */
|
|
|
|
-#if !defined (__i386__) && !defined (__ia64__) && !defined(__x86_64__) && !defined(__PPC__) && !defined(__PPC64__)
|
|
+#if !defined(__i386__) && !defined(__ia64__) \
|
|
+&& !defined(__x86_64__) && !defined(__PPC__) && !defined(__PPC64__) \
|
|
+&& !defined(__s390x__) && !defined(__s390__)
|
|
#error UNDEFINED ARCH
|
|
#endif
|
|
|
|
@@ -156,6 +158,22 @@ int dapl_os_get_env_val (
|
|
|
|
|
|
/* atomic functions */
|
|
+#if defined(__s390x__) || defined(__s390__)
|
|
+#define DAPL_CS_ADD(ptr, op_val) ({ \
|
|
+ int old_val, new_val; \
|
|
+ __asm__ __volatile__( \
|
|
+ " l %0,%2\n" \
|
|
+ "0: lr %1,%0\n" \
|
|
+ " ar %1,%3\n" \
|
|
+ " cs %0,%1,%2\n" \
|
|
+ " jl 0b" \
|
|
+ : "=&d" (old_val), "=&d" (new_val), \
|
|
+ "=Q" (*ptr) \
|
|
+ : "d" (op_val), "Q" (*ptr) \
|
|
+ : "cc", "memory"); \
|
|
+ new_val; \
|
|
+})
|
|
+#endif
|
|
|
|
/* dapl_os_atomic_inc
|
|
*
|
|
@@ -179,6 +197,11 @@ dapl_os_atomic_inc (
|
|
#else
|
|
IA64_FETCHADD(old_value,v,1,4);
|
|
#endif
|
|
+#elif defined(__s390x__) || defined(__s390__)
|
|
+ DAT_COUNT tmp;
|
|
+ DAT_COUNT delta = 1;
|
|
+
|
|
+ tmp = DAPL_CS_ADD(v, delta);
|
|
#elif defined(__PPC__) || defined(__PPC64__)
|
|
int tmp;
|
|
|
|
@@ -218,6 +241,11 @@ dapl_os_atomic_dec (
|
|
#else
|
|
IA64_FETCHADD(old_value,v,-1,4);
|
|
#endif
|
|
+#elif defined(__s390x__) || defined(__s390__)
|
|
+ DAT_COUNT tmp;
|
|
+ DAT_COUNT delta = -1;
|
|
+
|
|
+ tmp = DAPL_CS_ADD(v, delta);
|
|
#elif defined (__PPC__) || defined(__PPC64__)
|
|
int tmp;
|
|
|
|
@@ -273,6 +301,13 @@ dapl_os_atomic_assign (
|
|
#else
|
|
current_value = ia64_cmpxchg(acq,v,match_value,new_value,4);
|
|
#endif /* __ia64__ */
|
|
+#elif defined(__s390x__) || defined(__s390__)
|
|
+ __asm__ __volatile__(
|
|
+ " cs %0,%2,%1\n"
|
|
+ : "+d" (match_value), "=Q" (*v)
|
|
+ : "d" (new_value), "Q" (*v)
|
|
+ : "cc", "memory");
|
|
+ current_value = match_value;
|
|
#elif defined(__PPC__) || defined(__PPC64__)
|
|
__asm__ __volatile__ (
|
|
" lwsync\n\
|
|
Index: dapl-2.0.42/test/dapltest/mdep/linux/dapl_mdep_user.c
|
|
===================================================================
|
|
--- dapl-2.0.42.orig/test/dapltest/mdep/linux/dapl_mdep_user.c 2014-04-07 19:27:35.000000000 +0200
|
|
+++ dapl-2.0.42/test/dapltest/mdep/linux/dapl_mdep_user.c 2015-08-11 11:18:51.751655179 +0200
|
|
@@ -168,7 +168,7 @@ unsigned long DT_Mdep_GetTime(void)
|
|
return tv.tv_sec * 1000 + tv.tv_usec / 1000;
|
|
}
|
|
|
|
-#ifdef RDTSC_TIMERS
|
|
+#if defined(RDTSC_TIMERS) && !defined(__s390x__)
|
|
double DT_Mdep_GetCpuMhz(void)
|
|
{
|
|
#define DT_TSC_BUFFER_SIZE 128
|
|
Index: dapl-2.0.42/test/dapltest/mdep/linux/dapl_mdep_user.h
|
|
===================================================================
|
|
--- dapl-2.0.42.orig/test/dapltest/mdep/linux/dapl_mdep_user.h 2014-04-07 19:27:35.000000000 +0200
|
|
+++ dapl-2.0.42/test/dapltest/mdep/linux/dapl_mdep_user.h 2015-08-11 11:18:51.751655179 +0200
|
|
@@ -143,11 +143,18 @@ DT_Mdep_GetTimeStamp ( void )
|
|
asm volatile("rdtsc" : "=a" (__a), "=d" (__d));
|
|
return ((unsigned long)__a) | (((unsigned long)__d)<<32);
|
|
#else
|
|
+#if defined(__s390x__)
|
|
+ DT_Mdep_TimeStamp x;
|
|
+
|
|
+ asm volatile("stck %0" : "=Q" (x) : : "cc");
|
|
+ return x >> 2;
|
|
+#else
|
|
#error "Linux CPU architecture - unimplemented"
|
|
#endif
|
|
#endif
|
|
#endif
|
|
#endif
|
|
+#endif
|
|
}
|
|
#else /* !RDTSC_TIMERS */
|
|
/*
|
|
@@ -172,7 +179,7 @@ DT_Mdep_GetTimeStamp ( void )
|
|
* world. E.g. %llx for gcc, %I64x for Windows
|
|
*/
|
|
|
|
-#if defined(__x86_64__) || defined(__ia64__)
|
|
+#if defined(__x86_64__) || defined(__ia64__) || defined(__s390x__)
|
|
#define F64d "%ld"
|
|
#define F64u "%lu"
|
|
#define F64x "%lx"
|