18

I had troubles with the screen brightness control in my laptop and I fixed it by adding the acpi_osi=linux and acpi_backlight=vendorparameters to the filegrub.cfg. I'd like to know what these parameters mean and why they work.

24

The kernel parameters are documented at kernel.org.

To understand what acpi_osi does, you roughly need to know how ACPI works. ACPI consists of so-called tables that the BIOS loads into RAM before the operating system starts. Some of them simply contain information about essential devices on the mainboard in a fixed format, but some like the DSDT table contain AML code. This code is executed by the operating system and provides the OS with a tree structure describing many devices on the mainboard and callable functions that are executed by the OS when e.g. power saving is enabled. The AML code can ask the OS which OS it is by calling the _OSI function. This is often used by vendors to make workarounds e.g. around bugs in some Windows versions.

As many hardware vendors only test their products with the (at that time) latest version of Windows, the "regular" code paths without the workarounds are often buggy. Because of this Linux usually answers yes when asked if it's Windows. Linux also used to answer yes when asked if it's "Linux", but that caused BIOS vendors to work around bugs or missing functionality in the (at that time) latest Linux kernel version instead of opening bug reports or providing patches. When these bugs were fixed the workarounds caused unnecessary performance penalities and other problems for all later Linux versions.

acpi_osi=Linux makes Linux answer yes again when asked if it's "Linux" by the ACPI code, thus allowing the ACPI code to enable workarounds for Linux and/or disable workarounds for Windows.

acpi_backlight=vendor changes the order in which the ACPI drivers for backlights are checked. Usually Linux will use the generic video driver, when the ACPI DSDT provides a backlight device claiming standard compatibility and will only check other vendor specific drivers if such a device is not found. acpi_backlight=vendor reverses this order, so that the vendor specific drivers are tried first.

3

The first Google result for "acpi_osi" explains acpi_osi=linux:

[...] BIOS's usually disable functionality if Windows is not detected [...] by default the kernel responds false when asked if Linux is running. acpi_osi=Linux tells the kernel to respond true.(see drivers/acpi/osl.c) It seems that you need to tell the BIOS the truth.

The second Google result for "acpi_osi" explains acpi_backlight=vendor:

acpi_backlight=vendor will prefer vendor specific driver (e.g. thinkpad_acpi, sony_acpi, etc.) instead of the ACPI video.ko driver.

  • I'd argue these answers (especially for acpi_osi) are not detalied enough. – Cestarian May 1 at 14:05

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.