Received: by 2002:a05:6358:c692:b0:131:369:b2a3 with SMTP id fe18csp4339893rwb; Mon, 31 Jul 2023 05:36:07 -0700 (PDT) X-Google-Smtp-Source: APBJJlHQyo4J91B6fThDw1lVPTbeW5sCyDMOVLhexxX5MNA3dKjfoNUzCa187L/HF0ewco+0XVDl X-Received: by 2002:a05:6402:78e:b0:522:678d:45e5 with SMTP id d14-20020a056402078e00b00522678d45e5mr9759389edy.30.1690806966954; Mon, 31 Jul 2023 05:36:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690806966; cv=none; d=google.com; s=arc-20160816; b=RywN49Pq9PxvqQU+tXztDSj9rYqJ6U3FyMo1CKrTwWcx3JP+hZ7jV7XcO36G9dgaur g5+KOM/aVMegcVma17f2LSW+T8hv1sZ8q02BIyI3E3enFSLwUCdHo7tGKiDrbY7AvSEn 4dURTpl6NG2d3Qhb1QrEyoissR1LZpTaFYCjjS/6C5S1aDf395Jtmx3ulxMet5X+z/hP oLsbBrQx0U/5deSzOys3OWJ30I/FZY+vxHAtfUGIcfU8ZVMzNto5kG1JlCL9os4INAF7 qoronHpEjE0wK4fcVOrtwJyaen8Wg+JATlfhDZdC2wXSnr5Q/ttqh3zjLeiDl3PhSfV5 /LHg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:in-reply-to:from :references:cc:to:content-language:subject:user-agent:mime-version :date:message-id; bh=vlSAMLiJusABQoRissWbuSlTylbLSUg4XrIlDO6Giqc=; fh=XKQPidCNummopaPE8QkfUh64lHeql75cTt5TuyOOu4E=; b=Zmd25kv9zl6FOh1DmNFrNmwtV3Gu+JM2CzOnuHwE4IlQbD6TZCbanDgtDkCt2POQzt E36dVqfOYMtXghCkyIbbhH159AroZjG2pztKf0KyfLV688eM3EipEg88VabfLrQIurhD TnLPdLTcDylE4DwDi3Ybj2A1pWdsoGdI/gGuYQczXfjryA8DH7dDn87qNEWYpH4knwR2 LQ7hiIENMzW9kexTIMagGPcL+IiifrkvCbq6J9pM7JVZJhj9YUhwm8yEKvC1Tw58ewTT WFYc7QdOJwwEb2mXMFO/anQ1iSoSfq3IH/9iVsF5VMc7hlAN9iYxUt/sNlaHbxHf5cYK I6dA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id i5-20020a056402054500b005222dc01347si6458078edx.73.2023.07.31.05.35.42; Mon, 31 Jul 2023 05:36:06 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230121AbjGaMTk (ORCPT + 99 others); Mon, 31 Jul 2023 08:19:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41636 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232124AbjGaMTb (ORCPT ); Mon, 31 Jul 2023 08:19:31 -0400 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 875F210E7; Mon, 31 Jul 2023 05:19:28 -0700 (PDT) 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 A5139D75; Mon, 31 Jul 2023 05:20:11 -0700 (PDT) Received: from [10.163.53.56] (unknown [10.163.53.56]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 8A9BD3F5A1; Mon, 31 Jul 2023 05:19:23 -0700 (PDT) Message-ID: <97ee0edd-c8f1-461d-b650-c1c6933efc2c@arm.com> Date: Mon, 31 Jul 2023 17:49:19 +0530 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.13.0 Subject: Re: [PATCH V13 - RESEND 02/10] arm64/perf: Add BRBE registers and fields Content-Language: en-US To: Mark Rutland Cc: James Clark , Will Deacon , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, catalin.marinas@arm.com, Mark Brown , Rob Herring , Marc Zyngier , Suzuki Poulose , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , linux-perf-users@vger.kernel.org References: <20230711082455.215983-1-anshuman.khandual@arm.com> <20230711082455.215983-3-anshuman.khandual@arm.com> <20230728162011.GA22050@willie-the-truck> <89ce4bc4-00c5-a763-3179-e1d3e9f198b7@arm.com> <937468a1-b325-7d05-8daf-765f911c9240@arm.com> From: Anshuman Khandual In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-4.3 required=5.0 tests=BAYES_00,NICE_REPLY_A, RCVD_IN_DNSWL_MED,SPF_HELO_NONE,SPF_NONE,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 7/31/23 14:36, Mark Rutland wrote: > On Mon, Jul 31, 2023 at 08:03:21AM +0530, Anshuman Khandual wrote: >> >> >> On 7/28/23 22:22, James Clark wrote: >>> >>> >>> On 28/07/2023 17:20, Will Deacon wrote: >>>> On Tue, Jul 11, 2023 at 01:54:47PM +0530, Anshuman Khandual wrote: >>>>> This adds BRBE related register definitions and various other related field >>>>> macros there in. These will be used subsequently in a BRBE driver which is >>>>> being added later on. >>>>> >>>>> Cc: Catalin Marinas >>>>> Cc: Will Deacon >>>>> Cc: Marc Zyngier >>>>> Cc: Mark Rutland >>>>> Cc: linux-arm-kernel@lists.infradead.org >>>>> Cc: linux-kernel@vger.kernel.org >>>>> Tested-by: James Clark >>>>> Reviewed-by: Mark Brown >>>>> Signed-off-by: Anshuman Khandual >>>>> --- >>>>> arch/arm64/include/asm/sysreg.h | 103 +++++++++++++++++++++ >>>>> arch/arm64/tools/sysreg | 158 ++++++++++++++++++++++++++++++++ >>>>> 2 files changed, 261 insertions(+) >>>>> >>>>> diff --git a/arch/arm64/include/asm/sysreg.h b/arch/arm64/include/asm/sysreg.h >>>>> index b481935e9314..f95e30c13c8b 100644 >>>>> --- a/arch/arm64/include/asm/sysreg.h >>>>> +++ b/arch/arm64/include/asm/sysreg.h >>>>> @@ -163,6 +163,109 @@ >>>>> #define SYS_DBGDTRTX_EL0 sys_reg(2, 3, 0, 5, 0) >>>>> #define SYS_DBGVCR32_EL2 sys_reg(2, 4, 0, 7, 0) >>>>> >>>>> +#define __SYS_BRBINFO(n) sys_reg(2, 1, 8, ((n) & 0xf), ((((n) & 0x10)) >> 2 + 0)) >>>>> +#define __SYS_BRBSRC(n) sys_reg(2, 1, 8, ((n) & 0xf), ((((n) & 0x10)) >> 2 + 1)) >>>>> +#define __SYS_BRBTGT(n) sys_reg(2, 1, 8, ((n) & 0xf), ((((n) & 0x10)) >> 2 + 2)) >>>> >>>> It's that time on a Friday but... aren't these macros busted? I think you >>>> need brackets before adding the offset, otherwise wouldn't, for example, >>>> target registers 0-15 all access info register 0 and __SYS_BRBTGT(16) would >>>> then start accessing source register 0? >>>> >>>> I'm surprised that the compiler doesn't warn about this, but even more >>>> surprised that you managed to test this. >>>> >>>> Please tell me I'm wrong! >>>> >>>> Will >>> >>> No I think you are right, it is wrong. Luckily there is already an >>> extraneous bracket so you you can fix it by moving one a place down: >>> >>> sys_reg(2, 1, 8, ((n) & 0xf), ((((n) & 0x10) >> 2) + 2)) >>> >>> It's interesting because the test [1] is doing quite a bit and looking >>> at the branch info, and that src and targets match up to function names. >>> I also manually looked at the branch buffers and didn't see anything >>> obviously wrong like things that looked like branch infos in the source >>> or target fields. Will have to take another look to see if it would be >>> possible for the test to catch this. >>> >>> James >>> >>> [1]: >>> https://gitlab.arm.com/linux-arm/linux-jc/-/commit/3a7ddce70c2daadb63fcc511de0a89055ca48b32 >> >> ((((n) & 0x10)) >> 2 + 2) ---> ((((n) & 0x10) >> 2) + 2) >> >> The additional brackets are useful in explicitly telling the compiler but >> what it the compiler is just doing the right thing implicitly i.e computing >> the shifting operation before doing the offset addition. > > No; that is not correct. In c, '+' has higher precedence than '>>'. > > For 'a >> b + c' the compiler *must* treat that as 'a >> (b + c)', and not as > '(a >> b) + c' > > That's trivial to test: > > | [mark@gravadlaks:~]% cat shiftadd.c > | #include > | > | unsigned long logshiftadd(unsigned long a, > | unsigned long b, > | unsigned long c) > | { > | printf("%ld >> %ld + %ld is %ld\n", > | a, b, c, a >> b + c); > | } > | > | int main(int argc, char *argv) > | { > | logshiftadd(0, 0, 0); > | logshiftadd(0, 0, 1); > | logshiftadd(0, 0, 2); > | printf("\n"); > | logshiftadd(1024, 0, 0); > | logshiftadd(1024, 0, 1); > | logshiftadd(1024, 0, 2); > | printf("\n"); > | logshiftadd(1024, 2, 0); > | logshiftadd(1024, 2, 1); > | logshiftadd(1024, 2, 2); > | > | return 0; > | } > | [mark@gravadlaks:~]% gcc shiftadd.c -o shiftadd > | [mark@gravadlaks:~]% ./shiftadd > | 0 >> 0 + 0 is 0 > | 0 >> 0 + 1 is 0 > | 0 >> 0 + 2 is 0 > | > | 1024 >> 0 + 0 is 1024 > | 1024 >> 0 + 1 is 512 > | 1024 >> 0 + 2 is 256 > | > | 1024 >> 2 + 0 is 256 > | 1024 >> 2 + 1 is 128 > | 1024 >> 2 + 2 is 64 Understood. > >> During testing, all > those captured branch records looked alright. > > I think we clearly need better testing here I am still thinking - how could this might have been missed. Could it be possible that these wrongly computed higher indices were getting folded back/rolled over into the same legal range indices for a given bank. If they did, branch record processing would have still captured almost all of them, may be in an incorrect order. Branch order does matter for the stitched mechanism.