diff options
author | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
commit | 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (patch) | |
tree | 0bba044c4ce775e45a88a51686b5d9f90697ea9d /Documentation/i386/IO-APIC.txt |
Linux-2.6.12-rc2v2.6.12-rc2
Initial git repository build. I'm not bothering with the full history,
even though we have it. We can create a separate "historical" git
archive of that later if we want to, and in the meantime it's about
3.2GB when imported into git - space that would just make the early
git days unnecessarily complicated, when we don't have a lot of good
infrastructure for it.
Let it rip!
Diffstat (limited to 'Documentation/i386/IO-APIC.txt')
-rw-r--r-- | Documentation/i386/IO-APIC.txt | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/Documentation/i386/IO-APIC.txt b/Documentation/i386/IO-APIC.txt new file mode 100644 index 000000000000..435e69e6e9aa --- /dev/null +++ b/Documentation/i386/IO-APIC.txt | |||
@@ -0,0 +1,117 @@ | |||
1 | Most (all) Intel-MP compliant SMP boards have the so-called 'IO-APIC', | ||
2 | which is an enhanced interrupt controller, it enables us to route | ||
3 | hardware interrupts to multiple CPUs, or to CPU groups. | ||
4 | |||
5 | Linux supports all variants of compliant SMP boards, including ones with | ||
6 | multiple IO-APICs. (multiple IO-APICs are used in high-end servers to | ||
7 | distribute IRQ load further). | ||
8 | |||
9 | There are (a few) known breakages in certain older boards, which bugs are | ||
10 | usually worked around by the kernel. If your MP-compliant SMP board does | ||
11 | not boot Linux, then consult the linux-smp mailing list archives first. | ||
12 | |||
13 | If your box boots fine with enabled IO-APIC IRQs, then your | ||
14 | /proc/interrupts will look like this one: | ||
15 | |||
16 | ----------------------------> | ||
17 | hell:~> cat /proc/interrupts | ||
18 | CPU0 | ||
19 | 0: 1360293 IO-APIC-edge timer | ||
20 | 1: 4 IO-APIC-edge keyboard | ||
21 | 2: 0 XT-PIC cascade | ||
22 | 13: 1 XT-PIC fpu | ||
23 | 14: 1448 IO-APIC-edge ide0 | ||
24 | 16: 28232 IO-APIC-level Intel EtherExpress Pro 10/100 Ethernet | ||
25 | 17: 51304 IO-APIC-level eth0 | ||
26 | NMI: 0 | ||
27 | ERR: 0 | ||
28 | hell:~> | ||
29 | <---------------------------- | ||
30 | |||
31 | some interrupts are still listed as 'XT PIC', but this is not a problem, | ||
32 | none of those IRQ sources is performance-critical. | ||
33 | |||
34 | |||
35 | in the unlikely case that your board does not create a working mp-table, | ||
36 | you can use the pirq= boot parameter to 'hand-construct' IRQ entries. This | ||
37 | is nontrivial though and cannot be automated. One sample /etc/lilo.conf | ||
38 | entry: | ||
39 | |||
40 | append="pirq=15,11,10" | ||
41 | |||
42 | the actual numbers depend on your system, on your PCI cards and on their | ||
43 | PCI slot position. Usually PCI slots are 'daisy chained' before they are | ||
44 | connected to the PCI chipset IRQ routing facility (the incoming PIRQ1-4 | ||
45 | lines): | ||
46 | |||
47 | ,-. ,-. ,-. ,-. ,-. | ||
48 | PIRQ4 ----| |-. ,-| |-. ,-| |-. ,-| |--------| | | ||
49 | |S| \ / |S| \ / |S| \ / |S| |S| | ||
50 | PIRQ3 ----|l|-. `/---|l|-. `/---|l|-. `/---|l|--------|l| | ||
51 | |o| \/ |o| \/ |o| \/ |o| |o| | ||
52 | PIRQ2 ----|t|-./`----|t|-./`----|t|-./`----|t|--------|t| | ||
53 | |1| /\ |2| /\ |3| /\ |4| |5| | ||
54 | PIRQ1 ----| |- `----| |- `----| |- `----| |--------| | | ||
55 | `-' `-' `-' `-' `-' | ||
56 | |||
57 | every PCI card emits a PCI IRQ, which can be INTA,INTB,INTC,INTD: | ||
58 | |||
59 | ,-. | ||
60 | INTD--| | | ||
61 | |S| | ||
62 | INTC--|l| | ||
63 | |o| | ||
64 | INTB--|t| | ||
65 | |x| | ||
66 | INTA--| | | ||
67 | `-' | ||
68 | |||
69 | These INTA-D PCI IRQs are always 'local to the card', their real meaning | ||
70 | depends on which slot they are in. If you look at the daisy chaining diagram, | ||
71 | a card in slot4, issuing INTA IRQ, it will end up as a signal on PIRQ2 of | ||
72 | the PCI chipset. Most cards issue INTA, this creates optimal distribution | ||
73 | between the PIRQ lines. (distributing IRQ sources properly is not a | ||
74 | necessity, PCI IRQs can be shared at will, but it's a good for performance | ||
75 | to have non shared interrupts). Slot5 should be used for videocards, they | ||
76 | do not use interrupts normally, thus they are not daisy chained either. | ||
77 | |||
78 | so if you have your SCSI card (IRQ11) in Slot1, Tulip card (IRQ9) in | ||
79 | Slot2, then you'll have to specify this pirq= line: | ||
80 | |||
81 | append="pirq=11,9" | ||
82 | |||
83 | the following script tries to figure out such a default pirq= line from | ||
84 | your PCI configuration: | ||
85 | |||
86 | echo -n pirq=; echo `scanpci | grep T_L | cut -c56-` | sed 's/ /,/g' | ||
87 | |||
88 | note that this script wont work if you have skipped a few slots or if your | ||
89 | board does not do default daisy-chaining. (or the IO-APIC has the PIRQ pins | ||
90 | connected in some strange way). E.g. if in the above case you have your SCSI | ||
91 | card (IRQ11) in Slot3, and have Slot1 empty: | ||
92 | |||
93 | append="pirq=0,9,11" | ||
94 | |||
95 | [value '0' is a generic 'placeholder', reserved for empty (or non-IRQ emitting) | ||
96 | slots.] | ||
97 | |||
98 | generally, it's always possible to find out the correct pirq= settings, just | ||
99 | permute all IRQ numbers properly ... it will take some time though. An | ||
100 | 'incorrect' pirq line will cause the booting process to hang, or a device | ||
101 | won't function properly (if it's inserted as eg. a module). | ||
102 | |||
103 | If you have 2 PCI buses, then you can use up to 8 pirq values. Although such | ||
104 | boards tend to have a good configuration. | ||
105 | |||
106 | Be prepared that it might happen that you need some strange pirq line: | ||
107 | |||
108 | append="pirq=0,0,0,0,0,0,9,11" | ||
109 | |||
110 | use smart try-and-err techniques to find out the correct pirq line ... | ||
111 | |||
112 | good luck and mail to linux-smp@vger.kernel.org or | ||
113 | linux-kernel@vger.kernel.org if you have any problems that are not covered | ||
114 | by this document. | ||
115 | |||
116 | -- mingo | ||
117 | |||