selftests/mm: call uffd_test_ctx_clear at the end of the test
uffd_test_ctx_clear() is being called from uffd_test_ctx_init() to unmap areas used in the previous test run. This approach is problematic because while unmapping areas uffd_test_ctx_clear() uses page_size and nr_pages which might differ from one test run to another. Fix this by calling uffd_test_ctx_clear() after each test is done. Link: https://lkml.kernel.org/r/20231206103702.3873743-4-surenb@google.com Signed-off-by: Suren Baghdasaryan <surenb@google.com> Reviewed-by: Peter Xu <peterx@redhat.com> Reviewed-by: Axel Rasmussen <axelrasmussen@google.com> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Andrea Arcangeli <aarcange@redhat.com> Cc: Brian Geffon <bgeffon@google.com> Cc: Christian Brauner <brauner@kernel.org> Cc: David Hildenbrand <david@redhat.com> Cc: Hugh Dickins <hughd@google.com> Cc: Jann Horn <jannh@google.com> Cc: Kalesh Singh <kaleshsingh@google.com> Cc: Liam R. Howlett <Liam.Howlett@oracle.com> Cc: Lokesh Gidra <lokeshgidra@google.com> Cc: Matthew Wilcox (Oracle) <willy@infradead.org> Cc: Michal Hocko <mhocko@suse.com> Cc: Mike Rapoport (IBM) <rppt@kernel.org> Cc: Nicolas Geoffray <ngeoffray@google.com> Cc: Ryan Roberts <ryan.roberts@arm.com> Cc: Shuah Khan <shuah@kernel.org> Cc: ZhangPeng <zhangpeng362@huawei.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
adef440691
commit
1c8d39fa7b
@ -262,7 +262,7 @@ static inline void munmap_area(void **area)
|
||||
*area = NULL;
|
||||
}
|
||||
|
||||
static void uffd_test_ctx_clear(void)
|
||||
void uffd_test_ctx_clear(void)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
@ -298,8 +298,6 @@ int uffd_test_ctx_init(uint64_t features, const char **errmsg)
|
||||
unsigned long nr, cpu;
|
||||
int ret;
|
||||
|
||||
uffd_test_ctx_clear();
|
||||
|
||||
ret = uffd_test_ops->allocate_area((void **)&area_src, true);
|
||||
ret |= uffd_test_ops->allocate_area((void **)&area_dst, false);
|
||||
if (ret) {
|
||||
|
||||
@ -105,6 +105,7 @@ extern uffd_test_ops_t *uffd_test_ops;
|
||||
|
||||
void uffd_stats_report(struct uffd_args *args, int n_cpus);
|
||||
int uffd_test_ctx_init(uint64_t features, const char **errmsg);
|
||||
void uffd_test_ctx_clear(void);
|
||||
int userfaultfd_open(uint64_t *features);
|
||||
int uffd_read_msg(int ufd, struct uffd_msg *msg);
|
||||
void wp_range(int ufd, __u64 start, __u64 len, bool wp);
|
||||
|
||||
@ -323,8 +323,10 @@ static int userfaultfd_stress(void)
|
||||
uffd_stats_reset(args, nr_cpus);
|
||||
|
||||
/* bounce pass */
|
||||
if (stress(args))
|
||||
if (stress(args)) {
|
||||
uffd_test_ctx_clear();
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Clear all the write protections if there is any */
|
||||
if (test_uffdio_wp)
|
||||
@ -354,6 +356,7 @@ static int userfaultfd_stress(void)
|
||||
|
||||
uffd_stats_report(args, nr_cpus);
|
||||
}
|
||||
uffd_test_ctx_clear();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1319,6 +1319,7 @@ int main(int argc, char *argv[])
|
||||
continue;
|
||||
}
|
||||
test->uffd_fn(&args);
|
||||
uffd_test_ctx_clear();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user