How to run Linux on Acer Swift 3 [SF314–51–59RF]

It looks like a decent laptop for travelers to get stuff done, but I guess my pre-purchase research wasn’t deep enough (If you plan to buy a laptop and run Linux on it, you should look here). The main problem with this notebook seems to get ACPI working together with the Linux kernel. First I struggled to boot the installer media from USB drives:

  • Debian 8.6 → I was able to finish the installation (Debian doesn’t recognize the wifi adapter, though), but the kernel didn’t boot afterwards and resulted in a freeze.
  • Ubuntu 16.10 → not able to boot even the installer, freeze after grub.
  • Fedora 25: → Same here, nothing but a freeze.
  • FreeBSD 11.0 → worked perfectly from the beginning, not even error messages during the boot process. But FreeBSD doesn’t support the built-in wifi (so I had to buy a cheap USB wifi adapter), it doesn’t support the Skylake on-chip Intel graphics, and I couldn’t figure out how to resume from suspend-to-RAM. Maybe next time, FreeBSD.
  • Archlinux → it was possible to boot and install Arch after passing the kernel parameter “acpi=off”. Yay.

Since disabling ACPI is generally not a good idea for daily use (because power management and most of your hardware will be unusable — like trackpad, suspend, buttons, etc.), I was looking for a more permanent solution.

Thanks to this article, it was easy to isolate the problem:

  1. If “acpi=off” makes the failure goes away, then it is likely an ACPI bug. But if a different failure occurs with ACPI disabled, then the test was inconclusive
  2. If the system boots with “acpi=off”, but fails otherwise, there are a number of boot parameters that disable different parts of ACPI that can be used to isolate where the issue lies
  3. “acpi=ht” the most like “acpi=off”, disables all of ACPI except what is needed to enumerate processors
  4. If “acpi=off” works and acpi=ht fails, then the issue is in the ACPI table parsing code itself, or perhaps the SMP code → BINGO!!!
  5. “pci=noacpi” disables ACPI for PCI root bus enumeration.
  6. “acpi=noirq” disables ACPI for IRQ routing
  7. “pnpacpi=off” disables the ACPI component of the Linux Plug and Play code.
  8. “noapic” disables the IO-APIC for IRQ routing
  9. “nolapic” disables the Local-APIC and the IO-APIC

So it turned out the reason for the boot freeze must have something to do with IRQ routing. With “acpi=noirq” my laptop booted and almost everything worked, even suspend/hibernate and resume.

But I still had IRQ errors and random kernel panics during boot and afterwards, because of general protection faults and memory corruption. It was like 7 failed boots vs. 1 successful boot. So besides Acer’s firmware, the buggy linux kernel seems to be responsible for that :Q

kernel: ACPI Warning: Large Reference Count (0xFCBF) in object ffff880265118048, T
systemd-journald[9590]: Missed 32357 kernel messages

Instead of git-bisecting the current kernel against older kernels, I went on and tried to boot different up-to-date kernels, like linux-lts, linux-ck, linux-zen and finally linux-grsec.

And … the Acer Swift 3 runs absolutely stable since I use the Grsecurity kernel (4.8.14) . Problem solved! 😀 And it’s not a bad idea to use a hardened kernel anyway:

GStreamer and the state of Linux desktop security
Alpine Linux: grsecurity/musl/busybox based linux distro

So if you run into similar problems, try to get up your system and and install the Grsecurity kernel, it’s available in every distro. Have fun 🙂

Advertisements