vine-users ML アーカイブ



[vine-users:056582] local IO-APIC <- RTL8139

  • From: Akira Tsukamoto <akira-t@xxxxxxxxxxxxxx>
  • Subject: [vine-users:056582] local IO-APIC <- RTL8139
  • Date: Tue, 03 Dec 2002 06:27:16 -0500
塚本です。

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>