fix: KVM: x86: Unexport kvm_x86_ops (v5.18)
[lttng-modules.git] / include / wrapper / kvm-x86.h
1 /* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only)
2 *
3 * wrapper/kvm-x86.h
4 *
5 * Copyright (C) 2022 Michael Jeanson <mjeanson@efficios.com>
6 */
7
8 #ifndef _LTTNG_WRAPPER_KVM_X86_H
9 #define _LTTNG_WRAPPER_KVM_X86_H
10
11 #include <linux/kvm_host.h>
12 #include <lttng/kernel-version.h>
13
14 #if LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,18,0)
15
16 #ifdef CONFIG_KALLSYMS_ALL
17 #include <linux/kallsyms.h>
18 #include <wrapper/kallsyms.h>
19
20 static struct kvm_x86_ops *kvm_x86_ops_sym;
21
22 static inline
23 void lttng_kvm_x86_get_exit_info(
24 struct kvm_vcpu *vcpu, u32 *reason,
25 u64 *info1, u64 *info2,
26 u32 *exit_int_info, u32 *exit_int_info_err_code)
27 {
28 if (!kvm_x86_ops_sym)
29 kvm_x86_ops_sym =
30 (void *) kallsyms_lookup_dataptr("kvm_x86_ops");
31
32 if (kvm_x86_ops_sym) {
33 kvm_x86_ops_sym->get_exit_info(vcpu, reason, info1, info2,
34 exit_int_info, exit_int_info_err_code);
35 } else {
36 printk_once(KERN_WARNING "LTTng: kvm_x86_ops symbol lookup failed.\n");
37 }
38 }
39
40 static inline
41 u64 lttng_kvm_x86_get_segment_base(struct kvm_vcpu *vcpu, int seg)
42 {
43 if (!kvm_x86_ops_sym)
44 kvm_x86_ops_sym =
45 (void *) kallsyms_lookup_dataptr("kvm_x86_ops");
46
47 if (kvm_x86_ops_sym) {
48 return kvm_x86_ops_sym->get_segment_base(vcpu, seg);
49 } else {
50 printk_once(KERN_WARNING "LTTng: kvm_x86_ops symbol lookup failed.\n");
51 return 0;
52 }
53 }
54
55 /*
56 * Canary function to check for 'kvm_x86_ops' at compile time.
57 *
58 * From 'arch/x86/include/asm/kvm_host.h':
59 *
60 * extern struct kvm_x86_ops kvm_x86_ops;;
61 */
62 static inline
63 unsigned int __canary__kvm_x86_ops(void)
64 {
65 return kvm_x86_ops.vm_size;
66 }
67
68 #endif /* CONFIG_KALLSYMS_ALL */
69
70 #endif
71
72 #endif /* _LTTNG_WRAPPER_KVM_X86_H */
This page took 0.030699 seconds and 4 git commands to generate.