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:
committed by
Andrew Morton
parent
adef440691
commit
1c8d39fa7b
@@ -262,7 +262,7 @@ static inline void munmap_area(void **area)
|
|||||||
*area = NULL;
|
*area = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void uffd_test_ctx_clear(void)
|
void uffd_test_ctx_clear(void)
|
||||||
{
|
{
|
||||||
size_t i;
|
size_t i;
|
||||||
|
|
||||||
@@ -298,8 +298,6 @@ int uffd_test_ctx_init(uint64_t features, const char **errmsg)
|
|||||||
unsigned long nr, cpu;
|
unsigned long nr, cpu;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
uffd_test_ctx_clear();
|
|
||||||
|
|
||||||
ret = uffd_test_ops->allocate_area((void **)&area_src, true);
|
ret = uffd_test_ops->allocate_area((void **)&area_src, true);
|
||||||
ret |= uffd_test_ops->allocate_area((void **)&area_dst, false);
|
ret |= uffd_test_ops->allocate_area((void **)&area_dst, false);
|
||||||
if (ret) {
|
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);
|
void uffd_stats_report(struct uffd_args *args, int n_cpus);
|
||||||
int uffd_test_ctx_init(uint64_t features, const char **errmsg);
|
int uffd_test_ctx_init(uint64_t features, const char **errmsg);
|
||||||
|
void uffd_test_ctx_clear(void);
|
||||||
int userfaultfd_open(uint64_t *features);
|
int userfaultfd_open(uint64_t *features);
|
||||||
int uffd_read_msg(int ufd, struct uffd_msg *msg);
|
int uffd_read_msg(int ufd, struct uffd_msg *msg);
|
||||||
void wp_range(int ufd, __u64 start, __u64 len, bool wp);
|
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);
|
uffd_stats_reset(args, nr_cpus);
|
||||||
|
|
||||||
/* bounce pass */
|
/* bounce pass */
|
||||||
if (stress(args))
|
if (stress(args)) {
|
||||||
|
uffd_test_ctx_clear();
|
||||||
return 1;
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/* Clear all the write protections if there is any */
|
/* Clear all the write protections if there is any */
|
||||||
if (test_uffdio_wp)
|
if (test_uffdio_wp)
|
||||||
@@ -354,6 +356,7 @@ static int userfaultfd_stress(void)
|
|||||||
|
|
||||||
uffd_stats_report(args, nr_cpus);
|
uffd_stats_report(args, nr_cpus);
|
||||||
}
|
}
|
||||||
|
uffd_test_ctx_clear();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1319,6 +1319,7 @@ int main(int argc, char *argv[])
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
test->uffd_fn(&args);
|
test->uffd_fn(&args);
|
||||||
|
uffd_test_ctx_clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user