Skip to content

Commit 28dfbe6

Browse files
aswatermanpalmer-dabbelt
authored andcommitted
RISC-V: Add VDSO entries for clock_get/gettimeofday/getcpu
For now these are just placeholders that execute the syscall. We will later optimize them to avoid kernel crossings, but we'd like to have the VDSO entries from the first released kernel version to make the ABI simpler. Signed-off-by: Andrew Waterman <andrew@sifive.com> Signed-off-by: Palmer Dabbelt <palmer@sifive.com>
1 parent b7e5a59 commit 28dfbe6

File tree

6 files changed

+113
-1
lines changed

6 files changed

+113
-1
lines changed

arch/riscv/kernel/vdso/Makefile

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
# Copied from arch/tile/kernel/vdso/Makefile
22

33
# Symbols present in the vdso
4-
vdso-syms = rt_sigreturn
4+
vdso-syms = rt_sigreturn
5+
vdso-syms += gettimeofday
6+
vdso-syms += clock_gettime
7+
vdso-syms += clock_getres
8+
vdso-syms += getcpu
59

610
# Files to link into the vdso
711
obj-vdso = $(patsubst %, %.o, $(vdso-syms))

arch/riscv/kernel/vdso/clock_getres.S

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/*
2+
* Copyright (C) 2017 SiFive
3+
*
4+
* This program is free software; you can redistribute it and/or
5+
* modify it under the terms of the GNU General Public License
6+
* as published by the Free Software Foundation, version 2.
7+
*
8+
* This program is distributed in the hope that it will be useful,
9+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
10+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+
* GNU General Public License for more details.
12+
*/
13+
14+
#include <linux/linkage.h>
15+
#include <asm/unistd.h>
16+
17+
.text
18+
/* int __vdso_clock_getres(clockid_t clock_id, struct timespec *res); */
19+
ENTRY(__vdso_clock_getres)
20+
.cfi_startproc
21+
/* For now, just do the syscall. */
22+
li a7, __NR_clock_getres
23+
ecall
24+
ret
25+
.cfi_endproc
26+
ENDPROC(__vdso_clock_getres)
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/*
2+
* Copyright (C) 2017 SiFive
3+
*
4+
* This program is free software; you can redistribute it and/or
5+
* modify it under the terms of the GNU General Public License
6+
* as published by the Free Software Foundation, version 2.
7+
*
8+
* This program is distributed in the hope that it will be useful,
9+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
10+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+
* GNU General Public License for more details.
12+
*/
13+
14+
#include <linux/linkage.h>
15+
#include <asm/unistd.h>
16+
17+
.text
18+
/* int __vdso_clock_gettime(clockid_t clock_id, struct timespec *tp); */
19+
ENTRY(__vdso_clock_gettime)
20+
.cfi_startproc
21+
/* For now, just do the syscall. */
22+
li a7, __NR_clock_gettime
23+
ecall
24+
ret
25+
.cfi_endproc
26+
ENDPROC(__vdso_clock_gettime)

arch/riscv/kernel/vdso/getcpu.S

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/*
2+
* Copyright (C) 2017 SiFive
3+
*
4+
* This program is free software; you can redistribute it and/or
5+
* modify it under the terms of the GNU General Public License
6+
* as published by the Free Software Foundation, version 2.
7+
*
8+
* This program is distributed in the hope that it will be useful,
9+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
10+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+
* GNU General Public License for more details.
12+
*/
13+
14+
#include <linux/linkage.h>
15+
#include <asm/unistd.h>
16+
17+
.text
18+
/* int __vdso_getcpu(unsigned *cpu, unsigned *node, void *unused); */
19+
ENTRY(__vdso_getcpu)
20+
.cfi_startproc
21+
/* For now, just do the syscall. */
22+
li a7, __NR_getcpu
23+
ecall
24+
ret
25+
.cfi_endproc
26+
ENDPROC(__vdso_getcpu)

arch/riscv/kernel/vdso/gettimeofday.S

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/*
2+
* Copyright (C) 2017 SiFive
3+
*
4+
* This program is free software; you can redistribute it and/or
5+
* modify it under the terms of the GNU General Public License
6+
* as published by the Free Software Foundation, version 2.
7+
*
8+
* This program is distributed in the hope that it will be useful,
9+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
10+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+
* GNU General Public License for more details.
12+
*/
13+
14+
#include <linux/linkage.h>
15+
#include <asm/unistd.h>
16+
17+
.text
18+
/* int __vdso_gettimeofday(struct timeval *tv, struct timezone *tz); */
19+
ENTRY(__vdso_gettimeofday)
20+
.cfi_startproc
21+
/* For now, just do the syscall. */
22+
li a7, __NR_gettimeofday
23+
ecall
24+
ret
25+
.cfi_endproc
26+
ENDPROC(__vdso_gettimeofday)

arch/riscv/kernel/vdso/vdso.lds.S

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,10 @@ VERSION
7070
LINUX_4.15 {
7171
global:
7272
__vdso_rt_sigreturn;
73+
__vdso_gettimeofday;
74+
__vdso_clock_gettime;
75+
__vdso_clock_getres;
76+
__vdso_getcpu;
7377
local: *;
7478
};
7579
}

0 commit comments

Comments
 (0)