public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* perf: perf_fuzzer still triggers bts warning
@ 2016-09-14 16:49 Vince Weaver
  2016-09-14 17:01 ` Vince Weaver
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Vince Weaver @ 2016-09-14 16:49 UTC (permalink / raw)
  To: linux-kernel
  Cc: Alexander Shishkin, Peter Zijlstra, Stephane Eranian, Ingo Molnar

Hello

I'm running 4.8-rc6 git from this morning (with the various perf fixes).

Fuzzing on Skylake I still managed to trigger the following warning.

It maps to

void intel_bts_enable_local(void)
{
...
        /*
         * Here we transition from INACTIVE to ACTIVE;
         * if we instead are STOPPED from the interrupt handler,
         * stay that way. Can't be ACTIVE here though.
         */
        if (WARN_ON_ONCE(state == BTS_STATE_ACTIVE))
                return;

[ 4070.994175] ------------[ cut here ]------------
[ 4070.994469] WARNING: CPU: 0 PID: 25484 at arch/x86/events/intel/bts.c:344 intel_bts_enable_local+0x58/0x60
[ 4070.995428] CPU: 0 PID: 25484 Comm: perf_fuzzer Not tainted 4.8.0-rc6+ #5
[ 4070.995430] Hardware name: LENOVO 10FY0017US/SKYBAY, BIOS FWKT53A   06/06/2016
[ 4070.995433]  0000000000000086 00000000dfbb88aa ffff9045fdc03dc8 ffffffff93b3b863
[ 4070.995438]  0000000000000000 0000000000000000 ffff9045fdc03e08 ffffffff9387f7d1
[ 4070.995443]  00000158fdc03e08 ffff9045fdc0a480 0000000000000000 ffff9045fdc0a480
[ 4070.995448] Call Trace:
[ 4070.995450]  <IRQ>  [<ffffffff93b3b863>] dump_stack+0x63/0x90
[ 4070.995465]  [<ffffffff9387f7d1>] __warn+0xd1/0xf0
[ 4070.995471]  [<ffffffff9387f8fd>] warn_slowpath_null+0x1d/0x20
[ 4070.995474]  [<ffffffff9380d8b8>] intel_bts_enable_local+0x58/0x60
[ 4070.995478]  [<ffffffff9380b2a0>] __intel_pmu_enable_all+0x80/0xb0
[ 4070.995481]  [<ffffffff9380b2e0>] intel_pmu_enable_all+0x10/0x20
[ 4070.995486]  [<ffffffff93807741>] x86_pmu_enable+0x261/0x2f0
[ 4070.995491]  [<ffffffff93976950>] ? __perf_install_in_context+0x110/0x110
[ 4070.995494]  [<ffffffff93974ff2>] perf_pmu_enable+0x22/0x30
[ 4070.995498]  [<ffffffff93976a61>] perf_mux_hrtimer_handler+0x111/0x1c0
[ 4070.995504]  [<ffffffff938ef633>] __hrtimer_run_queues+0xf3/0x280
[ 4070.995509]  [<ffffffff938efb08>] hrtimer_interrupt+0xa8/0x1a0
[ 4070.995515]  [<ffffffff93852d88>] local_apic_timer_interrupt+0x38/0x60
[ 4070.995521]  [<ffffffff93e1de8d>] smp_apic_timer_interrupt+0x3d/0x50
[ 4070.995525]  [<ffffffff93e1d1a2>] apic_timer_interrupt+0x82/0x90
[ 4070.995526]  <EOI> 
[ 4070.995529] ---[ end trace 6247e022342bacf7 ]---

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: perf: perf_fuzzer still triggers bts warning
  2016-09-14 16:49 perf: perf_fuzzer still triggers bts warning Vince Weaver
@ 2016-09-14 17:01 ` Vince Weaver
  2016-09-15  8:22 ` [PATCH] perf/x86/intel: Don't disable "intel_bts" around "intel" event batching Alexander Shishkin
  2016-09-15  8:25 ` perf: perf_fuzzer still triggers bts warning Alexander Shishkin
  2 siblings, 0 replies; 5+ messages in thread
From: Vince Weaver @ 2016-09-14 17:01 UTC (permalink / raw)
  To: linux-kernel
  Cc: Alexander Shishkin, Peter Zijlstra, Stephane Eranian, Ingo Molnar


Probably not related but it also triggered this just now:

