nns779/px4_drv

0.2.0で`spinlock bad magic`が発生する

masnagam opened this issue · 3 comments

Linuxドライバーの解析経験がないため未解析なのですが,以下のようなログが出力されます.

# dmesgからの抜粋
[ 1320.911907] BUG: spinlock bad magic on CPU#0, recpt1/3559
[ 1320.915780]  lock: 0xffffffc03ca47900, .magic: 00000000, .owner: \xffffffe8\xffffff8b\xffffffd\xffffff80\xffffffff\xffffffff\xffffffff/0, .owner_cpu: -1
[ 1320.920032] CPU: 0 PID: 3559 Comm: recpt1 Tainted: G           O    4.4.178-rockchip64 #4
[ 1320.924297] Hardware name: Pine64 Rock64 (DT)
[ 1320.928163] Call trace:
[ 1320.931825] [<ffffff80080882b0>] dump_backtrace+0x0/0x1bc
[ 1320.935827] [<ffffff8008088490>] show_stack+0x24/0x30
[ 1320.939794] [<ffffff80085876ac>] dump_stack+0x98/0xc0
[ 1320.943671] [<ffffff8008105f24>] spin_dump+0x84/0xa4
[ 1320.947471] [<ffffff8008105f74>] spin_bug+0x30/0x3c
[ 1320.951204] [<ffffff8008106024>] do_raw_spin_lock+0x40/0x164
[ 1320.955037] [<ffffff8008bc2d00>] _raw_spin_lock+0x20/0x2c
[ 1320.958854] [<ffffff8008bc12cc>] __mutex_lock_slowpath+0x5c/0x11c
[ 1320.962748] [<ffffff8008bc13c8>] mutex_lock+0x3c/0x50
[ 1320.966547] [<ffffff8000c7760c>] rt710_sleep+0x38/0x74 [px4_drv]
[ 1320.970433] [<ffffff8000c728f8>] px4_tsdev_open+0x250/0x5f0 [px4_drv]
[ 1320.974351] [<ffffff80081f917c>] chrdev_open+0x15c/0x168
[ 1320.978109] [<ffffff80081f238c>] do_dentry_open+0x288/0x2e4
[ 1320.981835] [<ffffff80081f35d4>] vfs_open+0x80/0x84
[ 1320.985489] [<ffffff80082027f8>] path_openat+0xc1c/0xdf4
[ 1320.989161] [<ffffff8008203e34>] do_filp_open+0x48/0x94
[ 1320.992803] [<ffffff80081f397c>] do_sys_open+0x158/0x238
[ 1320.996402] [<ffffff80081f3ae0>] SyS_openat+0x3c/0x4c
[ 1320.999926] [<ffffff8008082f8c>] __sys_trace_return+0x0/0x4
[ 1321.003596] Unable to handle kernel NULL pointer dereference at virtual address 00000000
[ 1321.007586] pgd = ffffffc02ca85000
[ 1321.011102] [00000000] *pgd=0000000000000000, *pud=0000000000000000

ログにも記載されていますが,以下の環境で発生を確認しました.

  • HW: ROCK64
  • uname -a: Linux $HOST 4.4.178-rockchip64 #4 SMP Wed May 8 19:34:01 CEST 2019 aarch64 GNU/Linux
  • Distribution: Armbian (Debian Stretch)
  • px4_drv: 2bab256 (v0.2.0)
    • DKMS使用
  • stz2012/recpt1: 36a3f4077044cf9b06e3a12f092aff187fa844d6 (master HEAD)
  • Tuner: PX-W3U4(チューナーデバイス数:GRx2 BS/CSx2)

361ba3e では発生しないため,これ以降のコミットに原因があるようです.

問題が発生すると,load averageが2や4になります.ROCK64は4コアです.

デッドロックが発生しているのもと推測していますが,ドライバー不具合の解析経験はないので,参考程度の意見だと受け止めてください.

ご報告ありがとうございます。
また、ご迷惑をおかけして申し訳ございません。

同様の環境にて調査したところ、チューナーを開く処理において致命的なバグがあることがわかりましたので、 79d1039 にて修正を行いました。

ご確認いただけると幸いです。

対応ありがとうございます.

6時間ほど動かしましたが, 59d380d では問題が発生しないことを確認しました.

こちらで不具合解析すべきだと思っていますので,nss779さんは謝る必要はないです.
寧ろ,ドライバーを公開してくれていることに大変感謝しています.

多少コードも書けますので,もし手伝えることがあれば気軽に声を掛けてください.

ご確認ありがとうございます。
問題が発生しないとのことで、こちらとしても安心しました。

そして改めて、今回わざわざご報告いただき、ありがとうございました。
このバグは、私の普段検証している環境では再現せず正常に動作して(いるように見えて)いたため、このまま見逃されていた可能性がありました。

今後また何かありましたら、よろしくお願いします。