On Sat, 2025-08-16 at 14:43 +0000, Wei Yang wrote: Hi Wei,
> On Sat, Aug 16, 2025 at 09:31:11AM +0530, Aboorva Devarajan wrote: > > In ksm_functional_tests, test_child_ksm() returned negative values to > > indicate errors. However, when passed to exit(), these were interpreted > > as large unsigned values (e.g, -2 became 254), leading to incorrect > > handling in the parent process. As a result, some tests appeared to be > > skipped or silently failed. > > This is because "the least significant 8 bits" is returned to parent, right? > > Yes, that's right. As per the WEXITSTATUS(wstatus) manual: WEXITSTATUS: returns the exit status of the child. This consists of the least significant 8 bits of the status argument that the child specified in a call to exit(3) or _exit(2) or as the argument for a return statement in main(). This macro should only be employed if WIFEXITED returned true. Since only the least significant 8 bits are preserved, negative return values can appear as large unsigned codes, so using small positive exit codes ensures the parent interprets the error code correctly. > > This patch changes test_child_ksm() to return positive error codes (1, 2, > > 3) and updates test_child_ksm_err() to interpret them correctly. > > Additionally, test_prctl_fork_exec() now uses exit(4) after a failed > > execv() to clearly signal exec failures. This ensures the parent > > accurately detects and reports child process failures. > > > > -------------- > > Before patch: > > -------------- > > - [RUN] test_unmerge > > ok 1 Pages were unmerged > > ... > > - [RUN] test_prctl_fork > > - No pages got merged > > - [RUN] test_prctl_fork_exec > > ok 7 PR_SET_MEMORY_MERGE value is inherited > > ... > > Bail out! 1 out of 8 tests failed > > - Planned tests != run tests (9 != 8) > > - Totals: pass:7 fail:1 xfail:0 xpass:0 skip:0 error:0 > > > > -------------- > > After patch: > > -------------- > > - [RUN] test_unmerge > > ok 1 Pages were unmerged > > ... > > - [RUN] test_prctl_fork > > - No pages got merged > > not ok 7 Merge in child failed > > - [RUN] test_prctl_fork_exec > > ok 8 PR_SET_MEMORY_MERGE value is inherited > > ... > > Bail out! 2 out of 9 tests failed > > - Totals: pass:7 fail:2 xfail:0 xpass:0 skip:0 error:0 > > > > Fixes: 6c47de3be3a0 ("selftest/mm: ksm_functional_tests: extend test case > > for ksm fork/exec") > > Co-developed-by: Donet Tom <donet...@linux.ibm.com> > > Signed-off-by: Donet Tom <donet...@linux.ibm.com> > > Acked-by: David Hildenbrand <da...@redhat.com> > > Signed-off-by: Aboorva Devarajan <aboor...@linux.ibm.com> > > If so: > > Reviewed-by: Wei Yang <richard.weiy...@gmail.com> > > Thanks, I am afraid to make the same mistake if you don't point out. Thanks, Aboorva