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