Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756246AbbGFNsH (ORCPT ); Mon, 6 Jul 2015 09:48:07 -0400 Received: from mga14.intel.com ([192.55.52.115]:18690 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755645AbbGFNsE convert rfc822-to-8bit (ORCPT ); Mon, 6 Jul 2015 09:48:04 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.15,415,1432623600"; d="scan'208";a="756864319" From: "Liang, Kan" To: Peter Zijlstra , "Vince Weaver (vincent.weaver@maine.edu)" CC: "linux-kernel@vger.kernel.org" , Ingo Molnar , Arnaldo Carvalho de Melo , "Stephane Eranian" Subject: RE: perf: fuzzer triggered warning in intel_pmu_drain_pebs_nhm() Thread-Topic: perf: fuzzer triggered warning in intel_pmu_drain_pebs_nhm() Thread-Index: AQHQtZIrWo8WhOngikicIZVMqW8Mb53KKJlQgAOao4CAAKBqAA== Date: Mon, 6 Jul 2015 13:47:42 +0000 Message-ID: <37D7C6CF3E00A74B8858931C1DB2F07701886203@SHSMSX103.ccr.corp.intel.com> References: <20150703131336.GI19282@twins.programming.kicks-ass.net> <37D7C6CF3E00A74B8858931C1DB2F07701885A65@SHSMSX103.ccr.corp.intel.com> <20150706105517.GZ3644@twins.programming.kicks-ass.net> In-Reply-To: <20150706105517.GZ3644@twins.programming.kicks-ass.net> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 8BIT MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2380 Lines: 66 > On Fri, Jul 03, 2015 at 08:08:27PM +0000, Liang, Kan wrote: > > If we cleared the last bit, we not only drain the buffer but also > > decrease the event->ctx->pmu, which is used to flush the PEBS buffer > > during context switches. > > We need to disable cpuc->pebs_enabled before changing > > event->ctx->pmu as below. > > > > Indeed, mind sending a proper patch so I can press 'A' on it? Sure, I will do that. But I didn't verify the patch, since I cannot reproduce the issue. Vince, would you mind testing the patch? If the issue is gone, I will send a proper patch then. Thanks, Kan > > > diff --git a/arch/x86/kernel/cpu/perf_event_intel_ds.c > > b/arch/x86/kernel/cpu/perf_event_intel_ds.c > > index 71fc402..76285c1 100644 > > --- a/arch/x86/kernel/cpu/perf_event_intel_ds.c > > +++ b/arch/x86/kernel/cpu/perf_event_intel_ds.c > > @@ -754,6 +754,11 @@ void intel_pmu_pebs_disable(struct perf_event > > *event) > > struct cpu_hw_events *cpuc = this_cpu_ptr(&cpu_hw_events); > > struct hw_perf_event *hwc = &event->hw; > > struct debug_store *ds = cpuc->ds; > > + bool large_pebs = ds->pebs_interrupt_threshold > > > + ds->pebs_buffer_base + > > + x86_pmu.pebs_record_size; > > + > > + if (large_pebs) > > + intel_pmu_drain_pebs_buffer(); > > > > cpuc->pebs_enabled &= ~(1ULL << hwc->idx); > > > > @@ -762,12 +767,8 @@ void intel_pmu_pebs_disable(struct perf_event > > *event) > > else if (event->hw.flags & PERF_X86_EVENT_PEBS_ST) > > cpuc->pebs_enabled &= ~(1ULL << 63); > > > > - if (ds->pebs_interrupt_threshold > > > - ds->pebs_buffer_base + x86_pmu.pebs_record_size) { > > - intel_pmu_drain_pebs_buffer(); > > - if (!pebs_is_enabled(cpuc)) > > - perf_sched_cb_dec(event->ctx->pmu); > > - } > > + if (large_pebs && !pebs_is_enabled(cpuc)) > > + perf_sched_cb_dec(event->ctx->pmu); > > > > if (cpuc->enabled) > > wrmsrl(MSR_IA32_PEBS_ENABLE, cpuc->pebs_enabled); > > > > > > > > Thanks, > > Kan -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/