On Tue, 2015-30-06 at 08:20:29 UTC, Anshuman Khandual wrote:
> The commit 69111bac42f5ce ("powerpc: Replace __get_cpu_var uses")
> replaced all usage of get_cpu_var with this_cpu_ptr inside core
> perf event handling on powerpc. But it skipped one of them which
> is being replaced with this patch.

No it replaced all uses of __get_cpu_var(), not get_cpu_var(). The difference
is important.

get_cpu_var() disables preemption for you, so it's only safe to switch to
this_cpu_ptr() if preemption is already disabled. Is it?

cheers

> diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c
> index f9ecd93..57f2c78 100644
> --- a/arch/powerpc/perf/core-book3s.c
> +++ b/arch/powerpc/perf/core-book3s.c
> @@ -1840,20 +1840,17 @@ static int power_pmu_event_init(struct perf_event 
> *event)
>       if (check_excludes(ctrs, cflags, n, 1))
>               return -EINVAL;
>  
> -     cpuhw = &get_cpu_var(cpu_hw_events);
> +     cpuhw = this_cpu_ptr(&cpu_hw_events);
>       err = power_check_constraints(cpuhw, events, cflags, n + 1);
>  
>       if (has_branch_stack(event)) {
>               cpuhw->bhrb_filter = ppmu->bhrb_filter_map(
>                                       event->attr.branch_sample_type);
>  
> -             if (cpuhw->bhrb_filter == -1) {
> -                     put_cpu_var(cpu_hw_events);
> +             if (cpuhw->bhrb_filter == -1)
>                       return -EOPNOTSUPP;
> -             }
>       }
>  
> -     put_cpu_var(cpu_hw_events);
>       if (err)
>               return -EINVAL;
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to