Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:15.2:Rings:1-MinimalX
openucx
openucx-s390x-support.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File openucx-s390x-support.patch of Package openucx
commit 7efd75794d17351fbcfdd2759fc9abf22af0d631 Author: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com> Date: Thu Aug 9 07:41:24 2018 +0200 openucx s390x support Signed-off-by: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com> diff --git config/m4/ucm.m4 config/m4/ucm.m4 index 9c7c820d9fff..8297fc7e6ec2 100644 --- config/m4/ucm.m4 +++ config/m4/ucm.m4 @@ -86,9 +86,20 @@ AC_CHECK_DECLS([SYS_ipc], [ipc_hooks_happy=no], [#include <sys/syscall.h>]) + +SAVE_CFLAGS=$CFLAGS +CFLAGS="$CLAGS -Isrc/" +bistro_arch_happy=yes +AC_CHECK_DECLS([ucm_bistro_patch], + [], + [bistro_arch_happy=no], + [#include <ucm/bistro/bistro.h>]) +CFLAGS=$SAVE_CFLAGS + AS_IF([test "x$mmap_hooks_happy" = "xyes"], AS_IF([test "x$ipc_hooks_happy" = "xyes" -o "x$shm_hooks_happy" = "xyes"], - [bistro_hooks_happy=yes])) + AS_IF([test "x$bistro_arch_happy" == "xyes"], + [bistro_hooks_happy=yes]))) AS_IF([test "x$bistro_hooks_happy" = "xyes"], [AC_DEFINE([UCM_BISTRO_HOOKS], [1], [Enable BISTRO hooks])], diff --git src/ucm/Makefile.am src/ucm/Makefile.am index e53a30a46916..21bce848045d 100644 --- src/ucm/Makefile.am +++ src/ucm/Makefile.am @@ -30,7 +30,8 @@ noinst_HEADERS = \ bistro/bistro.h \ bistro/bistro_x86_64.h \ bistro/bistro_aarch64.h \ - bistro/bistro_ppc64.h + bistro/bistro_ppc64.h \ + bistro/bistro_s390x.h libucm_la_SOURCES = \ event/event.c \ diff --git src/ucm/bistro/bistro.h src/ucm/bistro/bistro.h index 16e988700c35..b4c2762fb5b2 100644 --- src/ucm/bistro/bistro.h +++ src/ucm/bistro/bistro.h @@ -20,6 +20,8 @@ typedef struct ucm_bistro_restore_point ucm_bistro_restore_point_t; # include "bistro_aarch64.h" #elif defined(__x86_64__) # include "bistro_x86_64.h" +#elif defined(__s390x__) +# include "bistro_s390x.h" #else # error "Unsupported architecture" #endif diff --git src/ucm/bistro/bistro_s390x.h src/ucm/bistro/bistro_s390x.h new file mode 100644 index 000000000000..334c0474e8b6 --- /dev/null +++ src/ucm/bistro/bistro_s390x.h @@ -0,0 +1,13 @@ +#ifndef UCM_BISTRO_BISTRO_S390X_H_ +#define UCM_BISTRO_BISTRO_S390X_H_ + +#include <stdint.h> + +#include <ucs/type/status.h> +#include <ucs/sys/compiler_def.h> + +#define UCM_BISTRO_PROLOGUE +#define UCM_BISTRO_EPILOGUE + + +#endif diff --git src/ucm/mmap/install.c src/ucm/mmap/install.c index c58afb37e029..a9cfd5865278 100644 --- src/ucm/mmap/install.c +++ src/ucm/mmap/install.c @@ -254,7 +254,11 @@ static ucs_status_t ucs_mmap_install_reloc(int events) status = ucm_reloc_modify(&entry->patch); } else { ucs_assert(ucm_mmap_hook_mode() == UCM_MMAP_HOOK_BISTRO); +#if UCM_BISTRO_HOOKS status = ucm_bistro_patch(entry->patch.symbol, entry->patch.value, NULL); +#else + status = UCS_ERR_UNSUPPORTED; +#endif } if (status != UCS_OK) { ucm_warn("failed to install %s hook for '%s'", diff --git src/ucs/Makefile.am src/ucs/Makefile.am index 7e8153a4fd07..d41842711a5e 100644 --- src/ucs/Makefile.am +++ src/ucs/Makefile.am @@ -56,6 +56,8 @@ noinst_HEADERS = \ arch/generic/cpu.h \ arch/ppc64/bitops.h \ arch/ppc64/cpu.h \ + arch/s390x/bitops.h \ + arch/s390x/cpu.h \ arch/x86_64/atomic.h \ arch/x86_64/bitops.h \ arch/x86_64/cpu.h \ diff --git src/ucs/arch/atomic.h src/ucs/arch/atomic.h index 0caea9b1f3ba..d9afa780bbc5 100644 --- src/ucs/arch/atomic.h +++ src/ucs/arch/atomic.h @@ -15,6 +15,8 @@ # include "generic/atomic.h" #elif defined(__aarch64__) # include "generic/atomic.h" +#elif defined(__s390x__) +# include "generic/atomic.h" #else # error "Unsupported architecture" #endif diff --git src/ucs/arch/bitops.h src/ucs/arch/bitops.h index af7bb93392d4..6639045ae0b6 100644 --- src/ucs/arch/bitops.h +++ src/ucs/arch/bitops.h @@ -14,6 +14,8 @@ # include "ppc64/bitops.h" #elif defined(__aarch64__) # include "aarch64/bitops.h" +#elif defined(__s390x__) +# include "s390x/bitops.h" #else # error "Unsupported architecture" #endif diff --git src/ucs/arch/cpu.h src/ucs/arch/cpu.h index 58a83825ee4a..a30456ba441d 100644 --- src/ucs/arch/cpu.h +++ src/ucs/arch/cpu.h @@ -59,6 +59,8 @@ typedef enum ucs_cpu_flag { # include "ppc64/cpu.h" #elif defined(__aarch64__) # include "aarch64/cpu.h" +#elif defined(__s390x__) +# include "s390x/cpu.h" #else # error "Unsupported architecture" #endif diff --git src/ucs/arch/s390x/bitops.h src/ucs/arch/s390x/bitops.h new file mode 100644 index 000000000000..39ad125107e9 --- /dev/null +++ src/ucs/arch/s390x/bitops.h @@ -0,0 +1,32 @@ +/** +* Copyright (C) Mellanox Technologies Ltd. 2001-2015. ALL RIGHTS RESERVED. +* +* See file LICENSE for terms. +*/ + +#ifndef UCS_S390X_BITOPS_H_ +#define UCS_S390X_BITOPS_H_ + +#include <stdint.h> + + +static inline unsigned __ucs_ilog2_u32(uint32_t n) +{ + if (!n) + return 0; + return 31 - __builtin_clz(n); +} + +static inline unsigned __ucs_ilog2_u64(uint64_t n) +{ + if (!n) + return 0; + return 63 - __builtin_clz(n); +} + +static inline unsigned ucs_ffs64(uint64_t n) +{ + return __ucs_ilog2_u64(n & -n); +} + +#endif diff --git src/ucs/arch/s390x/cpu.h src/ucs/arch/s390x/cpu.h new file mode 100644 index 000000000000..b8ab713d6e21 --- /dev/null +++ src/ucs/arch/s390x/cpu.h @@ -0,0 +1,53 @@ +/** +* Copyright (C) Mellanox Technologies Ltd. 2001-2013. ALL RIGHTS RESERVED. +* Copyright (C) ARM Ltd. 2016-2017. ALL RIGHTS RESERVED. +* +* See file LICENSE for terms. +*/ + + +#ifndef UCS_S390X_CPU_H_ +#define UCS_S390X_CPU_H_ + +#include <ucs/sys/compiler.h> +#include <ucs/arch/generic/cpu.h> +#include <stdint.h> + + +#define UCS_ARCH_CACHE_LINE_SIZE 256 + +/* Assume the worst - weak memory ordering */ +#define ucs_memory_bus_fence() asm volatile (""::: "memory") +#define ucs_memory_bus_store_fence() ucs_memory_bus_fence() +#define ucs_memory_bus_load_fence() ucs_memory_bus_fence() +#define ucs_memory_bus_wc_flush() ucs_memory_bus_fence() +#define ucs_memory_cpu_fence() ucs_memory_bus_fence() +#define ucs_memory_cpu_store_fence() ucs_memory_bus_fence() +#define ucs_memory_cpu_load_fence() ucs_memory_bus_fence() +#define ucs_memory_cpu_wc_fence() ucs_memory_bus_fence() + + +static inline uint64_t ucs_arch_read_hres_clock() +{ + unsigned long clk; + asm volatile("stck %0" : "=Q" (clk) : : "cc"); + return clk >> 2; +} +#define ucs_arch_get_clocks_per_sec ucs_arch_generic_get_clocks_per_sec + + +static inline ucs_cpu_model_t ucs_arch_get_cpu_model() +{ + return UCS_CPU_MODEL_UNKNOWN; +} + +static inline int ucs_arch_get_cpu_flag() +{ + return UCS_CPU_FLAG_UNKNOWN; +} + +double ucs_arch_get_clocks_per_sec(); + +#define ucs_arch_wait_mem ucs_arch_generic_wait_mem + +#endif
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor