From: Zi Yan <ziy@nvidia.com>
To: Sayali Patil <sayalip@linux.ibm.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
Shuah Khan <shuah@kernel.org>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
linux-kselftest@vger.kernel.org,
Ritesh Harjani <ritesh.list@gmail.com>,
David Hildenbrand <david@kernel.org>,
Michal Hocko <mhocko@kernel.org>,
Oscar Salvador <osalvador@suse.de>,
Lorenzo Stoakes <lorenzo.stoakes@oracle.com>,
Dev Jain <dev.jain@arm.com>,
Liam.Howlett@oracle.com, linuxppc-dev@lists.ozlabs.org,
Miaohe Lin <linmiaohe@huawei.com>,
Venkat Rao Bagalkote <venkat88@linux.ibm.com>
Subject: Re: [PATCH v4 13/15] selftests/mm: move hwpoison setup into run_test() and silence modprobe output for memory-failure category
Date: Tue, 07 Apr 2026 10:51:01 -0400 [thread overview]
Message-ID: <8B26C697-4D0C-4E1E-A14E-D517CC9DA05A@nvidia.com> (raw)
In-Reply-To: <8ef8640092004d143fe80e6fc32ea8d30a9080de.1775466330.git.sayalip@linux.ibm.com>
On 6 Apr 2026, at 5:19, Sayali Patil wrote:
> run_vmtests.sh contains special handling to ensure the hwpoison_inject
> module is available for the memory-failure tests. This logic was
> implemented outside of run_test(), making the setup category-specific
> but managed globally.
>
> Move the hwpoison_inject handling into run_test() and restrict it
> to the memory-failure category so that:
> 1. the module is checked and loaded only when memory-failure tests run,
> 2. the test is skipped if the module or the debugfs interface
> (/sys/kernel/debug/hwpoison/) is not available.
> 3. the module is unloaded after the test if it was loaded by the script.
>
> This localizes category-specific setup and makes the test flow
> consistent with other per-category preparations.
>
> While updating this logic, fix the module availability check.
> The script previously used:
>
> modprobe -R hwpoison_inject
>
> The -R option prints the resolved module name to stdout, causing every
> run to print:
>
> hwpoison_inject
>
> in the test output, even when no action is required, introducing
> unnecessary noise.
>
> Replace this with:
>
> modprobe -n hwpoison_inject
>
> which verifies that the module is loadable without producing output,
> keeping the selftest logs clean and consistent.
>
> Also, ensure that skipped tests do not override a previously recorded
> failure. A skipped test currently sets exitcode to ksft_skip even if a
> prior test has failed, which can mask failures in the final exit status.
> Update the logic to only set exitcode to ksft_skip when no failure has
> been recorded.
>
> Fixes: ff4ef2fbd101 ("selftests/mm: add memory failure anonymous page test")
> Signed-off-by: Sayali Patil <sayalip@linux.ibm.com>
> ---
> tools/testing/selftests/mm/run_vmtests.sh | 52 ++++++++++++++---------
> 1 file changed, 33 insertions(+), 19 deletions(-)
>
> diff --git a/tools/testing/selftests/mm/run_vmtests.sh b/tools/testing/selftests/mm/run_vmtests.sh
> index afdcfd0d7cef..17c9bd910c47 100755
> --- a/tools/testing/selftests/mm/run_vmtests.sh
> +++ b/tools/testing/selftests/mm/run_vmtests.sh
> @@ -235,6 +235,7 @@ pretty_name() {
> run_test() {
> if test_selected ${CATEGORY}; then
> local skip=0
> + local LOADED_MOD=0
Can you rename it to LOADED_MEMORY_FAILURE_MOD to clarify its use?
Since now LOADED_MOD is visible for the entire run_test().
>
> # On memory constrainted systems some tests can fail to allocate hugepages.
> # perform some cleanup before the test for a higher success rate.
> @@ -250,6 +251,28 @@ run_test() {
> fi
> fi
>
> + # Ensure hwpoison_inject is available for memory-failure tests
> + if [ "${CATEGORY}" = "memory-failure" ]; then
> + # Try to load hwpoison_inject if not present.
> + HWPOISON_DIR=/sys/kernel/debug/hwpoison/
> + if [ ! -d "$HWPOISON_DIR" ]; then
> + if ! modprobe -n hwpoison_inject > /dev/null 2>&1; then
> + echo "Module hwpoison_inject not found, skipping..." \
> + | tap_prefix
> + skip=1
> + else
> + modprobe hwpoison_inject > /dev/null 2>&1
> + LOADED_MOD=1
> + if [ ! -d "$HWPOISON_DIR" ]; then
> + echo "hwpoison debugfs interface not present" \
> + | tap_prefix
> + skip=1
> + fi
> + fi
> + fi
> +
> + fi
> +
> local test=$(pretty_name "$*")
> local title="running $*"
> local sep=$(echo -n "$title" | tr "[:graph:][:space:]" -)
> @@ -261,6 +284,12 @@ run_test() {
> else
> local ret=$ksft_skip
> fi
> +
> + # Unload hwpoison_inject if we loaded it
> + if [ -n "${LOADED_MOD}" ]; then
> + modprobe -r hwpoison_inject > /dev/null 2>&1
> + fi
> +
> count_total=$(( count_total + 1 ))
> if [ $ret -eq 0 ]; then
> count_pass=$(( count_pass + 1 ))
> @@ -270,7 +299,9 @@ run_test() {
> count_skip=$(( count_skip + 1 ))
> echo "[SKIP]" | tap_prefix
> echo "ok ${count_total} ${test} # SKIP" | tap_output
> - exitcode=$ksft_skip
> + if [ $exitcode -eq 0 ]; then
> + exitcode=$ksft_skip
> + fi
> else
> count_fail=$(( count_fail + 1 ))
> echo "[FAIL]" | tap_prefix
> @@ -529,24 +560,7 @@ CATEGORY="page_frag" run_test ./test_page_frag.sh nonaligned
>
> CATEGORY="rmap" run_test ./rmap
>
> -# Try to load hwpoison_inject if not present.
> -HWPOISON_DIR=/sys/kernel/debug/hwpoison/
> -if [ ! -d "$HWPOISON_DIR" ]; then
> - if ! modprobe -q -R hwpoison_inject; then
> - echo "Module hwpoison_inject not found, skipping..."
> - else
> - modprobe hwpoison_inject > /dev/null 2>&1
> - LOADED_MOD=1
> - fi
> -fi
> -
> -if [ -d "$HWPOISON_DIR" ]; then
> - CATEGORY="memory-failure" run_test ./memory-failure
> -fi
> -
> -if [ -n "${LOADED_MOD}" ]; then
> - modprobe -r hwpoison_inject > /dev/null 2>&1
> -fi
> +CATEGORY="memory-failure" run_test ./memory-failure
>
> if [ "${HAVE_HUGEPAGES}" = 1 ]; then
> echo "$orig_nr_hugepgs" > /proc/sys/vm/nr_hugepages
> --
Otherwise, LGTM.
Reviewed-by: Zi Yan <ziy@nvidia.com>
Best Regards,
Yan, Zi
next prev parent reply other threads:[~2026-04-07 14:51 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-06 9:19 [PATCH v4 00/15] selftests/mm: fix failures and robustness improvements Sayali Patil
2026-04-06 9:19 ` [PATCH v4 01/15] selftests/mm: restore default nr_hugepages value via EXIT trap in charge_reserved_hugetlb.sh Sayali Patil
2026-04-07 14:38 ` Zi Yan
2026-04-06 9:19 ` [PATCH v4 02/15] selftests/mm: fix hugetlb pathname construction " Sayali Patil
2026-04-06 9:19 ` [PATCH v4 03/15] selftests/mm: restore default nr_hugepages value via EXIT trap in hugetlb_reparenting_test.sh Sayali Patil
2026-04-07 14:39 ` Zi Yan
2026-04-06 9:19 ` [PATCH v4 04/15] selftests/mm: fix hugetlb pathname construction " Sayali Patil
2026-04-06 9:19 ` [PATCH v4 05/15] selftests/mm: fix cgroup task placement and drop memory.current checks " Sayali Patil
2026-04-06 9:19 ` [PATCH v4 06/15] selftests/mm: size tmpfs according to PMD page size in split_huge_page_test Sayali Patil
2026-04-06 9:19 ` [PATCH v4 07/15] selftests/mm: free dynamically allocated PMD-sized buffers " Sayali Patil
2026-04-07 14:44 ` Zi Yan
2026-04-06 9:19 ` [PATCH v4 08/15] selftest/mm: align memory size to huge page size in hugepage-mremap test Sayali Patil
2026-04-07 14:57 ` Zi Yan
2026-04-08 14:30 ` Sayali Patil
2026-04-06 9:19 ` [PATCH v4 09/15] selftest/mm: register existing mapping with userfaultfd in hugepage-mremap Sayali Patil
2026-04-06 9:19 ` [PATCH v4 10/15] selftests/mm: ensure destination is hugetlb-backed " Sayali Patil
2026-04-06 9:19 ` [PATCH v4 11/15] selftests/mm: skip uffd-wp-mremap if UFFD write-protect is unsupported Sayali Patil
2026-04-06 9:19 ` [PATCH v4 12/15] selftests/mm: skip uffd-stress test when nr_pages_per_cpu is zero Sayali Patil
2026-04-06 9:19 ` [PATCH v4 13/15] selftests/mm: move hwpoison setup into run_test() and silence modprobe output for memory-failure category Sayali Patil
2026-04-07 14:51 ` Zi Yan [this message]
2026-04-08 8:36 ` Sayali Patil
2026-04-08 15:40 ` Zi Yan
2026-04-06 9:19 ` [PATCH v4 14/15] selftests/mm: clarify alternate unmapping in compaction_test Sayali Patil
2026-04-06 9:19 ` [PATCH v4 15/15] selftests/cgroup: extend test_hugetlb_memcg.c to support all huge page sizes Sayali Patil
2026-04-07 12:07 ` Sayali Patil
2026-04-07 13:08 ` [PATCH v4 00/15] selftests/mm: fix failures and robustness improvements Venkat
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=8B26C697-4D0C-4E1E-A14E-D517CC9DA05A@nvidia.com \
--to=ziy@nvidia.com \
--cc=Liam.Howlett@oracle.com \
--cc=akpm@linux-foundation.org \
--cc=david@kernel.org \
--cc=dev.jain@arm.com \
--cc=linmiaohe@huawei.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=lorenzo.stoakes@oracle.com \
--cc=mhocko@kernel.org \
--cc=osalvador@suse.de \
--cc=ritesh.list@gmail.com \
--cc=sayalip@linux.ibm.com \
--cc=shuah@kernel.org \
--cc=venkat88@linux.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox