Cuando el kernel de Linux imprime advertencias del tipo "ACPI Warning: SystemIO range ... conflicts with OpRegion ...", muchos usuarios asumen que el firmware de su PC es defectuoso. Esta guía explica por qué esa interpretación es, en general, incorrecta y cómo resolver la situación de forma adecuada.
ACPI (Advanced Configuration and Power Interface) define una abstracción del hardware mediante código distribuido en tablas, interpretado por el sistema operativo en tiempo de ejecución. A través del lenguaje ASL, el firmware describe "Operation Regions", que son ventanas sobre registros de E/S o memoria, y métodos para acceder a ellos. Para evitar condiciones de carrera entre métodos concurrentes, ACPI emplea mutex declarados en ASL.
El conflicto surge cuando un controlador nativo de Linux intenta acceder directamente al mismo rango de puertos que una OpRegion declarada por ACPI. El kernel no puede determinar qué tipo de accesos hará el firmware en esa región, asume que podrían ser peligrosos y bloquea la carga del driver nativo, emitiendo la advertencia mencionada. Un caso histórico ilustrativo fue el de chips de monitorización de temperatura accedidos simultáneamente por firmware y Linux, lo que producía lecturas erróneas y apagados térmicos.
La solución correcta no es pasar parámetros al kernel para saltarse la protección, sino utilizar el driver ACPI asociado al dispositivo. Las tablas ACPI suelen incluir un Device con un identificador _HID (por ejemplo "VEND0001") que permite al kernel cargar automáticamente un controlador capaz de invocar los métodos del firmware de forma coordinada, respetando los mutex y evitando carreras.
