Subject: Re: linux-next: build failure after merge of the pm tree

From: Zhang Rui <[email-masked]>
Date: Thu, 28 Apr 2022 16:53:50 +0800

On Thu, 2022-04-28 at 11:00 +1000, Stephen Rothwell wrote:
> Hi all,
> 
> After merging the pm tree, today's linux-next build (x86_64
> allmodconfig)
> failed like this:
> 
> drivers/idle/intel_idle.c: In function 'adl_idle_state_table_update':
> drivers/idle/intel_idle.c:1701:17: error: 'disable_promotion_to_c1e'
> undeclared (first use in this function)
>  1701 |                 disable_promotion_to_c1e = true;
>       |                 ^~~~~~~~~~~~~~~~~~~~~~~~
> drivers/idle/intel_idle.c:1701:17: note: each undeclared identifier
> is reported only once for each function it appears in
> drivers/idle/intel_idle.c:1706:9: error: implicit declaration of
> function 'c1e_promotion_enable' [-Werror=implicit-function-
> declaration]
>  1706 |         c1e_promotion_enable();
>       |         ^~~~~~~~~~~~~~~~~~~~
> drivers/idle/intel_idle.c: At top level:
> drivers/idle/intel_idle.c:1854:13: error: conflicting types for
> 'c1e_promotion_enable'; have 'void(void)' [-Werror]
>  1854 | static void c1e_promotion_enable(void)
>       |             ^~~~~~~~~~~~~~~~~~~~
> drivers/idle/intel_idle.c:1854:13: error: static declaration of
> 'c1e_promotion_enable' follows non-static declaration
> drivers/idle/intel_idle.c:1706:9: note: previous implicit declaration
> of 'c1e_promotion_enable' with type 'void(void)'
>  1706 |         c1e_promotion_enable();
>       |         ^~~~~~~~~~~~~~~~~~~~
> 
> Caused by commit
> 
>   39c184a6a9a7 ("intel_idle: Fix the 'preferred_cstates' module
> parameter")
> 
> interacting with commit
> 
>   cc6e234b8264 ("intel_idle: Add AlderLake support")
> 
> Presumably this should have been fixed up in commit
> 
>   55ecda6f25ef ("Merge branch 'intel-idle' into linux-next")
> 
> I have used the pm tree from next-20220427 for today.
> 

TBH, I'm not quite sure about the Fixes tag below.

Although commit 39c184a6a9a7 is merged later and breaks commit
cc6e234b8264, but given that commit 39c184a6a9a7 is for -rc material
and commit cc6e234b8264 and this patch are for next merge window, so I
still use the orginal ADL intel_idle commit for Fixes tag.

thanks,
rui

>From 9b784d7f9ea5593a92eb6d616523b5f47464e981 Mon Sep 17 00:00:00 2001
From: Zhang Rui <[email-masked]>
Date: Thu, 28 Apr 2022 09:37:10 +0800
Subject: [PATCH] intel_idle: fix C1E handling for AlderLake

commit cc6e234b8264 ("intel_idle: Add AlderLake support") disables the C1E
promotion using the 'disable_promotion_to_c1e' variable, but enables the
the C1E promotion by invoking c1e_promotion_enable() directly.

Then, commit 39c184a6a9a7 ("intel_idle: Fix the 'preferred_cstates' module
parameter") removes the 'disable_promotion_to_c1e' variable and introduces
a new tri-state 'c1e_promotion' variable that can be used for both
enabling and disabling C1E promotion, on a per CPU basis.

Switch to use the new 'c1e_promotion' variable to fix the build failure,
and also to do C1E promotion bit update on all CPUs.

Fixes: commit cc6e234b8264 ("intel_idle: Add AlderLake support")
Signed-off-by: Zhang Rui <[email-masked]>
---
 drivers/idle/intel_idle.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/idle/intel_idle.c b/drivers/idle/intel_idle.c
index 7c081ed26b64..2de6e0a2d9a1 100644
--- a/drivers/idle/intel_idle.c
+++ b/drivers/idle/intel_idle.c
@@ -1698,12 +1698,12 @@ static void __init adl_idle_state_table_update(void)
 		cpuidle_state_table[1].flags |= CPUIDLE_FLAG_UNUSABLE;
 
 		/* Disable C1E by clearing the "C1E promotion" bit. */
-		disable_promotion_to_c1e = true;
+		c1e_promotion = C1E_PROMOTION_DISABLE;
 		return;
 	}
 end:
 	/* Make sure C1E is enabled by default */
-	c1e_promotion_enable();
+	c1e_promotion = C1E_PROMOTION_ENABLE;
 }
 
 /**
-- 
2.17.1