1 /* SPDX-License-Identifier: GPL-2.0-or-later */
3 * Author: Huacai Chen <chenhuacai@loongson.cn>
4 * Copyright (C) 2020-2022 Loongson Technology Corporation Limited
13 struct vdso_pcpu_data {
15 } ____cacheline_aligned_in_smp;
17 struct loongarch_vdso_data {
18 struct vdso_pcpu_data pdata[NR_CPUS];
25 * +---------------------+--------------------------+
26 * | loongarch vdso data | LOONGARCH_VDSO_DATA_SIZE |
27 * +---------------------+--------------------------+
28 * | time-ns vdso data | PAGE_SIZE |
29 * +---------------------+--------------------------+
30 * | generic vdso data | PAGE_SIZE |
31 * +---------------------+--------------------------+
34 #define LOONGARCH_VDSO_DATA_SIZE PAGE_ALIGN(sizeof(struct loongarch_vdso_data))
35 #define LOONGARCH_VDSO_DATA_PAGES (LOONGARCH_VDSO_DATA_SIZE >> PAGE_SHIFT)
38 VVAR_GENERIC_PAGE_OFFSET,
39 VVAR_TIMENS_PAGE_OFFSET,
40 VVAR_LOONGARCH_PAGES_START,
41 VVAR_LOONGARCH_PAGES_END = VVAR_LOONGARCH_PAGES_START + LOONGARCH_VDSO_DATA_PAGES - 1,
45 #define VVAR_SIZE (VVAR_NR_PAGES << PAGE_SHIFT)
47 static inline unsigned long get_vdso_base(void)
52 " la.pcrel %0, _start\n"
60 static inline unsigned long get_vdso_data(void)
62 return get_vdso_base() - VVAR_SIZE;
65 #endif /* __ASSEMBLY__ */