Received: by 2002:a25:86ce:0:0:0:0:0 with SMTP id y14csp37264ybm; Tue, 21 May 2019 22:03:47 -0700 (PDT) X-Google-Smtp-Source: APXvYqxseYzNUSwbo89NtFhhwO4oY5GR4hdny4MPLIYjRUjBAXBamOrvuTns+RmBTRQ5cMPOQUSn X-Received: by 2002:a63:1b56:: with SMTP id b22mr84746960pgm.87.1558501427653; Tue, 21 May 2019 22:03:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1558501427; cv=none; d=google.com; s=arc-20160816; b=ACRjAojF2uuNrimB9StB67jvzNGO4U/NSdBKMOPE2kFxMC2SXkxC9lTiouAtH0Igam tRJhRgU7aQ3m7Sko97EjZpNPiZVGFCH+ZZZCpRNmVhtURgNzchnHb0/qGWkKb0XAqyQM Ko+0VrkhDu1cJdqv2NUns2g10Ueor27SyNsrj3siKnEKPW4wMwhNNbNk2Ohz6K4KVSwW ZOrVmrRNBYVgcdno9X8Wki/vZtWP2zYm/Bqr9uyeykoxfbHW8dM4jNd+dyjluS550C/A +3yaOOm9z0vZBnbVWr8M2c6oAwIBTrFflfDXUSzgohG/Q8NkcOzzZu7QgyAqUhPxEowi sY1g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:content-language :content-transfer-encoding:in-reply-to:mime-version:user-agent:date :from:references:cc:to:subject; bh=uyIkZHsxc0iHzACDwnwocN6CvlXUsVhZke6X8tFp/Jo=; b=aXfhxir4ZJistNE0703tnsDlzxcf9CJBaPOeuFNDzl9cHDp9AX+R3ww/8QTsAilFxa OQ/OJAUGaCaAGKBxgn3oI7ZyM0+EZKHnFjDPi1Svy3P9fTgJXlScKb3+mNI1FQtqjcM/ Tbek2gGrQ9iIVt8EJlHp5mybm1r2tFgZh5VFZ0hveI8wufnEMZo5iSVLZrT43Hpo+XTS doxjP0UqIW+5j0qvmikRiHvC1Y1ANNSw6lR0st8CXn5Jqd3lonua861qsf1gDPqfvxh2 avmeLyCBYtQsYHaYMT4Uk2oYbu+evC/yg56b4ygZeWRqo/SVuTn2BUSNsR9IwzFPewTR 7Gug== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=ibm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x125si24725980pgx.355.2019.05.21.22.03.31; Tue, 21 May 2019 22:03:47 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=ibm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728084AbfEVFBp (ORCPT + 99 others); Wed, 22 May 2019 01:01:45 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:40290 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725801AbfEVFBp (ORCPT ); Wed, 22 May 2019 01:01:45 -0400 Received: from pps.filterd (m0098410.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.27/8.16.0.27) with SMTP id x4M4r2sw019511 for ; Wed, 22 May 2019 01:01:43 -0400 Received: from e06smtp02.uk.ibm.com (e06smtp02.uk.ibm.com [195.75.94.98]) by mx0a-001b2d01.pphosted.com with ESMTP id 2smury7k5t-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 22 May 2019 01:01:43 -0400 Received: from localhost by e06smtp02.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 22 May 2019 06:01:41 +0100 Received: from b06cxnps3074.portsmouth.uk.ibm.com (9.149.109.194) by e06smtp02.uk.ibm.com (192.168.101.132) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256/256) Wed, 22 May 2019 06:01:38 +0100 Received: from d06av22.portsmouth.uk.ibm.com (d06av22.portsmouth.uk.ibm.com [9.149.105.58]) by b06cxnps3074.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id x4M51bfJ61079740 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 May 2019 05:01:37 GMT Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 4FF234C08B; Wed, 22 May 2019 05:01:37 +0000 (GMT) Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 2EB864C06E; Wed, 22 May 2019 05:01:36 +0000 (GMT) Received: from [9.126.30.226] (unknown [9.126.30.226]) by d06av22.portsmouth.uk.ibm.com (Postfix) with ESMTP; Wed, 22 May 2019 05:01:36 +0000 (GMT) Subject: Re: [PATCH 2/2] powerpc/perf: Fix mmcra corruption by bhrb_filter To: Ravi Bangoria , peterz@infradead.org, jolsa@redhat.com, mpe@ellerman.id.au Cc: acme@kernel.org, linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org References: <20190511024217.4013-1-ravi.bangoria@linux.ibm.com> <20190511024217.4013-2-ravi.bangoria@linux.ibm.com> From: Madhavan Srinivasan Date: Wed, 22 May 2019 10:31:35 +0530 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 MIME-Version: 1.0 In-Reply-To: <20190511024217.4013-2-ravi.bangoria@linux.ibm.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-Language: en-US X-TM-AS-GCONF: 00 x-cbid: 19052205-0008-0000-0000-000002E925E0 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 19052205-0009-0000-0000-00002255DE7B Message-Id: X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:,, definitions=2019-05-22_02:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1011 lowpriorityscore=0 mlxscore=0 impostorscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1810050000 definitions=main-1905220034 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 11/05/19 8:12 AM, Ravi Bangoria wrote: > Consider a scenario where user creates two events: > > 1st event: > attr.sample_type |= PERF_SAMPLE_BRANCH_STACK; > attr.branch_sample_type = PERF_SAMPLE_BRANCH_ANY; > fd = perf_event_open(attr, 0, 1, -1, 0); > > This sets cpuhw->bhrb_filter to 0 and returns valid fd. > > 2nd event: > attr.sample_type |= PERF_SAMPLE_BRANCH_STACK; > attr.branch_sample_type = PERF_SAMPLE_BRANCH_CALL; > fd = perf_event_open(attr, 0, 1, -1, 0); > > It overrides cpuhw->bhrb_filter to -1 and returns with error. > > Now if power_pmu_enable() gets called by any path other than > power_pmu_add(), ppmu->config_bhrb(-1) will set mmcra to -1. Reviewed-by: Madhavan Srinivasan > Signed-off-by: Ravi Bangoria > --- > arch/powerpc/perf/core-book3s.c | 6 ++++-- > arch/powerpc/perf/power8-pmu.c | 3 +++ > arch/powerpc/perf/power9-pmu.c | 3 +++ > 3 files changed, 10 insertions(+), 2 deletions(-) > > diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c > index b0723002a396..8eb5dc5df62b 100644 > --- a/arch/powerpc/perf/core-book3s.c > +++ b/arch/powerpc/perf/core-book3s.c > @@ -1846,6 +1846,7 @@ static int power_pmu_event_init(struct perf_event *event) > int n; > int err; > struct cpu_hw_events *cpuhw; > + u64 bhrb_filter; > > if (!ppmu) > return -ENOENT; > @@ -1951,13 +1952,14 @@ static int power_pmu_event_init(struct perf_event *event) > err = power_check_constraints(cpuhw, events, cflags, n + 1); > > if (has_branch_stack(event)) { > - cpuhw->bhrb_filter = ppmu->bhrb_filter_map( > + bhrb_filter = ppmu->bhrb_filter_map( > event->attr.branch_sample_type); > > - if (cpuhw->bhrb_filter == -1) { > + if (bhrb_filter == -1) { > put_cpu_var(cpu_hw_events); > return -EOPNOTSUPP; > } > + cpuhw->bhrb_filter = bhrb_filter; > } > > put_cpu_var(cpu_hw_events); > diff --git a/arch/powerpc/perf/power8-pmu.c b/arch/powerpc/perf/power8-pmu.c > index d12a2db26353..d10feef93b6b 100644 > --- a/arch/powerpc/perf/power8-pmu.c > +++ b/arch/powerpc/perf/power8-pmu.c > @@ -29,6 +29,7 @@ enum { > #define POWER8_MMCRA_IFM1 0x0000000040000000UL > #define POWER8_MMCRA_IFM2 0x0000000080000000UL > #define POWER8_MMCRA_IFM3 0x00000000C0000000UL > +#define POWER8_MMCRA_BHRB_MASK 0x00000000C0000000UL > > /* > * Raw event encoding for PowerISA v2.07 (Power8): > @@ -243,6 +244,8 @@ static u64 power8_bhrb_filter_map(u64 branch_sample_type) > > static void power8_config_bhrb(u64 pmu_bhrb_filter) > { > + pmu_bhrb_filter &= POWER8_MMCRA_BHRB_MASK; > + > /* Enable BHRB filter in PMU */ > mtspr(SPRN_MMCRA, (mfspr(SPRN_MMCRA) | pmu_bhrb_filter)); > } > diff --git a/arch/powerpc/perf/power9-pmu.c b/arch/powerpc/perf/power9-pmu.c > index 030544e35959..f3987915cadc 100644 > --- a/arch/powerpc/perf/power9-pmu.c > +++ b/arch/powerpc/perf/power9-pmu.c > @@ -92,6 +92,7 @@ enum { > #define POWER9_MMCRA_IFM1 0x0000000040000000UL > #define POWER9_MMCRA_IFM2 0x0000000080000000UL > #define POWER9_MMCRA_IFM3 0x00000000C0000000UL > +#define POWER9_MMCRA_BHRB_MASK 0x00000000C0000000UL > > /* Nasty Power9 specific hack */ > #define PVR_POWER9_CUMULUS 0x00002000 > @@ -300,6 +301,8 @@ static u64 power9_bhrb_filter_map(u64 branch_sample_type) > > static void power9_config_bhrb(u64 pmu_bhrb_filter) > { > + pmu_bhrb_filter &= POWER9_MMCRA_BHRB_MASK; > + > /* Enable BHRB filter in PMU */ > mtspr(SPRN_MMCRA, (mfspr(SPRN_MMCRA) | pmu_bhrb_filter)); > }