xref: /openbmc/linux/arch/s390/include/asm/vdso.h (revision 4bff8cb5)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2b020632eSMartin Schwidefsky #ifndef __S390_VDSO_H__
3b020632eSMartin Schwidefsky #define __S390_VDSO_H__
4b020632eSMartin Schwidefsky 
54bff8cb5SSven Schnelle #include <vdso/datapage.h>
64bff8cb5SSven Schnelle 
7b020632eSMartin Schwidefsky /* Default link addresses for the vDSOs */
8b020632eSMartin Schwidefsky #define VDSO32_LBASE	0
9b020632eSMartin Schwidefsky #define VDSO64_LBASE	0
10b020632eSMartin Schwidefsky 
1113c6680aSMartin Schwidefsky #define VDSO_VERSION_STRING	LINUX_2.6.29
12b020632eSMartin Schwidefsky 
13b020632eSMartin Schwidefsky #ifndef __ASSEMBLY__
14b020632eSMartin Schwidefsky 
15b020632eSMartin Schwidefsky /*
16c742b31cSMartin Schwidefsky  * Note about the vdso_data and vdso_per_cpu_data structures:
17b020632eSMartin Schwidefsky  *
18c742b31cSMartin Schwidefsky  * NEVER USE THEM IN USERSPACE CODE DIRECTLY. The layout of the
19b020632eSMartin Schwidefsky  * structure is supposed to be known only to the function in the vdso
20b020632eSMartin Schwidefsky  * itself and may change without notice.
21b020632eSMartin Schwidefsky  */
22b020632eSMartin Schwidefsky 
23c742b31cSMartin Schwidefsky struct vdso_per_cpu_data {
245a5525b0SHeiko Carstens 	/*
255a5525b0SHeiko Carstens 	 * Note: node_id and cpu_nr must be at adjacent memory locations.
265a5525b0SHeiko Carstens 	 * VDSO userspace must read both values with a single instruction.
275a5525b0SHeiko Carstens 	 */
285a5525b0SHeiko Carstens 	union {
295a5525b0SHeiko Carstens 		__u64 getcpu_val;
305a5525b0SHeiko Carstens 		struct {
31249c543bSMartin Schwidefsky 			__u32 node_id;
325a5525b0SHeiko Carstens 			__u32 cpu_nr;
335a5525b0SHeiko Carstens 		};
345a5525b0SHeiko Carstens 	};
35b020632eSMartin Schwidefsky };
36b020632eSMartin Schwidefsky 
37b020632eSMartin Schwidefsky extern struct vdso_data *vdso_data;
383c6153e8SHeiko Carstens extern struct vdso_data boot_vdso_data;
39b020632eSMartin Schwidefsky 
40608796ffSMartin Schwidefsky void vdso_alloc_boot_cpu(struct lowcore *lowcore);
41c667aeacSHeiko Carstens int vdso_alloc_per_cpu(struct lowcore *lowcore);
42c667aeacSHeiko Carstens void vdso_free_per_cpu(struct lowcore *lowcore);
43c742b31cSMartin Schwidefsky 
44b020632eSMartin Schwidefsky #endif /* __ASSEMBLY__ */
45b020632eSMartin Schwidefsky #endif /* __S390_VDSO_H__ */
46