Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S941406AbcLVQxI (ORCPT ); Thu, 22 Dec 2016 11:53:08 -0500 Received: from terminus.zytor.com ([198.137.202.10]:36380 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1763505AbcLVQxH (ORCPT ); Thu, 22 Dec 2016 11:53:07 -0500 Date: Thu, 22 Dec 2016 08:50:44 -0800 From: tip-bot for Peter Zijlstra Message-ID: Cc: torvalds@linux-foundation.org, jolsa@kernel.org, mingo@kernel.org, peterz@infradead.org, jolsa@redhat.com, vincent.weaver@maine.edu, eranian@google.com, vince@deater.net, kan.liang@intel.com, alexander.shishkin@linux.intel.com, linux-kernel@vger.kernel.org, hpa@zytor.com, acme@redhat.com, tglx@linutronix.de, rric@kernel.org Reply-To: hpa@zytor.com, linux-kernel@vger.kernel.org, alexander.shishkin@linux.intel.com, kan.liang@intel.com, vince@deater.net, vincent.weaver@maine.edu, eranian@google.com, rric@kernel.org, acme@redhat.com, tglx@linutronix.de, torvalds@linux-foundation.org, jolsa@kernel.org, jolsa@redhat.com, peterz@infradead.org, mingo@kernel.org In-Reply-To: <20161109155153.GQ3142@twins.programming.kicks-ass.net> References: <20161109155153.GQ3142@twins.programming.kicks-ass.net> To: linux-tip-commits@vger.kernel.org Subject: [tip:perf/urgent] perf/x86: Fix overlap counter scheduling bug Git-Commit-ID: 1134c2b5cb840409ffd966d8c2a9468f64e6a494 X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3209 Lines: 85 Commit-ID: 1134c2b5cb840409ffd966d8c2a9468f64e6a494 Gitweb: http://git.kernel.org/tip/1134c2b5cb840409ffd966d8c2a9468f64e6a494 Author: Peter Zijlstra AuthorDate: Wed, 9 Nov 2016 16:51:53 +0100 Committer: Ingo Molnar CommitDate: Thu, 22 Dec 2016 17:45:43 +0100 perf/x86: Fix overlap counter scheduling bug Jiri reported the overlap scheduling exceeding its max stack. Looking at the constraint that triggered this, it turns out the overlap marker isn't needed. The comment with EVENT_CONSTRAINT_OVERLAP states: "This is the case if the counter mask of such an event is not a subset of any other counter mask of a constraint with an equal or higher weight". Esp. that latter part is of interest here I think, our overlapping mask is 0x0e, that has 3 bits set and is the highest weight mask in on the PMU, therefore it will be placed last. Can we still create a scenario where we would need to rewind that? The scenario for AMD Fam15h is we're having masks like: 0x3F -- 111111 0x38 -- 111000 0x07 -- 000111 0x09 -- 001001 And we mark 0x09 as overlapping, because it is not a direct subset of 0x38 or 0x07 and has less weight than either of those. This means we'll first try and place the 0x09 event, then try and place 0x38/0x07 events. Now imagine we have: 3 * 0x07 + 0x09 and the initial pick for the 0x09 event is counter 0, then we'll fail to place all 0x07 events. So we'll pop back, try counter 4 for the 0x09 event, and then re-try all 0x07 events, which will now work. The masks on the PMU in question are: 0x01 - 0001 0x03 - 0011 0x0e - 1110 0x0c - 1100 But since all the masks that have overlap (0xe -> {0xc,0x3}) and (0x3 -> 0x1) are of heavier weight, it should all work out. Reported-by: Jiri Olsa Tested-by: Jiri Olsa Signed-off-by: Peter Zijlstra (Intel) Cc: Alexander Shishkin Cc: Arnaldo Carvalho de Melo Cc: Jiri Olsa Cc: Liang Kan Cc: Linus Torvalds Cc: Peter Zijlstra Cc: Robert Richter Cc: Stephane Eranian Cc: Thomas Gleixner Cc: Vince Weaver Cc: Vince Weaver Link: http://lkml.kernel.org/r/20161109155153.GQ3142@twins.programming.kicks-ass.net Signed-off-by: Ingo Molnar --- arch/x86/events/intel/uncore_snbep.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/x86/events/intel/uncore_snbep.c b/arch/x86/events/intel/uncore_snbep.c index 2724277..e6832be 100644 --- a/arch/x86/events/intel/uncore_snbep.c +++ b/arch/x86/events/intel/uncore_snbep.c @@ -669,7 +669,7 @@ static struct event_constraint snbep_uncore_cbox_constraints[] = { UNCORE_EVENT_CONSTRAINT(0x1c, 0xc), UNCORE_EVENT_CONSTRAINT(0x1d, 0xc), UNCORE_EVENT_CONSTRAINT(0x1e, 0xc), - EVENT_CONSTRAINT_OVERLAP(0x1f, 0xe, 0xff), + UNCORE_EVENT_CONSTRAINT(0x1f, 0xe), UNCORE_EVENT_CONSTRAINT(0x21, 0x3), UNCORE_EVENT_CONSTRAINT(0x23, 0x3), UNCORE_EVENT_CONSTRAINT(0x31, 0x3),