summaryrefslogtreecommitdiff
path: root/arch/csky/include/asm
diff options
context:
space:
mode:
authorGuo Ren <guoren@linux.alibaba.com>2021-01-04 03:37:07 +0000
committerGuo Ren <guoren@linux.alibaba.com>2021-01-12 09:52:41 +0800
commit87f3248cdb9aeac35129cb4337ce541a945cb35c (patch)
treee5bf46123eb160c318adaad9bdb9e490e714a109 /arch/csky/include/asm
parente26db7ad9c319496bcbe6043d9d4e1d1da3ec613 (diff)
csky: Reconstruct VDSO framework
Reconstruct vdso framework to support future vsyscall, vgettimeofday features. These are very important features to reduce system calls into the kernel for performance improvement. The patch is reference RISC-V's Signed-off-by: Guo Ren <guoren@linux.alibaba.com> Cc: Palmer Dabbelt <palmerdabbelt@google.com>
Diffstat (limited to 'arch/csky/include/asm')
-rw-r--r--arch/csky/include/asm/vdso.h19
1 files changed, 16 insertions, 3 deletions
diff --git a/arch/csky/include/asm/vdso.h b/arch/csky/include/asm/vdso.h
index d963d691f3a1..12c5d638e784 100644
--- a/arch/csky/include/asm/vdso.h
+++ b/arch/csky/include/asm/vdso.h
@@ -3,10 +3,23 @@
#ifndef __ASM_CSKY_VDSO_H
#define __ASM_CSKY_VDSO_H
-#include <abi/vdso.h>
+#include <linux/types.h>
-struct csky_vdso {
- unsigned short rt_signal_retcode[4];
+struct vdso_data {
};
+/*
+ * The VDSO symbols are mapped into Linux so we can just use regular symbol
+ * addressing to get their offsets in userspace. The symbols are mapped at an
+ * offset of 0, but since the linker must support setting weak undefined
+ * symbols to the absolute address 0 it also happens to support other low
+ * addresses even when the code model suggests those low addresses would not
+ * otherwise be availiable.
+ */
+#define VDSO_SYMBOL(base, name) \
+({ \
+ extern const char __vdso_##name[]; \
+ (void __user *)((unsigned long)(base) + __vdso_##name); \
+})
+
#endif /* __ASM_CSKY_VDSO_H */