ad5d1122b8
Even if RISC-V has supported the vDSO feature, the latency of the functions for obtaining the system time is still expensive. It is because these functions still trigger a corresponding system call in the process, which slows down the response time. If we want to remove the system call to reduce the latency, the kernel should have the ability to output the system clock information to userspace. This patch introduces the vDSO common flow to enable the kernel to achieve the above feature and uses "rdtime" instruction to obtain the current time in the user space. Under this condition, the latency cost by the ecall from U-mode to S-mode can be eliminated. After applying this patch, the latency of gettimeofday() measured on the HiFive unleashed board can be reduced by %61. Signed-off-by: Vincent Chen <vincent.chen@sifive.com> Reviewed-by: Atish Patra <atish.patra@wdc.com> Signed-off-by: Palmer Dabbelt <palmerdabbelt@google.com>
26 lines
575 B
C
26 lines
575 B
C
// SPDX-License-Identifier: GPL-2.0
|
|
/*
|
|
* Copied from arch/arm64/kernel/vdso/vgettimeofday.c
|
|
*
|
|
* Copyright (C) 2018 ARM Ltd.
|
|
* Copyright (C) 2020 SiFive
|
|
*/
|
|
|
|
#include <linux/time.h>
|
|
#include <linux/types.h>
|
|
|
|
int __vdso_clock_gettime(clockid_t clock, struct __kernel_timespec *ts)
|
|
{
|
|
return __cvdso_clock_gettime(clock, ts);
|
|
}
|
|
|
|
int __vdso_gettimeofday(struct __kernel_old_timeval *tv, struct timezone *tz)
|
|
{
|
|
return __cvdso_gettimeofday(tv, tz);
|
|
}
|
|
|
|
int __vdso_clock_getres(clockid_t clock_id, struct __kernel_timespec *res)
|
|
{
|
|
return __cvdso_clock_getres(clock_id, res);
|
|
}
|