loader: lua: assume late ACPI detection if the feature isn't enabled

While we're here, enable the feature in the places we detect ACPI.  This
lets us side-step the existing issues and provide a path forward for
folks upgrading from previous releases that haven't updated their ESP
yet.

Let's also fix core.setACPI: the hint already indicates that the
user's disabled it more consistently than loader.acpi_disabled_by_user.
Even more, the latter is wrong because we set it by default if we did
not detect ACPI.  The ACPI hint remains even when we're setting defaults
because ACPI loaded into the kernel will make some noise if it's not
hinted off, even when we didn't detect it.

imp notes that this will result in some relatively harmless noise on
platforms that don't support ACPI but aren't using the UEFI loader, as
we would enable the ACPI module for loading on them and then loader
would not be able to find it.  These are non-fatal, but should probably
be fixed by just declaring support for EARLY_ACPI in those loaders since
we know they won't have ACPI early on -- punting on this for the time
being, though, in favor of providing a safer upgrade path sooner.

Reviewed by:	imp
Differential Revision:	https://reviews.freebsd.org/D42727
This commit is contained in:
Kyle Evans 2023-12-08 15:36:06 -06:00
parent 1631382cf2
commit e183039f08
3 changed files with 14 additions and 10 deletions

View file

@ -909,6 +909,7 @@ acpi_detect(void)
char buf[24];
int revision;
feature_enable(FEATURE_EARLY_ACPI);
if ((rsdp = efi_get_table(&acpi20)) == NULL)
if ((rsdp = efi_get_table(&acpi)) == NULL)
return;

View file

@ -54,6 +54,8 @@ biosacpi_detect(void)
char buf[24];
int revision;
feature_enable(FEATURE_EARLY_ACPI);
/* locate and validate the RSDP */
if ((rsdp = biosacpi_find_rsdp()) == NULL)
return;

View file

@ -133,17 +133,20 @@ function core.setSingleUser(single_user)
end
function core.hasACPI()
return loader.getenv("acpi.rsdp") ~= nil
end
-- We can't trust acpi.rsdp to be set if the loader binary doesn't do
-- ACPI detection early enough. UEFI loader historically didn't, so
-- we'll fallback to assuming ACPI is enabled if this binary does not
-- declare that it probes for ACPI early enough
if loader.getenv("acpi.rsdp") ~= nil then
return true
end
function core.isX86()
return loader.machine_arch == "i386" or loader.machine_arch == "amd64"
return not core.hasFeature("EARLY_ACPI")
end
function core.getACPI()
if not core.hasACPI() then
-- x86 requires ACPI pretty much
return false or core.isX86()
return false
end
-- Otherwise, respect disabled if it's set
@ -157,13 +160,11 @@ function core.setACPI(acpi)
end
if acpi then
loader.setenv("acpi_load", "YES")
config.enableModule("acpi")
loader.setenv("hint.acpi.0.disabled", "0")
loader.unsetenv("loader.acpi_disabled_by_user")
else
loader.unsetenv("acpi_load")
config.disableModule("acpi")
loader.setenv("hint.acpi.0.disabled", "1")
loader.setenv("loader.acpi_disabled_by_user", "1")
end
core.acpi = acpi
end