Debian fpu__restore 警告

Debian 系統的 dmesg 出現以下訊息:
  
[75488.545900] ------------[ cut here ]------------
[75488.545917] WARNING: CPU: 0 PID: 765 at ./arch/x86/include/asm/fpu/internal.h:513 fpu__restore+0x27d/0x2c0
[75488.545919] Modules linked in: tun joydev hid_generic usbhid ftdi_sio intel_rapl hid usbserial intel_soc_dts_iosf intel_powerclamp evdev coretemp kvm_intel kvm irqbypass crct10dif_pclmul crc32_pclmul ghash_clmulni_intel cryptd i915 intel_cstate iTCO_wdt iTCO_vendor_support fpgaio_pci(O) drm_kms_helper drm syscopyarea sysfillrect video sysimgblt fb_sys_fops pcspkr button ip_tables x_tables autofs4 overlay ext4 crc16 jbd2 fscrypto mbcache ehci_pci ehci_hcd igb i2c_i801 i2c_algo_bit crc32c_intel i2c_smbus usbcore dca ptp pps_core fjes mmc_block
[75488.545958] CPU: 0 PID: 765 Comm: XXXThread Tainted: G           O    4.9.218-rt131 #23
[75488.545959] Hardware name: To be filled by O.E.M. To be filled by O.E.M./Aptio CRB, BIOS 5.6.5 10/29/2018
[75488.545964]  0000000000000000 ffffffffb174449b 0000000000000000 0000000000000000
[75488.545967]  ffffffffb147f2f8 ffff8e9ef7ed54c0 00000000efc23740 ffff8e9ef7ed4880
[75488.545970]  ffff8e9ef7ed54c0 0000000000000200 0000000000000000 ffffffffb143491d
[75488.545970] Call Trace:
[75488.545977]  [<ffffffffb174449b>] ? dump_stack+0x5c/0x81
[75488.545980]  [<ffffffffb147f2f8>] ? __warn+0xe8/0x100
[75488.545983]  [<ffffffffb143491d>] ? fpu__restore+0x27d/0x2c0
[75488.545985]  [<ffffffffb1436073>] ? __fpu__restore_sig+0x203/0x620
[75488.545989]  [<ffffffffb1474319>] ? ia32_restore_sigcontext+0x149/0x160
[75488.545991]  [<ffffffffb1474533>] ? sys32_sigreturn+0xc3/0xe0
[75488.545995]  [<ffffffffb1403f35>] ? do_int80_syscall_32+0x85/0x1a0
[75488.545998]  [<ffffffffb1a4bdc2>] ? entry_INT80_compat+0x72/0xa0
[75488.546000] ---[ end trace 0000000000000002 ]---

看起來是個警告,但還是看看為什麼?透過 Google 找到以下這篇:

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=843764

似乎不嚴重,有人說不用 rt 就不會有這個情況。那直接來看它回報的 ./arch/x86/include/asm/fpu/internal.h:513 這一行好了。配合其 kernel 版本 4.9.218,在下面位址找到其原始碼:

https://elixir.bootlin.com/linux/v4.9.218/source/arch/x86/include/asm/fpu/internal.h


看起來是 WARN_ON_FPU 這一行印出的警告,而這一個 macro 又定義成 WARN_ON_ONCE,其帶入的值如果為 1 的話,則會印出警告。所以回到上述 __fpregs_activate 函式,目的「看起來」要做下面這一行:

fpu->fpregs_active = 1;

這樣的話,代表這個警告是執行這函式時,fpregs_active 已經是 1 了,故它只是「警告」。


留言

熱門文章