Kernel panic: PCI-DMA: high address but no IOMMU
次のエントリーでその効果について書きますが、メモリを2GBプラスして、合計 4GB にして参照系のデータ周りを /dev/shm に移動しようと思ってメモリ買って増設してみたんですけど、Kernel Panic で起動しませぬ・・・orz
サーバ停止を極力影響が少ない5時くらいに工事実施していたわけですが、なんっていうかこんな画面でフリーズします。眠いし焦っていたので写真ぼけてます。
CentOS 4.2 - x86_64 を使っているので、Kernel は 2.6.9-22 を使ってます。うーむ。。。何だこのエラーは?
PCI-DMA: 32bit PCI IO may malfunction.<6> PCI DMA: disabling IOMMU
Kernel panic - not syncing: PCI-DMA: high address but no IOMMU
英語なページをかなーり検索しまくって情報集めたのですが、
- Athlon 64 X2 Dual Core
- Kernel 2.6.9 系
- 4GB のメモリ
- ASUS A8N 系のマザーボード
特有?(←うそかも・・・)のバグみたいです。詳細は、Bug 169115: Kernel panic when more than 4GB RAM and no IOMMU で情報が得られるわけですが、This was fixed in RHEL 4 U4 と書かれているので、一応最新の Kernel 2.6.9-55 では修正されているのかな??
なんだか、4GB のメモリはいわゆる一般的なデスクトップ PC ではいろいろと鬼門な気がします。
ちなみに、ソースで言うと、pci-gart.c あたりが kernel panic している場所なんですが、実際はこの関数を叩いている上の部分のロジックの不具合が原因っぽいです。なのでソースを結構追わないとダメっぽく、時間がないので解析しません。Kernel の update は今週末あたりにでもやろうかな。
static inline int need_iommu(struct device *dev, unsigned long addr, size_t size) { u64 mask = *dev->dma_mask; int high = addr + size >= mask; int mmu = high; if (force_iommu) mmu = 1; if (no_iommu) { if (high) panic("PCI-DMA: high address but no IOMMU.\n"); mmu = 0; } return mmu; } static inline int nonforced_iommu(struct device *dev, unsigned long addr, size_t size) { u64 mask = *dev->dma_mask; int high = addr + size >= mask; int mmu = high; if (no_iommu) { if (high) panic("PCI-DMA: high address but no IOMMU.\n"); mmu = 0; } return mmu; }
__追記__ : 実際に yum 使って Kernel を最新に update してみる
yum update kernel yum update kernel-devel yum update kernel-utils yum update kernel-smp yum update kernel-smp-devel
で Kernel を最新のバージョンにすることで、無事に 4GB を認識して OS が立ち上がりました。取りあえず現時点で update された Kernel のバージョンは
Linux version 2.6.9-55.ELsmp ([email protected]) (gcc version 3.4.6 20060404 (Red Hat 3.4.6-8)) #1 SMP Wed May 2 14:04:42 EDT 2007
でした。どのバージョンでこの不具合が修正されたかまでは調べてませんが、取りあえず 2.6.9-55 では OK だったので同様の不具合がでた場合はご参考までに。
コメントやシェアをお願いします!
自慢君
そうなんですよね。
HP の ProLiant DL145G3 を4GB にして CentOS 5 を入れようとしたら、
インストーラーがこけました。
BIOS で IOMMU を Disable にしたら、やっとインストールできました。
1日悩みましたよ(T_T)。