On Fri, 10 Feb 2023 09:21:57 +0800 (CST) <yang.yang29@xxxxxxxxxx> wrote: > From: xu xin <xu.xin16@xxxxxxxxxx> > > Add a function test_unmerge_zero_page() to test the functionality on > unsharing and counting ksm-placed zero pages and counting of this patch > series. > > test_unmerge_zero_page() actually contains three subjct test objects: > 1) whether the count of ksm zero page can react correctly to cow > (copy on write); > 2) whether the count of ksm zero page can react correctly to unmerge; > 3) whether ksm zero pages are really unmerged. > > Signed-off-by: xu xin <xu.xin16@xxxxxxxxxx> > Cc: Claudio Imbrenda <imbrenda@xxxxxxxxxxxxx> > Cc: David Hildenbrand <david@xxxxxxxxxx> > Cc: Xuexin Jiang <jiang.xuexin@xxxxxxxxxx> > Reviewed-by: Xiaokai Ran <ran.xiaokai@xxxxxxxxxx> > Reviewed-by: Yang Yang <yang.yang29@xxxxxxxxxx> [...] > +static int unmerge_zero_page(char *start, unsigned long size) > +{ > + int ret; > + > + ret = madvise(start, size, MADV_UNMERGEABLE); > + if (ret) { > + ksft_test_result_fail("MADV_UNMERGEABLE failed\n"); > + return ret; > + } > + > + /* > + * Wait for two full scans such that any possible unmerging of zero > + * pages happened. Why? Because the unmerge action of zero pages is not please remove "Why? Because" > + * done in the context of madvise(), but in the context of > + * unshare_zero_pages() of the ksmd thread. > + */ > + return wait_two_full_scans(); > +} > + > static char *mmap_and_merge_range(char val, unsigned long size) > { > char *map; [...]