From nobody Sun May 24 18:41:10 2026 Received: from mail-pl1-f176.google.com (mail-pl1-f176.google.com [209.85.214.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A2C9C27280A for ; Sun, 24 May 2026 09:19:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779614376; cv=none; b=JLrj20UV9lB8kWLGD+D1pCI6/mkMDFYJCkNSIu78dTuCHqixir6xWr+4A1B5Jzl8H3L76+pCRbkrBdUzfqtKy/Z0eaA8aKDxyk49CKAJPLF7OVSFEFhhfnH46CJ5MEs+UHsW7N6fQHrqeFwvhGneXinIaT0mYxfuiWCk8XB2m1A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779614376; c=relaxed/simple; bh=ojS7YMq9ny+6I7+wp1Uy03uzolXMYk7P5/Iw5lgboC8=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=IkXCauuSjWBvvwRh9zEwNzg+jCyk+sSml4U+H/0PfXcf8rVhBdPJA51ls+vTkiEjolNaaSQxQOtpsWwmsQMu61cD+DqOok5dP68FL0FNqjosb1Wp0m5DH4pCLgHsvwiDtd3ng4QXSft9DfT9ZHgVfK7SaYLzigEIBqiaewzdS7M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=dNGx0ZxG; arc=none smtp.client-ip=209.85.214.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="dNGx0ZxG" Received: by mail-pl1-f176.google.com with SMTP id d9443c01a7336-2bd5b3f8a98so16968325ad.2 for ; Sun, 24 May 2026 02:19:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779614374; x=1780219174; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=rzFLSXviPLq0I/Xz70YuBFZ/FEtYhu4eVtx71crsM3c=; b=dNGx0ZxG+JPl0JdeAoGuOJmFPG30vKFrKWwNQ6V7OvTQ+0LyxbO2QWUeB+4x65xJla TYIVev8cgb5VjoecnMBfHH9O3bvBTlV7Lo3uE6zYs/l7RaJHPlIlJlUG1unu3erfRg5f oDmszTIyZC/391wsWGuwys1uBt5SJqP2ojCp2xcVU6i3f9cQ2rcGhjlEwClzepl5HK7+ jZQwkfDBYGrkNKG66CGiLPnSlFSYyNrJD89il0a2Paz3qRJz11a6QzCzaSs0lBeOzvm2 j4yBSa0yAma00NYyrWTL37A+wVSAI6Xd9YNNVTZfcXYEus4ce+8Zx7M22zRXIZdz91FI mYvg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779614374; x=1780219174; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=rzFLSXviPLq0I/Xz70YuBFZ/FEtYhu4eVtx71crsM3c=; b=SO9yqICe+1zMQ292T+5FFHqE0Xpq9NQNAQR6cKflRy4QyR21/MUPri7ryy+bHQbZ/C jw58Fy5TMB2MBC+YZEjRtuo4m8sH/BKS1bQxFu0yeGQMd/MVhaTTMGK24WP4C63eTdao Dxe6t3cklk+8oLZHzfmf/5R2/szN+nsLtUxfzVPUKzQ09B+jMIKul5THEZ6wZLsS20uc v7wcmnXiEnhZHVlm1zqEIB3k9ndxmoxnFOOTb2xkBGMaDHfFsOyeL/a2qXxBSwn07hiu 1XnEtULrESUZA3qPgCuMzRR09vip3PynSV1buTxKLWCtMsPXyKQGEAs33+6ghwCzTzI5 VXMg== X-Forwarded-Encrypted: i=1; AFNElJ8fJ30ojVRxGWUhKRAO5SzWQ2DyL7RdhXIyM5i8hRS9FTHLerJpF47bMkKKMuIOFCSmJ8MOMsBKn7dViLs=@vger.kernel.org X-Gm-Message-State: AOJu0YxsELJDIBgRqjCqqa4UTwl1kiPI9N9ecNDsu4dLP092mNqfFJC3 rYRy0e7zJeaVWyZDDrmCJAmGWVPepSwLg2Ya1NFDijV53iy4HEUGCCuT X-Gm-Gg: Acq92OEnPDTAXyx0lc0xhGPNlhCJdoFIjWnvzkw4UTjXy/bjwg7SMqWw4BBBstiKzBy kCpLZeaXx6BX8/QFsBhF/68GvgTZQR0zOZtDfUEB1UjFcHIauzzEuATSCXeSn48X1KUQkSjUAAF USJ/g8AOvrPVJV6goQrBBQc+MMXk2P83ZMehokh/t9mQUmw89uMzezAiobJT3g9D39FnREapJJP yySzyRgyJaTKX4O3V2t8KWsy/5q9XWCcVqA3H9LkMoNjG9ImsAOh3fLQSoOo26Jcg0bxoBdpZOV sEgqcfxyR7PnOXLDfHt7EMZqc4VNz9DgHPG+ahebWPKBQrpF4solb9eJBnlCfRT1wBLXssEDwhi mE0zXfQSKwjg5uwYcESvK+45Jxo9IzZBtVsGNaWkVZgXE9uwcl+eswJNLmX6PPPWCXNRkZwnwhF sn9yLHyWT8iRxMZw37QgCpDt7IcqRg78ziJ2qyK2puOYiNtIMdHiHsycOK7rg= X-Received: by 2002:a17:902:ea01:b0:2bc:f1da:4c09 with SMTP id d9443c01a7336-2beb037fb81mr59515795ad.2.1779614373960; Sun, 24 May 2026 02:19:33 -0700 (PDT) Received: from localhost.localdomain ([60.243.191.184]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2beb58c69a0sm62023705ad.59.2026.05.24.02.19.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 May 2026 02:19:33 -0700 (PDT) From: Sailesh Nandanavanam To: sj@kernel.org Cc: shuah@kernel.org, damon@lists.linux.dev, linux-mm@kvack.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Sailesh Nandanavanam Subject: [PATCH] selftests/damon: add regression test for damos_walk() vs kdamond exit race Date: Sun, 24 May 2026 14:48:12 +0530 Message-Id: <20260524091812.35283-1-saileshnandanavanam@gmail.com> X-Mailer: git-send-email 2.34.1 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add a regression test that verifies damos_walk() does not deadlock when racing with kdamond_fn() exit. When kdamond_fn() finishes its main loop, it cancels remaining damos_walk() requests and unsets damon_ctx->kdamond. Without the fix in commit 33c3f6c2b48c, damos_walk() could be called right after cancellation but before kdamond pointer unset, causing it to wait forever for handling that never comes. The test starts kdamond monitoring a short-lived process, waits for the process to exit naturally triggering kdamond termination, then rapidly calls update_schemes_tried_regions to hit the race window. Without the fix this would hang indefinitely. Fixes: 33c3f6c2b48c ("mm/damon/core: fix damos_walk() vs kdamond_fn() exit = race") Signed-off-by: Sailesh Nandanavanam --- tools/testing/selftests/damon/Makefile | 1 + .../sysfs_damos_walk_kdamond_exit_race.py | 47 +++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 tools/testing/selftests/damon/sysfs_damos_walk_kdamond_= exit_race.py diff --git a/tools/testing/selftests/damon/Makefile b/tools/testing/selftes= ts/damon/Makefile index 2180c328a825..60c83d6c318e 100644 --- a/tools/testing/selftests/damon/Makefile +++ b/tools/testing/selftests/damon/Makefile @@ -20,6 +20,7 @@ TEST_PROGS +=3D sysfs_update_removed_scheme_dir.sh TEST_PROGS +=3D sysfs_update_schemes_tried_regions_hang.py TEST_PROGS +=3D sysfs_memcg_path_leak.sh TEST_PROGS +=3D sysfs_no_op_commit_break.py +TEST_PROGS +=3D sysfs_damos_walk_kdamond_exit_race.py =20 EXTRA_CLEAN =3D __pycache__ =20 diff --git a/tools/testing/selftests/damon/sysfs_damos_walk_kdamond_exit_ra= ce.py b/tools/testing/selftests/damon/sysfs_damos_walk_kdamond_exit_race.py new file mode 100644 index 000000000000..9b9d66a23f51 --- /dev/null +++ b/tools/testing/selftests/damon/sysfs_damos_walk_kdamond_exit_race.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: GPL-2.0 +# +# Regression test for damos_walk() vs kdamond_fn() exit race. +import subprocess +import time +import _damon_sysfs +def main(): + proc =3D subprocess.Popen(['sleep', '0.3']) + kdamonds =3D _damon_sysfs.Kdamonds([_damon_sysfs.Kdamond( + contexts=3D[_damon_sysfs.DamonCtx( + ops=3D'vaddr', + targets=3D[_damon_sysfs.DamonTarget(pid=3Dproc.pid)], + schemes=3D[_damon_sysfs.Damos( + action=3D'stat', + access_pattern=3D_damon_sysfs.DamosAccessPattern( + nr_accesses=3D[0, 200]))] + )] + )]) + err =3D kdamonds.start() + if err is not None: + print('kdamond start failed: %s' % err) + exit(1) + proc.wait() + completed =3D False + timeout =3D time.time() + 5 + while time.time() < timeout: + err =3D kdamonds.kdamonds[0].update_schemes_tried_regions() + if err is not None: + completed =3D True + break + try: + with open('/sys/kernel/mm/damon/admin/kdamonds/0/state') as f: + state =3D f.read().strip() + if state =3D=3D 'off': + completed =3D True + break + except: + completed =3D True + break + if not completed: + print('FAIL: test timed out - possible damos_walk/kdamond exit rac= e deadlock') + kdamonds.stop() + exit(1) + print('PASS: damos_walk() vs kdamond exit race not triggered') +if __name__ =3D=3D '__main__': + main() --=20 2.34.1