Tony Jones 455eb5
From: Song Liu <songliubraving@fb.com>
Tony Jones 455eb5
Date: Thu, 11 Nov 2021 21:45:10 -0800
Tony Jones 455eb5
Subject: x86/perf: Fix snapshot_branch_stack warning in VM
Tony Jones 455eb5
Git-commit: f3fd84a3b7754b60df67ebfe64e1d90623895111
Tony Jones 455eb5
Patch-mainline: v5.16-rc2
Tony Jones 455eb5
References: git fixes
Tony Jones 455eb5
Tony Jones 455eb5
When running in VM intel_pmu_snapshot_branch_stack triggers WRMSR warning
Tony Jones 455eb5
like:
Tony Jones 455eb5
Tony Jones 455eb5
 [ ] unchecked MSR access error: WRMSR to 0x3f1 (tried to write 0x0000000000000000) at rIP: 0xffffffff81011a5b (intel_pmu_snapshot_branch_stack+0x3b/0xd0)
Tony Jones 455eb5
Tony Jones 455eb5
This can be triggered with BPF selftests:
Tony Jones 455eb5
Tony Jones 455eb5
  tools/testing/selftests/bpf/test_progs -t get_branch_snapshot
Tony Jones 455eb5
Tony Jones 455eb5
This warning is caused by __intel_pmu_pebs_disable_all() in the VM.
Tony Jones 455eb5
Since it is not necessary to disable PEBS for LBR, remove it from
Tony Jones 455eb5
intel_pmu_snapshot_branch_stack and intel_pmu_snapshot_arch_branch_stack.
Tony Jones 455eb5
Tony Jones 455eb5
Fixes: c22ac2a3d4bd ("perf: Enable branch record for software events")
Tony Jones 455eb5
Signed-off-by: Song Liu <songliubraving@fb.com>
Tony Jones 455eb5
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Tony Jones 455eb5
Tested-by: Like Xu <likexu@tencent.com>
Tony Jones 455eb5
Link: https://lore.kernel.org/r/20211112054510.2667030-1-songliubraving@fb.com
Tony Jones 455eb5
Tony Jones 455eb5
Signed-off-by: Tony Jones <tonyj@suse.de>
Tony Jones 455eb5
---
Tony Jones 455eb5
 arch/x86/events/intel/core.c | 2 --
Tony Jones 455eb5
 1 file changed, 2 deletions(-)
Tony Jones 455eb5
Tony Jones 455eb5
diff --git a/arch/x86/events/intel/core.c b/arch/x86/events/intel/core.c
Tony Jones 455eb5
index 42cf01ecdd13..ec6444f2c9dc 100644
Tony Jones 455eb5
--- a/arch/x86/events/intel/core.c
Tony Jones 455eb5
+++ b/arch/x86/events/intel/core.c
Tony Jones 455eb5
@@ -2211,7 +2211,6 @@ intel_pmu_snapshot_branch_stack(struct perf_branch_entry *entries, unsigned int
Tony Jones 455eb5
 	/* must not have branches... */
Tony Jones 455eb5
 	local_irq_save(flags);
Tony Jones 455eb5
 	__intel_pmu_disable_all(false); /* we don't care about BTS */
Tony Jones 455eb5
-	__intel_pmu_pebs_disable_all();
Tony Jones 455eb5
 	__intel_pmu_lbr_disable();
Tony Jones 455eb5
 	/*            ... until here */
Tony Jones 455eb5
 	return __intel_pmu_snapshot_branch_stack(entries, cnt, flags);
Tony Jones 455eb5
@@ -2225,7 +2224,6 @@ intel_pmu_snapshot_arch_branch_stack(struct perf_branch_entry *entries, unsigned
Tony Jones 455eb5
 	/* must not have branches... */
Tony Jones 455eb5
 	local_irq_save(flags);
Tony Jones 455eb5
 	__intel_pmu_disable_all(false); /* we don't care about BTS */
Tony Jones 455eb5
-	__intel_pmu_pebs_disable_all();
Tony Jones 455eb5
 	__intel_pmu_arch_lbr_disable();
Tony Jones 455eb5
 	/*            ... until here */
Tony Jones 455eb5
 	return __intel_pmu_snapshot_branch_stack(entries, cnt, flags);
Tony Jones 455eb5