kernel - Improve ACPI compatibility with older BIOSes
authorMatthew Dillon <dillon@apollo.backplane.com>
Mon, 11 Jun 2018 20:21:53 +0000 (13:21 -0700)
committerMatthew Dillon <dillon@apollo.backplane.com>
Mon, 11 Jun 2018 20:21:53 +0000 (13:21 -0700)
* ACPI alignment field in ACPI resources can sometimes be 0, leading
  to passing 0 for 'align' to acpi_res_set_iorange() which panics the
  box with a division-by-zero fault.

* Relax handling of this argument by setting it to 1 if it is found
  to be 0.

* Fixes DFly panics with certain older BIOSes.

Reported-by: myu
sys/dev/acpica/acpi_resource.c

index e689932..6730524 100644 (file)
@@ -527,6 +527,8 @@ acpi_res_set_iorange(device_t dev, void *context, uint64_t low,
 
     if (cp == NULL)
        return;
+    if (align == 0)    /* broken acpi resources might pass align == 0 */
+       align = 1;
 
     base = roundup(low, align);
     if (base + length - 1 <= high) {