From 0bc5bcce4aacd4dcc52906d9e3d236b40ac667a9 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Tue, 28 Mar 2023 15:45:57 +0200 Subject: [PATCH] test/driver_time: fix page-fault of ARMv8a variant The get_cycles() call within the test doesn't apply to RDTSC access when running on ARM but to arch_timer_read_counter, which is an empty function pointer. By setting it to a function that returns Genode::Trace::timestamp() we can enable the test for ARM. Issue #4775 --- .../src/test/driver_time/spec/arm_64/generated_dummies.c | 5 ----- repos/dde_linux/src/test/driver_time/spec/arm_64/lx_emul.c | 6 ++++++ repos/dde_linux/src/test/driver_time/spec/arm_64/target.mk | 4 +++- .../src/test/driver_time/spec/arm_64/timestamp.cc | 7 +++++++ 4 files changed, 16 insertions(+), 6 deletions(-) create mode 100644 repos/dde_linux/src/test/driver_time/spec/arm_64/lx_emul.c create mode 100644 repos/dde_linux/src/test/driver_time/spec/arm_64/timestamp.cc diff --git a/repos/dde_linux/src/test/driver_time/spec/arm_64/generated_dummies.c b/repos/dde_linux/src/test/driver_time/spec/arm_64/generated_dummies.c index 58b5e0b2e9..1b7bd999e0 100644 --- a/repos/dde_linux/src/test/driver_time/spec/arm_64/generated_dummies.c +++ b/repos/dde_linux/src/test/driver_time/spec/arm_64/generated_dummies.c @@ -73,11 +73,6 @@ int _printk_deferred(const char * fmt,...) } -#include - -u64 (*arch_timer_read_counter)(void); - - #include noinstr void ct_irq_enter(void) diff --git a/repos/dde_linux/src/test/driver_time/spec/arm_64/lx_emul.c b/repos/dde_linux/src/test/driver_time/spec/arm_64/lx_emul.c new file mode 100644 index 0000000000..3ce2aa0912 --- /dev/null +++ b/repos/dde_linux/src/test/driver_time/spec/arm_64/lx_emul.c @@ -0,0 +1,6 @@ +#include + +extern unsigned long long lx_emul_timestamp(void); + +u64 (*arch_timer_read_counter)(void) = lx_emul_timestamp; + diff --git a/repos/dde_linux/src/test/driver_time/spec/arm_64/target.mk b/repos/dde_linux/src/test/driver_time/spec/arm_64/target.mk index ef575f8cbd..209599a14c 100644 --- a/repos/dde_linux/src/test/driver_time/spec/arm_64/target.mk +++ b/repos/dde_linux/src/test/driver_time/spec/arm_64/target.mk @@ -1,5 +1,7 @@ REQUIRES := arm_64 -SRC_C += lx_emul/shadow/arch/arm64/kernel/smp.c +SRC_CC += timestamp.cc +SRC_C += lx_emul.c +SRC_C += lx_emul/shadow/arch/arm64/kernel/smp.c include $(PRG_DIR)/../../target.inc diff --git a/repos/dde_linux/src/test/driver_time/spec/arm_64/timestamp.cc b/repos/dde_linux/src/test/driver_time/spec/arm_64/timestamp.cc new file mode 100644 index 0000000000..a870169c45 --- /dev/null +++ b/repos/dde_linux/src/test/driver_time/spec/arm_64/timestamp.cc @@ -0,0 +1,7 @@ +#include + +extern "C" unsigned long long lx_emul_timestamp(); +extern "C" unsigned long long lx_emul_timestamp() +{ + return Genode::Trace::timestamp(); +}