git: 16c09de80135 - stable/14 - loader: improve lua ACPI detection and handling
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 16 Apr 2024 02:34:39 UTC
The branch stable/14 has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=16c09de801353a3e88addd9c43966fc8e01b2822 commit 16c09de801353a3e88addd9c43966fc8e01b2822 Author: R. Christian McDonald <rcm@FreeBSD.org> AuthorDate: 2023-11-20 17:13:08 +0000 Commit: Warner Losh <imp@FreeBSD.org> CommitDate: 2024-04-16 02:32:04 +0000 loader: improve lua ACPI detection and handling This is a follow-up patch to https://reviews.freebsd.org/D42459 that modifies the loader lua to use the correct loader variables for determining ACPI availability. This also fixes a bug where ACPI can be inadvertently disabled when setting System Defaults at the loader menu. Reviewed by: imp, kevans Approved by: kp Sponsored by: Rubicon Communications, LLC ("Netgate") Differential Revision: https://reviews.freebsd.org/D42483 (cherry picked from commit e0f3dc82727f236b0bea495d8a4d6e6dc630854d) --- stand/lua/core.lua | 39 +++++++++++++++------------------------ stand/lua/core.lua.8 | 22 +++++++++------------- stand/lua/menu.lua | 2 +- 3 files changed, 25 insertions(+), 38 deletions(-) diff --git a/stand/lua/core.lua b/stand/lua/core.lua index 747f8c1f0fcf..3bbdca3de01e 100644 --- a/stand/lua/core.lua +++ b/stand/lua/core.lua @@ -32,6 +32,7 @@ local hook = require("hook") local core = {} +local default_acpi = false local default_safe_mode = false local default_single_user = false local default_verbose = false @@ -46,20 +47,14 @@ local function composeLoaderCmd(cmd_name, argstr) end local function recordDefaults() - -- On i386, hint.acpi.0.rsdp will be set before we're loaded. On !i386, - -- it will generally be set upon execution of the kernel. Because of - -- this, we can't (or don't really want to) detect/disable ACPI on !i386 - -- reliably. Just set it enabled if we detect it and leave well enough - -- alone if we don't. - local boot_acpi = core.isSystem386() and core.getACPIPresent(false) local boot_single = loader.getenv("boot_single") or "no" local boot_verbose = loader.getenv("boot_verbose") or "no" + + default_acpi = core.getACPI() default_single_user = boot_single:lower() ~= "no" default_verbose = boot_verbose:lower() ~= "no" - if boot_acpi then - core.setACPI(true) - end + core.setACPI(default_acpi) core.setSingleUser(default_single_user) core.setVerbose(default_verbose) end @@ -137,18 +132,18 @@ function core.setSingleUser(single_user) core.su = single_user end -function core.getACPIPresent(checking_system_defaults) - local c = loader.getenv("hint.acpi.0.rsdp") +function core.hasACPI() + return loader.getenv("acpi.rsdp") ~= nil +end - if c ~= nil then - if checking_system_defaults then - return true - end - -- Otherwise, respect disabled if it's set - c = loader.getenv("hint.acpi.0.disabled") - return c == nil or tonumber(c) ~= 1 +function core.getACPI() + if not core.hasACPI() then + return false end - return false + + -- Otherwise, respect disabled if it's set + local c = loader.getenv("hint.acpi.0.disabled") + return c == nil or tonumber(c) ~= 1 end function core.setACPI(acpi) @@ -378,7 +373,7 @@ function core.loadEntropy() end function core.setDefaults() - core.setACPI(core.getACPIPresent(true)) + core.setACPI(default_acpi) core.setSafeMode(default_safe_mode) core.setSingleUser(default_single_user) core.setVerbose(default_verbose) @@ -470,10 +465,6 @@ function core.isSerialBoot() return false end -function core.isSystem386() - return loader.machine_arch == "i386" -end - -- Is the menu skipped in the environment in which we've booted? function core.isMenuSkipped() return string.lower(loader.getenv("beastie_disable") or "") == "yes" diff --git a/stand/lua/core.lua.8 b/stand/lua/core.lua.8 index e1752475f942..cb52ae9f1b30 100644 --- a/stand/lua/core.lua.8 +++ b/stand/lua/core.lua.8 @@ -90,7 +90,7 @@ constants. .Ss Exported functions The following functions are exported from .Nm : -.Bl -tag -width core.getACPIPresent -offset indent +.Bl -tag -width core.setSingleUser -offset indent .It Fn core.setVerbose verbose Sets or unsets .Ev boot_verbose . @@ -103,15 +103,14 @@ Sets or unsets If .Fa singleUser is omitted, toggle the current single user setting. -.It Fn core.getACPIPresent checkingSystemDefaults -Check whether ACPI is present. -This will only be accurate for i386-compatible loaders, including non-UEFI -loaders on amd64 systems. -If -.Fa checkingSystemDefaults -is true, ignore the current value of -.Ev hint.acpi.0.disabled . -Otherwise, return true only if ACPI is both present and not disabled. +.It Fn core.getACPI +Return true if ACPI is both present and not explicitly disabled by +.Ev hints.acpi.0.disabled . +.It Fn core.hasACPI +Checks whether ACPI support is present. +This requires the loader to probe the system and set +.Ev acpi.rsdp +early before starting the interpreter. .It Fn core.setACPI acpi Sets or unsets .Ev acpi_load , @@ -209,9 +208,6 @@ This checks .Ev boot_serial , and .Ev boot_multicons . -.It Fn core.isSystem386 -Returns true if this bootloader was compiled as an i386 binary. -This generally applies to i386 loaders as well as non-UEFI loaders on amd64. .It Fn core.deepCopyTable tbl Recursively deep copies .Fa tbl diff --git a/stand/lua/menu.lua b/stand/lua/menu.lua index 7da03ad9e673..4a948acf8241 100644 --- a/stand/lua/menu.lua +++ b/stand/lua/menu.lua @@ -176,7 +176,7 @@ menu.boot_options = { -- acpi { entry_type = core.MENU_ENTRY, - visible = core.isSystem386, + visible = core.hasACPI, name = function() return OnOff(color.highlight("A") .. "CPI :", core.acpi)