aboutsummaryrefslogtreecommitdiffstats
path: root/arch/ia64/kernel/mca.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/ia64/kernel/mca.c')
-rw-r--r--arch/ia64/kernel/mca.c47
1 files changed, 24 insertions, 23 deletions
diff --git a/arch/ia64/kernel/mca.c b/arch/ia64/kernel/mca.c
index a0220dc5ff42..84fb405eee87 100644
--- a/arch/ia64/kernel/mca.c
+++ b/arch/ia64/kernel/mca.c
@@ -582,6 +582,8 @@ out:
582 /* Get the CPE error record and log it */ 582 /* Get the CPE error record and log it */
583 ia64_mca_log_sal_error_record(SAL_INFO_TYPE_CPE); 583 ia64_mca_log_sal_error_record(SAL_INFO_TYPE_CPE);
584 584
585 local_irq_disable();
586
585 return IRQ_HANDLED; 587 return IRQ_HANDLED;
586} 588}
587 589
@@ -1859,7 +1861,8 @@ ia64_mca_cpu_init(void *cpu_data)
1859 data = mca_bootmem(); 1861 data = mca_bootmem();
1860 first_time = 0; 1862 first_time = 0;
1861 } else 1863 } else
1862 data = __get_free_pages(GFP_KERNEL, get_order(sz)); 1864 data = (void *)__get_free_pages(GFP_KERNEL,
1865 get_order(sz));
1863 if (!data) 1866 if (!data)
1864 panic("Could not allocate MCA memory for cpu %d\n", 1867 panic("Could not allocate MCA memory for cpu %d\n",
1865 cpu); 1868 cpu);
@@ -2055,25 +2058,6 @@ ia64_mca_init(void)
2055 2058
2056 IA64_MCA_DEBUG("%s: registered OS INIT handler with SAL\n", __func__); 2059 IA64_MCA_DEBUG("%s: registered OS INIT handler with SAL\n", __func__);
2057 2060
2058 /*
2059 * Configure the CMCI/P vector and handler. Interrupts for CMC are
2060 * per-processor, so AP CMC interrupts are setup in smp_callin() (smpboot.c).
2061 */
2062 register_percpu_irq(IA64_CMC_VECTOR, &cmci_irqaction);
2063 register_percpu_irq(IA64_CMCP_VECTOR, &cmcp_irqaction);
2064 ia64_mca_cmc_vector_setup(); /* Setup vector on BSP */
2065
2066 /* Setup the MCA rendezvous interrupt vector */
2067 register_percpu_irq(IA64_MCA_RENDEZ_VECTOR, &mca_rdzv_irqaction);
2068
2069 /* Setup the MCA wakeup interrupt vector */
2070 register_percpu_irq(IA64_MCA_WAKEUP_VECTOR, &mca_wkup_irqaction);
2071
2072#ifdef CONFIG_ACPI
2073 /* Setup the CPEI/P handler */
2074 register_percpu_irq(IA64_CPEP_VECTOR, &mca_cpep_irqaction);
2075#endif
2076
2077 /* Initialize the areas set aside by the OS to buffer the 2061 /* Initialize the areas set aside by the OS to buffer the
2078 * platform/processor error states for MCA/INIT/CMC 2062 * platform/processor error states for MCA/INIT/CMC
2079 * handling. 2063 * handling.
@@ -2103,6 +2087,25 @@ ia64_mca_late_init(void)
2103 if (!mca_init) 2087 if (!mca_init)
2104 return 0; 2088 return 0;
2105 2089
2090 /*
2091 * Configure the CMCI/P vector and handler. Interrupts for CMC are
2092 * per-processor, so AP CMC interrupts are setup in smp_callin() (smpboot.c).
2093 */
2094 register_percpu_irq(IA64_CMC_VECTOR, &cmci_irqaction);
2095 register_percpu_irq(IA64_CMCP_VECTOR, &cmcp_irqaction);
2096 ia64_mca_cmc_vector_setup(); /* Setup vector on BSP */
2097
2098 /* Setup the MCA rendezvous interrupt vector */
2099 register_percpu_irq(IA64_MCA_RENDEZ_VECTOR, &mca_rdzv_irqaction);
2100
2101 /* Setup the MCA wakeup interrupt vector */
2102 register_percpu_irq(IA64_MCA_WAKEUP_VECTOR, &mca_wkup_irqaction);
2103
2104#ifdef CONFIG_ACPI
2105 /* Setup the CPEI/P handler */
2106 register_percpu_irq(IA64_CPEP_VECTOR, &mca_cpep_irqaction);
2107#endif
2108
2106 register_hotcpu_notifier(&mca_cpu_notifier); 2109 register_hotcpu_notifier(&mca_cpu_notifier);
2107 2110
2108 /* Setup the CMCI/P vector and handler */ 2111 /* Setup the CMCI/P vector and handler */
@@ -2122,7 +2125,6 @@ ia64_mca_late_init(void)
2122 cpe_poll_timer.function = ia64_mca_cpe_poll; 2125 cpe_poll_timer.function = ia64_mca_cpe_poll;
2123 2126
2124 { 2127 {
2125 struct irq_desc *desc;
2126 unsigned int irq; 2128 unsigned int irq;
2127 2129
2128 if (cpe_vector >= 0) { 2130 if (cpe_vector >= 0) {
@@ -2130,8 +2132,7 @@ ia64_mca_late_init(void)
2130 irq = local_vector_to_irq(cpe_vector); 2132 irq = local_vector_to_irq(cpe_vector);
2131 if (irq > 0) { 2133 if (irq > 0) {
2132 cpe_poll_enabled = 0; 2134 cpe_poll_enabled = 0;
2133 desc = irq_desc + irq; 2135 irq_set_status_flags(irq, IRQ_PER_CPU);
2134 desc->status |= IRQ_PER_CPU;
2135 setup_irq(irq, &mca_cpe_irqaction); 2136 setup_irq(irq, &mca_cpe_irqaction);
2136 ia64_cpe_irq = irq; 2137 ia64_cpe_irq = irq;
2137 ia64_mca_register_cpev(cpe_vector); 2138 ia64_mca_register_cpev(cpe_vector);