On 4/29/26 2:12 AM, Mike Rapoport wrote:
> From: "Mike Rapoport (Microsoft)" <[email protected]>
> 
> hugetlb-shm and thuge-gen tests require that limits defined by
> /proc/sys/kernel/{shmmax,shmall} should be higher than certain values.
> 
> Add helpers that allow setting these limits and restoring their settings on
> a test exit.
> 
> They will be used later in hugetlb-shm and thuge-gen.
> 
> Signed-off-by: Mike Rapoport (Microsoft) <[email protected]>

Looks good to me.

Reviewed-by: Sarthak Sharma <[email protected]>

> ---
>  tools/testing/selftests/mm/vm_util.c | 28 ++++++++++++++++++++++++++++
>  tools/testing/selftests/mm/vm_util.h |  9 +++++++++
>  2 files changed, 37 insertions(+)
> 
> diff --git a/tools/testing/selftests/mm/vm_util.c 
> b/tools/testing/selftests/mm/vm_util.c
> index 752566f75c0b..5a89c2d903be 100644
> --- a/tools/testing/selftests/mm/vm_util.c
> +++ b/tools/testing/selftests/mm/vm_util.c
> @@ -761,3 +761,31 @@ void write_num(const char *path, unsigned long num)
>       sprintf(buf, "%lu", num);
>       write_file(path, buf, strlen(buf) + 1);
>  }
> +
> +static unsigned long shmall, shmmax;
> +
> +void __shm_limits_restore(void)
> +{
> +     if (shmmax)
> +             write_num("/proc/sys/kernel/shmmax", shmmax);
> +     if (shmall)
> +             write_num("/proc/sys/kernel/shmall", shmall);
> +}
> +
> +void shm_limits_prepare(unsigned long length)
> +{
> +     unsigned long nr = length / psize();
> +     unsigned long val;
> +
> +     val = read_num("/proc/sys/kernel/shmmax");
> +     if (val < length) {
> +             write_num("/proc/sys/kernel/shmmax", length);
> +             shmmax = val;
> +     }
> +
> +     val = read_num("/proc/sys/kernel/shmall");
> +     if (val < nr) {
> +             write_num("/proc/sys/kernel/shmall", nr);
> +             shmall = val;
> +     }
> +}
> diff --git a/tools/testing/selftests/mm/vm_util.h 
> b/tools/testing/selftests/mm/vm_util.h
> index 5fc9707f6b9a..ea8fc8fdf0eb 100644
> --- a/tools/testing/selftests/mm/vm_util.h
> +++ b/tools/testing/selftests/mm/vm_util.h
> @@ -168,3 +168,12 @@ void write_file(const char *path, const char *buf, 
> size_t buflen);
>  int read_file(const char *path, char *buf, size_t buflen);
>  unsigned long read_num(const char *path);
>  void write_num(const char *path, unsigned long num);
> +
> +void shm_limits_prepare(unsigned long length);
> +void __shm_limits_restore(void);
> +
> +#define SHM_LIMITS_RESTORE()                                         \
> +static void __attribute__((destructor)) shm_limits_restore(void)     \
> +{                                                                    \
> +     __shm_limits_restore();                                         \
> +}


Reply via email to