カーネルログに "Page fault caused by firmware" エラーが表示される
Environment
- Red Hat Enterprise Linux 7
- 具体的には、カーネルバージョン
kernel-3.10.0-1160.31.1.el7
からkernel-3.10.0-1160.61.1.el7
の 1 つ前のバージョンまでが対象
Issue
- カーネルログには、EFI ランタイムサービス、ファームウェアのバグ、長時間ブロックされた
kworker
スレッドなどに関するエラーと警告が表示されます。 - Intel の imsm RAID コンテナーのアセンブルが
mdadm
エラーで失敗します。 efibootmgr
などの EFI 関連のタスクがハングまたは失敗する場合があります。- 上記のエラーが記録され、
kernel.hung_task_panic
sysctl が有効になっている場合、しばらくするとシステムがパニックになることがあります。
Resolution
- kernel-3.10.0-1160.62.1.el7 以降のバージョンに更新します。
Root Cause
- UEFI ランタイムサービスを呼び出すときにカーネルスイッチがスペースを処理する方法の更新により、UEFI ランタイムサービスが無効になり、
kworker
スレッドが無期限にハングする可能性があるバグが発生しました。 - UEFI は、あらゆるオペレーティングシステムに役立つさまざまな機能を提供します。この機能は、オペレーティングシステムを適切に起動するために不可欠ですが、システムが完全に起動した後 (一般にランタイムと呼ばれます)、同じ機能が役立つ場合があります。
- 関数の使用を容易にするコードパスは、上流の Linux カーネルで簡略化され、Red Hat Enterprise Linux にバックポートされました。
- 簡略化により、カーネルが Translation Lookaside Buffer (TLB) フラッシュを管理する方法にバグが発生しました。これは、ソリューション RHEL7: kernel crashes in leave_mm() with a message "kernel BUG at arch/x86/mm/tlb.c:48!" に記載されています。
- 上記の修正により、以前の問題は解決されましたが、エッジケースは解決されませんでした。エッジケースは、CPU のメモリーをマップするために使用される現在のメモリー管理構造体の状態の不整合が原因で発生しました。
- 事実上、不整合により、EFI メモリーがマップされている間に、CPU が TLB 内の通常のメモリーの操作を試みることが可能になりました。これによりページフォールトがトリガーされ (メモリーのアドレスはありますが、実際にはそれを所有していません)、EFI はこのページフォールトから回復します。ただし、EFI がページフォールトを処理する方法が原因で、EFI ランタイムサービスが無効になり、UEFI への作業を管理する
kworker
スレッドが割り込み不能なスリープ (D) 状態でフリーズします。 - この修正は、これらの操作を実行するときに CPU の TLB の状態を確立し、不整合を回避する状態によって適切にアクションを実行します。
Diagnostic Steps
-
システムがまだ動作している場合は、
dmesg
またはjournalctl -k
を介してカーネルリングバッファーをチェックし、次のエラー/警告のいずれかを確認します。[ 34.313537] WARNING: CPU: 58 PID: 2597 at arch/x86/platform/efi/quirks.c:489 efi_recover_from_page_fault+0x40/0x120 [ 34.313541] [Firmware Bug]: Page fault caused by firmware at PA: 0xfffffffeecb081e7 [...] [ 34.313584] CPU: 58 PID: 2597 Comm: kworker/u672:4 Not tainted 3.10.0-1160.36.2.el7.x86_64 #1 [ 34.313603] Workqueue: efi_rts_wq efi_call_rts [...] [ 34.313787] efi: Froze efi_rts_wq and disabled EFI Runtime Services [...] [ 34.313854] efi: EFI Runtime Services are disabled!
-
以下は、問題が発生した
dmesg
からの例になります。[ 11.004945] ------------[ cut here ]------------ [ 11.004961] WARNING: CPU: 38 PID: 5 at arch/x86/platform/efi/quirks.c:489 efi_recover_from_page_fault+0x40/0x120 [ 11.004964] [Firmware Bug]: Page fault caused by firmware at PA: 0xfffffffeeca13c7f [ 11.004966] Modules linked in: wdat_wdt pcspkr ipmi_ssif joydev sg i2c_i801 lpc_ich mei_me mei ipmi_si ipmi_devintf ipmi_msghandler acpi_pad(+) acpi_power_meter(+) ip_tables xfs libcrc32c sd_mod crc_t10dif crct10dif_generic ast igb drm_kms_helper crct10dif_pclmul crct10dif_common crc32c_intel ptp syscopyarea pps_core sysfillrect sysimgblt dca fb_sys_fops nvme i2c_algo_bit ttm nvme_core drm ahci libahci megaraid_sas libata drm_panel_orientation_quirks nfit libnvdimm dm_mirror dm_region_hash dm_log dm_mod fuse [ 11.005015] CPU: 38 PID: 5 Comm: kworker/u256:0 Not tainted 3.10.0-1160.36.2.el7.x86_64 #1 [ 11.005027] Workqueue: efi_rts_wq efi_call_rts [ 11.005029] Call Trace: [ 11.005039] [<ffffffff84383559>] dump_stack+0x19/0x1b [ 11.005047] [<ffffffff83c9b258>] __warn+0xd8/0x100 [ 11.005053] [<ffffffff83c9b2df>] warn_slowpath_fmt+0x5f/0x80 [ 11.005057] [<ffffffff83c8c830>] efi_recover_from_page_fault+0x40/0x120 [ 11.005066] [<ffffffff83c75c86>] no_context+0xb6/0x300 [ 11.005071] [<ffffffff83c75fe2>] __bad_area_nosemaphore+0x112/0x220 [ 11.005076] [<ffffffff83c76104>] bad_area_nosemaphore+0x14/0x20 [ 11.005083] [<ffffffff84390750>] __do_page_fault+0x310/0x500 [ 11.005092] [<ffffffff83ce8494>] ? find_busiest_group+0x144/0x990 [ 11.005096] [<ffffffff84390975>] do_page_fault+0x35/0x90 [ 11.005100] [<ffffffff8438c778>] page_fault+0x28/0x30 [ 11.005107] [<ffffffff83c7df01>] ? switch_mm_irqs_off+0x21/0x290 [ 11.005111] [<ffffffff83c7df01>] ? switch_mm_irqs_off+0x21/0x290 [ 11.005116] [<ffffffff83c7dfe9>] ? switch_mm_irqs_off+0x109/0x290 [ 11.005120] [<ffffffff83c7dff5>] ? switch_mm_irqs_off+0x115/0x290 [ 11.005123] [<ffffffff83c7dff5>] ? switch_mm_irqs_off+0x115/0x290 [ 11.005127] [<ffffffff83c7dfe9>] ? switch_mm_irqs_off+0x109/0x290 [ 11.005131] [<ffffffff83c7dff5>] ? switch_mm_irqs_off+0x115/0x290 [ 11.005135] [<ffffffff83c7dfe9>] ? switch_mm_irqs_off+0x109/0x290 [ 11.005139] [<ffffffff83c7dfe9>] ? switch_mm_irqs_off+0x109/0x290 [ 11.005142] [<ffffffff83c8daa8>] ? efi_call+0x58/0x90 [ 11.005147] [<ffffffff83c8ce51>] ? efi_switch_mm+0x31/0x50 [ 11.005152] [<ffffffff841d4139>] ? efi_call_rts+0x2f9/0x600 [ 11.005161] [<ffffffff83cbde6f>] ? process_one_work+0x17f/0x440 [ 11.005167] [<ffffffff83cbef86>] ? worker_thread+0x126/0x3c0 [ 11.005172] [<ffffffff83cbee60>] ? manage_workers.isra.26+0x2a0/0x2a0 [ 11.005177] [<ffffffff83cc5e41>] ? kthread+0xd1/0xe0 [ 11.005182] [<ffffffff83cc5d70>] ? insert_kthread_work+0x40/0x40 [ 11.005188] [<ffffffff84395df7>] ? ret_from_fork_nospec_begin+0x21/0x21 [ 11.005193] [<ffffffff83cc5d70>] ? insert_kthread_work+0x40/0x40 [ 11.005196] ---[ end trace 32d18cdf2277bf49 ]--- [ 11.005209] efi: Froze efi_rts_wq and disabled EFI Runtime Services <<---------- [ 11.006254] ------------[ cut here ]------------ [ 11.006265] WARNING: CPU: 38 PID: 1333 at lib/list_debug.c:53 __list_del_entry+0x63/0xd0 [ 11.006267] list_del corruption, ffffddf083ff0c20->next is LIST_POISON1 (dead000000000100) [ 11.006295] efi: EFI Runtime Services are disabled! [ 11.006269] Modules linked in: wdat_wdt pcspkr ipmi_ssif joydev sg i2c_i801 lpc_ich mei_me mei ipmi_si ipmi_devintf ipmi_msghandler acpi_pad(+) acpi_power_meter(+) ip_tables xfs libcrc32c sd_mod crc_t10dif crct10dif_generic ast igb drm_kms_helper crct10dif_pclmul crct10dif_common crc32c_intel ptp syscopyarea pps_core sysfillrect sysimgblt dca fb_sys_fops nvme i2c_algo_bit ttm nvme_core drm ahci libahci megaraid_sas libata drm_panel_orientation_quirks nfit libnvdimm dm_mirror dm_region_hash dm_log dm_mod fuse [ 11.006309] CPU: 38 PID: 1333 Comm: systemd-journal Tainted: G W ------------ 3.10.0-1160.36.2.el7.x86_64 #1 [ 11.006313] Call Trace: [ 11.006317] [<ffffffff84383559>] dump_stack+0x19/0x1b [ 11.006322] [<ffffffff83c9b258>] __warn+0xd8/0x100 [ 11.006328] [<ffffffff83c9b2df>] warn_slowpath_fmt+0x5f/0x80 [ 11.006332] [<ffffffff83ce4cfc>] ? dequeue_entity+0x11c/0x5c0 [ 11.006336] [<ffffffff83fa6753>] __list_del_entry+0x63/0xd0 [ 11.006341] [<ffffffff83fa67cd>] list_del+0xd/0x30 [ 11.006345] [<ffffffff83c7c0a8>] pgd_free+0x58/0x90 [ 11.006349] [<ffffffff83c97687>] __mmdrop+0x27/0xb0 [ 11.006355] [<ffffffff83cd4bbd>] finish_task_switch+0x16d/0x1c0 [ 11.006362] [<ffffffff84388e10>] __schedule+0x320/0x680 [ 11.006367] [<ffffffff84389199>] schedule+0x29/0x70 [ 11.006371] [<ffffffff843885dd>] schedule_hrtimeout_range_clock+0x12d/0x150 [ 11.006380] [<ffffffff83e9d4b9>] ? ep_scan_ready_list.isra.7+0x1b9/0x1f0 [ 11.006385] [<ffffffff84388613>] schedule_hrtimeout_range+0x13/0x20 [ 11.006389] [<ffffffff83e9d74e>] ep_poll+0x23e/0x360 [ 11.006397] [<ffffffff83e4c288>] ? do_truncate+0x88/0xc0 [ 11.006402] [<ffffffff83e51498>] ? __sb_start_write+0x58/0x120 [ 11.006407] [<ffffffff83cdadd0>] ? wake_up_state+0x20/0x20 [ 11.006412] [<ffffffff83e9ec2d>] SyS_epoll_wait+0xed/0x120 [ 11.006420] [<ffffffff84395f92>] system_call_fastpath+0x25/0x2a [ 11.006423] ---[ end trace 32d18cdf2277bf4a ]---
-
-
システムが応答しない場合に、システムがクラッシュするように設定されている場合は、NMI を介して vmcore をキャプチャーし、NMI がシステムに送信されたときに vmcore を作成してみてください。
- システムクラッシュ時に
vmcore
を作成する kdump 設定の詳細については、How to troubleshoot kernel crashes, hangs, or reboots with kdump on Red Hat Enterprise Linux のアーティクルを参照してください。 - NMI がシステムに送信されたときに
kdump
をトリガーするようにシステムを設定する詳細な方法は、How can I configure my system to crash when NMI switch is pushed? のアーティクルを参照してください。 - vmcore の読み取りの詳細については、ドキュメント 7.6.コアダンプの分析 を参照してください。
- システムクラッシュ時に
-
vmcore 内では、カーネルリングバッファーは
log
またはdmesg
でチェックできます。上記と同様のログについては、こちらを確認してください。 -
vmcore 内で、
kworker
スレッドが長時間ブロックされているかどうか、また、efi_call
でブロックしているかどうかを確認します。crash> foreach UN ps -m [0 00:05:50.998] [UN] PID: 2597 TASK: ffffa2bffa90b180 CPU: 58 COMMAND: "kworker/u672:4"
-
以下は、上記の
kworker
スレッドのスタックです。efi_call+0x58 efi_call_rts+0x2f9 process_one_work+0x17f worker_thread+0x126 kthread+0xd1 ret_from_fork_nospec_begin+0x7
-
This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.
Comments