123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- #include <asm/trace/irq_vectors.h>
- #include <linux/trace.h>
- #if defined(CONFIG_OSNOISE_TRACER) && defined(CONFIG_X86_LOCAL_APIC)
- /*
- * trace_intel_irq_entry - record intel specific IRQ entry
- */
- static void trace_intel_irq_entry(void *data, int vector)
- {
- osnoise_trace_irq_entry(vector);
- }
- /*
- * trace_intel_irq_exit - record intel specific IRQ exit
- */
- static void trace_intel_irq_exit(void *data, int vector)
- {
- char *vector_desc = (char *) data;
- osnoise_trace_irq_exit(vector, vector_desc);
- }
- /*
- * register_intel_irq_tp - Register intel specific IRQ entry tracepoints
- */
- int osnoise_arch_register(void)
- {
- int ret;
- ret = register_trace_local_timer_entry(trace_intel_irq_entry, NULL);
- if (ret)
- goto out_err;
- ret = register_trace_local_timer_exit(trace_intel_irq_exit, "local_timer");
- if (ret)
- goto out_timer_entry;
- #ifdef CONFIG_X86_THERMAL_VECTOR
- ret = register_trace_thermal_apic_entry(trace_intel_irq_entry, NULL);
- if (ret)
- goto out_timer_exit;
- ret = register_trace_thermal_apic_exit(trace_intel_irq_exit, "thermal_apic");
- if (ret)
- goto out_thermal_entry;
- #endif /* CONFIG_X86_THERMAL_VECTOR */
- #ifdef CONFIG_X86_MCE_AMD
- ret = register_trace_deferred_error_apic_entry(trace_intel_irq_entry, NULL);
- if (ret)
- goto out_thermal_exit;
- ret = register_trace_deferred_error_apic_exit(trace_intel_irq_exit, "deferred_error");
- if (ret)
- goto out_deferred_entry;
- #endif
- #ifdef CONFIG_X86_MCE_THRESHOLD
- ret = register_trace_threshold_apic_entry(trace_intel_irq_entry, NULL);
- if (ret)
- goto out_deferred_exit;
- ret = register_trace_threshold_apic_exit(trace_intel_irq_exit, "threshold_apic");
- if (ret)
- goto out_threshold_entry;
- #endif /* CONFIG_X86_MCE_THRESHOLD */
- #ifdef CONFIG_SMP
- ret = register_trace_call_function_single_entry(trace_intel_irq_entry, NULL);
- if (ret)
- goto out_threshold_exit;
- ret = register_trace_call_function_single_exit(trace_intel_irq_exit,
- "call_function_single");
- if (ret)
- goto out_call_function_single_entry;
- ret = register_trace_call_function_entry(trace_intel_irq_entry, NULL);
- if (ret)
- goto out_call_function_single_exit;
- ret = register_trace_call_function_exit(trace_intel_irq_exit, "call_function");
- if (ret)
- goto out_call_function_entry;
- ret = register_trace_reschedule_entry(trace_intel_irq_entry, NULL);
- if (ret)
- goto out_call_function_exit;
- ret = register_trace_reschedule_exit(trace_intel_irq_exit, "reschedule");
- if (ret)
- goto out_reschedule_entry;
- #endif /* CONFIG_SMP */
- #ifdef CONFIG_IRQ_WORK
- ret = register_trace_irq_work_entry(trace_intel_irq_entry, NULL);
- if (ret)
- goto out_reschedule_exit;
- ret = register_trace_irq_work_exit(trace_intel_irq_exit, "irq_work");
- if (ret)
- goto out_irq_work_entry;
- #endif
- ret = register_trace_x86_platform_ipi_entry(trace_intel_irq_entry, NULL);
- if (ret)
- goto out_irq_work_exit;
- ret = register_trace_x86_platform_ipi_exit(trace_intel_irq_exit, "x86_platform_ipi");
- if (ret)
- goto out_x86_ipi_entry;
- ret = register_trace_error_apic_entry(trace_intel_irq_entry, NULL);
- if (ret)
- goto out_x86_ipi_exit;
- ret = register_trace_error_apic_exit(trace_intel_irq_exit, "error_apic");
- if (ret)
- goto out_error_apic_entry;
- ret = register_trace_spurious_apic_entry(trace_intel_irq_entry, NULL);
- if (ret)
- goto out_error_apic_exit;
- ret = register_trace_spurious_apic_exit(trace_intel_irq_exit, "spurious_apic");
- if (ret)
- goto out_spurious_apic_entry;
- return 0;
- out_spurious_apic_entry:
- unregister_trace_spurious_apic_entry(trace_intel_irq_entry, NULL);
- out_error_apic_exit:
- unregister_trace_error_apic_exit(trace_intel_irq_exit, "error_apic");
- out_error_apic_entry:
- unregister_trace_error_apic_entry(trace_intel_irq_entry, NULL);
- out_x86_ipi_exit:
- unregister_trace_x86_platform_ipi_exit(trace_intel_irq_exit, "x86_platform_ipi");
- out_x86_ipi_entry:
- unregister_trace_x86_platform_ipi_entry(trace_intel_irq_entry, NULL);
- out_irq_work_exit:
- #ifdef CONFIG_IRQ_WORK
- unregister_trace_irq_work_exit(trace_intel_irq_exit, "irq_work");
- out_irq_work_entry:
- unregister_trace_irq_work_entry(trace_intel_irq_entry, NULL);
- out_reschedule_exit:
- #endif
- #ifdef CONFIG_SMP
- unregister_trace_reschedule_exit(trace_intel_irq_exit, "reschedule");
- out_reschedule_entry:
- unregister_trace_reschedule_entry(trace_intel_irq_entry, NULL);
- out_call_function_exit:
- unregister_trace_call_function_exit(trace_intel_irq_exit, "call_function");
- out_call_function_entry:
- unregister_trace_call_function_entry(trace_intel_irq_entry, NULL);
- out_call_function_single_exit:
- unregister_trace_call_function_single_exit(trace_intel_irq_exit, "call_function_single");
- out_call_function_single_entry:
- unregister_trace_call_function_single_entry(trace_intel_irq_entry, NULL);
- out_threshold_exit:
- #endif
- #ifdef CONFIG_X86_MCE_THRESHOLD
- unregister_trace_threshold_apic_exit(trace_intel_irq_exit, "threshold_apic");
- out_threshold_entry:
- unregister_trace_threshold_apic_entry(trace_intel_irq_entry, NULL);
- out_deferred_exit:
- #endif
- #ifdef CONFIG_X86_MCE_AMD
- unregister_trace_deferred_error_apic_exit(trace_intel_irq_exit, "deferred_error");
- out_deferred_entry:
- unregister_trace_deferred_error_apic_entry(trace_intel_irq_entry, NULL);
- out_thermal_exit:
- #endif /* CONFIG_X86_MCE_AMD */
- #ifdef CONFIG_X86_THERMAL_VECTOR
- unregister_trace_thermal_apic_exit(trace_intel_irq_exit, "thermal_apic");
- out_thermal_entry:
- unregister_trace_thermal_apic_entry(trace_intel_irq_entry, NULL);
- out_timer_exit:
- #endif /* CONFIG_X86_THERMAL_VECTOR */
- unregister_trace_local_timer_exit(trace_intel_irq_exit, "local_timer");
- out_timer_entry:
- unregister_trace_local_timer_entry(trace_intel_irq_entry, NULL);
- out_err:
- return -EINVAL;
- }
- void osnoise_arch_unregister(void)
- {
- unregister_trace_spurious_apic_exit(trace_intel_irq_exit, "spurious_apic");
- unregister_trace_spurious_apic_entry(trace_intel_irq_entry, NULL);
- unregister_trace_error_apic_exit(trace_intel_irq_exit, "error_apic");
- unregister_trace_error_apic_entry(trace_intel_irq_entry, NULL);
- unregister_trace_x86_platform_ipi_exit(trace_intel_irq_exit, "x86_platform_ipi");
- unregister_trace_x86_platform_ipi_entry(trace_intel_irq_entry, NULL);
- #ifdef CONFIG_IRQ_WORK
- unregister_trace_irq_work_exit(trace_intel_irq_exit, "irq_work");
- unregister_trace_irq_work_entry(trace_intel_irq_entry, NULL);
- #endif
- #ifdef CONFIG_SMP
- unregister_trace_reschedule_exit(trace_intel_irq_exit, "reschedule");
- unregister_trace_reschedule_entry(trace_intel_irq_entry, NULL);
- unregister_trace_call_function_exit(trace_intel_irq_exit, "call_function");
- unregister_trace_call_function_entry(trace_intel_irq_entry, NULL);
- unregister_trace_call_function_single_exit(trace_intel_irq_exit, "call_function_single");
- unregister_trace_call_function_single_entry(trace_intel_irq_entry, NULL);
- #endif
- #ifdef CONFIG_X86_MCE_THRESHOLD
- unregister_trace_threshold_apic_exit(trace_intel_irq_exit, "threshold_apic");
- unregister_trace_threshold_apic_entry(trace_intel_irq_entry, NULL);
- #endif
- #ifdef CONFIG_X86_MCE_AMD
- unregister_trace_deferred_error_apic_exit(trace_intel_irq_exit, "deferred_error");
- unregister_trace_deferred_error_apic_entry(trace_intel_irq_entry, NULL);
- #endif
- #ifdef CONFIG_X86_THERMAL_VECTOR
- unregister_trace_thermal_apic_exit(trace_intel_irq_exit, "thermal_apic");
- unregister_trace_thermal_apic_entry(trace_intel_irq_entry, NULL);
- #endif /* CONFIG_X86_THERMAL_VECTOR */
- unregister_trace_local_timer_exit(trace_intel_irq_exit, "local_timer");
- unregister_trace_local_timer_entry(trace_intel_irq_entry, NULL);
- }
- #endif /* CONFIG_OSNOISE_TRACER && CONFIG_X86_LOCAL_APIC */
|