A patch fixes the frequent freezing at the Bay Trail has become known low-cost processors, the Celeron series on Linux. The SoCs are installed in cheap notebooks and other cheap hardware.
Bay Trail SoCs are known to be critical in Linux. This ranges from installation problems to crashes every minute. Intel knows the problem. It stands in an errata under the abbreviation VLP52 and is classified as No Fix , so Intel does not fix it .
Affected by the freeze, which usually occurs a few minutes after booting the system, are SoCs such as J1900, Celeron N2840, Celeron N2940, Atom Z3736F and Pentium N3540. The error that caused the crash was initially suspected in the GPU, but then localized in the power management of the chip and is described in a Bugzilla bug report. The problems only occur with many users if a graphical user interface is used.
The problem occurs when the system enters sleep mode C-State 6 (C6) after an interrupt service routine (ISR) is started but before it is terminated and the program continues at the interrupted location. A previously used workaround was to set the processor to C state 1 by passing the intel_idle.max_cstate = 1 parameter to the kernel . However, this leads to increased energy consumption and thus to shorter battery life.
The patch from Wolfgang M. Reimer disables only the C-States 6 and activates the C7-Core-States at the same time . This preserves the energy-saving options. The workaround introduced in mid-July was tested by many users and showed almost all the convincing results. However, some users also report that the problems with kernel 4.7 no longer occur even without the patch on their hardware.
#description: Disables all C6 and enables all C7 core states for Baytrail CPUs
#author: Wolfgang Reimer <linuxball (at) gmail.com>
#usage: sudo <path>/c6off+c7on.sh
#notes: Intended as test script to verify whether erratum VLP52 (see
# ) is the root cause for kernel bug 109051 (see ). In order
# for this to work you must _NOT_ use boot parameter
#  http://www.intel.com/content/dam/www/public/us/en/documents/specification-updates/pentium-n3520-j2850-celeron-n2920-n2820-n2815-n2806-j1850-j1750-spec-update.pdf
#  https://bugzilla.kernel.org/show_bug.cgi?id=109051
# Disable ($1 == 1) or enable ($1 == 0) core state, if not yet done.
read disabled <disable
test "$disabled" = $1 && return
echo $1 >disable || return
action=ENABLED; test "$1" = 0 || action=DISABLED
printf "%-8s state %7s for %s.\n" $action "$name" $cpu
# Iterate through each core state and for Baytrail (BYT) disable all C6
# and enable all C7 states.
for cpu in cpu[0-9]*; do
for dir in $cpu/cpuidle/state*; do
read name <name
case $name in
C6*-BYT) disable 1;;
C7*-BYT) disable 0;;