svn commit: r297954 - in head/sys: boot/efi/loader/arch/amd64 boot/i386/libi386 x86/acpica
Warner Losh
imp at bsdimp.com
Thu Apr 14 16:39:29 UTC 2016
On Thu, Apr 14, 2016 at 1:56 AM, Bruce Evans <brde at optusnet.com.au> wrote:
> 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.
>
Correct. Static environments are generally not used in x86.
> 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.
The second method will be deleted in the fullness of time. If I delete it
now, I break the upgrade path.
Warner
More information about the svn-src-head
mailing list