1/* SPDX-License-Identifier: GPL-2.0 */
2#ifndef __S390_VDSO_H__
3#define __S390_VDSO_H__
4
5#include <vdso/datapage.h>
6
7/* Default link addresses for the vDSOs */
8#define VDSO32_LBASE	0
9#define VDSO64_LBASE	0
10
11#define VDSO_VERSION_STRING	LINUX_2.6.29
12
13#ifndef __ASSEMBLY__
14
15/*
16 * Note about the vdso_data and vdso_per_cpu_data structures:
17 *
18 * NEVER USE THEM IN USERSPACE CODE DIRECTLY. The layout of the
19 * structure is supposed to be known only to the function in the vdso
20 * itself and may change without notice.
21 */
22
23struct vdso_per_cpu_data {
24	/*
25	 * Note: node_id and cpu_nr must be at adjacent memory locations.
26	 * VDSO userspace must read both values with a single instruction.
27	 */
28	union {
29		__u64 getcpu_val;
30		struct {
31			__u32 node_id;
32			__u32 cpu_nr;
33		};
34	};
35};
36
37extern struct vdso_data *vdso_data;
38
39int vdso_alloc_per_cpu(struct lowcore *lowcore);
40void vdso_free_per_cpu(struct lowcore *lowcore);
41
42#endif /* __ASSEMBLY__ */
43#endif /* __S390_VDSO_H__ */
44