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(); \ > +}

