diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/kernel/perf_event.c | 2 | ||||
-rw-r--r-- | arch/x86/Kconfig | 5 | ||||
-rw-r--r-- | arch/x86/kernel/alternative.c | 3 |
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 | ||
64 | config INSTRUCTION_DECODER | 65 | config 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 | ||
2130 | config HAVE_TEXT_POKE_SMP | ||
2131 | bool | ||
2132 | select STOP_MACHINE if SMP | ||
2133 | |||
2129 | source "net/Kconfig" | 2134 | source "net/Kconfig" |
2130 | 2135 | ||
2131 | source "drivers/Kconfig" | 2136 | source "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 | ||