aboutsummaryrefslogtreecommitdiffstats
path: root/arch/ia64
diff options
context:
space:
mode:
authorKenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>2007-09-01 03:37:48 -0400
committerTony Luck <tony.luck@intel.com>2007-10-12 18:24:40 -0400
commit2010d7fe787b39afd31daba5d5284dd432de4e8f (patch)
treec595dfc3127abd6282dbd941fdd022577e7740e8 /arch/ia64
parentac542a513bd7905fa1a700881e0a40a94d3ed46a (diff)
[IA64] Fix kernel hangup in kdump on INIT
Fix the problem that kdump on INIT hung up if kdump kernel image is not configured. The kdump_init_notifier() on monarch CPU stops its operation at DIE_INIT_MONARCH_LEAVE time if the kdump kernel image is not configured. On the other hand, kdump_init_notifier() on non-monarch CPUs get into spin because they don't know the fact the monarch stops its operation. This is the cause of this problem. To fix this problem, we need to check the kdump kernel image at the top of the kdump_init_notifier() function. Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> Signed-off-by: Tony Luck <tony.luck@intel.com>
Diffstat (limited to 'arch/ia64')
-rw-r--r--arch/ia64/kernel/crash.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/arch/ia64/kernel/crash.c b/arch/ia64/kernel/crash.c
index b2367dd66766..f1cf2df97a2d 100644
--- a/arch/ia64/kernel/crash.c
+++ b/arch/ia64/kernel/crash.c
@@ -118,11 +118,6 @@ machine_crash_shutdown(struct pt_regs *pt)
118static void 118static void
119machine_kdump_on_init(void) 119machine_kdump_on_init(void)
120{ 120{
121 if (!ia64_kimage) {
122 ia64_mca_printk(KERN_NOTICE "machine_kdump_on_init(): "
123 "kdump not configured\n");
124 return;
125 }
126 local_irq_disable(); 121 local_irq_disable();
127 kexec_disable_iosapic(); 122 kexec_disable_iosapic();
128 machine_kexec(ia64_kimage); 123 machine_kexec(ia64_kimage);
@@ -156,6 +151,14 @@ kdump_init_notifier(struct notifier_block *self, unsigned long val, void *data)
156 if (!kdump_on_init) 151 if (!kdump_on_init)
157 return NOTIFY_DONE; 152 return NOTIFY_DONE;
158 153
154 if (!ia64_kimage) {
155 if (val == DIE_INIT_MONARCH_LEAVE)
156 ia64_mca_printk(KERN_NOTICE
157 "%s: kdump not configured\n",
158 __FUNCTION__);
159 return NOTIFY_DONE;
160 }
161
159 if (val != DIE_INIT_MONARCH_LEAVE && 162 if (val != DIE_INIT_MONARCH_LEAVE &&
160 val != DIE_INIT_SLAVE_LEAVE && 163 val != DIE_INIT_SLAVE_LEAVE &&
161 val != DIE_INIT_MONARCH_PROCESS && 164 val != DIE_INIT_MONARCH_PROCESS &&