Subject: Re: [PATCH] ppc64-soft-reset-fixes

From: David Wilder <[email-masked]>
Date: Tue, 18 Apr 2006 07:45:16 -0700

Andrew Morton wrote:

>David Wilder <[email-masked]> wrote:
>  
>
>> - For the crash scenario, when a CPU hangs with interrupts disabled and 
>> the other CPUs panic or user invoked kdump boot using sysrq-c. In this 
>> case, the hung CPU can not be stopped and causes the kdump boot not 
>> successful. This case can be treated as complete system hang and asks 
>> the user to activate soft-reset if all secondary CPUs are not stopped.
>>    
>>
>
>It breaks `make allmodconfig':
>
>arch/powerpc/kernel/built-in.o(.toc+0x2a00): In function `PPC64_CACHES':
>: undefined reference to `kexec_crash_image'
>
>
>  
>
Sorry for the confusion ppc64-soft-reset-fixes.patch patch is depended 
on another patch (kdump-image-rm-static.patch).   Please see my earlier 
posting at http://ozlabs.org/pipermail/linuxppc-dev/2006-April/021956.html.
My apologies for not restating this dependency in yesterdays posting.  I 
have attached the earlier patch in this email.
Again both ppc64-soft-reset-fixes.patch and kdump-image-rm-static.patch 
must be applied to keep from breaking the build.

Regards

-- 
David Wilder
IBM Linux Technology Center
Beaverton, Oregon, USA 
[email-masked]
(503)578-3789

--- 2617-rc1/kernel/kexec.c.orig	2006-04-05 13:27:53.000000000 -0700
+++ 2617-rc1/kernel/kexec.c	2006-04-05 13:27:43.000000000 -0700
@@ -903,7 +903,7 @@ static int kimage_load_segment(struct ki
  * that to happen you need to do that yourself.
  */
 struct kimage *kexec_image = NULL;
-static struct kimage *kexec_crash_image = NULL;
+struct kimage *kexec_crash_image = NULL;
 /*
  * A home grown binary mutex.
  * Nothing can wait so this mutex is safe to use
@@ -1042,7 +1042,6 @@ asmlinkage long compat_sys_kexec_load(un
 
 void crash_kexec(struct pt_regs *regs)
 {
-	struct kimage *image;
 	int locked;

@@ -1056,12 +1055,11 @@ void crash_kexec(struct pt_regs *regs)
 	 */
 	locked = xchg(&kexec_lock, 1);
 	if (!locked) {
-		image = xchg(&kexec_crash_image, NULL);
-		if (image) {
+		if (kexec_crash_image) {
 			struct pt_regs fixed_regs;
 			crash_setup_regs(&fixed_regs, regs);
 			machine_crash_shutdown(&fixed_regs);
-			machine_kexec(image);
+			machine_kexec(kexec_crash_image);
 		}
 		xchg(&kexec_lock, 0);
 	}