塚本です。 On Mon, 2 Dec 2002 23:21:27 +0900 Daisuke SUZUKI <daisuke@xxxxxxxxxxx> mentioned: > p.s. > APIC 問題はまあよく聞いていたのですが、手元では問題にあたらなかったのと > ないと今度はあまりうれしくないものもあるようで、Local APIC 有効にしてありまし > たが、やはり今後は UP では外すべきでしょうね。。 この話題に興味がありまして、別スレッドを起しました。 (これを面白いと思っていただける人がいると幸いです。) 混乱しやすいのですが、CPU 内にある APIC と ノースブリッジに含まれる local IO-APIC は別です。両者とも、IBM PC/AT からある割り込みコントローラー 8259 PIC の拡張版のようです。 今のところ私が理解している範囲で、local IO-APIC (日本語に訳すと、"内蔵デバイス用割り込みコントローラー(拡張版)" でしょうか?) が無事に動作する条件として、 1)マザーボード上で、マザー内蔵デバイスなどが、きちんとノースブリッジの local IO-APIC 端子につながっている。 2)ACPI IRQ ルーティングテーブルに local IO-APIC に対応した正しい情報が 書き込まれている。 3)BIOS でノースブリッジの設定で local IO-APIC が ON になっている。 シングル CPU マザーでは、BIOS で local IO-APIC をOFFにしているものがほとんど みたいですが、Linux カーネルのほうで、local IO-APIC を有効にしていると、 ON にしてくれます。 2) は Dual CPU マザーでも、間違ったテーブルを持っている BIOS が多いみたいでして それで、MPS を 1.1 にすると安定するという状態になっているみたいです。 Linux の ACPI BIOS のスキャンのときにこれを一生懸命プロービングして 修正しているみたいです。ACPI カーネルがバージョンアップするごとに この精度が良くなっているようです。 また、SONY や HP などのメーカー製の方がマザーボードメーカーの BIOS と比べて 間違っていることが多いような気がします。 1) はユーザーのほうではどうしようもないので、マザーを買い替えるしかないと 思います。(または、ノートパソコン丸ごとの買い替え) 調べてみましたら、RedHat8 では、シングル CPU では、local IO-APIC が off に なっていました。 > usb-uhci.c: USB UHCI at I/O 0xd400, IRQ 10 > usb-uhci.c: USB UHCI at I/O 0xd000, IRQ 10 > usb-uhci.c: USB UHCI at I/O 0xc800, IRQ 11 > usb-uhci.c: USB UHCI at I/O 0xc400, IRQ 10 >eth0: RealTek RTL8139 Fast Ethernet at 0xe2882f00, 00:20:ed:2f:f6:0c, IRQ 10 普通の IRQ 10/11 が使用されています。 local IO-APIC が on の Vine Linux 2.4.19-0vl26 カーネルでは > uhci.c: USB UHCI at I/O 0xd400, IRQ 21 > uhci.c: USB UHCI at I/O 0xd000, IRQ 21 > uhci.c: USB UHCI at I/O 0xc800, IRQ 16 > uhci.c: USB UHCI at I/O 0xc400, IRQ 17 >eth0: RealTek RTL8139 Fast Ethernet at 0xcc00, 00:20:ed:2f:f6:0c, IRQ 18 IRQ 16 以上の IRQ 16/17/21 にきちんと割り振られています。 私のマザーでは、GigaByte 7VRXP (VGA が安定しないのでこのマザーはお薦めしません <- rev1.1 の場合です rev 2.0 では直っているという噂です) local IO-APIC を使用していても問題なく動いています。 ところが、dmesg に結構履歴が残っていまして、下に貼りつけました。 (これがすごいのです。(笑)) ENABLING IO-APIC IRQs init IO_APIC IRQs IO-APIC (apicid-pin) 2-0, 2-16, 2-17, 2-18, 2-19, 2-20, 2-21, 2-22, 2-23 not connected. ..TIMER: vector=0x31 pin1=2 pin2=0 number of MP IRQ sources: 16. number of IO-APIC #2 registers: 24. testing the IO APIC....................... IO APIC #2...... .... register #00: 02000000 ....... : physical APIC id: 02 .... register #01: 00178002 ....... : max redirection entries: 0017 ....... : PRQ implemented: 1 ....... : IO APIC version: 0002 WARNING: unexpected IO-APIC, please mail to linux-smp@xxxxxxxxxxxxxxx .... IRQ redirection table: NR Log Phy Mask Trig IRR Pol Stat Dest Deli Vect: 00 000 00 1 0 0 0 0 0 0 00 01 001 01 0 0 0 0 0 1 1 39 02 001 01 0 0 0 0 0 1 1 31 03 001 01 0 0 0 0 0 1 1 41 04 001 01 0 0 0 0 0 1 1 49 05 001 01 0 0 0 0 0 1 1 51 06 001 01 0 0 0 0 0 1 1 59 07 001 01 0 0 0 0 0 1 1 61 08 001 01 0 0 0 0 0 1 1 69 09 001 01 1 1 0 1 0 1 1 71 0a 001 01 0 0 0 0 0 1 1 79 0b 001 01 0 0 0 0 0 1 1 81 0c 001 01 0 0 0 0 0 1 1 89 0d 001 01 0 0 0 0 0 1 1 91 0e 001 01 0 0 0 0 0 1 1 99 0f 001 01 0 0 0 0 0 1 1 A1 10 000 00 1 0 0 0 0 0 0 00 11 000 00 1 0 0 0 0 0 0 00 12 000 00 1 0 0 0 0 0 0 00 13 000 00 1 0 0 0 0 0 0 00 14 000 00 1 0 0 0 0 0 0 00 15 000 00 1 0 0 0 0 0 0 00 16 000 00 1 0 0 0 0 0 0 00 17 000 00 1 0 0 0 0 0 0 00 IRQ to pin mappings: IRQ0 -> 0:2 IRQ1 -> 0:1 IRQ3 -> 0:3 IRQ4 -> 0:4 IRQ5 -> 0:5 IRQ6 -> 0:6 IRQ7 -> 0:7 IRQ8 -> 0:8 IRQ9 -> 0:9 IRQ10 -> 0:10 IRQ11 -> 0:11 IRQ12 -> 0:12 IRQ13 -> 0:13 IRQ14 -> 0:14 IRQ15 -> 0:15 .................................... done. Using local APIC timer interrupts. calibrating APIC timer ... ..... CPU clock speed is 1673.7719 MHz. ..... host bus clock speed is 267.8035 MHz. cpu: 0, clocks: 2678035, slice: 1339017 CPU0<T0:2678032,T1:1339008,D:7,S:1339017,C:2678035> mtrr: v1.40 (20010327) Richard Gooch (rgooch@xxxxxxxxxxxxx) mtrr: detected mtrr type: Intel ACPI: Subsystem revision 20021115 PCI: PCI BIOS revision 2.10 entry at 0xfdb01, last bus=1 PCI: Using configuration type 1 ACPI-0508: *** Info: GPE Block0 defined as GPE0 to GPE15 ACPI: Interpreter enabled ACPI: Using IOAPIC for interrupt routing ACPI: System [ACPI] (supports S0 S1 S4 S5) ACPI: PCI Root Bridge [PCI0] (00:00) PCI: Probing PCI hardware (bus 00) ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] ACPI: Power Resource [URP1] (off) ACPI: Power Resource [URP2] (off) ACPI: Power Resource [FDDP] (off) ACPI: Power Resource [LPTP] (off) ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 5 6 7 10 *11 12 14 15) ACPI: PCI Interrupt Link [LNKB] (IRQs 3 4 5 6 7 *10 11 12 14 15) ACPI: PCI Interrupt Link [LNKC] (IRQs 3 4 5 6 7 *10 11 12 14 15) ACPI: PCI Interrupt Link [LNKD] (IRQs 3 4 5 6 7 *10 11 12 14 15) PCI: Probing PCI hardware IOAPIC[0]: Set PCI routing entry (2-16 -> 0xa9 -> IRQ 16) 00:00:01[A] -> 2-16 -> IRQ 16 IOAPIC[0]: Set PCI routing entry (2-17 -> 0xb1 -> IRQ 17) 00:00:01[B] -> 2-17 -> IRQ 17 IOAPIC[0]: Set PCI routing entry (2-22 -> 0xb9 -> IRQ 22) 00:00:11[C] -> 2-22 -> IRQ 22 IOAPIC[0]: Set PCI routing entry (2-21 -> 0xc1 -> IRQ 21) 00:00:11[D] -> 2-21 -> IRQ 21 Pin 2-17 already programmed IOAPIC[0]: Set PCI routing entry (2-18 -> 0xc9 -> IRQ 18) 00:00:09[B] -> 2-18 -> IRQ 18 IOAPIC[0]: Set PCI routing entry (2-19 -> 0xd1 -> IRQ 19) 00:00:09[C] -> 2-19 -> IRQ 19 Pin 2-16 already programmed Pin 2-18 already programmed Pin 2-19 already programmed Pin 2-16 already programmed Pin 2-17 already programmed Pin 2-19 already programmed Pin 2-16 already programmed Pin 2-17 already programmed Pin 2-18 already programmed Pin 2-16 already programmed Pin 2-17 already programmed Pin 2-18 already programmed Pin 2-19 already programmed Pin 2-17 already programmed Pin 2-18 already programmed Pin 2-19 already programmed Pin 2-16 already programmed Pin 2-17 already programmed Pin 2-18 already programmed Pin 2-16 already programmed Pin 2-17 already programmed Pin 2-18 already programmed Pin 2-19 already programmed Pin 2-16 already programmed Pin 2-17 already programmed Pin 2-18 already programmed Pin 2-19 already programmed PCI: No IRQ known for interrupt pin A of device 00:11.1 - using IRQ 255 PCI: Using ACPI for IRQ routing PCI: if you experience problems, try using option 'pci=noacpi' or even 'acpi=off' PCI: Via IRQ fixup for 00:11.2, from 10 to 5 PCI: Via IRQ fixup for 00:11.3, from 10 to 5 PCI: Via IRQ fixup for 00:14.0, from 11 to 0 PCI: Via IRQ fixup for 00:14.1, from 10 to 1 > > # あと、lkml にある MPS 1.4 とか 2.0 とかがデフォルトのものもうまく動かないことが > # おおいですね。そういえば自分でつかうものはなんとなく 1.1 とかに変えてました。 > > -- > Daisuke SUZUKI <daisuke@xxxxxxxxxxx> > President, Project Vine. http://vinelinux.org/ > President, Vine Caves, Ltd. http://vinecaves.com/ > Vice President, Japan Linux Association. http://jla.linux.or.jp/ -- Akira Tsukamoto <akira-t@xxxxxxxxxxxxxx, at541@xxxxxxxxxxxx>