Date: Thu, 14 Apr 2016 17:56:59 +1000 (EST) From: Bruce Evans <brde@optusnet.com.au> To: Warner Losh <imp@freebsd.org> Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r297954 - in head/sys: boot/efi/loader/arch/amd64 boot/i386/libi386 x86/acpica Message-ID: <20160414172239.G13791@besplex.bde.org> In-Reply-To: <201604140459.u3E4xpYv038183@repo.freebsd.org> References: <201604140459.u3E4xpYv038183@repo.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, 14 Apr 2016, Warner Losh wrote: > Log: > Deprecate using hints.acpi.0.rsdp to communicate the RSDP to the > system. This uses the hints mechnanism. This mostly works today > because when there's no static hints (the default), this value can be > fetched from the hint. When there is a static hints file, the hint > passed from the boot loader to the kernel is ignored, but for the BIOS > case we're able to find it anyway. However, with UEFI, the fallback > doesn't work, so we get a panic instead. The new static_hints.disabled option allows overriding static hints. The override global, so hints generally have to be duplicated in both static hints and /boot/device.hints, like they are or should be in the example source files. > Switch to acpi.rsdp and use TUNABLE_ULONG_FETCH instead. Continue to > generate the old values to allow for transitions. In addition, fall > back to the old method if the new method isn't present. This only works if there is no static env (the default). The new static_env.disabled option allows overriding static env. I used to have this problem with all 50-100 hints and tunables that I use. static hints and env killed everything in /boot config files, and also killed all additions and changes in loader. This rarely mattered since I rarely use loader, and I keep the /boot files in sync with static hints and env, but it required a kernel recompile or editing the kernel binary to change anything. Editing the kernel binary is actually fairly easy. It needs an editor that doesn't clobber binary data, but the editor doesn't need to dispay or have search capability for binary data since the hints and env string are text. > ... > Modified: head/sys/x86/acpica/OsdEnvironment.c > ============================================================================== > --- head/sys/x86/acpica/OsdEnvironment.c Thu Apr 14 04:54:47 2016 (r297953) > +++ head/sys/x86/acpica/OsdEnvironment.c Thu Apr 14 04:59:51 2016 (r297954) > ... > @@ -59,6 +60,16 @@ acpi_get_root_from_loader(void) > { > long acpi_root; > > + if (TUNABLE_ULONG_FETCH("acpi.rsdp", &acpi_root)) > + return (acpi_root); > + > + /* > + * The hints mechanism is unreliable (it fails if anybody ever > + * compiled in hints to the kernel). It has been replaced > + * by the tunable method, but is used here as a fallback to > + * retain maximum compatibility between old loaders and new > + * kernels. It can be removed after 11.0R. > + */ > if (resource_long_value("acpi", 0, "rsdp", &acpi_root) == 0) > return (acpi_root); Having 2 mechanisms stupid. It basically gives more than 2 ways of foot shooting by using 2 spellings of the same variable (both easy to forget or misspell in interactive use) and possibly not supporting all combinations. Despite its verboseness, the above doesn't detect inconsistent settings or document the precedence for inconsistent settings anywhere uses can see it. It documents planned breakage for 1 of the mechanisms. Bruce
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20160414172239.G13791>