static void x86_pmu_start(struct perf_event *event, int flags)
{
        struct cpu_hw_events *cpuc = this_cpu_ptr(&cpu_hw_events);
        int idx = event->hw.idx;

        if (WARN_ON_ONCE(!(event->hw.state & PERF_HES_STOPPED)))
                return;


[ 7501.295830] ------------[ cut here ]------------
[ 7501.295844] WARNING: CPU: 2 PID: 7166 at arch/x86/events/core.c:1236 x86_pmu_start+0xae/0x100
[ 7501.295948] CPU: 2 PID: 7166 Comm: perf_fuzzer Tainted: G        W       4.8.0-rc6+ #5
[ 7501.295950] Hardware name: LENOVO 10FY0017US/SKYBAY, BIOS FWKT53A   06/06/2016
[ 7501.295952]  0000000000000086 000000006d6df8e9 ffff9045fdc83d70 ffffffff93b3b863
[ 7501.295958]  0000000000000000 0000000000000000 ffff9045fdc83db0 ffffffff9387f7d1
[ 7501.295963]  000004d4ee352100 ffff9045fdc8a480 ffff9045f0d18800 0000000000000001
[ 7501.295968] Call Trace:
[ 7501.295970]  <IRQ>  [<ffffffff93b3b863>] dump_stack+0x63/0x90
[ 7501.295985]  [<ffffffff9387f7d1>] __warn+0xd1/0xf0
[ 7501.295989]  [<ffffffff9387f8fd>] warn_slowpath_null+0x1d/0x20
[ 7501.295994]  [<ffffffff93806f9e>] x86_pmu_start+0xae/0x100
[ 7501.295999]  [<ffffffff93977050>] perf_event_task_tick+0x1f0/0x2c0
[ 7501.296004]  [<ffffffff938abbc8>] scheduler_tick+0x78/0xd0
[ 7501.296008]  [<ffffffff938fe8b0>] ? tick_sched_do_timer+0x30/0x30
[ 7501.296014]  [<ffffffff938ee8a7>] update_process_times+0x47/0x60
[ 7501.296017]  [<ffffffff938fe285>] tick_sched_handle.isra.13+0x25/0x60
[ 7501.296020]  [<ffffffff938fe8ed>] tick_sched_timer+0x3d/0x70
[ 7501.296025]  [<ffffffff938ef633>] __hrtimer_run_queues+0xf3/0x280
[ 7501.296030]  [<ffffffff938efb08>] hrtimer_interrupt+0xa8/0x1a0
[ 7501.296035]  [<ffffffff93852d88>] local_apic_timer_interrupt+0x38/0x60
[ 7501.296040]  [<ffffffff93e1de8d>] smp_apic_timer_interrupt+0x3d/0x50
[ 7501.296045]  [<ffffffff93e1d1a2>] apic_timer_interrupt+0x82/0x90
[ 7501.296046]  <EOI>  [<ffffffff939bc799>] ? vm_normal_page+0x9/0xa0
[ 7501.296057]  [<ffffffff939bd637>] ? unmap_page_range+0x557/0x930
[ 7501.296062]  [<ffffffff939bda8d>] unmap_single_vma+0x7d/0xe0
[ 7501.296066]  [<ffffffff939bddda>] unmap_vmas+0x4a/0xa0
[ 7501.296070]  [<ffffffff939c6687>] exit_mmap+0xa7/0x170
[ 7501.296075]  [<ffffffff9387c962>] mmput+0x62/0xf0
[ 7501.296078]  [<ffffffff93883739>] do_exit+0x339/0xb60
[ 7501.296082]  [<ffffffff93883fe3>] do_group_exit+0x43/0xc0
[ 7501.296085]  [<ffffffff9388f4f8>] get_signal+0x2b8/0x6b0
[ 7501.296090]  [<ffffffff9382d5d7>] do_signal+0x37/0x7c0
[ 7501.296094]  [<ffffffff939c0b2c>] ? handle_mm_fault+0xb0c/0x15d0
[ 7501.296099]  [<ffffffff938373d9>] ? sched_clock+0x9/0x10
[ 7501.296102]  [<ffffffff938373d9>] ? sched_clock+0x9/0x10
[ 7501.296107]  [<ffffffff93831761>] ? nmi_handle+0x71/0x120
[ 7501.296111]  [<ffffffff9380358c>] exit_to_usermode_loop+0x8c/0xd0
[ 7501.296115]  [<ffffffff93803a36>] prepare_exit_to_usermode+0x26/0x30
[ 7501.296118]  [<ffffffff93e1bee5>] retint_user+0x8/0x13
[ 7501.296121] ---[ end trace 6247e022342bacf8 ]---

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH] perf/x86/intel: Don't disable "intel_bts" around "intel" event batching
  2016-09-14 16:49 perf: perf_fuzzer still triggers bts warning Vince Weaver
  2016-09-14 17:01 ` Vince Weaver
@ 2016-09-15  8:22 ` Alexander Shishkin
  2016-09-15 10:44   ` [tip:perf/urgent] " tip-bot for Alexander Shishkin
  2016-09-15  8:25 ` perf: perf_fuzzer still triggers bts warning Alexander Shishkin
  2 siblings, 1 reply; 5+ messages in thread
