aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/ia64/kernel/mca.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/arch/ia64/kernel/mca.c b/arch/ia64/kernel/mca.c
index 98f3b26d7aff..bfbd8986153b 100644
--- a/arch/ia64/kernel/mca.c
+++ b/arch/ia64/kernel/mca.c
@@ -511,9 +511,6 @@ ia64_mca_cpe_int_handler (int cpe_irq, void *arg, struct pt_regs *ptregs)
511 /* SAL spec states this should run w/ interrupts enabled */ 511 /* SAL spec states this should run w/ interrupts enabled */
512 local_irq_enable(); 512 local_irq_enable();
513 513
514 /* Get the CPE error record and log it */
515 ia64_mca_log_sal_error_record(SAL_INFO_TYPE_CPE);
516
517 spin_lock(&cpe_history_lock); 514 spin_lock(&cpe_history_lock);
518 if (!cpe_poll_enabled && cpe_vector >= 0) { 515 if (!cpe_poll_enabled && cpe_vector >= 0) {
519 516
@@ -542,7 +539,7 @@ ia64_mca_cpe_int_handler (int cpe_irq, void *arg, struct pt_regs *ptregs)
542 mod_timer(&cpe_poll_timer, jiffies + MIN_CPE_POLL_INTERVAL); 539 mod_timer(&cpe_poll_timer, jiffies + MIN_CPE_POLL_INTERVAL);
543 540
544 /* lock already released, get out now */ 541 /* lock already released, get out now */
545 return IRQ_HANDLED; 542 goto out;
546 } else { 543 } else {
547 cpe_history[index++] = now; 544 cpe_history[index++] = now;
548 if (index == CPE_HISTORY_LENGTH) 545 if (index == CPE_HISTORY_LENGTH)
@@ -550,6 +547,10 @@ ia64_mca_cpe_int_handler (int cpe_irq, void *arg, struct pt_regs *ptregs)
550 } 547 }
551 } 548 }
552 spin_unlock(&cpe_history_lock); 549 spin_unlock(&cpe_history_lock);
550out:
551 /* Get the CPE error record and log it */
552 ia64_mca_log_sal_error_record(SAL_INFO_TYPE_CPE);
553
553 return IRQ_HANDLED; 554 return IRQ_HANDLED;
554} 555}
555 556
@@ -1278,9 +1279,6 @@ ia64_mca_cmc_int_handler(int cmc_irq, void *arg, struct pt_regs *ptregs)
1278 /* SAL spec states this should run w/ interrupts enabled */ 1279 /* SAL spec states this should run w/ interrupts enabled */
1279 local_irq_enable(); 1280 local_irq_enable();
1280 1281
1281 /* Get the CMC error record and log it */
1282 ia64_mca_log_sal_error_record(SAL_INFO_TYPE_CMC);
1283
1284 spin_lock(&cmc_history_lock); 1282 spin_lock(&cmc_history_lock);
1285 if (!cmc_polling_enabled) { 1283 if (!cmc_polling_enabled) {
1286 int i, count = 1; /* we know 1 happened now */ 1284 int i, count = 1; /* we know 1 happened now */
@@ -1313,7 +1311,7 @@ ia64_mca_cmc_int_handler(int cmc_irq, void *arg, struct pt_regs *ptregs)
1313 mod_timer(&cmc_poll_timer, jiffies + CMC_POLL_INTERVAL); 1311 mod_timer(&cmc_poll_timer, jiffies + CMC_POLL_INTERVAL);
1314 1312
1315 /* lock already released, get out now */ 1313 /* lock already released, get out now */
1316 return IRQ_HANDLED; 1314 goto out;
1317 } else { 1315 } else {
1318 cmc_history[index++] = now; 1316 cmc_history[index++] = now;
1319 if (index == CMC_HISTORY_LENGTH) 1317 if (index == CMC_HISTORY_LENGTH)
@@ -1321,6 +1319,10 @@ ia64_mca_cmc_int_handler(int cmc_irq, void *arg, struct pt_regs *ptregs)
1321 } 1319 }
1322 } 1320 }
1323 spin_unlock(&cmc_history_lock); 1321 spin_unlock(&cmc_history_lock);
1322out:
1323 /* Get the CMC error record and log it */
1324 ia64_mca_log_sal_error_record(SAL_INFO_TYPE_CMC);
1325
1324 return IRQ_HANDLED; 1326 return IRQ_HANDLED;
1325} 1327}
1326 1328