X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=kernel%2Fkexec.c;h=bf39d28e4c0e7b44313124d84681f012ca193713;hb=9464c7cf61b9433057924c36e6e02f303a00e768;hp=50087ecf337ea17e5429188688187b6623a57f20;hpb=41689045f6a3cbe0550e1d34e9cc20d2e8c432ba;p=linux-2.6.git diff --git a/kernel/kexec.c b/kernel/kexec.c index 50087ecf3..bf39d28e4 100644 --- a/kernel/kexec.c +++ b/kernel/kexec.c @@ -902,14 +902,14 @@ static int kimage_load_segment(struct kimage *image, * kexec does not sync, or unmount filesystems so if you need * that to happen you need to do that yourself. */ -struct kimage *kexec_image; -struct kimage *kexec_crash_image; +struct kimage *kexec_image = NULL; +static struct kimage *kexec_crash_image = NULL; /* * A home grown binary mutex. * Nothing can wait so this mutex is safe to use * in interrupt context :) */ -static int kexec_lock; +static int kexec_lock = 0; asmlinkage long sys_kexec_load(unsigned long entry, unsigned long nr_segments, struct kexec_segment __user *segments, @@ -1042,6 +1042,7 @@ asmlinkage long compat_sys_kexec_load(unsigned long entry, void crash_kexec(struct pt_regs *regs) { + struct kimage *image; int locked; @@ -1055,11 +1056,12 @@ void crash_kexec(struct pt_regs *regs) */ locked = xchg(&kexec_lock, 1); if (!locked) { - if (kexec_crash_image) { + image = xchg(&kexec_crash_image, NULL); + if (image) { struct pt_regs fixed_regs; crash_setup_regs(&fixed_regs, regs); machine_crash_shutdown(&fixed_regs); - machine_kexec(kexec_crash_image); + machine_kexec(image); } xchg(&kexec_lock, 0); }