2020年10月26日 星期一

baytrail linux freeze bug..

首先先論述這個問題. kernel 3.13 以後的版本, 在 J1900 上跑幾天會自己 freeze 掉 (凍結, 沒有任何錯誤訊息, 就完全沒有反應), 特別容易發生在 1. 機器沒有接任何 USB keyboard/mouse 2.機器有跑 VMware workstation 而且虛擬機器內 CPU 開一顆以上. 3. J1900 CPU 上. 同為 baytrail 的 E3815/3825/3845 沒有這問題.

這個問題其實困擾我快 3 年了, 這 3 年間看過許多奇奇怪怪的解法在 J1900 上試都沒什用, 當然包括 intel 這篇文章的內容也沒有用. 而在 kernel 4.x 時代關 c-state 的繞路解 (intel_idle.max_cstate = 1, 還是 c-state patch) 會在 kernel 5.x 上失效.

在後來 kernel 5.x 時代的 ubuntu 18.04 & 20.04 上, kernel 不需要下任何東西, 也不用下 c-state patch 就可以正常運作, 但要排除我一開始寫的兩個問題, 就沒事. 機器可以開好幾天都很正常, 但只要 VM workstation 開下去, 約 84 小時內就會 freeze. 有時快一點 4 小時以內就死.

這時我的建議, host OS kernel parameter 加上 "usbcore.autosuspend=-1", 也就是 /etc/default/grub 裡 "GRUB_CMDLINE_LINUX=" 這裡加上去, 如 "GRUB_CMDLINE_LINUX=usbcore.autosuspend=-1". 其它都不用加.

還有機器上請乖乖插上一隻 USB keyboard 或 mouse, 只要機器還認的到它是 USB HID 裝置就可以, 不需要可以正常使用, 不需要沒事去動它.


short for english version. added "usbcore.autosuspend=-1" to kernel parameter at boot (may insert this to grub..), and plug one USB HID device, such like keyboard, or mouse. and don't using any ACPI c-state patch..

update 2020/11/09: usbcore.autosuspend=-1 不用加, 而 USB kb | mouse 一定要接.