Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/michalbiesek/fio
Browse files Browse the repository at this point in the history
* 'master' of https://github.com/michalbiesek/fio:
  Add RISC-V 64 support
  • Loading branch information
axboe committed Aug 23, 2023
2 parents b311162 + 2154065 commit 4a0c766
Show file tree
Hide file tree
Showing 5 changed files with 66 additions and 1 deletion.
32 changes: 32 additions & 0 deletions arch/arch-riscv64.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#ifndef ARCH_RISCV64_H
#define ARCH_RISCV64_H

#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>

#define FIO_ARCH (arch_riscv64)

#define nop __asm__ __volatile__ ("nop")
#define read_barrier() __asm__ __volatile__("fence r, r": : :"memory")
#define write_barrier() __asm__ __volatile__("fence w, w": : :"memory")

static inline unsigned long long get_cpu_clock(void)
{
unsigned long val;

asm volatile("rdcycle %0" : "=r"(val));
return val;
}
#define ARCH_HAVE_CPU_CLOCK

#define ARCH_HAVE_INIT
extern bool tsc_reliable;
static inline int arch_init(char *envp[])
{
tsc_reliable = true;
return 0;
}

#endif
3 changes: 3 additions & 0 deletions arch/arch.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ enum {
arch_mips,
arch_aarch64,
arch_loongarch64,
arch_riscv64,

arch_generic,

Expand Down Expand Up @@ -100,6 +101,8 @@ extern unsigned long arch_flags;
#include "arch-aarch64.h"
#elif defined(__loongarch64)
#include "arch-loongarch64.h"
#elif defined(__riscv) && __riscv_xlen == 64
#include "arch-riscv64.h"
#else
#warning "Unknown architecture, attempting to use generic model."
#include "arch-generic.h"
Expand Down
24 changes: 23 additions & 1 deletion configure
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,20 @@ EOF
compile_object
}

check_val() {
cat > $TMPC <<EOF
#if $1 == $2
int main(void)
{
return 0;
}
#else
#error $1 is not equal $2
#endif
EOF
compile_object
}

output_sym() {
echo "$1=y" >> $config_host_mak
echo "#define $1" >> $config_host_h
Expand Down Expand Up @@ -501,13 +515,21 @@ elif check_define __hppa__ ; then
cpu="hppa"
elif check_define __loongarch64 ; then
cpu="loongarch64"
elif check_define __riscv ; then
if check_val __riscv_xlen 32 ; then
cpu="riscv32"
elif check_val __riscv_xlen 64 ; then
cpu="riscv64"
elif check_val __riscv_xlen 128 ; then
cpu="riscv128"
fi
else
cpu=`uname -m`
fi

# Normalise host CPU name and set ARCH.
case "$cpu" in
ia64|ppc|ppc64|s390|s390x|sparc64|loongarch64)
ia64|ppc|ppc64|s390|s390x|sparc64|loongarch64|riscv64)
cpu="$cpu"
;;
i386|i486|i586|i686|i86pc|BePC)
Expand Down
1 change: 1 addition & 0 deletions libfio.c
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ static const char *fio_arch_strings[arch_nr] = {
"mips",
"aarch64",
"loongarch64",
"riscv64",
"generic"
};

Expand Down
7 changes: 7 additions & 0 deletions os/os-linux-syscall.h
Original file line number Diff line number Diff line change
Expand Up @@ -286,6 +286,13 @@
#define __NR_sys_tee 77
#define __NR_sys_vmsplice 75
#endif

/* Linux syscalls for riscv64 */
#elif defined(ARCH_RISCV64_H)
#ifndef __NR_ioprio_set
#define __NR_ioprio_set 30
#define __NR_ioprio_get 31
#endif
#else
#warning "Unknown architecture"
#endif
Expand Down

0 comments on commit 4a0c766

Please sign in to comment.