~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/x86/kernel/trace.c

Version: ~ [ linux-6.11-rc3 ] ~ [ linux-6.10.4 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.45 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.104 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.164 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.223 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.281 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.319 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 #include <asm/trace/irq_vectors.h>
  2 #include <linux/trace.h>
  3 
  4 #if defined(CONFIG_OSNOISE_TRACER) && defined(CONFIG_X86_LOCAL_APIC)
  5 /*
  6  * trace_intel_irq_entry - record intel specific IRQ entry
  7  */
  8 static void trace_intel_irq_entry(void *data, int vector)
  9 {
 10         osnoise_trace_irq_entry(vector);
 11 }
 12 
 13 /*
 14  * trace_intel_irq_exit - record intel specific IRQ exit
 15  */
 16 static void trace_intel_irq_exit(void *data, int vector)
 17 {
 18         char *vector_desc = (char *) data;
 19 
 20         osnoise_trace_irq_exit(vector, vector_desc);
 21 }
 22 
 23 /*
 24  * register_intel_irq_tp - Register intel specific IRQ entry tracepoints
 25  */
 26 int osnoise_arch_register(void)
 27 {
 28         int ret;
 29 
 30         ret = register_trace_local_timer_entry(trace_intel_irq_entry, NULL);
 31         if (ret)
 32                 goto out_err;
 33 
 34         ret = register_trace_local_timer_exit(trace_intel_irq_exit, "local_timer");
 35         if (ret)
 36                 goto out_timer_entry;
 37 
 38 #ifdef CONFIG_X86_THERMAL_VECTOR
 39         ret = register_trace_thermal_apic_entry(trace_intel_irq_entry, NULL);
 40         if (ret)
 41                 goto out_timer_exit;
 42 
 43         ret = register_trace_thermal_apic_exit(trace_intel_irq_exit, "thermal_apic");
 44         if (ret)
 45                 goto out_thermal_entry;
 46 #endif /* CONFIG_X86_THERMAL_VECTOR */
 47 
 48 #ifdef CONFIG_X86_MCE_AMD
 49         ret = register_trace_deferred_error_apic_entry(trace_intel_irq_entry, NULL);
 50         if (ret)
 51                 goto out_thermal_exit;
 52 
 53         ret = register_trace_deferred_error_apic_exit(trace_intel_irq_exit, "deferred_error");
 54         if (ret)
 55                 goto out_deferred_entry;
 56 #endif
 57 
 58 #ifdef CONFIG_X86_MCE_THRESHOLD
 59         ret = register_trace_threshold_apic_entry(trace_intel_irq_entry, NULL);
 60         if (ret)
 61                 goto out_deferred_exit;
 62 
 63         ret = register_trace_threshold_apic_exit(trace_intel_irq_exit, "threshold_apic");
 64         if (ret)
 65                 goto out_threshold_entry;
 66 #endif /* CONFIG_X86_MCE_THRESHOLD */
 67 
 68 #ifdef CONFIG_SMP
 69         ret = register_trace_call_function_single_entry(trace_intel_irq_entry, NULL);
 70         if (ret)
 71                 goto out_threshold_exit;
 72 
 73         ret = register_trace_call_function_single_exit(trace_intel_irq_exit,
 74                                                        "call_function_single");
 75         if (ret)
 76                 goto out_call_function_single_entry;
 77 
 78         ret = register_trace_call_function_entry(trace_intel_irq_entry, NULL);
 79         if (ret)
 80                 goto out_call_function_single_exit;
 81 
 82         ret = register_trace_call_function_exit(trace_intel_irq_exit, "call_function");
 83         if (ret)
 84                 goto out_call_function_entry;
 85 
 86         ret = register_trace_reschedule_entry(trace_intel_irq_entry, NULL);
 87         if (ret)
 88                 goto out_call_function_exit;
 89 
 90         ret = register_trace_reschedule_exit(trace_intel_irq_exit, "reschedule");
 91         if (ret)
 92                 goto out_reschedule_entry;
 93 #endif /* CONFIG_SMP */
 94 
 95 #ifdef CONFIG_IRQ_WORK
 96         ret = register_trace_irq_work_entry(trace_intel_irq_entry, NULL);
 97         if (ret)
 98                 goto out_reschedule_exit;
 99 
100         ret = register_trace_irq_work_exit(trace_intel_irq_exit, "irq_work");
101         if (ret)
102                 goto out_irq_work_entry;
103 #endif
104 
105         ret = register_trace_x86_platform_ipi_entry(trace_intel_irq_entry, NULL);
106         if (ret)
107                 goto out_irq_work_exit;
108 
109         ret = register_trace_x86_platform_ipi_exit(trace_intel_irq_exit, "x86_platform_ipi");
110         if (ret)
111                 goto out_x86_ipi_entry;
112 
113         ret = register_trace_error_apic_entry(trace_intel_irq_entry, NULL);
114         if (ret)
115                 goto out_x86_ipi_exit;
116 
117         ret = register_trace_error_apic_exit(trace_intel_irq_exit, "error_apic");
118         if (ret)
119                 goto out_error_apic_entry;
120 
121         ret = register_trace_spurious_apic_entry(trace_intel_irq_entry, NULL);
122         if (ret)
123                 goto out_error_apic_exit;
124 
125         ret = register_trace_spurious_apic_exit(trace_intel_irq_exit, "spurious_apic");
126         if (ret)
127                 goto out_spurious_apic_entry;
128 
129         return 0;
130 
131 out_spurious_apic_entry:
132         unregister_trace_spurious_apic_entry(trace_intel_irq_entry, NULL);
133 out_error_apic_exit:
134         unregister_trace_error_apic_exit(trace_intel_irq_exit, "error_apic");
135 out_error_apic_entry:
136         unregister_trace_error_apic_entry(trace_intel_irq_entry, NULL);
137 out_x86_ipi_exit:
138         unregister_trace_x86_platform_ipi_exit(trace_intel_irq_exit, "x86_platform_ipi");
139 out_x86_ipi_entry:
140         unregister_trace_x86_platform_ipi_entry(trace_intel_irq_entry, NULL);
141 out_irq_work_exit:
142 
143 #ifdef CONFIG_IRQ_WORK
144         unregister_trace_irq_work_exit(trace_intel_irq_exit, "irq_work");
145 out_irq_work_entry:
146         unregister_trace_irq_work_entry(trace_intel_irq_entry, NULL);
147 out_reschedule_exit:
148 #endif
149 
150 #ifdef CONFIG_SMP
151         unregister_trace_reschedule_exit(trace_intel_irq_exit, "reschedule");
152 out_reschedule_entry:
153         unregister_trace_reschedule_entry(trace_intel_irq_entry, NULL);
154 out_call_function_exit:
155         unregister_trace_call_function_exit(trace_intel_irq_exit, "call_function");
156 out_call_function_entry:
157         unregister_trace_call_function_entry(trace_intel_irq_entry, NULL);
158 out_call_function_single_exit:
159         unregister_trace_call_function_single_exit(trace_intel_irq_exit, "call_function_single");
160 out_call_function_single_entry:
161         unregister_trace_call_function_single_entry(trace_intel_irq_entry, NULL);
162 out_threshold_exit:
163 #endif
164 
165 #ifdef CONFIG_X86_MCE_THRESHOLD
166         unregister_trace_threshold_apic_exit(trace_intel_irq_exit, "threshold_apic");
167 out_threshold_entry:
168         unregister_trace_threshold_apic_entry(trace_intel_irq_entry, NULL);
169 out_deferred_exit:
170 #endif
171 
172 #ifdef CONFIG_X86_MCE_AMD
173         unregister_trace_deferred_error_apic_exit(trace_intel_irq_exit, "deferred_error");
174 out_deferred_entry:
175         unregister_trace_deferred_error_apic_entry(trace_intel_irq_entry, NULL);
176 out_thermal_exit:
177 #endif /* CONFIG_X86_MCE_AMD */
178 
179 #ifdef CONFIG_X86_THERMAL_VECTOR
180         unregister_trace_thermal_apic_exit(trace_intel_irq_exit, "thermal_apic");
181 out_thermal_entry:
182         unregister_trace_thermal_apic_entry(trace_intel_irq_entry, NULL);
183 out_timer_exit:
184 #endif /* CONFIG_X86_THERMAL_VECTOR */
185 
186         unregister_trace_local_timer_exit(trace_intel_irq_exit, "local_timer");
187 out_timer_entry:
188         unregister_trace_local_timer_entry(trace_intel_irq_entry, NULL);
189 out_err:
190         return -EINVAL;
191 }
192 
193 void osnoise_arch_unregister(void)
194 {
195         unregister_trace_spurious_apic_exit(trace_intel_irq_exit, "spurious_apic");
196         unregister_trace_spurious_apic_entry(trace_intel_irq_entry, NULL);
197         unregister_trace_error_apic_exit(trace_intel_irq_exit, "error_apic");
198         unregister_trace_error_apic_entry(trace_intel_irq_entry, NULL);
199         unregister_trace_x86_platform_ipi_exit(trace_intel_irq_exit, "x86_platform_ipi");
200         unregister_trace_x86_platform_ipi_entry(trace_intel_irq_entry, NULL);
201 
202 #ifdef CONFIG_IRQ_WORK
203         unregister_trace_irq_work_exit(trace_intel_irq_exit, "irq_work");
204         unregister_trace_irq_work_entry(trace_intel_irq_entry, NULL);
205 #endif
206 
207 #ifdef CONFIG_SMP
208         unregister_trace_reschedule_exit(trace_intel_irq_exit, "reschedule");
209         unregister_trace_reschedule_entry(trace_intel_irq_entry, NULL);
210         unregister_trace_call_function_exit(trace_intel_irq_exit, "call_function");
211         unregister_trace_call_function_entry(trace_intel_irq_entry, NULL);
212         unregister_trace_call_function_single_exit(trace_intel_irq_exit, "call_function_single");
213         unregister_trace_call_function_single_entry(trace_intel_irq_entry, NULL);
214 #endif
215 
216 #ifdef CONFIG_X86_MCE_THRESHOLD
217         unregister_trace_threshold_apic_exit(trace_intel_irq_exit, "threshold_apic");
218         unregister_trace_threshold_apic_entry(trace_intel_irq_entry, NULL);
219 #endif
220 
221 #ifdef CONFIG_X86_MCE_AMD
222         unregister_trace_deferred_error_apic_exit(trace_intel_irq_exit, "deferred_error");
223         unregister_trace_deferred_error_apic_entry(trace_intel_irq_entry, NULL);
224 #endif
225 
226 #ifdef CONFIG_X86_THERMAL_VECTOR
227         unregister_trace_thermal_apic_exit(trace_intel_irq_exit, "thermal_apic");
228         unregister_trace_thermal_apic_entry(trace_intel_irq_entry, NULL);
229 #endif /* CONFIG_X86_THERMAL_VECTOR */
230 
231         unregister_trace_local_timer_exit(trace_intel_irq_exit, "local_timer");
232         unregister_trace_local_timer_entry(trace_intel_irq_entry, NULL);
233 }
234 #endif /* CONFIG_OSNOISE_TRACER && CONFIG_X86_LOCAL_APIC */
235 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php