diff options
author | Christoph Lameter <cl@linux.com> | 2013-10-21 08:17:08 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2013-10-29 07:06:27 -0400 |
commit | 1436c1aa626d0bc0e35c5c5231127086e80ab24a (patch) | |
tree | df8d5d0f892a502f3a5654745f539f3c6db4fe09 | |
parent | 39792c7cf3111d69dc4aa0923859d8b929e9039f (diff) |
ARM: 7862/1: pcpu: replace __get_cpu_var_uses
This is the ARM part of Christoph's patchset cleaning up the various
uses of __get_cpu_var across the tree.
The idea is to convert __get_cpu_var into either an explicit address
calculation using this_cpu_ptr() or into a use of this_cpu operations
that use the offset. Thereby address calculations are avoided and fewer
registers are used when code is generated.
[will: fixed debug ref counting checks and pcpu array accesses]
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Christoph Lameter <cl@linux.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
-rw-r--r-- | arch/arm/kernel/hw_breakpoint.c | 14 | ||||
-rw-r--r-- | arch/arm/kernel/kprobes.c | 8 | ||||
-rw-r--r-- | arch/arm/kernel/perf_event_cpu.c | 2 | ||||
-rw-r--r-- | arch/arm/kvm/arm.c | 6 | ||||
-rw-r--r-- | arch/arm64/kernel/debug-monitors.c | 13 | ||||
-rw-r--r-- | arch/arm64/kernel/hw_breakpoint.c | 22 | ||||
-rw-r--r-- | arch/arm64/kernel/perf_event.c | 4 |
7 files changed, 34 insertions, 35 deletions
diff --git a/arch/arm/kernel/hw_breakpoint.c b/arch/arm/kernel/hw_breakpoint.c index 7b95de601357..3d446605cbf8 100644 --- a/arch/arm/kernel/hw_breakpoint.c +++ b/arch/arm/kernel/hw_breakpoint.c | |||
@@ -344,13 +344,13 @@ int arch_install_hw_breakpoint(struct perf_event *bp) | |||
344 | /* Breakpoint */ | 344 | /* Breakpoint */ |
345 | ctrl_base = ARM_BASE_BCR; | 345 | ctrl_base = ARM_BASE_BCR; |
346 | val_base = ARM_BASE_BVR; | 346 | val_base = ARM_BASE_BVR; |
347 | slots = (struct perf_event **)__get_cpu_var(bp_on_reg); | 347 | slots = this_cpu_ptr(bp_on_reg); |
348 | max_slots = core_num_brps; | 348 | max_slots = core_num_brps; |
349 | } else { | 349 | } else { |
350 | /* Watchpoint */ | 350 | /* Watchpoint */ |
351 | ctrl_base = ARM_BASE_WCR; | 351 | ctrl_base = ARM_BASE_WCR; |
352 | val_base = ARM_BASE_WVR; | 352 | val_base = ARM_BASE_WVR; |
353 | slots = (struct perf_event **)__get_cpu_var(wp_on_reg); | 353 | slots = this_cpu_ptr(wp_on_reg); |
354 | max_slots = core_num_wrps; | 354 | max_slots = core_num_wrps; |
355 | } | 355 | } |
356 | 356 | ||
@@ -396,12 +396,12 @@ void arch_uninstall_hw_breakpoint(struct perf_event *bp) | |||
396 | if (info->ctrl.type == ARM_BREAKPOINT_EXECUTE) { | 396 | if (info->ctrl.type == ARM_BREAKPOINT_EXECUTE) { |
397 | /* Breakpoint */ | 397 | /* Breakpoint */ |
398 | base = ARM_BASE_BCR; | 398 | base = ARM_BASE_BCR; |
399 | slots = (struct perf_event **)__get_cpu_var(bp_on_reg); | 399 | slots = this_cpu_ptr(bp_on_reg); |
400 | max_slots = core_num_brps; | 400 | max_slots = core_num_brps; |
401 | } else { | 401 | } else { |
402 | /* Watchpoint */ | 402 | /* Watchpoint */ |
403 | base = ARM_BASE_WCR; | 403 | base = ARM_BASE_WCR; |
404 | slots = (struct perf_event **)__get_cpu_var(wp_on_reg); | 404 | slots = this_cpu_ptr(wp_on_reg); |
405 | max_slots = core_num_wrps; | 405 | max_slots = core_num_wrps; |
406 | } | 406 | } |
407 | 407 | ||
@@ -697,7 +697,7 @@ static void watchpoint_handler(unsigned long addr, unsigned int fsr, | |||
697 | struct arch_hw_breakpoint *info; | 697 | struct arch_hw_breakpoint *info; |
698 | struct arch_hw_breakpoint_ctrl ctrl; | 698 | struct arch_hw_breakpoint_ctrl ctrl; |
699 | 699 | ||
700 | slots = (struct perf_event **)__get_cpu_var(wp_on_reg); | 700 | slots = this_cpu_ptr(wp_on_reg); |
701 | 701 | ||
702 | for (i = 0; i < core_num_wrps; ++i) { | 702 | for (i = 0; i < core_num_wrps; ++i) { |
703 | rcu_read_lock(); | 703 | rcu_read_lock(); |
@@ -768,7 +768,7 @@ static void watchpoint_single_step_handler(unsigned long pc) | |||
768 | struct perf_event *wp, **slots; | 768 | struct perf_event *wp, **slots; |
769 | struct arch_hw_breakpoint *info; | 769 | struct arch_hw_breakpoint *info; |
770 | 770 | ||
771 | slots = (struct perf_event **)__get_cpu_var(wp_on_reg); | 771 | slots = this_cpu_ptr(wp_on_reg); |
772 | 772 | ||
773 | for (i = 0; i < core_num_wrps; ++i) { | 773 | for (i = 0; i < core_num_wrps; ++i) { |
774 | rcu_read_lock(); | 774 | rcu_read_lock(); |
@@ -802,7 +802,7 @@ static void breakpoint_handler(unsigned long unknown, struct pt_regs *regs) | |||
802 | struct arch_hw_breakpoint *info; | 802 | struct arch_hw_breakpoint *info; |
803 | struct arch_hw_breakpoint_ctrl ctrl; | 803 | struct arch_hw_breakpoint_ctrl ctrl; |
804 | 804 | ||
805 | slots = (struct perf_event **)__get_cpu_var(bp_on_reg); | 805 | slots = this_cpu_ptr(bp_on_reg); |
806 | 806 | ||
807 | /* The exception entry code places the amended lr in the PC. */ | 807 | /* The exception entry code places the amended lr in the PC. */ |
808 | addr = regs->ARM_pc; | 808 | addr = regs->ARM_pc; |
diff --git a/arch/arm/kernel/kprobes.c b/arch/arm/kernel/kprobes.c index 170e9f34003f..a7b621ece23d 100644 --- a/arch/arm/kernel/kprobes.c +++ b/arch/arm/kernel/kprobes.c | |||
@@ -171,13 +171,13 @@ static void __kprobes save_previous_kprobe(struct kprobe_ctlblk *kcb) | |||
171 | 171 | ||
172 | static void __kprobes restore_previous_kprobe(struct kprobe_ctlblk *kcb) | 172 | static void __kprobes restore_previous_kprobe(struct kprobe_ctlblk *kcb) |
173 | { | 173 | { |
174 | __get_cpu_var(current_kprobe) = kcb->prev_kprobe.kp; | 174 | __this_cpu_write(current_kprobe, kcb->prev_kprobe.kp); |
175 | kcb->kprobe_status = kcb->prev_kprobe.status; | 175 | kcb->kprobe_status = kcb->prev_kprobe.status; |
176 | } | 176 | } |
177 | 177 | ||
178 | static void __kprobes set_current_kprobe(struct kprobe *p) | 178 | static void __kprobes set_current_kprobe(struct kprobe *p) |
179 | { | 179 | { |
180 | __get_cpu_var(current_kprobe) = p; | 180 | __this_cpu_write(current_kprobe, p); |
181 | } | 181 | } |
182 | 182 | ||
183 | static void __kprobes | 183 | static void __kprobes |
@@ -421,10 +421,10 @@ static __used __kprobes void *trampoline_handler(struct pt_regs *regs) | |||
421 | continue; | 421 | continue; |
422 | 422 | ||
423 | if (ri->rp && ri->rp->handler) { | 423 | if (ri->rp && ri->rp->handler) { |
424 | __get_cpu_var(current_kprobe) = &ri->rp->kp; | 424 | __this_cpu_write(current_kprobe, &ri->rp->kp); |
425 | get_kprobe_ctlblk()->kprobe_status = KPROBE_HIT_ACTIVE; | 425 | get_kprobe_ctlblk()->kprobe_status = KPROBE_HIT_ACTIVE; |
426 | ri->rp->handler(ri, regs); | 426 | ri->rp->handler(ri, regs); |
427 | __get_cpu_var(current_kprobe) = NULL; | 427 | __this_cpu_write(current_kprobe, NULL); |
428 | } | 428 | } |
429 | 429 | ||
430 | orig_ret_address = (unsigned long)ri->ret_addr; | 430 | orig_ret_address = (unsigned long)ri->ret_addr; |
diff --git a/arch/arm/kernel/perf_event_cpu.c b/arch/arm/kernel/perf_event_cpu.c index 8d6147b2001f..d85055cd24ba 100644 --- a/arch/arm/kernel/perf_event_cpu.c +++ b/arch/arm/kernel/perf_event_cpu.c | |||
@@ -68,7 +68,7 @@ EXPORT_SYMBOL_GPL(perf_num_counters); | |||
68 | 68 | ||
69 | static struct pmu_hw_events *cpu_pmu_get_cpu_events(void) | 69 | static struct pmu_hw_events *cpu_pmu_get_cpu_events(void) |
70 | { | 70 | { |
71 | return &__get_cpu_var(cpu_hw_events); | 71 | return this_cpu_ptr(&cpu_hw_events); |
72 | } | 72 | } |
73 | 73 | ||
74 | static void cpu_pmu_free_irq(struct arm_pmu *cpu_pmu) | 74 | static void cpu_pmu_free_irq(struct arm_pmu *cpu_pmu) |
diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c index 9c697db2787e..aea7ccb8d397 100644 --- a/arch/arm/kvm/arm.c +++ b/arch/arm/kvm/arm.c | |||
@@ -65,7 +65,7 @@ static bool vgic_present; | |||
65 | static void kvm_arm_set_running_vcpu(struct kvm_vcpu *vcpu) | 65 | static void kvm_arm_set_running_vcpu(struct kvm_vcpu *vcpu) |
66 | { | 66 | { |
67 | BUG_ON(preemptible()); | 67 | BUG_ON(preemptible()); |
68 | __get_cpu_var(kvm_arm_running_vcpu) = vcpu; | 68 | __this_cpu_write(kvm_arm_running_vcpu, vcpu); |
69 | } | 69 | } |
70 | 70 | ||
71 | /** | 71 | /** |
@@ -75,7 +75,7 @@ static void kvm_arm_set_running_vcpu(struct kvm_vcpu *vcpu) | |||
75 | struct kvm_vcpu *kvm_arm_get_running_vcpu(void) | 75 | struct kvm_vcpu *kvm_arm_get_running_vcpu(void) |
76 | { | 76 | { |
77 | BUG_ON(preemptible()); | 77 | BUG_ON(preemptible()); |
78 | return __get_cpu_var(kvm_arm_running_vcpu); | 78 | return __this_cpu_read(kvm_arm_running_vcpu); |
79 | } | 79 | } |
80 | 80 | ||
81 | /** | 81 | /** |
@@ -815,7 +815,7 @@ static void cpu_init_hyp_mode(void *dummy) | |||
815 | 815 | ||
816 | boot_pgd_ptr = kvm_mmu_get_boot_httbr(); | 816 | boot_pgd_ptr = kvm_mmu_get_boot_httbr(); |
817 | pgd_ptr = kvm_mmu_get_httbr(); | 817 | pgd_ptr = kvm_mmu_get_httbr(); |
818 | stack_page = __get_cpu_var(kvm_arm_hyp_stack_page); | 818 | stack_page = __this_cpu_read(kvm_arm_hyp_stack_page); |
819 | hyp_stack_ptr = stack_page + PAGE_SIZE; | 819 | hyp_stack_ptr = stack_page + PAGE_SIZE; |
820 | vector_ptr = (unsigned long)__kvm_hyp_vector; | 820 | vector_ptr = (unsigned long)__kvm_hyp_vector; |
821 | 821 | ||
diff --git a/arch/arm64/kernel/debug-monitors.c b/arch/arm64/kernel/debug-monitors.c index cbfacf7fb438..6a0a9b132d7a 100644 --- a/arch/arm64/kernel/debug-monitors.c +++ b/arch/arm64/kernel/debug-monitors.c | |||
@@ -27,7 +27,6 @@ | |||
27 | #include <linux/uaccess.h> | 27 | #include <linux/uaccess.h> |
28 | 28 | ||
29 | #include <asm/debug-monitors.h> | 29 | #include <asm/debug-monitors.h> |
30 | #include <asm/local.h> | ||
31 | #include <asm/cputype.h> | 30 | #include <asm/cputype.h> |
32 | #include <asm/system_misc.h> | 31 | #include <asm/system_misc.h> |
33 | 32 | ||
@@ -89,8 +88,8 @@ early_param("nodebugmon", early_debug_disable); | |||
89 | * Keep track of debug users on each core. | 88 | * Keep track of debug users on each core. |
90 | * The ref counts are per-cpu so we use a local_t type. | 89 | * The ref counts are per-cpu so we use a local_t type. |
91 | */ | 90 | */ |
92 | static DEFINE_PER_CPU(local_t, mde_ref_count); | 91 | static DEFINE_PER_CPU(int, mde_ref_count); |
93 | static DEFINE_PER_CPU(local_t, kde_ref_count); | 92 | static DEFINE_PER_CPU(int, kde_ref_count); |
94 | 93 | ||
95 | void enable_debug_monitors(enum debug_el el) | 94 | void enable_debug_monitors(enum debug_el el) |
96 | { | 95 | { |
@@ -98,11 +97,11 @@ void enable_debug_monitors(enum debug_el el) | |||
98 | 97 | ||
99 | WARN_ON(preemptible()); | 98 | WARN_ON(preemptible()); |
100 | 99 | ||
101 | if (local_inc_return(&__get_cpu_var(mde_ref_count)) == 1) | 100 | if (this_cpu_inc_return(mde_ref_count) == 1) |
102 | enable = DBG_MDSCR_MDE; | 101 | enable = DBG_MDSCR_MDE; |
103 | 102 | ||
104 | if (el == DBG_ACTIVE_EL1 && | 103 | if (el == DBG_ACTIVE_EL1 && |
105 | local_inc_return(&__get_cpu_var(kde_ref_count)) == 1) | 104 | this_cpu_inc_return(kde_ref_count) == 1) |
106 | enable |= DBG_MDSCR_KDE; | 105 | enable |= DBG_MDSCR_KDE; |
107 | 106 | ||
108 | if (enable && debug_enabled) { | 107 | if (enable && debug_enabled) { |
@@ -118,11 +117,11 @@ void disable_debug_monitors(enum debug_el el) | |||
118 | 117 | ||
119 | WARN_ON(preemptible()); | 118 | WARN_ON(preemptible()); |
120 | 119 | ||
121 | if (local_dec_and_test(&__get_cpu_var(mde_ref_count))) | 120 | if (this_cpu_dec_return(mde_ref_count) == 0) |
122 | disable = ~DBG_MDSCR_MDE; | 121 | disable = ~DBG_MDSCR_MDE; |
123 | 122 | ||
124 | if (el == DBG_ACTIVE_EL1 && | 123 | if (el == DBG_ACTIVE_EL1 && |
125 | local_dec_and_test(&__get_cpu_var(kde_ref_count))) | 124 | this_cpu_dec_return(kde_ref_count) == 0) |
126 | disable &= ~DBG_MDSCR_KDE; | 125 | disable &= ~DBG_MDSCR_KDE; |
127 | 126 | ||
128 | if (disable) { | 127 | if (disable) { |
diff --git a/arch/arm64/kernel/hw_breakpoint.c b/arch/arm64/kernel/hw_breakpoint.c index 329218ca9ffb..ff516f6691e4 100644 --- a/arch/arm64/kernel/hw_breakpoint.c +++ b/arch/arm64/kernel/hw_breakpoint.c | |||
@@ -184,14 +184,14 @@ int arch_install_hw_breakpoint(struct perf_event *bp) | |||
184 | /* Breakpoint */ | 184 | /* Breakpoint */ |
185 | ctrl_reg = AARCH64_DBG_REG_BCR; | 185 | ctrl_reg = AARCH64_DBG_REG_BCR; |
186 | val_reg = AARCH64_DBG_REG_BVR; | 186 | val_reg = AARCH64_DBG_REG_BVR; |
187 | slots = __get_cpu_var(bp_on_reg); | 187 | slots = this_cpu_ptr(bp_on_reg); |
188 | max_slots = core_num_brps; | 188 | max_slots = core_num_brps; |
189 | reg_enable = !debug_info->bps_disabled; | 189 | reg_enable = !debug_info->bps_disabled; |
190 | } else { | 190 | } else { |
191 | /* Watchpoint */ | 191 | /* Watchpoint */ |
192 | ctrl_reg = AARCH64_DBG_REG_WCR; | 192 | ctrl_reg = AARCH64_DBG_REG_WCR; |
193 | val_reg = AARCH64_DBG_REG_WVR; | 193 | val_reg = AARCH64_DBG_REG_WVR; |
194 | slots = __get_cpu_var(wp_on_reg); | 194 | slots = this_cpu_ptr(wp_on_reg); |
195 | max_slots = core_num_wrps; | 195 | max_slots = core_num_wrps; |
196 | reg_enable = !debug_info->wps_disabled; | 196 | reg_enable = !debug_info->wps_disabled; |
197 | } | 197 | } |
@@ -230,12 +230,12 @@ void arch_uninstall_hw_breakpoint(struct perf_event *bp) | |||
230 | if (info->ctrl.type == ARM_BREAKPOINT_EXECUTE) { | 230 | if (info->ctrl.type == ARM_BREAKPOINT_EXECUTE) { |
231 | /* Breakpoint */ | 231 | /* Breakpoint */ |
232 | base = AARCH64_DBG_REG_BCR; | 232 | base = AARCH64_DBG_REG_BCR; |
233 | slots = __get_cpu_var(bp_on_reg); | 233 | slots = this_cpu_ptr(bp_on_reg); |
234 | max_slots = core_num_brps; | 234 | max_slots = core_num_brps; |
235 | } else { | 235 | } else { |
236 | /* Watchpoint */ | 236 | /* Watchpoint */ |
237 | base = AARCH64_DBG_REG_WCR; | 237 | base = AARCH64_DBG_REG_WCR; |
238 | slots = __get_cpu_var(wp_on_reg); | 238 | slots = this_cpu_ptr(wp_on_reg); |
239 | max_slots = core_num_wrps; | 239 | max_slots = core_num_wrps; |
240 | } | 240 | } |
241 | 241 | ||
@@ -505,11 +505,11 @@ static void toggle_bp_registers(int reg, enum debug_el el, int enable) | |||
505 | 505 | ||
506 | switch (reg) { | 506 | switch (reg) { |
507 | case AARCH64_DBG_REG_BCR: | 507 | case AARCH64_DBG_REG_BCR: |
508 | slots = __get_cpu_var(bp_on_reg); | 508 | slots = this_cpu_ptr(bp_on_reg); |
509 | max_slots = core_num_brps; | 509 | max_slots = core_num_brps; |
510 | break; | 510 | break; |
511 | case AARCH64_DBG_REG_WCR: | 511 | case AARCH64_DBG_REG_WCR: |
512 | slots = __get_cpu_var(wp_on_reg); | 512 | slots = this_cpu_ptr(wp_on_reg); |
513 | max_slots = core_num_wrps; | 513 | max_slots = core_num_wrps; |
514 | break; | 514 | break; |
515 | default: | 515 | default: |
@@ -546,7 +546,7 @@ static int breakpoint_handler(unsigned long unused, unsigned int esr, | |||
546 | struct debug_info *debug_info; | 546 | struct debug_info *debug_info; |
547 | struct arch_hw_breakpoint_ctrl ctrl; | 547 | struct arch_hw_breakpoint_ctrl ctrl; |
548 | 548 | ||
549 | slots = (struct perf_event **)__get_cpu_var(bp_on_reg); | 549 | slots = this_cpu_ptr(bp_on_reg); |
550 | addr = instruction_pointer(regs); | 550 | addr = instruction_pointer(regs); |
551 | debug_info = ¤t->thread.debug; | 551 | debug_info = ¤t->thread.debug; |
552 | 552 | ||
@@ -596,7 +596,7 @@ unlock: | |||
596 | user_enable_single_step(current); | 596 | user_enable_single_step(current); |
597 | } else { | 597 | } else { |
598 | toggle_bp_registers(AARCH64_DBG_REG_BCR, DBG_ACTIVE_EL1, 0); | 598 | toggle_bp_registers(AARCH64_DBG_REG_BCR, DBG_ACTIVE_EL1, 0); |
599 | kernel_step = &__get_cpu_var(stepping_kernel_bp); | 599 | kernel_step = this_cpu_ptr(&stepping_kernel_bp); |
600 | 600 | ||
601 | if (*kernel_step != ARM_KERNEL_STEP_NONE) | 601 | if (*kernel_step != ARM_KERNEL_STEP_NONE) |
602 | return 0; | 602 | return 0; |
@@ -623,7 +623,7 @@ static int watchpoint_handler(unsigned long addr, unsigned int esr, | |||
623 | struct arch_hw_breakpoint *info; | 623 | struct arch_hw_breakpoint *info; |
624 | struct arch_hw_breakpoint_ctrl ctrl; | 624 | struct arch_hw_breakpoint_ctrl ctrl; |
625 | 625 | ||
626 | slots = (struct perf_event **)__get_cpu_var(wp_on_reg); | 626 | slots = this_cpu_ptr(wp_on_reg); |
627 | debug_info = ¤t->thread.debug; | 627 | debug_info = ¤t->thread.debug; |
628 | 628 | ||
629 | for (i = 0; i < core_num_wrps; ++i) { | 629 | for (i = 0; i < core_num_wrps; ++i) { |
@@ -698,7 +698,7 @@ unlock: | |||
698 | user_enable_single_step(current); | 698 | user_enable_single_step(current); |
699 | } else { | 699 | } else { |
700 | toggle_bp_registers(AARCH64_DBG_REG_WCR, DBG_ACTIVE_EL1, 0); | 700 | toggle_bp_registers(AARCH64_DBG_REG_WCR, DBG_ACTIVE_EL1, 0); |
701 | kernel_step = &__get_cpu_var(stepping_kernel_bp); | 701 | kernel_step = this_cpu_ptr(&stepping_kernel_bp); |
702 | 702 | ||
703 | if (*kernel_step != ARM_KERNEL_STEP_NONE) | 703 | if (*kernel_step != ARM_KERNEL_STEP_NONE) |
704 | return 0; | 704 | return 0; |
@@ -722,7 +722,7 @@ int reinstall_suspended_bps(struct pt_regs *regs) | |||
722 | struct debug_info *debug_info = ¤t->thread.debug; | 722 | struct debug_info *debug_info = ¤t->thread.debug; |
723 | int handled_exception = 0, *kernel_step; | 723 | int handled_exception = 0, *kernel_step; |
724 | 724 | ||
725 | kernel_step = &__get_cpu_var(stepping_kernel_bp); | 725 | kernel_step = this_cpu_ptr(&stepping_kernel_bp); |
726 | 726 | ||
727 | /* | 727 | /* |
728 | * Called from single-step exception handler. | 728 | * Called from single-step exception handler. |
diff --git a/arch/arm64/kernel/perf_event.c b/arch/arm64/kernel/perf_event.c index cea1594ff933..6983ed5a351a 100644 --- a/arch/arm64/kernel/perf_event.c +++ b/arch/arm64/kernel/perf_event.c | |||
@@ -1044,7 +1044,7 @@ static irqreturn_t armv8pmu_handle_irq(int irq_num, void *dev) | |||
1044 | */ | 1044 | */ |
1045 | regs = get_irq_regs(); | 1045 | regs = get_irq_regs(); |
1046 | 1046 | ||
1047 | cpuc = &__get_cpu_var(cpu_hw_events); | 1047 | cpuc = this_cpu_ptr(&cpu_hw_events); |
1048 | for (idx = 0; idx < cpu_pmu->num_events; ++idx) { | 1048 | for (idx = 0; idx < cpu_pmu->num_events; ++idx) { |
1049 | struct perf_event *event = cpuc->events[idx]; | 1049 | struct perf_event *event = cpuc->events[idx]; |
1050 | struct hw_perf_event *hwc; | 1050 | struct hw_perf_event *hwc; |
@@ -1257,7 +1257,7 @@ device_initcall(register_pmu_driver); | |||
1257 | 1257 | ||
1258 | static struct pmu_hw_events *armpmu_get_cpu_events(void) | 1258 | static struct pmu_hw_events *armpmu_get_cpu_events(void) |
1259 | { | 1259 | { |
1260 | return &__get_cpu_var(cpu_hw_events); | 1260 | return this_cpu_ptr(&cpu_hw_events); |
1261 | } | 1261 | } |
1262 | 1262 | ||
1263 | static void __init cpu_pmu_init(struct arm_pmu *armpmu) | 1263 | static void __init cpu_pmu_init(struct arm_pmu *armpmu) |