Dealing with a c-state bug

Computers that run Linux (especially newer kernel versions) on Intel Bay Trail family processors are sometimes affected by a c-state bug. It manifests as a random and total freeze of the system. Screen content remains unchanged, but the machine becomes completely unresponsive. I have encountered this on units that run Intel Celeron N2920, but other members of the Bay Trail family can also be affected. Also, theĀ kernel.org page linked to above suggests that the bug exists in kernel versionsĀ 3.16-4.2, but I have encountered it on Ubuntu 16.04 (kernel version 4.4) and Ubuntu 16.10 (kernel version 4.8), so this bug, as far as I can see, is still extant.

The freeze happens when the processor receives an instruction to enter an unsupported sleep state. The workaround, therefore, is to tell the kernel to stop giving those instructions to the processor. This is accomplished by editing the grub configuration file.

Open the grub configuration file for editing as root using your favorite editor. For example, assuming you’re using nano and are not logged in as root, you can type this into the terminal:

sudo nano /etc/default/grub

When the file opens, find the line that starts with GRUB_CMDLINE_LINUX_DEFAULT and change it to include intel_idle.max_cstate=1. Typically, after you’re done editing, the line would look like this:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash intel_idle.max_cstate=1"

The values quiet and splash are usually set by default and should be left in place.

Save the file (Ctrl+o, then Enter), exit (Ctrl+x), and apply the update:

sudo update-grub

Finally, restart the system.

Leave a Reply

Your email address will not be published. Required fields are marked *