• David Carrillo-Cisneros's avatar
    perf/x86/intel: Add MSR_LAST_BRANCH_FROM_x quirk for ctx switch · 71adae99
    David Carrillo-Cisneros authored
    Add quirk for context switch to save/restore the value of
    MSR_LAST_BRANCH_FROM_x when LBR is enabled and there is potential for
    kernel addresses to be in the lbr_from register.
    
    To test this patch, use a perf tool and kernel with the patch
    next in this series. That patch removes the work around that masked
    the hw bug:
    
      $ ./lbr_perf record --call-graph lbr -e cycles:k sleep 1
    
    where lbr_perf is the patched perf tool, that allows to specify :k
    on lbr mode. The above command will trigger a #GPF :
    
     WARNING: CPU: 28 PID: 14096 at arch/x86/mm/extable.c:65 ex_handler_wrmsr_unsafe+0x70/0x80
     unchecked MSR access error: WRMSR to 0x681 (tried to write 0x1fffffff81010794)
     ...
     Call Trace:
      [<ffffffff8167af49>] dump_stack+0x4d/0x63
      [<ffffffff810b9b15>] __warn+0xe5/0x100
      [<ffffffff810b9be9>] warn_slowpath_fmt+0x49/0x50
      [<ffffffff810abb40>] ex_handler_wrmsr_unsafe+0x70/0x80
      [<ffffffff810abc42>] fixup_exception+0x42/0x50
      [<ffffffff81079d1a>] do_general_protection+0x8a/0x160
      [<ffffffff81684ec2>] general_protection+0x22/0x30
      [<ffffffff810101b9>] ? intel_pmu_lbr_sched_task+0xc9/0x380
      [<ffffffff81009d7c>] intel_pmu_sched_task+0x3c/0x60
      [<ffffffff81003a2b>] x86_pmu_sched_task+0x1b/0x20
      [<ffffffff81192a5b>] perf_pmu_sched_task+0x6b/0xb0
      [<ffffffff8119746d>] __perf_event_task_sched_in+0x7d/0x150
      [<ffffffff810dd9dc>] finish_task_switch+0x15c/0x200
      [<ffffffff8167f894>] __schedule+0x274/0x6cc
      [<ffffffff8167fdd9>] schedule+0x39/0x90
      [<ffffffff81675398>] exit_to_usermode_loop+0x39/0x89
      [<ffffffff810028ce>] prepare_exit_to_usermode+0x2e/0x30
      [<ffffffff81683c1b>] retint_user+0x8/0x10
    Signed-off-by: default avatarDavid Carrillo-Cisneros <davidcc@google.com>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Reviewed-by: default avatarStephane Eranian <eranian@google.com>
    Reviewed-by: default avatarAndi Kleen <ak@linux.intel.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Kan Liang <kan.liang@intel.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Vince Weaver <vincent.weaver@maine.edu>
    Link: http://lkml.kernel.org/r/1466533874-52003-5-git-send-email-davidcc@google.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    71adae99
lbr.c 29.2 KB