All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mark Rutland <mark.rutland@arm.com>
To: James Clark <james.clark@arm.com>
Cc: linux-arm-kernel@lists.infradead.org,
	linux-perf-users@vger.kernel.org, linux-next@vger.kernel.org,
	will@kernel.org, u.kleine-koenig@pengutronix.de,
	Nathan Chancellor <nathan@kernel.org>,
	Nick Desaulniers <ndesaulniers@google.com>,
	Bill Wendling <morbo@google.com>,
	Justin Stitt <justinstitt@google.com>,
	Anshuman Khandual <anshuman.khandual@arm.com>,
	Suzuki K Poulose <suzuki.poulose@arm.com>,
	linux-kernel@vger.kernel.org, llvm@lists.linux.dev
Subject: Re: [PATCH 1/2] arm: perf: Fix ARCH=arm build with GCC in armv8pmu_write_evtype()
Date: Fri, 15 Dec 2023 16:21:45 +0000	[thread overview]
Message-ID: <ZXx9GW1onSy4eBEB@FVFF77S0Q05N> (raw)
In-Reply-To: <20231215150040.3342183-2-james.clark@arm.com>

On Fri, Dec 15, 2023 at 03:00:38PM +0000, James Clark wrote:
> LLVM ignores everything inside the if statement and doesn't generate
> errors, but GCC doesn't ignore it, resulting in the following error:
> 
>   drivers/perf/arm_pmuv3.c: In function 'armv8pmu_write_evtype':
>   include/linux/bits.h:34:29: error: left shift count >= width of type [-Werror=shift-count-overflow]
>   	34 |         (((~UL(0)) - (UL(1) << (l)) + 1) & \
> 
> Fix it by changing the if to #if.

I reckon it'd be cleaner to use GENMASK_ULL for the TH and TC fields, in
include/linux/perf/arm_pmu.h have:

| /*
|  * PMXEVTYPER: Event selection reg
|  */
| #define ARMV8_PMU_EVTYPE_EVENT GENMASK(15, 0)          /* Mask for EVENT bits */
| #define ARMV8_PMU_EVTYPE_TH    GENMASK_ULL(43, 32)     /* arm64 only */
| #define ARMV8_PMU_EVTYPE_TC    GENMASK_ULL(63, 61)     /* arm64 only */

IIUC that should silence this warning, and it'd remove the need for the
ifdeffery and other changes in patch 2.

Does that work, or am I missing something?

Thanks,
Mark.

> 
> Fixes: 3115ee021bfb ("arm64: perf: Include threshold control fields in PMEVTYPER mask")
> Reported-by: Uwe Kleine-K"onig <u.kleine-koenig@pengutronix.de>
> Closes: https://lore.kernel.org/linux-arm-kernel/20231215120817.h2f3akgv72zhrtqo@pengutronix.de/
> Signed-off-by: James Clark <james.clark@arm.com>
> ---
>  drivers/perf/arm_pmuv3.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/perf/arm_pmuv3.c b/drivers/perf/arm_pmuv3.c
> index 23fa6c5da82c..3ed2086cefc3 100644
> --- a/drivers/perf/arm_pmuv3.c
> +++ b/drivers/perf/arm_pmuv3.c
> @@ -631,8 +631,9 @@ static void armv8pmu_write_evtype(int idx, unsigned long val)
>  			     ARMV8_PMU_EXCLUDE_EL0 |
>  			     ARMV8_PMU_EXCLUDE_EL1;
>  
> -	if (IS_ENABLED(CONFIG_ARM64))
> -		mask |= ARMV8_PMU_EVTYPE_TC | ARMV8_PMU_EVTYPE_TH;
> +#if IS_ENABLED(CONFIG_ARM64)
> +	mask |= ARMV8_PMU_EVTYPE_TC | ARMV8_PMU_EVTYPE_TH;
> +#endif
>  
>  	val &= mask;
>  	write_pmevtypern(counter, val);
> -- 
> 2.34.1
> 

WARNING: multiple messages have this Message-ID (diff)
From: Mark Rutland <mark.rutland@arm.com>
To: James Clark <james.clark@arm.com>
Cc: linux-arm-kernel@lists.infradead.org,
	linux-perf-users@vger.kernel.org, linux-next@vger.kernel.org,
	will@kernel.org, u.kleine-koenig@pengutronix.de,
	Nathan Chancellor <nathan@kernel.org>,
	Nick Desaulniers <ndesaulniers@google.com>,
	Bill Wendling <morbo@google.com>,
	Justin Stitt <justinstitt@google.com>,
	Anshuman Khandual <anshuman.khandual@arm.com>,
	Suzuki K Poulose <suzuki.poulose@arm.com>,
	linux-kernel@vger.kernel.org, llvm@lists.linux.dev
Subject: Re: [PATCH 1/2] arm: perf: Fix ARCH=arm build with GCC in armv8pmu_write_evtype()
Date: Fri, 15 Dec 2023 16:21:45 +0000	[thread overview]
Message-ID: <ZXx9GW1onSy4eBEB@FVFF77S0Q05N> (raw)
In-Reply-To: <20231215150040.3342183-2-james.clark@arm.com>

On Fri, Dec 15, 2023 at 03:00:38PM +0000, James Clark wrote:
> LLVM ignores everything inside the if statement and doesn't generate
> errors, but GCC doesn't ignore it, resulting in the following error:
> 
>   drivers/perf/arm_pmuv3.c: In function 'armv8pmu_write_evtype':
>   include/linux/bits.h:34:29: error: left shift count >= width of type [-Werror=shift-count-overflow]
>   	34 |         (((~UL(0)) - (UL(1) << (l)) + 1) & \
> 
> Fix it by changing the if to #if.

I reckon it'd be cleaner to use GENMASK_ULL for the TH and TC fields, in
include/linux/perf/arm_pmu.h have:

| /*
|  * PMXEVTYPER: Event selection reg
|  */
| #define ARMV8_PMU_EVTYPE_EVENT GENMASK(15, 0)          /* Mask for EVENT bits */
| #define ARMV8_PMU_EVTYPE_TH    GENMASK_ULL(43, 32)     /* arm64 only */
| #define ARMV8_PMU_EVTYPE_TC    GENMASK_ULL(63, 61)     /* arm64 only */

IIUC that should silence this warning, and it'd remove the need for the
ifdeffery and other changes in patch 2.

Does that work, or am I missing something?

Thanks,
Mark.

> 
> Fixes: 3115ee021bfb ("arm64: perf: Include threshold control fields in PMEVTYPER mask")
> Reported-by: Uwe Kleine-K"onig <u.kleine-koenig@pengutronix.de>
> Closes: https://lore.kernel.org/linux-arm-kernel/20231215120817.h2f3akgv72zhrtqo@pengutronix.de/
> Signed-off-by: James Clark <james.clark@arm.com>
> ---
>  drivers/perf/arm_pmuv3.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/perf/arm_pmuv3.c b/drivers/perf/arm_pmuv3.c
> index 23fa6c5da82c..3ed2086cefc3 100644
> --- a/drivers/perf/arm_pmuv3.c
> +++ b/drivers/perf/arm_pmuv3.c
> @@ -631,8 +631,9 @@ static void armv8pmu_write_evtype(int idx, unsigned long val)
>  			     ARMV8_PMU_EXCLUDE_EL0 |
>  			     ARMV8_PMU_EXCLUDE_EL1;
>  
> -	if (IS_ENABLED(CONFIG_ARM64))
> -		mask |= ARMV8_PMU_EVTYPE_TC | ARMV8_PMU_EVTYPE_TH;
> +#if IS_ENABLED(CONFIG_ARM64)
> +	mask |= ARMV8_PMU_EVTYPE_TC | ARMV8_PMU_EVTYPE_TH;
> +#endif
>  
>  	val &= mask;
>  	write_pmevtypern(counter, val);
> -- 
> 2.34.1
> 

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  parent reply	other threads:[~2023-12-15 16:21 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-12-15 15:00 [PATCH 0/2] arm: perf: Fix ARCH=arm build with GCC James Clark
2023-12-15 15:00 ` James Clark
2023-12-15 15:00 ` [PATCH 1/2] arm: perf: Fix ARCH=arm build with GCC in armv8pmu_write_evtype() James Clark
2023-12-15 15:00   ` James Clark
2023-12-15 15:18   ` Uwe Kleine-König
2023-12-15 15:18     ` Uwe Kleine-König
2023-12-15 16:21   ` Mark Rutland [this message]
2023-12-15 16:21     ` Mark Rutland
2023-12-15 17:42     ` James Clark
2023-12-15 17:42       ` James Clark
2023-12-15 15:00 ` [PATCH 2/2] arm: perf: Fix ARCH=arm build with GCC in armv8pmu_set_event_filter() James Clark
2023-12-15 15:00   ` James Clark

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ZXx9GW1onSy4eBEB@FVFF77S0Q05N \
    --to=mark.rutland@arm.com \
    --cc=anshuman.khandual@arm.com \
    --cc=james.clark@arm.com \
    --cc=justinstitt@google.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-next@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=llvm@lists.linux.dev \
    --cc=morbo@google.com \
    --cc=nathan@kernel.org \
    --cc=ndesaulniers@google.com \
    --cc=suzuki.poulose@arm.com \
    --cc=u.kleine-koenig@pengutronix.de \
    --cc=will@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.