summaryrefslogtreecommitdiffstats
path: root/kernel/kexec_core.c
diff options
context:
space:
mode:
authorZhen Lei <thunder.leizhen@huawei.com>2023-05-27 20:34:38 +0800
committerAndrew Morton <akpm@linux-foundation.org>2023-06-09 17:44:24 -0700
commit5b7bfb32cbaad6ba997ab4295ee50bc9921252f2 (patch)
tree43f4485e0b26c5ccfabe4afe0cd3161dbfa30fd4 /kernel/kexec_core.c
parent8a7db7790a3ff8413bedef886cf135ba301e88d7 (diff)
downloadlinux-5b7bfb32cbaad6ba997ab4295ee50bc9921252f2.tar.gz
linux-5b7bfb32cbaad6ba997ab4295ee50bc9921252f2.tar.bz2
linux-5b7bfb32cbaad6ba997ab4295ee50bc9921252f2.zip
kexec: add helper __crash_shrink_memory()
No functional change, in preparation for the next patch so that it is easier to review. [akpm@linux-foundation.org: make __crash_shrink_memory() static] Link: https://lore.kernel.org/oe-kbuild-all/202305280717.Pw06aLkz-lkp@intel.com/ Link: https://lkml.kernel.org/r/20230527123439.772-6-thunder.leizhen@huawei.com Signed-off-by: Zhen Lei <thunder.leizhen@huawei.com> Acked-by: Baoquan He <bhe@redhat.com> Cc: Cong Wang <amwang@redhat.com> Cc: Eric W. Biederman <ebiederm@xmission.com> Cc: Michael Holzheu <holzheu@linux.vnet.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Diffstat (limited to 'kernel/kexec_core.c')
-rw-r--r--kernel/kexec_core.c51
1 files changed, 29 insertions, 22 deletions
diff --git a/kernel/kexec_core.c b/kernel/kexec_core.c
index 69fe92141b0b..f7ff7de94a61 100644
--- a/kernel/kexec_core.c
+++ b/kernel/kexec_core.c
@@ -1105,11 +1105,38 @@ ssize_t crash_get_memory_size(void)
return size;
}
+static int __crash_shrink_memory(struct resource *old_res,
+ unsigned long new_size)
+{
+ struct resource *ram_res;
+
+ ram_res = kzalloc(sizeof(*ram_res), GFP_KERNEL);
+ if (!ram_res)
+ return -ENOMEM;
+
+ ram_res->start = old_res->start + new_size;
+ ram_res->end = old_res->end;
+ ram_res->flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM;
+ ram_res->name = "System RAM";
+
+ if (!new_size) {
+ release_resource(old_res);
+ old_res->start = 0;
+ old_res->end = 0;
+ } else {
+ crashk_res.end = ram_res->start - 1;
+ }
+
+ crash_free_reserved_phys_range(ram_res->start, ram_res->end);
+ insert_resource(&iomem_resource, ram_res);
+
+ return 0;
+}
+
int crash_shrink_memory(unsigned long new_size)
{
int ret = 0;
unsigned long old_size;
- struct resource *ram_res;
if (!kexec_trylock())
return -EBUSY;
@@ -1125,27 +1152,7 @@ int crash_shrink_memory(unsigned long new_size)
goto unlock;
}
- ram_res = kzalloc(sizeof(*ram_res), GFP_KERNEL);
- if (!ram_res) {
- ret = -ENOMEM;
- goto unlock;
- }
-
- ram_res->start = crashk_res.start + new_size;
- ram_res->end = crashk_res.end;
- ram_res->flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM;
- ram_res->name = "System RAM";
-
- if (!new_size) {
- release_resource(&crashk_res);
- crashk_res.start = 0;
- crashk_res.end = 0;
- } else {
- crashk_res.end = ram_res->start - 1;
- }
-
- crash_free_reserved_phys_range(ram_res->start, ram_res->end);
- insert_resource(&iomem_resource, ram_res);
+ ret = __crash_shrink_memory(&crashk_res, new_size);
unlock:
kexec_unlock();