Loading arch/x86/Kconfig +1 −1 Original line number Diff line number Diff line Loading @@ -21,7 +21,7 @@ config X86 select HAVE_UNSTABLE_SCHED_CLOCK select HAVE_IDE select HAVE_OPROFILE select HAVE_PERF_EVENTS if (!M386 && !M486) select HAVE_PERF_EVENTS select HAVE_IRQ_WORK select HAVE_IOREMAP_PROT select HAVE_KPROBES Loading arch/x86/kernel/apic/hw_nmi.c +4 −3 Original line number Diff line number Diff line Loading @@ -17,9 +17,6 @@ #include <linux/nmi.h> #include <linux/module.h> /* For reliability, we're prepared to waste bits here. */ static DECLARE_BITMAP(backtrace_mask, NR_CPUS) __read_mostly; #ifdef CONFIG_HARDLOCKUP_DETECTOR u64 hw_nmi_get_sample_period(void) { Loading @@ -27,6 +24,10 @@ u64 hw_nmi_get_sample_period(void) } #endif /* For reliability, we're prepared to waste bits here. */ static DECLARE_BITMAP(backtrace_mask, NR_CPUS) __read_mostly; #ifdef arch_trigger_all_cpu_backtrace void arch_trigger_all_cpu_backtrace(void) { Loading arch/x86/kernel/cpu/perf_event.c +20 −0 Original line number Diff line number Diff line Loading @@ -372,6 +372,20 @@ static void release_pmc_hardware(void) {} #endif static bool check_hw_exists(void) { u64 val, val_new = 0; int ret = 0; val = 0xabcdUL; ret |= checking_wrmsrl(x86_pmu.perfctr, val); ret |= rdmsrl_safe(x86_pmu.perfctr, &val_new); if (ret || val != val_new) return false; return true; } static void reserve_ds_buffers(void); static void release_ds_buffers(void); Loading Loading @@ -1363,6 +1377,12 @@ void __init init_hw_perf_events(void) pmu_check_apic(); /* sanity check that the hardware exists or is emulated */ if (!check_hw_exists()) { pr_cont("Broken PMU hardware detected, software events only.\n"); return; } pr_cont("%s PMU driver.\n", x86_pmu.name); if (x86_pmu.quirks) Loading arch/x86/kernel/entry_64.S +2 −0 Original line number Diff line number Diff line Loading @@ -295,6 +295,7 @@ ENDPROC(native_usergs_sysret64) .endm /* save partial stack frame */ .pushsection .kprobes.text, "ax" ENTRY(save_args) XCPT_FRAME cld Loading Loading @@ -334,6 +335,7 @@ ENTRY(save_args) ret CFI_ENDPROC END(save_args) .popsection ENTRY(save_rest) PARTIAL_FRAME 1 REST_SKIP+8 Loading arch/x86/kernel/hw_breakpoint.c +4 −0 Original line number Diff line number Diff line Loading @@ -433,6 +433,10 @@ static int __kprobes hw_breakpoint_handler(struct die_args *args) dr6_p = (unsigned long *)ERR_PTR(args->err); dr6 = *dr6_p; /* If it's a single step, TRAP bits are random */ if (dr6 & DR_STEP) return NOTIFY_DONE; /* Do an early return if no trap bits are set in DR6 */ if ((dr6 & DR_TRAP_BITS) == 0) return NOTIFY_DONE; Loading Loading
arch/x86/Kconfig +1 −1 Original line number Diff line number Diff line Loading @@ -21,7 +21,7 @@ config X86 select HAVE_UNSTABLE_SCHED_CLOCK select HAVE_IDE select HAVE_OPROFILE select HAVE_PERF_EVENTS if (!M386 && !M486) select HAVE_PERF_EVENTS select HAVE_IRQ_WORK select HAVE_IOREMAP_PROT select HAVE_KPROBES Loading
arch/x86/kernel/apic/hw_nmi.c +4 −3 Original line number Diff line number Diff line Loading @@ -17,9 +17,6 @@ #include <linux/nmi.h> #include <linux/module.h> /* For reliability, we're prepared to waste bits here. */ static DECLARE_BITMAP(backtrace_mask, NR_CPUS) __read_mostly; #ifdef CONFIG_HARDLOCKUP_DETECTOR u64 hw_nmi_get_sample_period(void) { Loading @@ -27,6 +24,10 @@ u64 hw_nmi_get_sample_period(void) } #endif /* For reliability, we're prepared to waste bits here. */ static DECLARE_BITMAP(backtrace_mask, NR_CPUS) __read_mostly; #ifdef arch_trigger_all_cpu_backtrace void arch_trigger_all_cpu_backtrace(void) { Loading
arch/x86/kernel/cpu/perf_event.c +20 −0 Original line number Diff line number Diff line Loading @@ -372,6 +372,20 @@ static void release_pmc_hardware(void) {} #endif static bool check_hw_exists(void) { u64 val, val_new = 0; int ret = 0; val = 0xabcdUL; ret |= checking_wrmsrl(x86_pmu.perfctr, val); ret |= rdmsrl_safe(x86_pmu.perfctr, &val_new); if (ret || val != val_new) return false; return true; } static void reserve_ds_buffers(void); static void release_ds_buffers(void); Loading Loading @@ -1363,6 +1377,12 @@ void __init init_hw_perf_events(void) pmu_check_apic(); /* sanity check that the hardware exists or is emulated */ if (!check_hw_exists()) { pr_cont("Broken PMU hardware detected, software events only.\n"); return; } pr_cont("%s PMU driver.\n", x86_pmu.name); if (x86_pmu.quirks) Loading
arch/x86/kernel/entry_64.S +2 −0 Original line number Diff line number Diff line Loading @@ -295,6 +295,7 @@ ENDPROC(native_usergs_sysret64) .endm /* save partial stack frame */ .pushsection .kprobes.text, "ax" ENTRY(save_args) XCPT_FRAME cld Loading Loading @@ -334,6 +335,7 @@ ENTRY(save_args) ret CFI_ENDPROC END(save_args) .popsection ENTRY(save_rest) PARTIAL_FRAME 1 REST_SKIP+8 Loading
arch/x86/kernel/hw_breakpoint.c +4 −0 Original line number Diff line number Diff line Loading @@ -433,6 +433,10 @@ static int __kprobes hw_breakpoint_handler(struct die_args *args) dr6_p = (unsigned long *)ERR_PTR(args->err); dr6 = *dr6_p; /* If it's a single step, TRAP bits are random */ if (dr6 & DR_STEP) return NOTIFY_DONE; /* Do an early return if no trap bits are set in DR6 */ if ((dr6 & DR_TRAP_BITS) == 0) return NOTIFY_DONE; Loading