kexec: fix Oops in crash_shrink_memory()
When crashkernel is not enabled, "echo 0 > /sys/kernel/kexec_crash_size" OOPSes the kernel in crash_shrink_memory. This happens when crash_shrink_memory tries to release the 'crashk_res' resource which are not reserved. Also value of "/sys/kernel/kexec_crash_size" shows as 1, which should be 0. This patch fixes the OOPS in crash_shrink_memory and shows "/sys/kernel/kexec_crash_size" as 0 when crash kernel memory is not reserved. Signed-off-by: Pavan Naregundi <pavan@linux.vnet.ibm.com> Reviewed-by: WANG Cong <xiyou.wangcong@gmail.com> Cc: Simon Horman <horms@verge.net.au> Cc: Vivek Goyal <vgoyal@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
482ce512c5
commit
e05bd3367b
|
@ -1089,9 +1089,10 @@ void crash_kexec(struct pt_regs *regs)
|
|||
|
||||
size_t crash_get_memory_size(void)
|
||||
{
|
||||
size_t size;
|
||||
size_t size = 0;
|
||||
mutex_lock(&kexec_mutex);
|
||||
size = crashk_res.end - crashk_res.start + 1;
|
||||
if (crashk_res.end != crashk_res.start)
|
||||
size = crashk_res.end - crashk_res.start + 1;
|
||||
mutex_unlock(&kexec_mutex);
|
||||
return size;
|
||||
}
|
||||
|
@ -1134,7 +1135,7 @@ int crash_shrink_memory(unsigned long new_size)
|
|||
|
||||
free_reserved_phys_range(end, crashk_res.end);
|
||||
|
||||
if (start == end)
|
||||
if ((start == end) && (crashk_res.parent != NULL))
|
||||
release_resource(&crashk_res);
|
||||
crashk_res.end = end - 1;
|
||||
|
||||
|
|
Loading…
Reference in New Issue