diff options
| author | Linus Torvalds <torvalds@g5.osdl.org> | 2006-03-30 15:38:18 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-03-30 15:38:18 -0500 |
| commit | d1127e40e8d75cd3855e35424937c73d0bcec558 (patch) | |
| tree | 093f020e971827c63d3eed1d646022c581ded2ea | |
| parent | 5abc97aa25b2c41413b3a520faee83f2282d9f18 (diff) | |
| parent | c1c57d767100417f63c18da52d7e96f82b2b9e1a (diff) | |
Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux-2.6
* 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux-2.6:
[IA64] ioremap() should prefer WB over UC
[IA64] Add __mca_table to the DISCARD list in gate.lds
[IA64] Move __mca_table out of the __init section
[IA64] simplify some condition checks in iosapic_check_gsi_range
[IA64] correct some messages and fixes some minor things
[IA64-SGI] fix for-loop in sn_hwperf_geoid_to_cnode()
[IA64-SGI] sn_hwperf use of num_online_cpus()
[IA64] optimize flush_tlb_range on large numa box
[IA64] lazy_mmu_prot_update needs to be aware of huge pages
| -rw-r--r-- | arch/ia64/kernel/gate.lds.S | 1 | ||||
| -rw-r--r-- | arch/ia64/kernel/iosapic.c | 265 | ||||
| -rw-r--r-- | arch/ia64/kernel/vmlinux.lds.S | 18 | ||||
| -rw-r--r-- | arch/ia64/mm/init.c | 8 | ||||
| -rw-r--r-- | arch/ia64/mm/ioremap.c | 6 | ||||
| -rw-r--r-- | arch/ia64/mm/tlb.c | 12 | ||||
| -rw-r--r-- | arch/ia64/sn/kernel/sn2/sn_hwperf.c | 8 | ||||
| -rw-r--r-- | include/asm-ia64/asmmacro.h | 4 |
8 files changed, 199 insertions, 123 deletions
diff --git a/arch/ia64/kernel/gate.lds.S b/arch/ia64/kernel/gate.lds.S index e1e4aba9ecd0..7c99e6ec3daf 100644 --- a/arch/ia64/kernel/gate.lds.S +++ b/arch/ia64/kernel/gate.lds.S | |||
| @@ -59,6 +59,7 @@ SECTIONS | |||
| 59 | *(.dynbss) | 59 | *(.dynbss) |
| 60 | *(.bss .bss.* .gnu.linkonce.b.*) | 60 | *(.bss .bss.* .gnu.linkonce.b.*) |
| 61 | *(__ex_table) | 61 | *(__ex_table) |
| 62 | *(__mca_table) | ||
| 62 | } | 63 | } |
| 63 | } | 64 | } |
| 64 | 65 | ||
diff --git a/arch/ia64/kernel/iosapic.c b/arch/ia64/kernel/iosapic.c index 8832c553230a..7956eb9058fc 100644 --- a/arch/ia64/kernel/iosapic.c +++ b/arch/ia64/kernel/iosapic.c | |||
| @@ -9,54 +9,65 @@ | |||
| 9 | * Copyright (C) 1999 VA Linux Systems | 9 | * Copyright (C) 1999 VA Linux Systems |
| 10 | * Copyright (C) 1999,2000 Walt Drummond <drummond@valinux.com> | 10 | * Copyright (C) 1999,2000 Walt Drummond <drummond@valinux.com> |
| 11 | * | 11 | * |
| 12 | * 00/04/19 D. Mosberger Rewritten to mirror more closely the x86 I/O APIC code. | 12 | * 00/04/19 D. Mosberger Rewritten to mirror more closely the x86 I/O |
| 13 | * In particular, we now have separate handlers for edge | 13 | * APIC code. In particular, we now have separate |
| 14 | * and level triggered interrupts. | 14 | * handlers for edge and level triggered |
| 15 | * 00/10/27 Asit Mallick, Goutham Rao <goutham.rao@intel.com> IRQ vector allocation | 15 | * interrupts. |
| 16 | * PCI to vector mapping, shared PCI interrupts. | 16 | * 00/10/27 Asit Mallick, Goutham Rao <goutham.rao@intel.com> IRQ vector |
| 17 | * 00/10/27 D. Mosberger Document things a bit more to make them more understandable. | 17 | * allocation PCI to vector mapping, shared PCI |
| 18 | * Clean up much of the old IOSAPIC cruft. | 18 | * interrupts. |
| 19 | * 01/07/27 J.I. Lee PCI irq routing, Platform/Legacy interrupts and fixes for | 19 | * 00/10/27 D. Mosberger Document things a bit more to make them more |
| 20 | * ACPI S5(SoftOff) support. | 20 | * understandable. Clean up much of the old |
| 21 | * IOSAPIC cruft. | ||
| 22 | * 01/07/27 J.I. Lee PCI irq routing, Platform/Legacy interrupts | ||
| 23 | * and fixes for ACPI S5(SoftOff) support. | ||
| 21 | * 02/01/23 J.I. Lee iosapic pgm fixes for PCI irq routing from _PRT | 24 | * 02/01/23 J.I. Lee iosapic pgm fixes for PCI irq routing from _PRT |
| 22 | * 02/01/07 E. Focht <efocht@ess.nec.de> Redirectable interrupt vectors in | 25 | * 02/01/07 E. Focht <efocht@ess.nec.de> Redirectable interrupt |
| 23 | * iosapic_set_affinity(), initializations for | 26 | * vectors in iosapic_set_affinity(), |
| 24 | * /proc/irq/#/smp_affinity | 27 | * initializations for /proc/irq/#/smp_affinity |
| 25 | * 02/04/02 P. Diefenbaugh Cleaned up ACPI PCI IRQ routing. | 28 | * 02/04/02 P. Diefenbaugh Cleaned up ACPI PCI IRQ routing. |
| 26 | * 02/04/18 J.I. Lee bug fix in iosapic_init_pci_irq | 29 | * 02/04/18 J.I. Lee bug fix in iosapic_init_pci_irq |
| 27 | * 02/04/30 J.I. Lee bug fix in find_iosapic to fix ACPI PCI IRQ to IOSAPIC mapping | 30 | * 02/04/30 J.I. Lee bug fix in find_iosapic to fix ACPI PCI IRQ to |
| 28 | * error | 31 | * IOSAPIC mapping error |
| 29 | * 02/07/29 T. Kochi Allocate interrupt vectors dynamically | 32 | * 02/07/29 T. Kochi Allocate interrupt vectors dynamically |
| 30 | * 02/08/04 T. Kochi Cleaned up terminology (irq, global system interrupt, vector, etc.) | 33 | * 02/08/04 T. Kochi Cleaned up terminology (irq, global system |
| 31 | * 02/09/20 D. Mosberger Simplified by taking advantage of ACPI's pci_irq code. | 34 | * interrupt, vector, etc.) |
| 35 | * 02/09/20 D. Mosberger Simplified by taking advantage of ACPI's | ||
| 36 | * pci_irq code. | ||
| 32 | * 03/02/19 B. Helgaas Make pcat_compat system-wide, not per-IOSAPIC. | 37 | * 03/02/19 B. Helgaas Make pcat_compat system-wide, not per-IOSAPIC. |
| 33 | * Remove iosapic_address & gsi_base from external interfaces. | 38 | * Remove iosapic_address & gsi_base from |
| 34 | * Rationalize __init/__devinit attributes. | 39 | * external interfaces. Rationalize |
| 40 | * __init/__devinit attributes. | ||
| 35 | * 04/12/04 Ashok Raj <ashok.raj@intel.com> Intel Corporation 2004 | 41 | * 04/12/04 Ashok Raj <ashok.raj@intel.com> Intel Corporation 2004 |
| 36 | * Updated to work with irq migration necessary for CPU Hotplug | 42 | * Updated to work with irq migration necessary |
| 43 | * for CPU Hotplug | ||
| 37 | */ | 44 | */ |
| 38 | /* | 45 | /* |
| 39 | * Here is what the interrupt logic between a PCI device and the kernel looks like: | 46 | * Here is what the interrupt logic between a PCI device and the kernel looks |
| 47 | * like: | ||
| 40 | * | 48 | * |
| 41 | * (1) A PCI device raises one of the four interrupt pins (INTA, INTB, INTC, INTD). The | 49 | * (1) A PCI device raises one of the four interrupt pins (INTA, INTB, INTC, |
| 42 | * device is uniquely identified by its bus--, and slot-number (the function | 50 | * INTD). The device is uniquely identified by its bus-, and slot-number |
| 43 | * number does not matter here because all functions share the same interrupt | 51 | * (the function number does not matter here because all functions share |
| 44 | * lines). | 52 | * the same interrupt lines). |
| 45 | * | 53 | * |
| 46 | * (2) The motherboard routes the interrupt line to a pin on a IOSAPIC controller. | 54 | * (2) The motherboard routes the interrupt line to a pin on a IOSAPIC |
| 47 | * Multiple interrupt lines may have to share the same IOSAPIC pin (if they're level | 55 | * controller. Multiple interrupt lines may have to share the same |
| 48 | * triggered and use the same polarity). Each interrupt line has a unique Global | 56 | * IOSAPIC pin (if they're level triggered and use the same polarity). |
| 49 | * System Interrupt (GSI) number which can be calculated as the sum of the controller's | 57 | * Each interrupt line has a unique Global System Interrupt (GSI) number |
| 50 | * base GSI number and the IOSAPIC pin number to which the line connects. | 58 | * which can be calculated as the sum of the controller's base GSI number |
| 59 | * and the IOSAPIC pin number to which the line connects. | ||
| 51 | * | 60 | * |
| 52 | * (3) The IOSAPIC uses an internal routing table entries (RTEs) to map the IOSAPIC pin | 61 | * (3) The IOSAPIC uses an internal routing table entries (RTEs) to map the |
| 53 | * into the IA-64 interrupt vector. This interrupt vector is then sent to the CPU. | 62 | * IOSAPIC pin into the IA-64 interrupt vector. This interrupt vector is then |
| 63 | * sent to the CPU. | ||
| 54 | * | 64 | * |
| 55 | * (4) The kernel recognizes an interrupt as an IRQ. The IRQ interface is used as | 65 | * (4) The kernel recognizes an interrupt as an IRQ. The IRQ interface is |
| 56 | * architecture-independent interrupt handling mechanism in Linux. As an | 66 | * used as architecture-independent interrupt handling mechanism in Linux. |
| 57 | * IRQ is a number, we have to have IA-64 interrupt vector number <-> IRQ number | 67 | * As an IRQ is a number, we have to have |
| 58 | * mapping. On smaller systems, we use one-to-one mapping between IA-64 vector and | 68 | * IA-64 interrupt vector number <-> IRQ number mapping. On smaller |
| 59 | * IRQ. A platform can implement platform_irq_to_vector(irq) and | 69 | * systems, we use one-to-one mapping between IA-64 vector and IRQ. A |
| 70 | * platform can implement platform_irq_to_vector(irq) and | ||
| 60 | * platform_local_vector_to_irq(vector) APIs to differentiate the mapping. | 71 | * platform_local_vector_to_irq(vector) APIs to differentiate the mapping. |
| 61 | * Please see also include/asm-ia64/hw_irq.h for those APIs. | 72 | * Please see also include/asm-ia64/hw_irq.h for those APIs. |
| 62 | * | 73 | * |
| @@ -64,9 +75,9 @@ | |||
| 64 | * | 75 | * |
| 65 | * PCI pin -> global system interrupt (GSI) -> IA-64 vector <-> IRQ | 76 | * PCI pin -> global system interrupt (GSI) -> IA-64 vector <-> IRQ |
| 66 | * | 77 | * |
| 67 | * Note: The term "IRQ" is loosely used everywhere in Linux kernel to describe interrupts. | 78 | * Note: The term "IRQ" is loosely used everywhere in Linux kernel to |
| 68 | * Now we use "IRQ" only for Linux IRQ's. ISA IRQ (isa_irq) is the only exception in this | 79 | * describeinterrupts. Now we use "IRQ" only for Linux IRQ's. ISA IRQ |
| 69 | * source code. | 80 | * (isa_irq) is the only exception in this source code. |
| 70 | */ | 81 | */ |
| 71 | #include <linux/config.h> | 82 | #include <linux/config.h> |
| 72 | 83 | ||
| @@ -90,7 +101,6 @@ | |||
| 90 | #include <asm/ptrace.h> | 101 | #include <asm/ptrace.h> |
| 91 | #include <asm/system.h> | 102 | #include <asm/system.h> |
| 92 | 103 | ||
| 93 | |||
| 94 | #undef DEBUG_INTERRUPT_ROUTING | 104 | #undef DEBUG_INTERRUPT_ROUTING |
| 95 | 105 | ||
| 96 | #ifdef DEBUG_INTERRUPT_ROUTING | 106 | #ifdef DEBUG_INTERRUPT_ROUTING |
| @@ -99,36 +109,46 @@ | |||
| 99 | #define DBG(fmt...) | 109 | #define DBG(fmt...) |
| 100 | #endif | 110 | #endif |
| 101 | 111 | ||
| 102 | #define NR_PREALLOCATE_RTE_ENTRIES (PAGE_SIZE / sizeof(struct iosapic_rte_info)) | 112 | #define NR_PREALLOCATE_RTE_ENTRIES \ |
| 113 | (PAGE_SIZE / sizeof(struct iosapic_rte_info)) | ||
| 103 | #define RTE_PREALLOCATED (1) | 114 | #define RTE_PREALLOCATED (1) |
| 104 | 115 | ||
| 105 | static DEFINE_SPINLOCK(iosapic_lock); | 116 | static DEFINE_SPINLOCK(iosapic_lock); |
| 106 | 117 | ||
| 107 | /* These tables map IA-64 vectors to the IOSAPIC pin that generates this vector. */ | 118 | /* |
| 119 | * These tables map IA-64 vectors to the IOSAPIC pin that generates this | ||
| 120 | * vector. | ||
| 121 | */ | ||
| 108 | 122 | ||
| 109 | struct iosapic_rte_info { | 123 | struct iosapic_rte_info { |
| 110 | struct list_head rte_list; /* node in list of RTEs sharing the same vector */ | 124 | struct list_head rte_list; /* node in list of RTEs sharing the |
| 125 | * same vector */ | ||
| 111 | char __iomem *addr; /* base address of IOSAPIC */ | 126 | char __iomem *addr; /* base address of IOSAPIC */ |
| 112 | unsigned int gsi_base; /* first GSI assigned to this IOSAPIC */ | 127 | unsigned int gsi_base; /* first GSI assigned to this |
| 128 | * IOSAPIC */ | ||
| 113 | char rte_index; /* IOSAPIC RTE index */ | 129 | char rte_index; /* IOSAPIC RTE index */ |
| 114 | int refcnt; /* reference counter */ | 130 | int refcnt; /* reference counter */ |
| 115 | unsigned int flags; /* flags */ | 131 | unsigned int flags; /* flags */ |
| 116 | } ____cacheline_aligned; | ||