From: Alexander Shishkin @ 2016-09-15  8:22 UTC (permalink / raw)
  To: Peter Zijlstra
  Cc: Ingo Molnar, linux-kernel, vince, eranian,
	Arnaldo Carvalho de Melo, Alexander Shishkin

At the moment, intel_bts events get disabled from intel PMU's disable
callback, which includes event scheduling transactions of said PMU,
which have nothing to do with intel_bts events.

We do want to keep intel_bts events off inside the PMI handler to
avoid filling up their buffer too soon.

This patch moves intel_bts enabling/disabling directly to the PMI
handler.

Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>
---
 arch/x86/events/intel/core.c | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/arch/x86/events/intel/core.c b/arch/x86/events/intel/core.c
index 88792f846d..e2d71513c9 100644
--- a/arch/x86/events/intel/core.c
+++ b/arch/x86/events/intel/core.c
@@ -1730,9 +1730,11 @@ static __initconst const u64 knl_hw_cache_extra_regs
  * disabled state if called consecutively.
  *
  * During consecutive calls, the same disable value will be written to related
- * registers, so the PMU state remains unchanged. hw.state in
- * intel_bts_disable_local will remain PERF_HES_STOPPED too in consecutive
- * calls.
+ * registers, so the PMU state remains unchanged.
+ *
+ * intel_bts events don't coexist with intel pmu's BTS events because of
+ * x86_add_exclusive(x86_lbr_exclusive_lbr); there's no need to keep them
+ * disabled around intel pmu's event batching etc, only inside the PMI handler.
  */
 static void __intel_pmu_disable_all(void)
 {
@@ -1742,8 +1744,6 @@ static void __intel_pmu_disable_all(void)
 
 	if (test_bit(INTEL_PMC_IDX_FIXED_BTS, cpuc->active_mask))
 		intel_pmu_disable_bts();
-	else
-		intel_bts_disable_local();
 
 	intel_pmu_pebs_disable_all();
 }
@@ -1771,8 +1771,7 @@ static void __intel_pmu_enable_all(int added, bool pmi)
 			return;
 
 		intel_pmu_enable_bts(event->hw.config);
-	} else
-		intel_bts_enable_local();
+	}
 }
 
 static void intel_pmu_enable_all(int added)
@@ -2076,6 +2075,7 @@ static int intel_pmu_handle_irq(struct pt_regs *regs)
 	 */
 	if (!x86_pmu.late_ack)
 		apic_write(APIC_LVTPC, APIC_DM_NMI);
+	intel_bts_disable_local();
 	__intel_pmu_disable_all();
 	handled = intel_pmu_drain_bts_buffer();
 	handled += intel_bts_interrupt();
@@ -2175,6 +2175,7 @@ done:
 	/* Only restore PMU state when it's active. See x86_pmu_disable(). */
 	if (cpuc->enabled)
 		__intel_pmu_enable_all(0, true);
