aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/kernel/perf_event.c2
-rw-r--r--arch/x86/Kconfig5
-rw-r--r--arch/x86/kernel/alternative.c3
3 files changed, 8 insertions, 2 deletions
diff --git a/arch/arm/kernel/perf_event.c b/arch/arm/kernel/perf_event.c
index ad19c276b10f..55addc85eaa7 100644
--- a/arch/arm/kernel/perf_event.c
+++ b/arch/arm/kernel/perf_event.c
@@ -534,7 +534,7 @@ static int armpmu_event_init(struct perf_event *event)
534 event->destroy = hw_perf_event_destroy; 534 event->destroy = hw_perf_event_destroy;
535 535
536 if (!atomic_inc_not_zero(&active_events)) { 536 if (!atomic_inc_not_zero(&active_events)) {
537 if (atomic_read(&active_events) > armpmu.num_events) { 537 if (atomic_read(&active_events) > armpmu->num_events) {
538 atomic_dec(&active_events); 538 atomic_dec(&active_events);
539 return -ENOSPC; 539 return -ENOSPC;
540 } 540 }
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index b431a0824a93..c14d8b4d2f71 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -60,6 +60,7 @@ config X86
60 select HAVE_ARCH_KMEMCHECK 60 select HAVE_ARCH_KMEMCHECK
61 select HAVE_USER_RETURN_NOTIFIER 61 select HAVE_USER_RETURN_NOTIFIER
62 select HAVE_ARCH_JUMP_LABEL 62 select HAVE_ARCH_JUMP_LABEL
63 select HAVE_TEXT_POKE_SMP
63 64
64config INSTRUCTION_DECODER 65config INSTRUCTION_DECODER
65 def_bool (KPROBES || PERF_EVENTS) 66 def_bool (KPROBES || PERF_EVENTS)
@@ -2126,6 +2127,10 @@ config HAVE_ATOMIC_IOMAP
2126 def_bool y 2127 def_bool y
2127 depends on X86_32 2128 depends on X86_32
2128 2129
2130config HAVE_TEXT_POKE_SMP
2131 bool
2132 select STOP_MACHINE if SMP
2133
2129source "net/Kconfig" 2134source "net/Kconfig"
2130 2135
2131source "drivers/Kconfig" 2136source "drivers/Kconfig"
diff --git a/arch/x86/kernel/alternative.c b/arch/x86/kernel/alternative.c
index cb0e6d385f6d..a36bb90aef53 100644
--- a/arch/x86/kernel/alternative.c
+++ b/arch/x86/kernel/alternative.c
@@ -637,7 +637,8 @@ void *__kprobes text_poke_smp(void *addr, const void *opcode, size_t len)
637 tpp.len = len; 637 tpp.len = len;
638 atomic_set(&stop_machine_first, 1); 638 atomic_set(&stop_machine_first, 1);
639 wrote_text = 0; 639 wrote_text = 0;
640 stop_machine(stop_machine_text_poke, (void *)&tpp, NULL); 640 /* Use __stop_machine() because the caller already got online_cpus. */
641 __stop_machine(stop_machine_text_poke, (void *)&tpp, NULL);
641 return addr; 642 return addr;
642} 643}
643 644