lkml.org 
[lkml]   [2017]   [Dec]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 3.2 81/94] x86/oprofile/ppro: Do not use __this_cpu*() in preemptible context
    3.2.97-rc1 review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Borislav Petkov <bp@suse.de>

    commit a743bbeef27b9176987ec0cb7f906ab0ab52d1da upstream.

    The warning below says it all:

    BUG: using __this_cpu_read() in preemptible [00000000] code: swapper/0/1
    caller is __this_cpu_preempt_check
    CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.14.0-rc8 #4
    Call Trace:
    dump_stack
    check_preemption_disabled
    ? do_early_param
    __this_cpu_preempt_check
    arch_perfmon_init
    op_nmi_init
    ? alloc_pci_root_info
    oprofile_arch_init
    oprofile_init
    do_one_initcall
    ...

    These accessors should not have been used in the first place: it is PPro so
    no mixed silicon revisions and thus it can simply use boot_cpu_data.

    Reported-by: Fengguang Wu <fengguang.wu@intel.com>
    Tested-by: Fengguang Wu <fengguang.wu@intel.com>
    Fix-creation-mandated-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Borislav Petkov <bp@suse.de>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Cc: Robert Richter <rric@kernel.org>
    Cc: x86@kernel.org
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    ---
    arch/x86/oprofile/op_model_ppro.c | 4 ++--
    1 file changed, 2 insertions(+), 2 deletions(-)

    --- a/arch/x86/oprofile/op_model_ppro.c
    +++ b/arch/x86/oprofile/op_model_ppro.c
    @@ -212,8 +212,8 @@ static void arch_perfmon_setup_counters(
    eax.full = cpuid_eax(0xa);

    /* Workaround for BIOS bugs in 6/15. Taken from perfmon2 */
    - if (eax.split.version_id == 0 && __this_cpu_read(cpu_info.x86) == 6 &&
    - __this_cpu_read(cpu_info.x86_model) == 15) {
    + if (eax.split.version_id == 0 && boot_cpu_data.x86 == 6 &&
    + boot_cpu_data.x86_model == 15) {
    eax.split.version_id = 2;
    eax.split.num_counters = 2;
    eax.split.bit_width = 40;
    \
     
     \ /
      Last update: 2017-12-28 19:10    [W:4.064 / U:0.152 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site