Translated message

A translation of this page exists in English.

RHEL7: uart ポートロックと tasklist_lock の間のデッドロック

Solution In Progress - Updated -

Issue

UPS がシリアルポートに接続された RHEL7.6 システムで、ハードロックパニックが発生します。これは複数回発生しました。どちらのダンプでも状況は似ています。

  • 1 つの CPU が、8250_rx パスで uart ポートのロックを取得しようとしています。
  • 1 つの CPU が、8250_tx パスで send_sigio を実行しており、ポートロックを保持したまま、読み取り用に tasklist_lock を要求しています。
  • 1 つの CPU が、何らかの終了パスで書き込み用に tasklist_lock を要求しています。

調査したところ、2 つの修正案があることがわかりました。1 つは、serial8250_rx_chars() の最後にある不要なロック/アンロックを削除することです。もう 1 つは、少し間接的な方法ですが、新しい send_sigio() コードにある、特定のケースで tasklist_lock の取得を回避する最適化を使用することです (この最適化により、今回のケースでも取得を回避できます)。1 つ目の修正は RHEL8.0 以降に存在し、2 つ目の修正は RHEL8.1 に存在します。

お客様が RHEL8 を試すことができるかどうか確認していますが、おそらく難しいでしょう。RHEL7.6 は EUS でのみ提供されており、
お客様がどの RHEL7 向けの修正を必要としているのかについてはまだ確認中です。

crash> bt
PID: 5666   TASK: ffff8c54b082a080  CPU: 1   COMMAND: "systemd-cgroups"
 #0 [ffff8c54bec889f0] machine_kexec at ffffffffa2a63674
 #1 [ffff8c54bec88a50] __crash_kexec at ffffffffa2b1ce12
 #2 [ffff8c54bec88b20] panic at ffffffffa315b4db
 #3 [ffff8c54bec88ba0] nmi_panic at ffffffffa2a9739f
 #4 [ffff8c54bec88bb0] watchdog_overflow_callback at ffffffffa2b49241
 #5 [ffff8c54bec88bc8] __perf_event_overflow at ffffffffa2ba1027
 #6 [ffff8c54bec88c00] perf_event_overflow at ffffffffa2baa694
 #7 [ffff8c54bec88c10] intel_pmu_handle_irq at ffffffffa2a0a6b0
 #8 [ffff8c54bec88e38] perf_event_nmi_handler at ffffffffa316b031
 #9 [ffff8c54bec88e58] nmi_handle at ffffffffa316c8fc
#10 [ffff8c54bec88eb0] do_nmi at ffffffffa316cbd8
#11 [ffff8c54bec88ef0] end_repeat_nmi at ffffffffa316bd69
    [exception RIP: native_queued_spin_lock_slowpath+290]
    RIP: ffffffffa2b12102  RSP: ffff8c5417a8be20  RFLAGS: 00000046
    RAX: 0000000000000000  RBX: ffffffffa3607080  RCX: 0000000000090000
    RDX: ffff8c54bed9b780  RSI: 0000000000190100  RDI: ffffffffa3607084
    RBP: ffff8c5417a8be20   R8: ffff8c54bec9b780   R9: 0000000000000000
    R10: 0000000000000000  R11: 0000000000000000  R12: ffffffffa3607084
    R13: ffff8c54197bd1b8  R14: 0000000000000000  R15: ffff8c54b082a080
    ORIG_RAX: ffffffffffffffff  CS: 0010  SS: 0018
#12 [ffff8c5417a8be20] native_queued_spin_lock_slowpath at ffffffffa2b12102
#13 [ffff8c5417a8be28] queued_spin_lock_slowpath at ffffffffa315bf5a
#14 [ffff8c5417a8be38] queued_write_lock_slowpath at ffffffffa2b1236b
#15 [ffff8c5417a8be58] _raw_qwrite_lock at ffffffffa316a601
#16 [ffff8c5417a8be68] tasklist_write_lock_irq at ffffffffa2a93beb
#17 [ffff8c5417a8be78] do_exit at ffffffffa2a9dcb5
#18 [ffff8c5417a8bf10] do_group_exit at ffffffffa2a9e44f
#19 [ffff8c5417a8bf40] sys_exit_group at ffffffffa2a9e4c4
#20 [ffff8c5417a8bf50] system_call_fastpath at ffffffffa3174ddb
    RIP: 00007fbc78ed81d9  RSP: 00007ffd60f96808  RFLAGS: 00010206
    RAX: 00000000000000e7  RBX: 0000000000000000  RCX: 0000000000000000
    RDX: 0000000000000000  RSI: 0000000000000000  RDI: 0000000000000000
    RBP: 00007fbc791d5838   R8: 000000000000003c   R9: 00000000000000e7
    R10: ffffffffffffff60  R11: 0000000000000246  R12: 00007fbc791d5838
    R13: 00007fbc791dae80  R14: 0000000000000000  R15: 0000000000000000
    ORIG_RAX: 00000000000000e7  CS: 0033  SS: 002b
crash> 
Kernel: 3.10.0-957.el7.x86_64

Environment

  • Red Hat Enterprise Linux (RHEL) 7
  • カーネル 3.10.0-957.el7.x86_64 (RHEL-7.6) で確認
  • crash

Subscriber exclusive content

A Red Hat subscription provides unlimited access to our knowledgebase, tools, and much more.

Current Customers and Partners

Log in for full access

Log In

New to Red Hat?

Learn more about Red Hat subscriptions

Using a Red Hat product through a public cloud?

How to access this content