2023-10-07 18:55:46

by Lucy Mielke

[permalink] [raw]
Subject: [PATCH] perf/x86/p4: Fix "Wunused-but-set-variable" warning

This fixes a compiler warning when compiling an allyesconfig with W=1:
warning: variable ?high? set but not used [-Wunused-but-set-variable]

Signed-off-by: Lucy Mielke <[email protected]>
---
arch/x86/events/intel/p4.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/x86/events/intel/p4.c b/arch/x86/events/intel/p4.c
index 35936188db01..69aaf7c0f340 100644
--- a/arch/x86/events/intel/p4.c
+++ b/arch/x86/events/intel/p4.c
@@ -1366,7 +1366,7 @@ static __initconst const struct x86_pmu p4_pmu = {

__init int p4_pmu_init(void)
{
- unsigned int low, high;
+ unsigned int low, __maybe_unused high;
int i, reg;

/* If we get stripped -- indexing fails */
--
2.42.0


2023-10-07 20:35:32

by Peter Zijlstra

[permalink] [raw]
Subject: Re: [PATCH] perf/x86/p4: Fix "Wunused-but-set-variable" warning

On Sat, Oct 07, 2023 at 08:55:19PM +0200, Lucy Mielke wrote:
> This fixes a compiler warning when compiling an allyesconfig with W=1:
> warning: variable ?high? set but not used [-Wunused-but-set-variable]

What compiler and what .config?

> Signed-off-by: Lucy Mielke <[email protected]>
> ---
> arch/x86/events/intel/p4.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/arch/x86/events/intel/p4.c b/arch/x86/events/intel/p4.c
> index 35936188db01..69aaf7c0f340 100644
> --- a/arch/x86/events/intel/p4.c
> +++ b/arch/x86/events/intel/p4.c
> @@ -1366,7 +1366,7 @@ static __initconst const struct x86_pmu p4_pmu = {
>
> __init int p4_pmu_init(void)
> {
> - unsigned int low, high;
> + unsigned int low, __maybe_unused high;
> int i, reg;
>
> /* If we get stripped -- indexing fails */

Right after this we have:

rdmsr(MSR_IA32_MISC_ENABLE, low, high);

which should get high unconditionally used. If there's a problem then
it's probably inside that rdmsr macro.

2023-10-09 16:30:01

by Sean Christopherson

[permalink] [raw]
Subject: Re: [PATCH] perf/x86/p4: Fix "Wunused-but-set-variable" warning

On Sat, Oct 07, 2023, Peter Zijlstra wrote:
> On Sat, Oct 07, 2023 at 08:55:19PM +0200, Lucy Mielke wrote:
> > This fixes a compiler warning when compiling an allyesconfig with W=1:
> > warning: variable ´high´ set but not used [-Wunused-but-set-variable]
>
> What compiler and what .config?
>
> > Signed-off-by: Lucy Mielke <[email protected]>
> > ---
> > arch/x86/events/intel/p4.c | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/arch/x86/events/intel/p4.c b/arch/x86/events/intel/p4.c
> > index 35936188db01..69aaf7c0f340 100644
> > --- a/arch/x86/events/intel/p4.c
> > +++ b/arch/x86/events/intel/p4.c
> > @@ -1366,7 +1366,7 @@ static __initconst const struct x86_pmu p4_pmu = {
> >
> > __init int p4_pmu_init(void)
> > {
> > - unsigned int low, high;
> > + unsigned int low, __maybe_unused high;
> > int i, reg;
> >
> > /* If we get stripped -- indexing fails */
>
> Right after this we have:
>
> rdmsr(MSR_IA32_MISC_ENABLE, low, high);
>
> which should get high unconditionally used. If there's a problem then
> it's probably inside that rdmsr macro.

rdmsr() writes to "high", but nothing ever reads from high. FWIW, I would _love_
for rdmsrl() to have return semantics, e.g. to be able to do:

low = (u32)rdmsrl(MSR_IA32_MISC_ENABLE);

or even

if (!(rdmsrl(MSR_IA32_MISC_ENABLE) & BIT(7)))

2023-10-12 10:27:09

by Lucy Mielke

[permalink] [raw]
Subject: Re: [PATCH] perf/x86/p4: Fix "Wunused-but-set-variable" warning

Am Mon, Oct 09, 2023 at 09:29:50AM -0700 schrieb Sean Christopherson:
>
> rdmsr() writes to "high", but nothing ever reads from high. FWIW, I would _love_
> for rdmsrl() to have return semantics, e.g. to be able to do:
>
> low = (u32)rdmsrl(MSR_IA32_MISC_ENABLE);
>
> or even
>
> if (!(rdmsrl(MSR_IA32_MISC_ENABLE) & BIT(7)))

I have taken a look and it seems to me like this macro is called quite a lot
for different things thoughout the kernel tree, including drivers. If
one were to change it to have return semantics instead of the way it
currently works, you'd have to change around 300 occurences, right?
(Let me know if I misunderstood something.)

Return semantics or not, since the only way "high" is used in p4_pmu_init()
is by being written to by rdmsr(), the variable can be completely removed by
just using rdmsrl(). Would this be a patch you'd be interested in?

Mit freundlichen Gr??en / Best regards,
Lucy

2023-10-13 16:26:50

by Sean Christopherson

[permalink] [raw]
Subject: Re: [PATCH] perf/x86/p4: Fix "Wunused-but-set-variable" warning

On Thu, Oct 12, 2023, Lucy Mielke wrote:
> Am Mon, Oct 09, 2023 at 09:29:50AM -0700 schrieb Sean Christopherson:
> >
> > rdmsr() writes to "high", but nothing ever reads from high. FWIW, I would _love_
> > for rdmsrl() to have return semantics, e.g. to be able to do:
> >
> > low = (u32)rdmsrl(MSR_IA32_MISC_ENABLE);
> >
> > or even
> >
> > if (!(rdmsrl(MSR_IA32_MISC_ENABLE) & BIT(7)))
>
> I have taken a look and it seems to me like this macro is called quite a lot
> for different things thoughout the kernel tree, including drivers. If
> one were to change it to have return semantics instead of the way it
> currently works, you'd have to change around 300 occurences, right?

Yep, which is the only reason I haven't force the issue.