Hi Mike!

On 4/29/26 2:12 AM, Mike Rapoport wrote:
> From: "Mike Rapoport (Microsoft)" <[email protected]>
> 
> hugetlb-shm test fails if there are no free huge pages prepared by a
> wrapper script and shm liimts in proc are too low.
> 
> Add setup of HugeTLB pages and shm limits to the test and make sure that
> the original settings are restored on the test exit.
> 
> Signed-off-by: Mike Rapoport (Microsoft) <[email protected]>
> ---
>  tools/testing/selftests/mm/hugetlb-shm.c | 19 +++++++++++++++++++
>  1 file changed, 19 insertions(+)
> 
> diff --git a/tools/testing/selftests/mm/hugetlb-shm.c 
> b/tools/testing/selftests/mm/hugetlb-shm.c
> index 0f70b1a50b6b..7b5a5cefe458 100644
> --- a/tools/testing/selftests/mm/hugetlb-shm.c
> +++ b/tools/testing/selftests/mm/hugetlb-shm.c
> @@ -29,9 +29,24 @@
>  #include <sys/mman.h>
>  
>  #include "vm_util.h"
> +#include "hugepage_settings.h"
>  
>  #define LENGTH (256UL*1024*1024)
>  
> +static void prepare(void)
> +{
> +     unsigned long length, hugepage_size, nr;
> +
> +     hugepage_size = default_huge_page_size();
> +     length = (LENGTH + hugepage_size) & ~(hugepage_size - 1);

Same issue here as in hugetlb-mremap.c.

length = (LENGTH + hugepage_size) & ~(hugepage_size - 1)

will add an extra hugepage if LENGTH is already aligned. Should this be
(LENGTH + hugepage_size - 1) & ~(hugepage_size - 1) instead?

> +     nr = length / hugepage_size;
> +
> +     if (!hugetlb_setup_default(nr))
> +             ksft_exit_skip("Not enough free huge pages\n");
> +
> +     shm_limits_prepare(length);
> +}
> +
>  int main(void)
>  {
>       int shmid;
> @@ -41,6 +56,8 @@ int main(void)
>       ksft_print_header();
>       ksft_set_plan(1);
>  
> +     prepare();
> +
>       shmid = shmget(2, LENGTH, SHM_HUGETLB | IPC_CREAT | SHM_R | SHM_W);
>       if (shmid < 0)
>               ksft_exit_fail_perror("shmget");
> @@ -78,3 +95,5 @@ int main(void)
>       ksft_test_result_pass("hugepage using SysV shmget/shmat\n");
>       ksft_finished();
>  }
> +
> +SHM_LIMITS_RESTORE()


Reply via email to