mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 04:44:45 +01:00
So far the userland VMA tests have been established as a rough expression of what's been possible. Adapt it into a more usable form by separating out tests and shared helper functions. Since we test functions that are declared statically in mm/vma.c, we make use of the trick of #include'ing kernel C files directly. In order for the tests to continue to function, we must therefore also this way into the tests/ directory. We try to keep as much shared logic actually modularised into a separate compilation unit in shared.c, however the merge_existing() and attach_vma() helpers rely on statically declared mm/vma.c functions so these must be declared in main.c. Link: https://lkml.kernel.org/r/a0455ccfe4fdcd1c962c64f76304f612e5662a4e.1769097829.git.lorenzo.stoakes@oracle.com Signed-off-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com> Reviewed-by: Liam R. Howlett <Liam.Howlett@oracle.com> Cc: Baolin Wang <baolin.wang@linux.alibaba.com> Cc: Barry Song <baohua@kernel.org> Cc: David Hildenbrand <david@kernel.org> Cc: Dev Jain <dev.jain@arm.com> Cc: Jason Gunthorpe <jgg@nvidia.com> Cc: Suren Baghdasaryan <surenb@google.com> Cc: Vlastimil Babka <vbabka@suse.cz> Cc: Zi Yan <ziy@nvidia.com> Cc: Damien Le Moal <dlemoal@kernel.org> Cc: "Darrick J. Wong" <djwong@kernel.org> Cc: Jarkko Sakkinen <jarkko@kernel.org> Cc: Yury Norov <ynorov@nvidia.com> Cc: Chris Mason <clm@fb.com> Cc: Pedro Falcato <pfalcato@suse.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
55 lines
1.3 KiB
C
55 lines
1.3 KiB
C
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
#include "shared.h"
|
|
/*
|
|
* Directly import the VMA implementation here. Our vma_internal.h wrapper
|
|
* provides userland-equivalent functionality for everything vma.c uses.
|
|
*/
|
|
#include "../../../mm/vma_init.c"
|
|
#include "../../../mm/vma_exec.c"
|
|
#include "../../../mm/vma.c"
|
|
|
|
/* Tests are included directly so they can test static functions in mm/vma.c. */
|
|
#include "tests/merge.c"
|
|
#include "tests/mmap.c"
|
|
#include "tests/vma.c"
|
|
|
|
/* Helper functions which utilise static kernel functions. */
|
|
|
|
struct vm_area_struct *merge_existing(struct vma_merge_struct *vmg)
|
|
{
|
|
struct vm_area_struct *vma;
|
|
|
|
vma = vma_merge_existing_range(vmg);
|
|
if (vma)
|
|
vma_assert_attached(vma);
|
|
return vma;
|
|
}
|
|
|
|
int attach_vma(struct mm_struct *mm, struct vm_area_struct *vma)
|
|
{
|
|
int res;
|
|
|
|
res = vma_link(mm, vma);
|
|
if (!res)
|
|
vma_assert_attached(vma);
|
|
return res;
|
|
}
|
|
|
|
/* Main test running which invokes tests/ *.c runners. */
|
|
int main(void)
|
|
{
|
|
int num_tests = 0, num_fail = 0;
|
|
|
|
maple_tree_init();
|
|
vma_state_init();
|
|
|
|
run_merge_tests(&num_tests, &num_fail);
|
|
run_mmap_tests(&num_tests, &num_fail);
|
|
run_vma_tests(&num_tests, &num_fail);
|
|
|
|
printf("%d tests run, %d passed, %d failed.\n",
|
|
num_tests, num_tests - num_fail, num_fail);
|
|
|
|
return num_fail == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
|
|
}
|