Received: by 2002:a25:ca44:0:0:0:0:0 with SMTP id a65csp963210ybg; Wed, 29 Jul 2020 02:12:09 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxNpYc/HYnHGaP3ByIA6SncYSOzk0u9aKqEW8+COvfYWHDYU1coSvbAyagSMuZNFMvWkZJR X-Received: by 2002:a17:906:384a:: with SMTP id w10mr30881880ejc.235.1596013929270; Wed, 29 Jul 2020 02:12:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1596013929; cv=none; d=google.com; s=arc-20160816; b=jT2GZ3VwWKhixVtKPrOkPHAyNYpaOptRc6tpk2edQe3+ncDBPJdxUmDwx6YEWFMjHW +02XlyOBaCrHXjxGYVZkSD4/tERoBeU8TLB4j8oR6jRlb4KraUNfEQcT/8H+ZCHnDaRd lcULowJmFEyNFMxIHMj+G1RZ+7lVF3X8D/QP+n8DqT7v9YMqs2W1SW/QlrxsTS2402U7 mZ9ArwaRJ1XmFXb5VjpKuKc0YHAdgMxT1BaRvJ6wGicILToTk6XAqjtz8wIWh40Y9OCW hQfhJwDP2SbVAoICYrCaADYCNEMggOJLlePdt6im/I+it2UqBsKzgTPvszsODHtLcSMM r+pw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject; bh=c6ZmmExkQ0JtFLbqJ2P2lmHni3wCIgTwtNB/MBt8tQw=; b=rYdlPUeFjygwe1dseECIwWzOEjJ/V6FvtCu/TgiELrGGvrXVFpWl9z5XRU4YO1Adav BSqDg6LuyBtHd9u8rV77vKxcG7k5rgHm1hbeWhQkE3MYyPiKAnmcXIu3HmhP4GKfhA7H TMHUNO/EMWWbu3Z+++aVD9QlEbH0ViddES75h7Y8TKfK5nRyRP2M0/31E6fA96rxBNpu rhktjz+MloQ8RV1ZykZ29EkxUzpHUZSl5QQyJSNxCIOOL9i1tY6Q6bvu7TSs+UZwZYCX yXGXA0qSmnIEuUYrxe+PQxndVmUelj5tFSPk1DkU7kcprAMtvhzBSyRtWgUdZPETMN6E A1mg== 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id m10si873023eds.471.2020.07.29.02.11.47; Wed, 29 Jul 2020 02:12:09 -0700 (PDT) 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728052AbgG2JIL (ORCPT + 99 others); Wed, 29 Jul 2020 05:08:11 -0400 Received: from foss.arm.com ([217.140.110.172]:48256 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726548AbgG2JIL (ORCPT ); Wed, 29 Jul 2020 05:08:11 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 111D631B; Wed, 29 Jul 2020 02:08:10 -0700 (PDT) Received: from [10.37.8.154] (unknown [10.37.8.154]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 5768B3F718; Wed, 29 Jul 2020 02:08:06 -0700 (PDT) Subject: Re: [PATCH 1/4] drivers/perf: Add support for ARMv8.3-SPE To: liwei391@huawei.com, adrian.hunter@intel.com, alexander.shishkin@linux.intel.com, acme@kernel.org, catalin.marinas@arm.com, James.Clark@arm.com, jolsa@redhat.com, leo.yan@linaro.org, mark.rutland@arm.com, namhyung@kernel.org, will@kernel.org, zhangshaokun@hisilicon.com Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, mingo@redhat.com, peterz@infradead.org, guohanjun@huawei.com References: <20200724091607.41903-1-liwei391@huawei.com> <20200724091607.41903-2-liwei391@huawei.com> From: Suzuki K Poulose Message-ID: Date: Wed, 29 Jul 2020 10:12:50 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 MIME-Version: 1.0 In-Reply-To: <20200724091607.41903-2-liwei391@huawei.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 07/24/2020 10:16 AM, Wei Li wrote: > Armv8.3 extends the SPE by adding: > - Alignment field in the Events packet, and filtering on this event > using PMSEVFR_EL1. > - Support for the Scalable Vector Extension (SVE). > > The main additions for SVE are: > - Recording the vector length for SVE operations in the Operation Type > packet. It is not possible to filter on vector length. > - Incomplete predicate and empty predicate fields in the Events packet, > and filtering on these events using PMSEVFR_EL1. > > Update the check of pmsevfr for empty/partial predicated SVE and > alignment event in kernel driver. > > Signed-off-by: Wei Li > --- > arch/arm64/include/asm/sysreg.h | 4 +++- > drivers/perf/arm_spe_pmu.c | 18 ++++++++++++++---- > 2 files changed, 17 insertions(+), 5 deletions(-) > > diff --git a/arch/arm64/include/asm/sysreg.h b/arch/arm64/include/asm/sysreg.h > index 463175f80341..be4c44ccdb56 100644 > --- a/arch/arm64/include/asm/sysreg.h > +++ b/arch/arm64/include/asm/sysreg.h > @@ -281,7 +281,6 @@ > #define SYS_PMSFCR_EL1_ST_SHIFT 18 > > #define SYS_PMSEVFR_EL1 sys_reg(3, 0, 9, 9, 5) > -#define SYS_PMSEVFR_EL1_RES0 0x0000ffff00ff0f55UL > > #define SYS_PMSLATFR_EL1 sys_reg(3, 0, 9, 9, 6) > #define SYS_PMSLATFR_EL1_MINLAT_SHIFT 0 > @@ -769,6 +768,9 @@ > #define ID_AA64DFR0_PMUVER_8_5 0x6 > #define ID_AA64DFR0_PMUVER_IMP_DEF 0xf > > +#define ID_AA64DFR0_PMSVER_8_2 0x1 > +#define ID_AA64DFR0_PMSVER_8_3 0x2 > + > #define ID_DFR0_PERFMON_SHIFT 24 > > #define ID_DFR0_PERFMON_8_1 0x4 > diff --git a/drivers/perf/arm_spe_pmu.c b/drivers/perf/arm_spe_pmu.c > index e51ddb6d63ed..5ec7ee0c8fa1 100644 > --- a/drivers/perf/arm_spe_pmu.c > +++ b/drivers/perf/arm_spe_pmu.c > @@ -54,7 +54,7 @@ struct arm_spe_pmu { > struct hlist_node hotplug_node; > > int irq; /* PPI */ > - > + int pmuver; > u16 min_period; > u16 counter_sz; > > @@ -80,6 +80,15 @@ struct arm_spe_pmu { > /* Keep track of our dynamic hotplug state */ > static enum cpuhp_state arm_spe_pmu_online; > > +static u64 sys_pmsevfr_el1_mask[] = { > + [ID_AA64DFR0_PMSVER_8_2] = GENMASK_ULL(63, 48) | GENMASK_ULL(31, 24) | > + GENMASK_ULL(15, 12) | BIT_ULL(7) | BIT_ULL(5) | BIT_ULL(3) | > + BIT_ULL(1), > + [ID_AA64DFR0_PMSVER_8_3] = GENMASK_ULL(63, 48) | GENMASK_ULL(31, 24) | > + GENMASK_ULL(18, 17) | GENMASK_ULL(15, 11) | BIT_ULL(7) | > + BIT_ULL(5) | BIT_ULL(3) | BIT_ULL(1), > +}; > + > enum arm_spe_pmu_buf_fault_action { > SPE_PMU_BUF_FAULT_ACT_SPURIOUS, > SPE_PMU_BUF_FAULT_ACT_FATAL, > @@ -670,7 +679,7 @@ static int arm_spe_pmu_event_init(struct perf_event *event) > !cpumask_test_cpu(event->cpu, &spe_pmu->supported_cpus)) > return -ENOENT; > > - if (arm_spe_event_to_pmsevfr(event) & SYS_PMSEVFR_EL1_RES0) > + if (arm_spe_event_to_pmsevfr(event) & ~sys_pmsevfr_el1_mask[spe_pmu->pmuver]) > return -EOPNOTSUPP; > > if (attr->exclude_idle) > @@ -937,6 +946,7 @@ static void __arm_spe_pmu_dev_probe(void *info) > fld, smp_processor_id()); > return; > } > + spe_pmu->pmuver = fld; How do we deal with cases where we have big.LITTLE system with differing SPE versions ? Cheers Suzuki