Re: [PATCH] x86/setup: Explicitly include acpi.h

From: Nathan Chancellor
Date: Tue Aug 31 2021 - 22:24:11 EST


On Tue, Aug 31, 2021 at 07:15:11PM -0700, Nathan Chancellor wrote:
> After commit 342f43af70db ("iscsi_ibft: fix crash due to KASLR physical
> memory remapping"), certain configurations show the following errors:
>
> arch/x86/kernel/setup.c: In function ‘setup_arch’:
> arch/x86/kernel/setup.c:916:13: error: implicit declaration of function ‘acpi_mps_check’ [-Werror=implicit-function-declaration]
> 916 | if (acpi_mps_check()) {
> | ^~~~~~~~~~~~~~
> arch/x86/kernel/setup.c:1110:9: error: implicit declaration of function ‘acpi_table_upgrade’ [-Werror=implicit-function-declaration]
> 1110 | acpi_table_upgrade();
> | ^~~~~~~~~~~~~~~~~~
> arch/x86/kernel/setup.c:1112:9: error: implicit declaration of function ‘acpi_boot_table_init’ [-Werror=implicit-function-declaration]
> 1112 | acpi_boot_table_init();
> | ^~~~~~~~~~~~~~~~~~~~
> arch/x86/kernel/setup.c:1120:9: error: implicit declaration of function ‘early_acpi_boot_init’; did you mean ‘early_cpu_init’? [-Werror=implicit-function-declaration]
> 1120 | early_acpi_boot_init();
> | ^~~~~~~~~~~~~~~~~~~~
> | early_cpu_init
> arch/x86/kernel/setup.c:1162:9: error: implicit declaration of function ‘acpi_boot_init’ [-Werror=implicit-function-declaration]
> 1162 | acpi_boot_init();
> | ^~~~~~~~~~~~~~
> cc1: some warnings being treated as errors
>
> acpi.h was being implicitly included from iscsi_ibft.h in these
> configurations so the removal of that means these functions have no
> definition or declaration. Add acpi.h explicitly so there is no more
> error.
>
> Signed-off-by: Nathan Chancellor <nathan@xxxxxxxxxx>
> ---
>
> * No fixes tag as I doubt the mentioned commit is the root cause.
>
> * The configuration was WSL2's, I did not drill down exactly which set
> of configs triggers this but it is pretty obvious what is going on
> here.

Actually, it reproduces with x86_64_defconfig so the configuration is
irrelevant. It looks like commit 12609013c43a ("x86/setup: Clean up the
header portion of setup.c") removed acpi.h, presumably because
iscsi_ibft.h included it but AFAIK, the kernel's policy has always been
to expliciltly include headers that are needed, rather than relying on
them being implicitly included.

If people care, I can resent with a fixes tag and calling out
x86_64_defconfig instead of the vague "certain configurations" but I do
not have a strong opinion personally.

> arch/x86/kernel/setup.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
> index 63b20536c8d2..79f164141116 100644
> --- a/arch/x86/kernel/setup.c
> +++ b/arch/x86/kernel/setup.c
> @@ -5,6 +5,7 @@
> * This file contains the setup_arch() code, which handles the architecture-dependent
> * parts of early kernel initialization.
> */
> +#include <linux/acpi.h>
> #include <linux/console.h>
> #include <linux/crash_dump.h>
> #include <linux/dma-map-ops.h>
>
> base-commit: 9e9fb7655ed585da8f468e29221f0ba194a5f613
> --
> 2.33.0
>