blob: 993b208d0323f8745e6360895fdf3befc30ac5cc [file] [log] [blame]
Greg Kroah-Hartmanb2441312017-11-01 15:07:57 +01001// SPDX-License-Identifier: GPL-2.0
Jiri Olsa40c03ad2013-12-03 14:09:33 +01002#include <stdio.h>
3#include <stdlib.h>
4#include <string.h>
5#include "event-parse.h"
Tzvetomir Stoyanov (VMware)266b8512018-08-28 18:50:38 -04006#include "trace-seq.h"
Jiri Olsa40c03ad2013-12-03 14:09:33 +01007
8#define __HYPERVISOR_set_trap_table 0
9#define __HYPERVISOR_mmu_update 1
10#define __HYPERVISOR_set_gdt 2
11#define __HYPERVISOR_stack_switch 3
12#define __HYPERVISOR_set_callbacks 4
13#define __HYPERVISOR_fpu_taskswitch 5
14#define __HYPERVISOR_sched_op_compat 6
15#define __HYPERVISOR_dom0_op 7
16#define __HYPERVISOR_set_debugreg 8
17#define __HYPERVISOR_get_debugreg 9
18#define __HYPERVISOR_update_descriptor 10
19#define __HYPERVISOR_memory_op 12
20#define __HYPERVISOR_multicall 13
21#define __HYPERVISOR_update_va_mapping 14
22#define __HYPERVISOR_set_timer_op 15
23#define __HYPERVISOR_event_channel_op_compat 16
24#define __HYPERVISOR_xen_version 17
25#define __HYPERVISOR_console_io 18
26#define __HYPERVISOR_physdev_op_compat 19
27#define __HYPERVISOR_grant_table_op 20
28#define __HYPERVISOR_vm_assist 21
29#define __HYPERVISOR_update_va_mapping_otherdomain 22
30#define __HYPERVISOR_iret 23 /* x86 only */
31#define __HYPERVISOR_vcpu_op 24
32#define __HYPERVISOR_set_segment_base 25 /* x86/64 only */
33#define __HYPERVISOR_mmuext_op 26
34#define __HYPERVISOR_acm_op 27
35#define __HYPERVISOR_nmi_op 28
36#define __HYPERVISOR_sched_op 29
37#define __HYPERVISOR_callback_op 30
38#define __HYPERVISOR_xenoprof_op 31
39#define __HYPERVISOR_event_channel_op 32
40#define __HYPERVISOR_physdev_op 33
41#define __HYPERVISOR_hvm_op 34
42#define __HYPERVISOR_tmem_op 38
43
44/* Architecture-specific hypercall definitions. */
45#define __HYPERVISOR_arch_0 48
46#define __HYPERVISOR_arch_1 49
47#define __HYPERVISOR_arch_2 50
48#define __HYPERVISOR_arch_3 51
49#define __HYPERVISOR_arch_4 52
50#define __HYPERVISOR_arch_5 53
51#define __HYPERVISOR_arch_6 54
52#define __HYPERVISOR_arch_7 55
53
54#define N(x) [__HYPERVISOR_##x] = "("#x")"
55static const char *xen_hypercall_names[] = {
56 N(set_trap_table),
57 N(mmu_update),
58 N(set_gdt),
59 N(stack_switch),
60 N(set_callbacks),
61 N(fpu_taskswitch),
62 N(sched_op_compat),
63 N(dom0_op),
64 N(set_debugreg),
65 N(get_debugreg),
66 N(update_descriptor),
67 N(memory_op),
68 N(multicall),
69 N(update_va_mapping),
70 N(set_timer_op),
71 N(event_channel_op_compat),
72 N(xen_version),
73 N(console_io),
74 N(physdev_op_compat),
75 N(grant_table_op),
76 N(vm_assist),
77 N(update_va_mapping_otherdomain),
78 N(iret),
79 N(vcpu_op),
80 N(set_segment_base),
81 N(mmuext_op),
82 N(acm_op),
83 N(nmi_op),
84 N(sched_op),
85 N(callback_op),
86 N(xenoprof_op),
87 N(event_channel_op),
88 N(physdev_op),
89 N(hvm_op),
90
91/* Architecture-specific hypercall definitions. */
92 N(arch_0),
93 N(arch_1),
94 N(arch_2),
95 N(arch_3),
96 N(arch_4),
97 N(arch_5),
98 N(arch_6),
99 N(arch_7),
100};
101#undef N
102
103#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
104
105static const char *xen_hypercall_name(unsigned op)
106{
107 if (op < ARRAY_SIZE(xen_hypercall_names) &&
108 xen_hypercall_names[op] != NULL)
109 return xen_hypercall_names[op];
110
111 return "";
112}
113
114unsigned long long process_xen_hypercall_name(struct trace_seq *s,
115 unsigned long long *args)
116{
117 unsigned int op = args[0];
118
119 trace_seq_printf(s, "%s", xen_hypercall_name(op));
120 return 0;
121}
122
Tzvetomir Stoyanov047ff222019-04-01 12:43:17 -0400123int TEP_PLUGIN_LOADER(struct tep_handle *tep)
Jiri Olsa40c03ad2013-12-03 14:09:33 +0100124{
Tzvetomir Stoyanov047ff222019-04-01 12:43:17 -0400125 tep_register_print_function(tep,
Tzvetomir Stoyanov (VMware)b843e9c2018-08-08 14:03:02 -0400126 process_xen_hypercall_name,
127 TEP_FUNC_ARG_STRING,
128 "xen_hypercall_name",
129 TEP_FUNC_ARG_INT,
130 TEP_FUNC_ARG_VOID);
Jiri Olsa40c03ad2013-12-03 14:09:33 +0100131 return 0;
132}
Namhyung Kimbf6b3a92014-01-16 11:31:18 +0900133
Tzvetomir Stoyanov047ff222019-04-01 12:43:17 -0400134void TEP_PLUGIN_UNLOADER(struct tep_handle *tep)
Namhyung Kimbf6b3a92014-01-16 11:31:18 +0900135{
Tzvetomir Stoyanov047ff222019-04-01 12:43:17 -0400136 tep_unregister_print_function(tep, process_xen_hypercall_name,
Tzvetomir Stoyanov (VMware)b843e9c2018-08-08 14:03:02 -0400137 "xen_hypercall_name");
Namhyung Kimbf6b3a92014-01-16 11:31:18 +0900138}