From ad7cbe76204ee00da476b103e6969e46768c1e63 Mon Sep 17 00:00:00 2001 From: Wenlong Zhang Date: Sat, 4 Mar 2023 15:00:27 +0800 Subject: [PATCH] add loongarch64 support for libvma Signed-off-by: Wenlong Zhang --- add-loongarch64-support-for-libvma.patch | 142 +++++++++++++++++++++++ libvma.spec | 6 +- 2 files changed, 147 insertions(+), 1 deletion(-) create mode 100644 add-loongarch64-support-for-libvma.patch diff --git a/add-loongarch64-support-for-libvma.patch b/add-loongarch64-support-for-libvma.patch new file mode 100644 index 0000000..144741d --- /dev/null +++ b/add-loongarch64-support-for-libvma.patch @@ -0,0 +1,142 @@ +From ee85f408afadcdbcaf4b5bafb649a7e9da7540f7 Mon Sep 17 00:00:00 2001 +From: Wenlong Zhang +Date: Wed, 22 Feb 2023 17:00:50 +0800 +Subject: [PATCH] add loongarch64 support for libvma + +--- + src/utils/Makefile.am | 1 + + src/utils/asm-loongarch64.h | 96 +++++++++++++++++++++++++++++++++++++ + src/utils/asm.h | 2 + + 3 files changed, 99 insertions(+) + create mode 100644 src/utils/asm-loongarch64.h + +diff --git a/src/utils/Makefile.am b/src/utils/Makefile.am +index 5808729..ae4a33a 100644 +--- a/src/utils/Makefile.am ++++ b/src/utils/Makefile.am +@@ -5,6 +5,7 @@ libutils_la_LDFLAGS = -static + libutils_la_LIBADD = -lrt + libutils_la_SOURCES = \ + asm-arm64.h \ ++ asm-loongarch64.h \ + asm-ppc64.h \ + asm-x86.h \ + asm.h \ +diff --git a/src/utils/asm-loongarch64.h b/src/utils/asm-loongarch64.h +new file mode 100644 +index 0000000..55ee563 +--- /dev/null ++++ b/src/utils/asm-loongarch64.h +@@ -0,0 +1,96 @@ ++/* ++ * Copyright (C) 2020-2022 Loongson Technology Corporation Limited ++ * ++ * This software is available to you under a choice of one of two ++ * licenses. You may choose to be licensed under the terms of the GNU ++ * General Public License (GPL) Version 2, available from the file ++ * COPYING in the main directory of this source tree, or the ++ * BSD license below: ++ * ++ * Redistribution and use in source and binary forms, with or ++ * without modification, are permitted provided that the following ++ * conditions are met: ++ * ++ * - Redistributions of source code must retain the above ++ * copyright notice, this list of conditions and the following ++ * disclaimer. ++ * ++ * - Redistributions in binary form must reproduce the above ++ * copyright notice, this list of conditions and the following ++ * disclaimer in the documentation and/or other materials ++ * provided with the distribution. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS ++ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ++ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN ++ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE ++ * SOFTWARE. ++ */ ++ ++ ++#ifndef ASMLOONGARCH64_H_ ++#define ASMLOONGARCH64_H_ ++ ++#include ++#include ++ ++#define COPY_64B_NT(dst, src) \ ++ *dst++ = *src++; \ ++ *dst++ = *src++; \ ++ *dst++ = *src++; \ ++ *dst++ = *src++; \ ++ *dst++ = *src++; \ ++ *dst++ = *src++; \ ++ *dst++ = *src++; \ ++ *dst++ = *src++ ++ ++#define mb() asm volatile("dbar 0" ::: "memory") ++#define rmb() mb() ++#define wmb() mb() ++#define wc_wmb() wmb() ++ ++/** ++ * Add to the atomic variable. ++ * @param i integer value to add. ++ * @param v pointer of type atomic_t. ++ * @return Value before add. ++ */ ++static inline int atomic_fetch_and_add(int i, volatile int *ptr) ++{ ++ return __atomic_fetch_add(ptr, i, __ATOMIC_ACQUIRE); ++} ++ ++/** ++ * Read RDTSC register ++ */ ++static inline void gettimeoftsc(unsigned long long *p_tscval) ++{ ++ // Read Time Stamp Counter ++ int rID=0; ++ asm volatile("ibar 0" : : : "memory"); ++ asm volatile("rdtime.d %0, %1" : "=r" ((unsigned long long)*p_tscval),"=r" (rID)); ++} ++ ++/** ++ * Cache Line Prefetch - Arch specific! ++ */ ++#ifndef L1_CACHE_BYTES ++#define L1_CACHE_BYTES 64 ++#endif ++ ++static inline void prefetch(void *x) ++{ ++ __builtin_prefetch(x, 0, 1); ++} ++ ++static inline void prefetch_range(void *addr, size_t len) ++{ ++ char *cp = (char*)addr; ++ char *end = (char*)addr + len; ++ for (; cp < end; cp += L1_CACHE_BYTES) ++ prefetch(cp); ++} ++#endif +diff --git a/src/utils/asm.h b/src/utils/asm.h +index 78530cc..3afce8d 100644 +--- a/src/utils/asm.h ++++ b/src/utils/asm.h +@@ -36,6 +36,8 @@ + + #if defined(__aarch64__) + #include "asm-arm64.h" ++#elif defined(__loongarch64) ++#include "asm-loongarch64.h" + #elif defined(__powerpc64__) + #include "asm-ppc64.h" + #elif defined(__x86_64__) +-- +2.33.0 + diff --git a/libvma.spec b/libvma.spec index b37282d..4c32846 100644 --- a/libvma.spec +++ b/libvma.spec @@ -1,6 +1,6 @@ Name: libvma Version: 8.9.4 -Release: 12 +Release: 13 Summary: A library that boosts performance for message-based and streaming applications License: GPLv2 or BSD URL: https://github.com/Mellanox/libvma @@ -8,6 +8,7 @@ Source: https://github.com/Mellanox/libvma/archive/%{version}.tar.gz Patch0000: Resolve-gcc-9.x-issues.patch Patch0001: 0001-Remove-ExecReload-that-is-not-supported.patch Patch0002: fix-build-error-with-glibc-2.34.patch +Patch0003: add-loongarch64-support-for-libvma.patch ExcludeArch: %{arm} Requires: pam @@ -71,6 +72,9 @@ Headers files for libvma. %{_pkgdocdir}/VMA_VERSION %changelog +* Sat Mar 4 2023 Wenlong Zhang - 8.9.4-13 +- add loongarch64 support for libvma + * Tue Aug 10 2021 wangyue - 8.9.4-12 - fix build error with glibc-2.34 -- Gitee