Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp396408pxb; Wed, 24 Feb 2021 05:18:34 -0800 (PST) X-Google-Smtp-Source: ABdhPJwJEmeGfUgAcGfMNkpN6rL+ZZe6wUX1ZdsljqXde9rO08ahe6zlU7kBp3u2PMswKxNiDPx2 X-Received: by 2002:a17:907:3e04:: with SMTP id hp4mr31881249ejc.188.1614172714645; Wed, 24 Feb 2021 05:18:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1614172714; cv=none; d=google.com; s=arc-20160816; b=C5I4hz17XOUuHNp8X0+PSIkk/JLQhhT6mAYXa9Op1JstUT6ySnhAsa38EqldOE2woc fCsK/8i5XaVUV/76UZ8d/b7sXmJkHgVpBFLpsqed+i0ztizufVBVRklzQg4pJ2Mcotcy KG8NM+YGxH/4XjLjFDi/iR33y0h/4VnkHaU3bBUVNq8eSk7/Lwn/IRXABRQlpXntKYTV 7L7Pk31uIzxTvdD+FDM14kPKWPE0Shd8JJxngwdz32K3D7Ay7UGK6BQ4j4ltyrTax/Kx pNCDaysGW35j4xIrH11IVxEKC3QQYWGkeAFvYQuXNgOrsDGJdvyNv3AXPhD5KvVtcIzn YqOw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=X5l/+kvBpi4wg1MnQjRCZWdBbEciZa8z0Romt6Vs2hw=; b=xvH9ciawSnvYo/+tTaLJ2PUgvs+/mQk7h4Z9gEJFwO0F761bN2EXGethqcwPiBUUaL KoGa3a36/syHZGwp+JjkVT3OSwBryQBXMutt0i5WISyuwZpFl+G8LDsc0zBaxzcDu4Qv yOMko0wLcRIaKBsU+OzTdeF7eFB08XBJt4gkc37h9tFxq4TqXFskkIeLenAv2hPPeynm E4fL3iYhhR17wTSwOEFLrc1Hrot79lOfMOUBLJWPsA7tobiigI9PQ/w7t7nR1dVUGjR6 Yh1CHG43lO2ElbGSdh4Ok8NhSc9nwv1yMZjBtSQGtJksr4z0vaj9AD3b1OUsfjgqm7cx lw/g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=canonical.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id o17si1074594edz.582.2021.02.24.05.17.23; Wed, 24 Feb 2021 05:18:34 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=canonical.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234418AbhBXMWf (ORCPT + 99 others); Wed, 24 Feb 2021 07:22:35 -0500 Received: from youngberry.canonical.com ([91.189.89.112]:53227 "EHLO youngberry.canonical.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232564AbhBXMWe (ORCPT ); Wed, 24 Feb 2021 07:22:34 -0500 Received: from 1.general.cascardo.us.vpn ([10.172.70.58] helo=localhost.localdomain) by youngberry.canonical.com with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1lEtAm-0000rM-VA; Wed, 24 Feb 2021 12:21:45 +0000 From: Thadeu Lima de Souza Cascardo To: linuxppc-dev@lists.ozlabs.org Cc: mpe@ellerman.id.au, peterz@infradead.org, linux-kernel@vger.kernel.org, cascardo@canonical.com Subject: [PATCH] powerpc/perf: prevent mixed EBB and non-EBB events Date: Wed, 24 Feb 2021 09:21:16 -0300 Message-Id: <20210224122116.221120-1-cascardo@canonical.com> X-Mailer: git-send-email 2.27.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org EBB events must be under exclusive groups, so there is no mix of EBB and non-EBB events on the same PMU. This requirement worked fine as perf core would not allow other pinned events to be scheduled together with exclusive events. This assumption was broken by commit 1908dc911792 ("perf: Tweak perf_event_attr::exclusive semantics"). After that, the test cpu_event_pinned_vs_ebb_test started succeeding after read_events, but worse, the task would not have given access to PMC1, so when it tried to write to it, it was killed with "illegal instruction". Preventing mixed EBB and non-EBB events from being add to the same PMU will just revert to the previous behavior and the test will succeed. Fixes: 1908dc911792 (perf: Tweak perf_event_attr::exclusive semantics) Signed-off-by: Thadeu Lima de Souza Cascardo --- arch/powerpc/perf/core-book3s.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c index 43599e671d38..d767f7944f85 100644 --- a/arch/powerpc/perf/core-book3s.c +++ b/arch/powerpc/perf/core-book3s.c @@ -1010,9 +1010,25 @@ static int check_excludes(struct perf_event **ctrs, unsigned int cflags[], int n_prev, int n_new) { int eu = 0, ek = 0, eh = 0; + bool ebb = false; int i, n, first; struct perf_event *event; + n = n_prev + n_new; + if (n <= 1) + return 0; + + first = 1; + for (i = 0; i < n; ++i) { + event = ctrs[i]; + if (first) { + ebb = is_ebb_event(event); + first = 0; + } else if (is_ebb_event(event) != ebb) { + return -EAGAIN; + } + } + /* * If the PMU we're on supports per event exclude settings then we * don't need to do any of this logic. NB. This assumes no PMU has both @@ -1021,10 +1037,6 @@ static int check_excludes(struct perf_event **ctrs, unsigned int cflags[], if (ppmu->flags & PPMU_ARCH_207S) return 0; - n = n_prev + n_new; - if (n <= 1) - return 0; - first = 1; for (i = 0; i < n; ++i) { if (cflags[i] & PPMU_LIMITED_PMC_OK) { -- 2.27.0