Fix hw.acpi.os_name by renaming it to hw.acpi.osname. The "_name" suffix

is reserved by the loader, and thus any tunable name with that suffix will
be silently discarded.

Document this in the header and man page so that other developers do not
develop so many bumps on the head after banging it against the wall.

Detective work by:	Mark Santcroos, grehan
This commit is contained in:
njl 2004-02-14 03:17:30 +00:00
parent 7211bcf201
commit 67995bef83
4 changed files with 13 additions and 8 deletions

View File

@ -317,7 +317,7 @@ Try increasing this number if you get the error
Enables calling the VESA reset BIOS vector on the resume path.
Some graphic chips have problems such as LCD white-out after resume.
Try setting this to 0 if this causes problems for you.
.It Va hw.acpi.os_name
.It Va hw.acpi.osname
Some systems' ASL may have problems because they look for names
of Microsoft operating systems.
This tunable overrides the value of the

View File

@ -132,6 +132,10 @@ special value
.Dq abort ,
which aborts the bootstrap process, use of this setting should be avoided.
.El
.Pp
.Em WARNING:
developers should never use these suffixes for any kernel environment
variables (tunables) or conflicts will result.
.Sh DEFAULT SETTINGS
Most of
.Nm Ns 's

View File

@ -38,8 +38,8 @@
#undef _COMPONENT
#define _COMPONENT ACPI_TABLES
static char acpi_os_name[128];
TUNABLE_STR("hw.acpi.os_name", acpi_os_name, sizeof(acpi_os_name));
static char acpi_osname[128];
TUNABLE_STR("hw.acpi.osname", acpi_osname, sizeof(acpi_osname));
ACPI_STATUS
AcpiOsPredefinedOverride (
@ -50,11 +50,9 @@ AcpiOsPredefinedOverride (
return (AE_BAD_PARAMETER);
*NewVal = NULL;
if (strncmp(InitVal->Name, "_OS_", 4) == 0 &&
getenv_string("hw.acpi.os_name", acpi_os_name, sizeof(acpi_os_name))) {
printf("ACPI: Overriding _OS definition with \"%s\"\n", acpi_os_name);
*NewVal = acpi_os_name;
if (strncmp(InitVal->Name, "_OS_", 4) == 0 && strlen(acpi_osname) > 0) {
printf("ACPI: Overriding _OS definition with \"%s\"\n", acpi_osname);
*NewVal = acpi_osname;
}
return (AE_OK);

View File

@ -265,6 +265,9 @@ void sysinit_add(struct sysinit **set, struct sysinit **set_end);
* Infrastructure for tunable 'constants'. Value may be specified at compile
* time or kernel load time. Rules relating tunables together can be placed
* in a SYSINIT function at SI_SUB_TUNABLES with SI_ORDER_LAST.
*
* WARNING: developers should never use the reserved suffixes specified in
* loader.conf(5) for any tunables or conflicts will result.
*/
extern void tunable_int_init(void *);