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
1 changed files with 4 additions and 3 deletions
|
@ -1089,9 +1089,10 @@ void crash_kexec(struct pt_regs *regs)
|
||||||
|
|
||||||
size_t crash_get_memory_size(void)
|
size_t crash_get_memory_size(void)
|
||||||
{
|
{
|
||||||
size_t size;
|
size_t size = 0;
|
||||||
mutex_lock(&kexec_mutex);
|
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);
|
mutex_unlock(&kexec_mutex);
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
@ -1134,7 +1135,7 @@ int crash_shrink_memory(unsigned long new_size)
|
||||||
|
|
||||||
free_reserved_phys_range(end, crashk_res.end);
|
free_reserved_phys_range(end, crashk_res.end);
|
||||||
|
|
||||||
if (start == end)
|
if ((start == end) && (crashk_res.parent != NULL))
|
||||||
release_resource(&crashk_res);
|
release_resource(&crashk_res);
|
||||||
crashk_res.end = end - 1;
|
crashk_res.end = end - 1;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue