• Breno Leitao's avatar
    selftests/mm: new test that steals pages · 8c407e05
    Breno Leitao authored
    This test stresses the race between of madvise(DONTNEED), a page fault
    and a parallel huge page mmap, which should fail due to lack of
    available page available for mapping.
    
    This test case must run on a system with one and only one huge page
    available.
    
    	# echo 1 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
    
    During setup, the test allocates the only available page, and starts
    three threads:
    
      - thread 1:
          * madvise(MADV_DONTNEED) on the allocated huge page
      - thread 2:
          * Write to the allocated huge page
      - thread 3:
          * Tries to allocated (steal) an extra huge page (which is not
            available)
    
    thread 3 should never succeed in the allocation, since the only huge
    page was never unmapped, and should be reserved.
    
    Touching the old page after thread3 allocation will raise a SIGBUS.
    
    Link: https://lkml.kernel.org/r/20240105155419.1939484-2-leitao@debian.orgSigned-off-by: default avatarBreno Leitao <leitao@debian.org>
    Cc: Mike Rapoport (IBM) <rppt@kernel.org>
    Cc: Muchun Song <songmuchun@bytedance.com>
    Cc: Rik van Riel <riel@surriel.com>
    Cc: Shuah Khan <shuah@kernel.org>
    Cc: Vegard Nossum <vegard.nossum@oracle.com>
    Cc: Yang Shi <shy828301@gmail.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    8c407e05
hugetlb_madv_vs_map.c 2.74 KB