From 9496e3985244e054b6e9a50903a2fdc89a76d6ab Mon Sep 17 00:00:00 2001 From: Jingyun Hua Date: Fri, 19 May 2023 17:14:32 +0800 Subject: [PATCH] Add LoongArch64 support Signed-off-by: Jingyun Hua --- arch/arch-loongarch64.h | 10 ++++++++++ arch/arch.h | 3 +++ configure | 4 +++- libfio.c | 1 + os/os-linux-syscall.h | 16 ++++++++++++++++ 5 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 arch/arch-loongarch64.h diff --git a/arch/arch-loongarch64.h b/arch/arch-loongarch64.h new file mode 100644 index 00000000..43ea83b4 --- /dev/null +++ b/arch/arch-loongarch64.h @@ -0,0 +1,10 @@ +#ifndef ARCH_LOONGARCH64_H +#define ARCH_LOONGARCH64_H + +#define FIO_ARCH (arch_loongarch64) + +#define read_barrier() __asm__ __volatile__("dbar 0": : :"memory") +#define write_barrier() __asm__ __volatile__("dbar 0": : :"memory") +#define nop __asm__ __volatile__("dbar 0": : :"memory") + +#endif diff --git a/arch/arch.h b/arch/arch.h index fca003be..6e476701 100644 --- a/arch/arch.h +++ b/arch/arch.h @@ -23,6 +23,7 @@ enum { arch_hppa, arch_mips, arch_aarch64, + arch_loongarch64, arch_generic, @@ -97,6 +98,8 @@ extern unsigned long arch_flags; #include "arch-hppa.h" #elif defined(__aarch64__) #include "arch-aarch64.h" +#elif defined(__loongarch64) +#include "arch-loongarch64.h" #else #warning "Unknown architecture, attempting to use generic model." #include "arch-generic.h" diff --git a/configure b/configure index ca03350b..74416fd4 100755 --- a/configure +++ b/configure @@ -499,13 +499,15 @@ elif check_define __aarch64__ ; then cpu="aarch64" elif check_define __hppa__ ; then cpu="hppa" +elif check_define __loongarch64 ; then + cpu="loongarch64" else cpu=`uname -m` fi # Normalise host CPU name and set ARCH. case "$cpu" in - ia64|ppc|ppc64|s390|s390x|sparc64) + ia64|ppc|ppc64|s390|s390x|sparc64|loongarch64) cpu="$cpu" ;; i386|i486|i586|i686|i86pc|BePC) diff --git a/libfio.c b/libfio.c index ddd49cd7..5e3fd30b 100644 --- a/libfio.c +++ b/libfio.c @@ -74,6 +74,7 @@ static const char *fio_arch_strings[arch_nr] = { "hppa", "mips", "aarch64", + "loongarch64", "generic" }; diff --git a/os/os-linux-syscall.h b/os/os-linux-syscall.h index c399b2fa..67ee4d91 100644 --- a/os/os-linux-syscall.h +++ b/os/os-linux-syscall.h @@ -270,6 +270,22 @@ #define __NR_ioprio_get 31 #endif +/* Linux syscalls for loongarch64 */ +#elif defined(ARCH_LOONGARCH64_H) +#ifndef __NR_ioprio_set +#define __NR_ioprio_set 30 +#define __NR_ioprio_get 31 +#endif + +#ifndef __NR_fadvise64 +#define __NR_fadvise64 223 +#endif + +#ifndef __NR_sys_splice +#define __NR_sys_splice 76 +#define __NR_sys_tee 77 +#define __NR_sys_vmsplice 75 +#endif #else #warning "Unknown architecture" #endif -- 2.25.1