mirror of
https://github.com/torvalds/linux.git
synced 2025-11-01 09:09:47 +02:00
kdump: add missing RAM resource in crash_shrink_memory()
When shrinking crashkernel memory using /sys/kernel/kexec_crash_size for
the newly added memory no RAM resource is created at the moment.
Example:
$ cat /proc/iomem
00000000-bfffffff : System RAM
00000000-005b7ac3 : Kernel code
005b7ac4-009743bf : Kernel data
009bb000-00a85c33 : Kernel bss
c0000000-cfffffff : Crash kernel
d0000000-ffffffff : System RAM
$ echo 0 > /sys/kernel/kexec_crash_size
$ cat /proc/iomem
00000000-bfffffff : System RAM
00000000-005b7ac3 : Kernel code
005b7ac4-009743bf : Kernel data
009bb000-00a85c33 : Kernel bss
<<-- here is System RAM missing
d0000000-ffffffff : System RAM
One result of this bug is that the memory chunk can never be set offline
using memory hotplug. With this patch I insert a new "System RAM"
resource for the released memory. Then the upper example looks like the
following:
$ echo 0 > /sys/kernel/kexec_crash_size
$ cat /proc/iomem
00000000-bfffffff : System RAM
00000000-005b7ac3 : Kernel code
005b7ac4-009743bf : Kernel data
009bb000-00a85c33 : Kernel bss
c0000000-cfffffff : System RAM <<-- new rescoure
d0000000-ffffffff : System RAM
And now I can set chunk c0000000-cfffffff offline.
Signed-off-by: Michael Holzheu <holzheu@linux.vnet.ibm.com>
Cc: Vivek Goyal <vgoyal@redhat.com>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.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
a3dd332305
commit
6480e5a092
1 changed files with 15 additions and 0 deletions
|
|
@ -1129,6 +1129,7 @@ int crash_shrink_memory(unsigned long new_size)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
unsigned long start, end;
|
unsigned long start, end;
|
||||||
|
struct resource *ram_res;
|
||||||
|
|
||||||
mutex_lock(&kexec_mutex);
|
mutex_lock(&kexec_mutex);
|
||||||
|
|
||||||
|
|
@ -1146,6 +1147,12 @@ int crash_shrink_memory(unsigned long new_size)
|
||||||
goto unlock;
|
goto unlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ram_res = kzalloc(sizeof(*ram_res), GFP_KERNEL);
|
||||||
|
if (!ram_res) {
|
||||||
|
ret = -ENOMEM;
|
||||||
|
goto unlock;
|
||||||
|
}
|
||||||
|
|
||||||
start = roundup(start, KEXEC_CRASH_MEM_ALIGN);
|
start = roundup(start, KEXEC_CRASH_MEM_ALIGN);
|
||||||
end = roundup(start + new_size, KEXEC_CRASH_MEM_ALIGN);
|
end = roundup(start + new_size, KEXEC_CRASH_MEM_ALIGN);
|
||||||
|
|
||||||
|
|
@ -1154,7 +1161,15 @@ int crash_shrink_memory(unsigned long new_size)
|
||||||
|
|
||||||
if ((start == end) && (crashk_res.parent != NULL))
|
if ((start == end) && (crashk_res.parent != NULL))
|
||||||
release_resource(&crashk_res);
|
release_resource(&crashk_res);
|
||||||
|
|
||||||
|
ram_res->start = end;
|
||||||
|
ram_res->end = crashk_res.end;
|
||||||
|
ram_res->flags = IORESOURCE_BUSY | IORESOURCE_MEM;
|
||||||
|
ram_res->name = "System RAM";
|
||||||
|
|
||||||
crashk_res.end = end - 1;
|
crashk_res.end = end - 1;
|
||||||
|
|
||||||
|
insert_resource(&iomem_resource, ram_res);
|
||||||
crash_unmap_reserved_pages();
|
crash_unmap_reserved_pages();
|
||||||
|
|
||||||
unlock:
|
unlock:
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue