diff mbox series

platform/x86: dell: Fix ALIENWARE_WMI dependencies

Message ID 20250309-dell-kconfig-fix-v1-1-38a2308d0ac6@gmail.com (mailing list archive)
State New
Headers show
Series platform/x86: dell: Fix ALIENWARE_WMI dependencies | expand

Commit Message

Kurt Borja March 9, 2025, 4:33 p.m. UTC
If ACPI_PLATFORM_PROFILE is selected by ALIENWARE_WMI_WMAX, the former
is forced to be at least =m, because the latter is a bool.

This allows the following config:

	CONFIG_ALIENWARE_WMI=y
	CONFIG_ACPI_PLATFORM_PROFILE=m

which causes a linking error, because ALIENWARE_WMI_WMAX is only used to
conditionally link alienware-wmi-wmax.c to the alienware-wmi kernel
object, which might not be a module.

Move the ACPI_PLATFORM_PROFILE reverse dependency to ALIENWARE_WMI to
fix this issue.

Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202503051819.bQ9P70Og-lkp@intel.com/
Fixes: b1b8fcf6e677 ("platform/x86: Update alienware-wmi config entries")
Signed-off-by: Kurt Borja <kuurtb@gmail.com>
---
 drivers/platform/x86/dell/Kconfig | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)


---
base-commit: e57eabe2fb044950e6ffdfe01803895043dec0b7
change-id: 20250309-dell-kconfig-fix-4d3daedaedbf

Best regards,

Comments

Ilpo Järvinen March 10, 2025, 2:29 p.m. UTC | #1
On Sun, 9 Mar 2025, Kurt Borja wrote:

> If ACPI_PLATFORM_PROFILE is selected by ALIENWARE_WMI_WMAX, the former
> is forced to be at least =m, because the latter is a bool.
> 
> This allows the following config:
> 
> 	CONFIG_ALIENWARE_WMI=y
> 	CONFIG_ACPI_PLATFORM_PROFILE=m

Hi,

selecting from =y should not result in =m for the other symbol. This is 
a bug in Kconfig infrastructure.

I ran across this a few years back and even had a test case to prove the 
select bug but back then the original problem eventually was solved in a 
different way which no longer hit the problem. I never could figure out
how to fix the kconfig logic though without breaking something and it 
ended up into low priority bin and never got solved.

Sadly, it seems I've lost the test case patch that exhibits the bug 
somewhere... I'll try to look for it from my archived files.

> which causes a linking error, because ALIENWARE_WMI_WMAX is only used to
> conditionally link alienware-wmi-wmax.c to the alienware-wmi kernel
> object, which might not be a module.
> 
> Move the ACPI_PLATFORM_PROFILE reverse dependency to ALIENWARE_WMI to
> fix this issue.
> 
> Reported-by: kernel test robot <lkp@intel.com>
> Closes: https://lore.kernel.org/oe-kbuild-all/202503051819.bQ9P70Og-lkp@intel.com/
> Fixes: b1b8fcf6e677 ("platform/x86: Update alienware-wmi config entries")
> Signed-off-by: Kurt Borja <kuurtb@gmail.com>
> ---
>  drivers/platform/x86/dell/Kconfig | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/platform/x86/dell/Kconfig b/drivers/platform/x86/dell/Kconfig
> index f8a0dffcaab7c3b423472c5b9093011334a698c8..87c2ceb12d48d610c85fa739abbc4f0d88e33ec8 100644
> --- a/drivers/platform/x86/dell/Kconfig
> +++ b/drivers/platform/x86/dell/Kconfig
> @@ -22,6 +22,7 @@ config ALIENWARE_WMI
>  	depends on DMI
>  	depends on LEDS_CLASS
>  	depends on NEW_LEDS
> +	select ACPI_PLATFORM_PROFILE
>  	help
>  	 This is a driver for controlling Alienware WMI driven features.
>  
> @@ -43,7 +44,6 @@ config ALIENWARE_WMI_WMAX
>  	bool "Alienware WMAX WMI device driver"
>  	default y
>  	depends on ALIENWARE_WMI
> -	select ACPI_PLATFORM_PROFILE
>  	help
>  	 Alienware WMI driver with AlienFX LED, HDMI, amplifier, deep sleep and
>  	 AWCC thermal control capabilities.
> 
> ---
> base-commit: e57eabe2fb044950e6ffdfe01803895043dec0b7
> change-id: 20250309-dell-kconfig-fix-4d3daedaedbf
> 
> Best regards,
>
Kurt Borja March 10, 2025, 2:57 p.m. UTC | #2
Hi Ilpo,

On Mon Mar 10, 2025 at 9:29 AM -05, Ilpo Järvinen wrote:
> On Sun, 9 Mar 2025, Kurt Borja wrote:
>
>> If ACPI_PLATFORM_PROFILE is selected by ALIENWARE_WMI_WMAX, the former
>> is forced to be at least =m, because the latter is a bool.
>> 
>> This allows the following config:
>> 
>> 	CONFIG_ALIENWARE_WMI=y
>> 	CONFIG_ACPI_PLATFORM_PROFILE=m
>
> Hi,
>
> selecting from =y should not result in =m for the other symbol. This is 
> a bug in Kconfig infrastructure.
>
> I ran across this a few years back and even had a test case to prove the 
> select bug but back then the original problem eventually was solved in a 
> different way which no longer hit the problem. I never could figure out
> how to fix the kconfig logic though without breaking something and it 
> ended up into low priority bin and never got solved.
>
> Sadly, it seems I've lost the test case patch that exhibits the bug 
> somewhere... I'll try to look for it from my archived files.

That's funny.

I thought this was a Kconfig quirk, that resulted from the following
hierarchy:

Type		0	1	2
=============== ======= ======= =======
Bool		n	y
Tristate	n	m	y

So a <bool> selecting the <tristate> would force it to be at least =m.

The same thing happens with depend, where a dependecy would be fulfilled
for a <bool> if a <tristate> was at least =m. That's why in the kernel
robot report the linking error was also due to the HWMON dependency.

Anyway, this patch could serve as a workaround if you feel it's
necessary. I'm going to put the HWMON dependecy in the ALIENWARE_WMI
symbol for my other series.
Ilpo Järvinen March 10, 2025, 4:46 p.m. UTC | #3
Hi Kbuild/config people,

Could you please take a look at this select problem.

I attempted to solve this kconfig select logic problem a few years back 
but IIRC, my solution leaked memory or had some other problem I could not 
find solution to (and now the code has changed enough I couldn't even get 
my buggy solution easily forward-ported so I just dropped the solution and 
left just the test case into the patch).

As the Kconfig problem back then got resolved through other means, I never 
mentioned this back then but seems the same problem likely happens here
in some other form (bool selecting tristate that ends up getting only =m).

On Mon, 10 Mar 2025, Kurt Borja wrote:
> On Mon Mar 10, 2025 at 9:29 AM -05, Ilpo Järvinen wrote:
> > On Sun, 9 Mar 2025, Kurt Borja wrote:
> >
> >> If ACPI_PLATFORM_PROFILE is selected by ALIENWARE_WMI_WMAX, the former
> >> is forced to be at least =m, because the latter is a bool.
> >> 
> >> This allows the following config:
> >> 
> >> 	CONFIG_ALIENWARE_WMI=y
> >> 	CONFIG_ACPI_PLATFORM_PROFILE=m
> >
> > Hi,
> >
> > selecting from =y should not result in =m for the other symbol. This is 
> > a bug in Kconfig infrastructure.
> >
> > I ran across this a few years back and even had a test case to prove the 
> > select bug but back then the original problem eventually was solved in a 
> > different way which no longer hit the problem. I never could figure out
> > how to fix the kconfig logic though without breaking something and it 
> > ended up into low priority bin and never got solved.
> >
> > Sadly, it seems I've lost the test case patch that exhibits the bug 
> > somewhere... I'll try to look for it from my archived files.
> 
> That's funny.
> 
> I thought this was a Kconfig quirk, that resulted from the following
> hierarchy:
> 
> Type		0	1	2
> =============== ======= ======= =======
> Bool		n	y

I think y should be 2 in both cases so select should cause the selected 
symbol to becomes =y but there's a logic problem deep in select logic in 
the kconfig code.

I've attached the multi-select based reproducer test case. make 
testconfig runs kconfig selftests and results in CONFIG_A3=m despite 
CONFIG_C3=y selecting it.

Please do not apply the test case before the problem is fixed.

> Tristate	n	m	y
> 
> So a <bool> selecting the <tristate> would force it to be at least =m.
> 
> The same thing happens with depend, where a dependecy would be fulfilled
> for a <bool> if a <tristate> was at least =m. That's why in the kernel
> robot report the linking error was also due to the HWMON dependency.
> 
> Anyway, this patch could serve as a workaround if you feel it's
> necessary. I'm going to put the HWMON dependecy in the ALIENWARE_WMI
> symbol for my other series.
> 
>
diff mbox series

Patch

diff --git a/drivers/platform/x86/dell/Kconfig b/drivers/platform/x86/dell/Kconfig
index f8a0dffcaab7c3b423472c5b9093011334a698c8..87c2ceb12d48d610c85fa739abbc4f0d88e33ec8 100644
--- a/drivers/platform/x86/dell/Kconfig
+++ b/drivers/platform/x86/dell/Kconfig
@@ -22,6 +22,7 @@  config ALIENWARE_WMI
 	depends on DMI
 	depends on LEDS_CLASS
 	depends on NEW_LEDS
+	select ACPI_PLATFORM_PROFILE
 	help
 	 This is a driver for controlling Alienware WMI driven features.
 
@@ -43,7 +44,6 @@  config ALIENWARE_WMI_WMAX
 	bool "Alienware WMAX WMI device driver"
 	default y
 	depends on ALIENWARE_WMI
-	select ACPI_PLATFORM_PROFILE
 	help
 	 Alienware WMI driver with AlienFX LED, HDMI, amplifier, deep sleep and
 	 AWCC thermal control capabilities.