1 #include <asm/trace/irq_vectors.h>
2 #include <linux/trace.h>
4 #if defined(CONFIG_OSNOISE_TRACER) && defined(CONFIG_X86_LOCAL_APIC)
5 extern void osnoise_trace_irq_entry(int id);
6 extern void osnoise_trace_irq_exit(int id, const char *desc);
9 * trace_intel_irq_entry - record intel specific IRQ entry
11 static void trace_intel_irq_entry(void *data, int vector)
13 osnoise_trace_irq_entry(vector);
17 * trace_intel_irq_exit - record intel specific IRQ exit
19 static void trace_intel_irq_exit(void *data, int vector)
21 char *vector_desc = (char *) data;
23 osnoise_trace_irq_exit(vector, vector_desc);
27 * register_intel_irq_tp - Register intel specific IRQ entry tracepoints
29 int osnoise_arch_register(void)
33 ret = register_trace_local_timer_entry(trace_intel_irq_entry, NULL);
37 ret = register_trace_local_timer_exit(trace_intel_irq_exit, "local_timer");
41 #ifdef CONFIG_X86_THERMAL_VECTOR
42 ret = register_trace_thermal_apic_entry(trace_intel_irq_entry, NULL);
46 ret = register_trace_thermal_apic_exit(trace_intel_irq_exit, "thermal_apic");
48 goto out_thermal_entry;
49 #endif /* CONFIG_X86_THERMAL_VECTOR */
51 #ifdef CONFIG_X86_MCE_AMD
52 ret = register_trace_deferred_error_apic_entry(trace_intel_irq_entry, NULL);
54 goto out_thermal_exit;
56 ret = register_trace_deferred_error_apic_exit(trace_intel_irq_exit, "deferred_error");
58 goto out_deferred_entry;
61 #ifdef CONFIG_X86_MCE_THRESHOLD
62 ret = register_trace_threshold_apic_entry(trace_intel_irq_entry, NULL);
64 goto out_deferred_exit;
66 ret = register_trace_threshold_apic_exit(trace_intel_irq_exit, "threshold_apic");
68 goto out_threshold_entry;
69 #endif /* CONFIG_X86_MCE_THRESHOLD */
72 ret = register_trace_call_function_single_entry(trace_intel_irq_entry, NULL);
74 goto out_threshold_exit;
76 ret = register_trace_call_function_single_exit(trace_intel_irq_exit,
77 "call_function_single");
79 goto out_call_function_single_entry;
81 ret = register_trace_call_function_entry(trace_intel_irq_entry, NULL);
83 goto out_call_function_single_exit;
85 ret = register_trace_call_function_exit(trace_intel_irq_exit, "call_function");
87 goto out_call_function_entry;
89 ret = register_trace_reschedule_entry(trace_intel_irq_entry, NULL);
91 goto out_call_function_exit;
93 ret = register_trace_reschedule_exit(trace_intel_irq_exit, "reschedule");
95 goto out_reschedule_entry;
96 #endif /* CONFIG_SMP */
98 #ifdef CONFIG_IRQ_WORK
99 ret = register_trace_irq_work_entry(trace_intel_irq_entry, NULL);
101 goto out_reschedule_exit;
103 ret = register_trace_irq_work_exit(trace_intel_irq_exit, "irq_work");
105 goto out_irq_work_entry;
108 ret = register_trace_x86_platform_ipi_entry(trace_intel_irq_entry, NULL);
110 goto out_irq_work_exit;
112 ret = register_trace_x86_platform_ipi_exit(trace_intel_irq_exit, "x86_platform_ipi");
114 goto out_x86_ipi_entry;
116 ret = register_trace_error_apic_entry(trace_intel_irq_entry, NULL);
118 goto out_x86_ipi_exit;
120 ret = register_trace_error_apic_exit(trace_intel_irq_exit, "error_apic");
122 goto out_error_apic_entry;
124 ret = register_trace_spurious_apic_entry(trace_intel_irq_entry, NULL);
126 goto out_error_apic_exit;
128 ret = register_trace_spurious_apic_exit(trace_intel_irq_exit, "spurious_apic");
130 goto out_spurious_apic_entry;
134 out_spurious_apic_entry:
135 unregister_trace_spurious_apic_entry(trace_intel_irq_entry, NULL);
137 unregister_trace_error_apic_exit(trace_intel_irq_exit, "error_apic");
138 out_error_apic_entry:
139 unregister_trace_error_apic_entry(trace_intel_irq_entry, NULL);
141 unregister_trace_x86_platform_ipi_exit(trace_intel_irq_exit, "x86_platform_ipi");
143 unregister_trace_x86_platform_ipi_entry(trace_intel_irq_entry, NULL);
146 #ifdef CONFIG_IRQ_WORK
147 unregister_trace_irq_work_exit(trace_intel_irq_exit, "irq_work");
149 unregister_trace_irq_work_entry(trace_intel_irq_entry, NULL);
154 unregister_trace_reschedule_exit(trace_intel_irq_exit, "reschedule");
155 out_reschedule_entry:
156 unregister_trace_reschedule_entry(trace_intel_irq_entry, NULL);
157 out_call_function_exit:
158 unregister_trace_call_function_exit(trace_intel_irq_exit, "call_function");
159 out_call_function_entry:
160 unregister_trace_call_function_entry(trace_intel_irq_entry, NULL);
161 out_call_function_single_exit:
162 unregister_trace_call_function_single_exit(trace_intel_irq_exit, "call_function_single");
163 out_call_function_single_entry:
164 unregister_trace_call_function_single_entry(trace_intel_irq_entry, NULL);
168 #ifdef CONFIG_X86_MCE_THRESHOLD
169 unregister_trace_threshold_apic_exit(trace_intel_irq_exit, "threshold_apic");
171 unregister_trace_threshold_apic_entry(trace_intel_irq_entry, NULL);
175 #ifdef CONFIG_X86_MCE_AMD
176 unregister_trace_deferred_error_apic_exit(trace_intel_irq_exit, "deferred_error");
178 unregister_trace_deferred_error_apic_entry(trace_intel_irq_entry, NULL);
180 #endif /* CONFIG_X86_MCE_AMD */
182 #ifdef CONFIG_X86_THERMAL_VECTOR
183 unregister_trace_thermal_apic_exit(trace_intel_irq_exit, "thermal_apic");
185 unregister_trace_thermal_apic_entry(trace_intel_irq_entry, NULL);
187 #endif /* CONFIG_X86_THERMAL_VECTOR */
189 unregister_trace_local_timer_exit(trace_intel_irq_exit, "local_timer");
191 unregister_trace_local_timer_entry(trace_intel_irq_entry, NULL);
196 void osnoise_arch_unregister(void)
198 unregister_trace_spurious_apic_exit(trace_intel_irq_exit, "spurious_apic");
199 unregister_trace_spurious_apic_entry(trace_intel_irq_entry, NULL);
200 unregister_trace_error_apic_exit(trace_intel_irq_exit, "error_apic");
201 unregister_trace_error_apic_entry(trace_intel_irq_entry, NULL);
202 unregister_trace_x86_platform_ipi_exit(trace_intel_irq_exit, "x86_platform_ipi");
203 unregister_trace_x86_platform_ipi_entry(trace_intel_irq_entry, NULL);
205 #ifdef CONFIG_IRQ_WORK
206 unregister_trace_irq_work_exit(trace_intel_irq_exit, "irq_work");
207 unregister_trace_irq_work_entry(trace_intel_irq_entry, NULL);
211 unregister_trace_reschedule_exit(trace_intel_irq_exit, "reschedule");
212 unregister_trace_reschedule_entry(trace_intel_irq_entry, NULL);
213 unregister_trace_call_function_exit(trace_intel_irq_exit, "call_function");
214 unregister_trace_call_function_entry(trace_intel_irq_entry, NULL);
215 unregister_trace_call_function_single_exit(trace_intel_irq_exit, "call_function_single");
216 unregister_trace_call_function_single_entry(trace_intel_irq_entry, NULL);
219 #ifdef CONFIG_X86_MCE_THRESHOLD
220 unregister_trace_threshold_apic_exit(trace_intel_irq_exit, "threshold_apic");
221 unregister_trace_threshold_apic_entry(trace_intel_irq_entry, NULL);
224 #ifdef CONFIG_X86_MCE_AMD
225 unregister_trace_deferred_error_apic_exit(trace_intel_irq_exit, "deferred_error");
226 unregister_trace_deferred_error_apic_entry(trace_intel_irq_entry, NULL);
229 #ifdef CONFIG_X86_THERMAL_VECTOR
230 unregister_trace_thermal_apic_exit(trace_intel_irq_exit, "thermal_apic");
231 unregister_trace_thermal_apic_entry(trace_intel_irq_entry, NULL);
232 #endif /* CONFIG_X86_THERMAL_VECTOR */
234 unregister_trace_local_timer_exit(trace_intel_irq_exit, "local_timer");
235 unregister_trace_local_timer_entry(trace_intel_irq_entry, NULL);
237 #endif /* CONFIG_OSNOISE_TRAECR && CONFIG_X86_LOCAL_APIC */