web-dev-qa-db-ja.com

一部のudevワーカーがタイムアウトするのはなぜですか?

数週間前、ALSAとUSBは私のラップトップで動作を停止しました。 YouTubeビデオのようなものはFirefoxでは音が出ません。 mpv[ao/alsa] Playback open error: No such file or directory. Could not open/initialize audio device -> no sound.を出力します。 alsamixerは、mixerのようなファイルがないことを訴えます。フラッシュドライブは/devまたは/dev/diskに表示されず、LEDは点灯しません。奇妙なことに、私はまだポートを使って電話を充電することができます…

udevも機能しているようで、ブートを1分間停止し(それ自体で!)waiting for uevents to be processed ...、シャットダウンを30分停止します(時間を計りました)stopping udev ...。カーネルログにも文句を言います:

<28>[  130.669180] udevd[1745]: worker [1763] /devices/pci0000:00/0000:00:14.0 is taking a long time
<28>[  130.669196] udevd[1745]: worker [1762] /devices/pci0000:00/0000:00:1b.0 is taking a long time

そして、数分後:

[  251.500125] udevd[1745]: worker [1763] /devices/pci0000:00/0000:00:14.0 timeout; kill it
[  251.500156] udevd[1745]: seq 1333 '/devices/pci0000:00/0000:00:14.0' killed
[  251.500166] udevd[1745]: worker [1762] /devices/pci0000:00/0000:00:1b.0 timeout; kill it
[  251.500174] udevd[1745]: seq 1336 '/devices/pci0000:00/0000:00:1b.0' killed
[  251.500535] udevd[1745]: worker [1763] terminated by signal 9 (Killed)
[  251.500540] udevd[1745]: worker [1763] failed while handling '/devices/pci0000:00/0000:00:14.0'

これらのPCIアドレスは、それぞれUSBコントローラーとオーディオデバイス用であることが判明しました。また、lsmodは異常なことを何も示していないようですが、/proc/modulesxhci_pcisnd_hda_intel、およびsunrpcを永遠にLoadingとしてリストしていることに気付きました。これら3つ(およびそれらに依存する他の3つ)のmodprobeはハングします(-vは、それらをinsmodしようとしているときにハングすることを示します)。

システムはLinux4.4.6でGentooを実行します。 udevはeudev3.1.5によって提供されます。ルートファイルシステムはLUKSコンテナ内にあります。 initrdを使用して起動します。

WebおよびStackExchangeの検索では、何も役に立ちませんでした。カーネル構成を wikiの抜粋 と照合し、eudevを再マージしてみました(変更なし)。では、ここで何が起こっているのでしょうか。

1

完全な説明はありませんが、カーネル構成でTIMER_STATSを無効にする(menuconfigを使用する場合はKernel hackingCollect kernel timers statistics)が修正されたようですこの。

何らかの理由で、モジュールの一部がTIMER_STATSをオンにするとロードに失敗し、奇妙な方法でinsmodがハングするのではないかと思います。カーネルログに記載されている2つのudevワーカーは、それらをロードしてハングさせ、その後強制終了しようとします。カーネルモジュールがなく、udevが実行したであろうセットアップ、サウンドおよびUSB関連のこと…は機能しません。


更新:

多くのモジュールがロードされていることに気づきましたbefore/がマウントされました。 very initrdを掘り下げて、いくつかのモジュール(/lib/modulessunrpcを含む)のコピーを含むownxhci_pciがあることがわかるまで混乱していました。 )。再構築後にすべてのモジュールをルートファイルシステムにインストールするようにしましたが、initrdを再構築することはありませんでした。つまり、実行中のカーネルの構成が、ロードしようとしたモジュール(の一部)とは異なっていました。明らかに、これは奇妙なことをもたらしました。 insmodがぶら下がっているように。

したがって、initrdを使用していて、カーネルモジュールのコピーがある場合は、カーネルを再構築するときに必ず再構築してください。

1