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.c25
1 files changed, 23 insertions, 2 deletions
diff --git a/arch/ia64/kernel/mca.c b/arch/ia64/kernel/mca.c
index ee7eec9ee576..23d54413c006 100644
--- a/arch/ia64/kernel/mca.c
+++ b/arch/ia64/kernel/mca.c
@@ -908,7 +908,7 @@ no_mod:
908static void 908static void
909ia64_wait_for_slaves(int monarch) 909ia64_wait_for_slaves(int monarch)
910{ 910{
911 int c, wait = 0; 911 int c, wait = 0, missing = 0;
912 for_each_online_cpu(c) { 912 for_each_online_cpu(c) {
913 if (c == monarch) 913 if (c == monarch)
914 continue; 914 continue;
@@ -919,15 +919,32 @@ ia64_wait_for_slaves(int monarch)
919 } 919 }
920 } 920 }
921 if (!wait) 921 if (!wait)
922 return; 922 goto all_in;
923 for_each_online_cpu(c) { 923 for_each_online_cpu(c) {
924 if (c == monarch) 924 if (c == monarch)
925 continue; 925 continue;
926 if (ia64_mc_info.imi_rendez_checkin[c] == IA64_MCA_RENDEZ_CHECKIN_NOTDONE) { 926 if (ia64_mc_info.imi_rendez_checkin[c] == IA64_MCA_RENDEZ_CHECKIN_NOTDONE) {
927 udelay(5*1000000); /* wait 5 seconds for slaves (arbitrary) */ 927 udelay(5*1000000); /* wait 5 seconds for slaves (arbitrary) */
928 if (ia64_mc_info.imi_rendez_checkin[c] == IA64_MCA_RENDEZ_CHECKIN_NOTDONE)
929 missing = 1;
928 break; 930 break;
929 } 931 }
930 } 932 }
933 if (!missing)
934 goto all_in;
935 printk(KERN_INFO "OS MCA slave did not rendezvous on cpu");
936 for_each_online_cpu(c) {
937 if (c == monarch)
938 continue;
939 if (ia64_mc_info.imi_rendez_checkin[c] == IA64_MCA_RENDEZ_CHECKIN_NOTDONE)
940 printk(" %d", c);
941 }
942 printk("\n");
943 return;
944
945all_in:
946 printk(KERN_INFO "All OS MCA slaves have reached rendezvous\n");
947 return;
931} 948}
932 949
933/* 950/*
@@ -953,6 +970,10 @@ ia64_mca_handler(struct pt_regs *regs, struct switch_stack *sw,
953 task_t *previous_current; 970 task_t *previous_current;
954 971
955 oops_in_progress = 1; /* FIXME: make printk NMI/MCA/INIT safe */ 972 oops_in_progress = 1; /* FIXME: make printk NMI/MCA/INIT safe */
973 console_loglevel = 15; /* make sure printks make it to console */
974 printk(KERN_INFO "Entered OS MCA handler. PSP=%lx cpu=%d monarch=%ld\n",
975 sos->proc_state_param, cpu, sos->monarch);
976
956 previous_current = ia64_mca_modify_original_stack(regs, sw, sos, "MCA"); 977 previous_current = ia64_mca_modify_original_stack(regs, sw, sos, "MCA");
957 monarch_cpu = cpu; 978 monarch_cpu = cpu;
958 if (notify_die(DIE_MCA_MONARCH_ENTER, "MCA", regs, 0, 0, 0) 979 if (notify_die(DIE_MCA_MONARCH_ENTER, "MCA", regs, 0, 0, 0)