1/* SPDX-License-Identifier: GPL-2.0 */
2#ifndef _ASM_X86_VSYSCALL_H
3#define _ASM_X86_VSYSCALL_H
4
5#include <linux/seqlock.h>
6#include <uapi/asm/vsyscall.h>
7#include <asm/page_types.h>
8
9#ifdef CONFIG_X86_VSYSCALL_EMULATION
10extern void map_vsyscall(void);
11extern void set_vsyscall_pgtable_user_bits(pgd_t *root);
12
13/*
14 * Called on instruction fetch fault in vsyscall page.
15 * Returns true if handled.
16 */
17extern bool emulate_vsyscall(unsigned long error_code,
18			     struct pt_regs *regs, unsigned long address);
19#else
20static inline void map_vsyscall(void) {}
21static inline bool emulate_vsyscall(unsigned long error_code,
22				    struct pt_regs *regs, unsigned long address)
23{
24	return false;
25}
26#endif
27
28/*
29 * The (legacy) vsyscall page is the long page in the kernel portion
30 * of the address space that has user-accessible permissions.
31 */
32static inline bool is_vsyscall_vaddr(unsigned long vaddr)
33{
34	return unlikely((vaddr & PAGE_MASK) == VSYSCALL_ADDR);
35}
36
37#endif /* _ASM_X86_VSYSCALL_H */
38