2023-05-27 12:47:17

by Zhen Lei

[permalink] [raw]
Subject: [PATCH 5/6] kexec: add helper __crash_shrink_memory()

No functional change, in preparation for the next patch so that it is
easier to review.

Signed-off-by: Zhen Lei <[email protected]>
---
kernel/kexec_core.c | 50 +++++++++++++++++++++++++--------------------
1 file changed, 28 insertions(+), 22 deletions(-)

diff --git a/kernel/kexec_core.c b/kernel/kexec_core.c
index 69fe92141b0b62d..e82bc6d6634136a 100644
--- a/kernel/kexec_core.c
+++ b/kernel/kexec_core.c
@@ -1105,11 +1105,37 @@ ssize_t crash_get_memory_size(void)
return size;
}

+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 +1151,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();
--
2.25.1



2023-05-28 01:06:27

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH 5/6] kexec: add helper __crash_shrink_memory()

Hi Zhen,

kernel test robot noticed the following build warnings:

[auto build test WARNING on akpm-mm/mm-everything]
[also build test WARNING on linus/master v6.4-rc3 next-20230525]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url: https://github.com/intel-lab-lkp/linux/commits/Zhen-Lei/kexec-fix-a-memory-leak-in-crash_shrink_memory/20230527-203821
base: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything
patch link: https://lore.kernel.org/r/20230527123439.772-6-thunder.leizhen%40huawei.com
patch subject: [PATCH 5/6] kexec: add helper __crash_shrink_memory()
config: riscv-randconfig-r042-20230526 (https://download.01.org/0day-ci/archive/20230528/[email protected]/config)
compiler: clang version 17.0.0 (https://github.com/llvm/llvm-project 4faf3aaf28226a4e950c103a14f6fc1d1fdabb1b)
reproduce (this is a W=1 build):
mkdir -p ~/bin
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install riscv cross compiling tool for clang build
# apt-get install binutils-riscv64-linux-gnu
# https://github.com/intel-lab-lkp/linux/commit/dea97cef503d26e05d0e11818ae44176056ddf64
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Zhen-Lei/kexec-fix-a-memory-leak-in-crash_shrink_memory/20230527-203821
git checkout dea97cef503d26e05d0e11818ae44176056ddf64
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang ~/bin/make.cross W=1 O=build_dir ARCH=riscv olddefconfig
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang ~/bin/make.cross W=1 O=build_dir ARCH=riscv SHELL=/bin/bash

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/

All warnings (new ones prefixed by >>):

>> kernel/kexec_core.c:1108:5: warning: no previous prototype for function '__crash_shrink_memory' [-Wmissing-prototypes]
int __crash_shrink_memory(struct resource *old_res, unsigned long new_size)
^
kernel/kexec_core.c:1108:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
int __crash_shrink_memory(struct resource *old_res, unsigned long new_size)
^
static
1 warning generated.


vim +/__crash_shrink_memory +1108 kernel/kexec_core.c

1107
> 1108 int __crash_shrink_memory(struct resource *old_res, unsigned long new_size)
1109 {
1110 struct resource *ram_res;
1111
1112 ram_res = kzalloc(sizeof(*ram_res), GFP_KERNEL);
1113 if (!ram_res)
1114 return -ENOMEM;
1115
1116 ram_res->start = old_res->start + new_size;
1117 ram_res->end = old_res->end;
1118 ram_res->flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM;
1119 ram_res->name = "System RAM";
1120
1121 if (!new_size) {
1122 release_resource(old_res);
1123 old_res->start = 0;
1124 old_res->end = 0;
1125 } else {
1126 crashk_res.end = ram_res->start - 1;
1127 }
1128
1129 crash_free_reserved_phys_range(ram_res->start, ram_res->end);
1130 insert_resource(&iomem_resource, ram_res);
1131
1132 return 0;
1133 }
1134

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

2023-05-28 02:58:33

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH 5/6] kexec: add helper __crash_shrink_memory()

Hi Zhen,

kernel test robot noticed the following build warnings:

[auto build test WARNING on akpm-mm/mm-everything]
[also build test WARNING on linus/master v6.4-rc3 next-20230525]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url: https://github.com/intel-lab-lkp/linux/commits/Zhen-Lei/kexec-fix-a-memory-leak-in-crash_shrink_memory/20230527-203821
base: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything
patch link: https://lore.kernel.org/r/20230527123439.772-6-thunder.leizhen%40huawei.com
patch subject: [PATCH 5/6] kexec: add helper __crash_shrink_memory()
config: mips-randconfig-r012-20230528 (https://download.01.org/0day-ci/archive/20230528/[email protected]/config)
compiler: mipsel-linux-gcc (GCC) 12.1.0
reproduce (this is a W=1 build):
mkdir -p ~/bin
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/intel-lab-lkp/linux/commit/dea97cef503d26e05d0e11818ae44176056ddf64
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Zhen-Lei/kexec-fix-a-memory-leak-in-crash_shrink_memory/20230527-203821
git checkout dea97cef503d26e05d0e11818ae44176056ddf64
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 ~/bin/make.cross W=1 O=build_dir ARCH=mips olddefconfig
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 ~/bin/make.cross W=1 O=build_dir ARCH=mips SHELL=/bin/bash

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/

All warnings (new ones prefixed by >>):

>> kernel/kexec_core.c:1108:5: warning: no previous prototype for '__crash_shrink_memory' [-Wmissing-prototypes]
1108 | int __crash_shrink_memory(struct resource *old_res, unsigned long new_size)
| ^~~~~~~~~~~~~~~~~~~~~


vim +/__crash_shrink_memory +1108 kernel/kexec_core.c

1107
> 1108 int __crash_shrink_memory(struct resource *old_res, unsigned long new_size)
1109 {
1110 struct resource *ram_res;
1111
1112 ram_res = kzalloc(sizeof(*ram_res), GFP_KERNEL);
1113 if (!ram_res)
1114 return -ENOMEM;
1115
1116 ram_res->start = old_res->start + new_size;
1117 ram_res->end = old_res->end;
1118 ram_res->flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM;
1119 ram_res->name = "System RAM";
1120
1121 if (!new_size) {
1122 release_resource(old_res);
1123 old_res->start = 0;
1124 old_res->end = 0;
1125 } else {
1126 crashk_res.end = ram_res->start - 1;
1127 }
1128
1129 crash_free_reserved_phys_range(ram_res->start, ram_res->end);
1130 insert_resource(&iomem_resource, ram_res);
1131
1132 return 0;
1133 }
1134

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

2023-05-28 07:03:13

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH 5/6] kexec: add helper __crash_shrink_memory()

Hi Zhen,

kernel test robot noticed the following build warnings:

[auto build test WARNING on akpm-mm/mm-everything]
[also build test WARNING on linus/master v6.4-rc3 next-20230525]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url: https://github.com/intel-lab-lkp/linux/commits/Zhen-Lei/kexec-fix-a-memory-leak-in-crash_shrink_memory/20230527-203821
base: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything
patch link: https://lore.kernel.org/r/20230527123439.772-6-thunder.leizhen%40huawei.com
patch subject: [PATCH 5/6] kexec: add helper __crash_shrink_memory()
config: x86_64-randconfig-s033-20230528 (https://download.01.org/0day-ci/archive/20230528/[email protected]/config)
compiler: gcc-11 (Debian 11.3.0-12) 11.3.0
reproduce:
# apt-get install sparse
# sparse version: v0.6.4-39-gce1a6720-dirty
# https://github.com/intel-lab-lkp/linux/commit/dea97cef503d26e05d0e11818ae44176056ddf64
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Zhen-Lei/kexec-fix-a-memory-leak-in-crash_shrink_memory/20230527-203821
git checkout dea97cef503d26e05d0e11818ae44176056ddf64
# save the config file
mkdir build_dir && cp config build_dir/.config
make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=x86_64 olddefconfig
make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=x86_64 SHELL=/bin/bash

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/

sparse warnings: (new ones prefixed by >>)
>> kernel/kexec_core.c:1108:5: sparse: sparse: symbol '__crash_shrink_memory' was not declared. Should it be static?

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

2023-05-29 01:24:37

by Zhen Lei

[permalink] [raw]
Subject: Re: [PATCH 5/6] kexec: add helper __crash_shrink_memory()



On 2023/5/28 8:08, kernel test robot wrote:
> Hi Zhen,
>
> kernel test robot noticed the following build warnings:
>
> [auto build test WARNING on akpm-mm/mm-everything]
> [also build test WARNING on linus/master v6.4-rc3 next-20230525]
> [If your patch is applied to the wrong git tree, kindly drop us a note.
> And when submitting patch, we suggest to use '--base' as documented in
> https://git-scm.com/docs/git-format-patch#_base_tree_information]
>
> url: https://github.com/intel-lab-lkp/linux/commits/Zhen-Lei/kexec-fix-a-memory-leak-in-crash_shrink_memory/20230527-203821
> base: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything
> patch link: https://lore.kernel.org/r/20230527123439.772-6-thunder.leizhen%40huawei.com
> patch subject: [PATCH 5/6] kexec: add helper __crash_shrink_memory()
> config: riscv-randconfig-r042-20230526 (https://download.01.org/0day-ci/archive/20230528/[email protected]/config)
> compiler: clang version 17.0.0 (https://github.com/llvm/llvm-project 4faf3aaf28226a4e950c103a14f6fc1d1fdabb1b)
> reproduce (this is a W=1 build):
> mkdir -p ~/bin
> wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> chmod +x ~/bin/make.cross
> # install riscv cross compiling tool for clang build
> # apt-get install binutils-riscv64-linux-gnu
> # https://github.com/intel-lab-lkp/linux/commit/dea97cef503d26e05d0e11818ae44176056ddf64
> git remote add linux-review https://github.com/intel-lab-lkp/linux
> git fetch --no-tags linux-review Zhen-Lei/kexec-fix-a-memory-leak-in-crash_shrink_memory/20230527-203821
> git checkout dea97cef503d26e05d0e11818ae44176056ddf64
> # save the config file
> mkdir build_dir && cp config build_dir/.config
> COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang ~/bin/make.cross W=1 O=build_dir ARCH=riscv olddefconfig
> COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang ~/bin/make.cross W=1 O=build_dir ARCH=riscv SHELL=/bin/bash
>
> If you fix the issue, kindly add following tag where applicable
> | Reported-by: kernel test robot <[email protected]>
> | Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
>
> All warnings (new ones prefixed by >>):
>
>>> kernel/kexec_core.c:1108:5: warning: no previous prototype for function '__crash_shrink_memory' [-Wmissing-prototypes]
> int __crash_shrink_memory(struct resource *old_res, unsigned long new_size)
> ^
> kernel/kexec_core.c:1108:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
> int __crash_shrink_memory(struct resource *old_res, unsigned long new_size)
> ^
> static
> 1 warning generated.

Yes, thanks, a 'static' should be added.

>
>
> vim +/__crash_shrink_memory +1108 kernel/kexec_core.c
>
> 1107
>> 1108 int __crash_shrink_memory(struct resource *old_res, unsigned long new_size)
> 1109 {
> 1110 struct resource *ram_res;
> 1111
> 1112 ram_res = kzalloc(sizeof(*ram_res), GFP_KERNEL);
> 1113 if (!ram_res)
> 1114 return -ENOMEM;
> 1115
> 1116 ram_res->start = old_res->start + new_size;
> 1117 ram_res->end = old_res->end;
> 1118 ram_res->flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM;
> 1119 ram_res->name = "System RAM";
> 1120
> 1121 if (!new_size) {
> 1122 release_resource(old_res);
> 1123 old_res->start = 0;
> 1124 old_res->end = 0;
> 1125 } else {
> 1126 crashk_res.end = ram_res->start - 1;
> 1127 }
> 1128
> 1129 crash_free_reserved_phys_range(ram_res->start, ram_res->end);
> 1130 insert_resource(&iomem_resource, ram_res);
> 1131
> 1132 return 0;
> 1133 }
> 1134
>

--
Regards,
Zhen Lei

2023-05-31 08:25:51

by Baoquan He

[permalink] [raw]
Subject: Re: [PATCH 5/6] kexec: add helper __crash_shrink_memory()

On 05/27/23 at 08:34pm, Zhen Lei wrote:
> No functional change, in preparation for the next patch so that it is
> easier to review.
>
> Signed-off-by: Zhen Lei <[email protected]>
> ---
> kernel/kexec_core.c | 50 +++++++++++++++++++++++++--------------------
> 1 file changed, 28 insertions(+), 22 deletions(-)
>
> diff --git a/kernel/kexec_core.c b/kernel/kexec_core.c
> index 69fe92141b0b62d..e82bc6d6634136a 100644
> --- a/kernel/kexec_core.c
> +++ b/kernel/kexec_core.c
> @@ -1105,11 +1105,37 @@ ssize_t crash_get_memory_size(void)
> return size;
> }
>
> +int __crash_shrink_memory(struct resource *old_res, unsigned long new_size)

Other than the missing static, looks good,

Acked-by: Baoquan He <[email protected]>

> +{
> + 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 +1151,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();
> --
> 2.25.1
>