+	intel_bts_enable_local();
 
 	/*
 	 * Only unmask the NMI after the overflow counters
-- 
2.9.3

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: perf: perf_fuzzer still triggers bts warning
  2016-09-14 16:49 perf: perf_fuzzer still triggers bts warning Vince Weaver
  2016-09-14 17:01 ` Vince Weaver
  2016-09-15  8:22 ` [PATCH] perf/x86/intel: Don't disable "intel_bts" around "intel" event batching Alexander Shishkin
@ 2016-09-15  8:25 ` Alexander Shishkin
  2 siblings, 0 replies; 5+ messages in thread
From: Alexander Shishkin @ 2016-09-15  8:25 UTC (permalink / raw)
  To: Vince Weaver, linux-kernel; +Cc: Peter Zijlstra, Stephane Eranian, Ingo Molnar

Vince Weaver <vincent.weaver@maine.edu> writes:

> Hello
>
> I'm running 4.8-rc6 git from this morning (with the various perf fixes).
>
> Fuzzing on Skylake I still managed to trigger the following warning.

I was sure that I'd sent the fix for this one in the earlier series, but
somehow I missed it. Sending now.

Thanks,
--
Alex

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [tip:perf/urgent] perf/x86/intel: Don't disable "intel_bts" around "intel" event batching
  2016-09-15  8:22 ` [PATCH] perf/x86/intel: Don't disable "intel_bts" around "intel" event batching Alexander Shishkin
@ 2016-09-15 10:44   ` tip-bot for Alexander Shishkin
  0 siblings, 0 replies; 5+ messages in thread
From: tip-bot for Alexander Shishkin @ 2016-09-15 10:44 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: acme, vincent.weaver, tglx, jolsa, alexander.shishkin, acme, hpa,
	linux-kernel, mingo, peterz, a.p.zijlstra, eranian, torvalds

Commit-ID:  cecf62352aee2b4fe114aafd1b8c5f265a4243ce
Gitweb:     http://git.kernel.org/tip/cecf62352aee2b4fe114aafd1b8c5f265a4243ce
Author:     Alexander Shishkin <alexander.shishkin@linux.intel.com>
AuthorDate: Thu, 15 Sep 2016 11:22:33 +0300
Committer:  Ingo Molnar <mingo@kernel.org>
CommitDate: Thu, 15 Sep 2016 11:25:26 +0200

perf/x86/intel: Don't disable "intel_bts" around "intel" event batching

At the moment, intel_bts events get disabled from intel PMU's disable
callback, which includes event scheduling transactions of said PMU,
which have nothing to do with intel_bts events.

We do want to keep intel_bts events off inside the PMI handler to
avoid filling up their buffer too soon.

This patch moves intel_bts enabling/disabling directly to the PMI
handler.

Reported-by: Vince Weaver <vincent.weaver@maine.edu>
Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Arnaldo Carvalho de Melo <acme@infradead.org>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: vince@deater.net
Link: http://lkml.kernel.org/r/20160915082233.11065-1-alexander.shishkin@linux.intel.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 arch/x86/events/intel/core.c | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/arch/x86/events/intel/core.c b/arch/x86/events/intel/core.c
index 2cbde2f..4c9a79b 100644
--- a/arch/x86/events/intel/core.c
+++ b/arch/x86/events/intel/core.c
@@ -1730,9 +1730,11 @@ static __initconst const u64 knl_hw_cache_extra_regs
  * disabled state if called consecutively.
  *
  * During consecutive calls, the same disable value will be written to related
- * registers, so the PMU state remains unchanged. hw.state in
- * intel_bts_disable_local will remain PERF_HES_STOPPED too in consecutive
- * calls.
+ * registers, so the PMU state remains unchanged.
+ *
+ * intel_bts events don't coexist with intel PMU's BTS events because of
+ * x86_add_exclusive(x86_lbr_exclusive_lbr); there's no need to keep them
+ * disabled around intel PMU's event batching etc, only inside the PMI handler.
  */
 static void __intel_pmu_disable_all(void)
 {
@@ -1742,8 +1744,6 @@ static void __intel_pmu_disable_all(void)
 
 	if (test_bit(INTEL_PMC_IDX_FIXED_BTS, cpuc->active_mask))
 		intel_pmu_disable_bts();
-	else
-		intel_bts_disable_local();
 
 	intel_pmu_pebs_disable_all();
 }
@@ -1771,8 +1771,7 @@ static void __intel_pmu_enable_all(int added, bool pmi)
 			return;
 
 		intel_pmu_enable_bts(event->hw.config);
-	} else
-		intel_bts_enable_local();
+	}
 }
 
 static void intel_pmu_enable_all(int added)
@@ -2073,6 +2072,7 @@ static int intel_pmu_handle_irq(struct pt_regs *regs)
 	 */
 	if (!x86_pmu.late_ack)
 		apic_write(APIC_LVTPC, APIC_DM_NMI);
+	intel_bts_disable_local();
 	__intel_pmu_disable_all();
 	handled = intel_pmu_drain_bts_buffer();
 	handled += intel_bts_interrupt();
@@ -2172,6 +2172,7 @@ done:
 	/* Only restore PMU state when it's active. See x86_pmu_disable(). */
 	if (cpuc->enabled)
 		__intel_pmu_enable_all(0, true);
+	intel_bts_enable_local();
 
 	/*
 	 * Only unmask the NMI after the overflow counters

^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2016-09-15 10:45 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-09-14 16:49 perf: perf_fuzzer still triggers bts warning Vince Weaver
2016-09-14 17:01 ` Vince Weaver
2016-09-15  8:22 ` [PATCH] perf/x86/intel: Don't disable "intel_bts" around "intel" event batching Alexander Shishkin
2016-09-15 10:44   ` [tip:perf/urgent] " tip-bot for Alexander Shishkin
2016-09-15  8:25 ` perf: perf_fuzzer still triggers bts warning Alexander Shishkin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox