diff options
Diffstat (limited to 'Documentation/i386')
-rw-r--r-- | Documentation/i386/IO-APIC.txt | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/Documentation/i386/IO-APIC.txt b/Documentation/i386/IO-APIC.txt index 435e69e6e9aa..f95166645d29 100644 --- a/Documentation/i386/IO-APIC.txt +++ b/Documentation/i386/IO-APIC.txt | |||
@@ -1,12 +1,14 @@ | |||
1 | Most (all) Intel-MP compliant SMP boards have the so-called 'IO-APIC', | 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 | 2 | which is an enhanced interrupt controller. It enables us to route |
3 | hardware interrupts to multiple CPUs, or to CPU groups. | 3 | hardware interrupts to multiple CPUs, or to CPU groups. Without an |
4 | IO-APIC, interrupts from hardware will be delivered only to the | ||
5 | CPU which boots the operating system (usually CPU#0). | ||
4 | 6 | ||
5 | Linux supports all variants of compliant SMP boards, including ones with | 7 | 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 | 8 | multiple IO-APICs. Multiple IO-APICs are used in high-end servers to |
7 | distribute IRQ load further). | 9 | distribute IRQ load further. |
8 | 10 | ||
9 | There are (a few) known breakages in certain older boards, which bugs are | 11 | There are (a few) known breakages in certain older boards, such bugs are |
10 | usually worked around by the kernel. If your MP-compliant SMP board does | 12 | 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. | 13 | not boot Linux, then consult the linux-smp mailing list archives first. |
12 | 14 | ||
@@ -28,18 +30,18 @@ If your box boots fine with enabled IO-APIC IRQs, then your | |||
28 | hell:~> | 30 | hell:~> |
29 | <---------------------------- | 31 | <---------------------------- |
30 | 32 | ||
31 | some interrupts are still listed as 'XT PIC', but this is not a problem, | 33 | Some interrupts are still listed as 'XT PIC', but this is not a problem; |
32 | none of those IRQ sources is performance-critical. | 34 | none of those IRQ sources is performance-critical. |
33 | 35 | ||
34 | 36 | ||
35 | in the unlikely case that your board does not create a working mp-table, | 37 | 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 | 38 | 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 | 39 | is non-trivial though and cannot be automated. One sample /etc/lilo.conf |
38 | entry: | 40 | entry: |
39 | 41 | ||
40 | append="pirq=15,11,10" | 42 | append="pirq=15,11,10" |
41 | 43 | ||
42 | the actual numbers depend on your system, on your PCI cards and on their | 44 | 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 | 45 | 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 | 46 | connected to the PCI chipset IRQ routing facility (the incoming PIRQ1-4 |
45 | lines): | 47 | lines): |
@@ -54,7 +56,7 @@ lines): | |||
54 | PIRQ1 ----| |- `----| |- `----| |- `----| |--------| | | 56 | PIRQ1 ----| |- `----| |- `----| |- `----| |--------| | |
55 | `-' `-' `-' `-' `-' | 57 | `-' `-' `-' `-' `-' |
56 | 58 | ||
57 | every PCI card emits a PCI IRQ, which can be INTA,INTB,INTC,INTD: | 59 | Every PCI card emits a PCI IRQ, which can be INTA, INTB, INTC or INTD: |
58 | 60 | ||
59 | ,-. | 61 | ,-. |
60 | INTD--| | | 62 | INTD--| | |
@@ -95,21 +97,21 @@ card (IRQ11) in Slot3, and have Slot1 empty: | |||
95 | [value '0' is a generic 'placeholder', reserved for empty (or non-IRQ emitting) | 97 | [value '0' is a generic 'placeholder', reserved for empty (or non-IRQ emitting) |
96 | slots.] | 98 | slots.] |
97 | 99 | ||
98 | generally, it's always possible to find out the correct pirq= settings, just | 100 | 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 | 101 | 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 | 102 | '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). | 103 | won't function properly (e.g. if it's inserted as a module). |
102 | 104 | ||
103 | If you have 2 PCI buses, then you can use up to 8 pirq values. Although such | 105 | 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. | 106 | boards tend to have a good configuration. |
105 | 107 | ||
106 | Be prepared that it might happen that you need some strange pirq line: | 108 | Be prepared that it might happen that you need some strange pirq line: |
107 | 109 | ||
108 | append="pirq=0,0,0,0,0,0,9,11" | 110 | append="pirq=0,0,0,0,0,0,9,11" |
109 | 111 | ||
110 | use smart try-and-err techniques to find out the correct pirq line ... | 112 | Use smart trial-and-error techniques to find out the correct pirq line ... |
111 | 113 | ||
112 | good luck and mail to linux-smp@vger.kernel.org or | 114 | 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 | 115 | linux-kernel@vger.kernel.org if you have any problems that are not covered |
114 | by this document. | 116 | by this document. |
115 | 117 | ||