2017-01-23

hdaudio(4)がエラーを出す場所を調べてみる

dynabook SS SX/15AにインストールしたNetBSD/i386 7.0.2のhdaudio(4)でRealtek ALC262が認識されない原因を調べてみようと思います。調べてみても解決できるとは限りませんが、少なくとも何が問題なのか見えてくるでしょう。

エラーメッセージ「couldn't map mmio space」を頼りにカーネルのソースコードを探してみると、hdaudio_pci.cの中にあるhdaudio_pci_attach()しかありません。この中でpci_mapreg_map()を呼び出してエラーが返っているのでしょう。

pci_mapreg_map()/usr/src/sys/dev/pci/pci_map.cで定義されています。問題個所を絞り込んでみるとbus_space_map()がエラーを返しています。これは/usr/src/sys/arch/x86/x86/bus_space.cにありますから、さらに問題個所を絞り込んでいきます。するとbus_space_reserve()が怪しいようです。さらに中に入り込んで調べていくと/usr/src/sys/kern/subr_extent.cにあるextent_alloc_region()に辿りつきました。

このextent_alloc_region()の中でif (rp->er_end >= start)という判定を行っていますが、これに引っ掛かってエラーを返すようです。この時にrp->er_end9dfffstart0なので、条件が成立してしまうようです。

とりあえずここまでは調べましたが、これは一体なにが問題なのでしょうか。
  1. NetBSDのhdaudio(4)がRealtek ALC262に対応していないか、対応が不完全なのか。
  2. Realtek ALC262を使っているdynabook SS SX/15Aに起因する何かの問題なのか。
問題個所を突き止めるのは比較的容易ですし、その時の変数の値を見る事も簡単です。しかし本来どうあるべきなのかを考えるのは、どういう知識が必要とされるのか、現時点ではサッパリ見当もつきません。

どうすれば解決に至ることができるのか、考えてみようと思います。

0 件のコメント:

コメントを投稿