From nobody Sat Feb 7 11:05:20 2026 Received: from mail-oi1-f173.google.com (mail-oi1-f173.google.com [209.85.167.173]) (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 2275A1DED5C for ; Mon, 2 Feb 2026 00:55:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769993752; cv=none; b=Hb7aXhpzs2E7iMsIaxup8GfY5UpyiTgPNCzPpwnDRDgKt9wlhSrdcYypcjOuDxffzd4C2yieITr1PiHqN9rs/0pi2NrWh1lVqBMIkbWS3X7N39jjWTBJ5vZbdZMugv83oiIb14k7CEIMi8jS8b5kRoQxnYnaKVkR9HqWt3xVOm0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769993752; c=relaxed/simple; bh=/6rVf9rvQIWd/wLmx0Shpzxn6jgbrMWsAfd5Dyv6kmc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Jtm2Ytj7yVAtfgWpbevsaDDcqoQ5IYoXo4Is0KC6NpyNTH9ZI1k2bgf0upiXu/UUAKoY0uQ4QXZWn7L3RqrjWDHFCWoSEsq6rRVtofPWXHTAwYyEqoiSmB/qZDg7WIIpMDUWABPfw6Favh2tj1oaOPXE541dnXo9nnFit9AJ5NI= 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=jA6mJPDG; arc=none smtp.client-ip=209.85.167.173 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="jA6mJPDG" Received: by mail-oi1-f173.google.com with SMTP id 5614622812f47-45c9fdf2a06so2735108b6e.2 for ; Sun, 01 Feb 2026 16:55:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769993743; x=1770598543; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Gvsdt8gBwwkrCim/nEc53pgmTP4BbWKzy8tyuoNVZ4Q=; b=jA6mJPDGBkaTwTRuLLFGjZBjyDhFSoDZf1sVSKtUB/maiudoUNUzt4ZzMBVBbatrfs X3kjZwc8QKKOifK7srGkURWHM5pLY/hh5LXkYw7kIctg9qvFQUcbpahTIuE58tqg5eGE 033yDtCYJmKL6C5LNlh1urUqRSY6Z7OPld1vk6w+K6AhYADOLnOlH5cW86rfCVcg/h6W SfuOo7d+1Mzr4Zg9PCutPHjdThkHSnf60mM4q5gNTNLzmH6JyHuvEVjU6qsCGuVcH5aG yJlB8CEQ+Rf6jXEAais0nWkmW2NFUgV58FCMJ7QYUtnTx4HVOCoEjcSN+0IbTK4xpcFF BAHA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769993743; x=1770598543; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=Gvsdt8gBwwkrCim/nEc53pgmTP4BbWKzy8tyuoNVZ4Q=; b=VAYSFLgMwGCbU2qlCY9lKocwrH7NSQ2zLgrgGDsT412WhP4UqzQKOxrt//UAl1KA5N rHVbdMl5MRm/c14wYoxDo7bOf5Ih0De6RRsTnxFkVGWwcAEBU0fsVSfPJdwNWzEadV2r 7AY3o7BFGzxYRzarQRyYNcvV1cE7EwAwutRE+cjHsgjyFruDQnxbd0XjORUs4W54C8Ai dbciMEFXB82H08SYAbz11eMArXYjkyHLwqUbOqZyetVZpAS9X08KeUGLVffFJ8D1Cx3W 3ZSx9+9X08Un4/A3x6PYh0BjDSBT+y9dSoIXx5kEOicqINMIfmBrQgTSOiyonGyEX95Q thrw== X-Forwarded-Encrypted: i=1; AJvYcCU6BMaXd86M27L3XNTWP2rodj4g2nzSeA3gSEXqf0GMbHHCEd6fFgF+mRKfFVi3mcaDq1ZOOMj0cik91UA=@vger.kernel.org X-Gm-Message-State: AOJu0Yxd1z7vkGFegXfiLt/BnoROjylirlLqmtT9ASYluCfc5+qbEdo/ CNqNoThVptusZ1ZmFH+JOcMlZiGq3hQfoDOfjT8w1RUl2/W7WvbDj7Y8beUfyFfR X-Gm-Gg: AZuq6aIoAZdtgRzinMReC0uT8Wzp4NuyOqtk/d4O1ZwFBIZ8Gfq7TBbqJFWNgkstGFC sOFa9z/FYmkRIc/e7X7FR2sLWDHlZIyfrOkgABfN6xwREmP8I2SS6DNsMnuw6egYbK9NRBG1ZuM 0r6ylXuH3Be4RFkVN7+rjzbVcrXThCVNJ/zW7McGefG6ARw/cK4RqHAr+APbKA10XxrVdKs0X/5 xTNCD1ioqAKIsLSQJXPeniYQrIrZ0W0h9sPHK81f8XSXfzCkGi6aD9PKv5oZn4P1uzSxCM5+dBM NNPzpweWy7yDD7tgKm1Xpi9qeWzOcj36VI+cDvLXNH/X0Z3tS1l39Tu1pPhjDqMkNob8Or+KCYn ZBtcu/KEHZXoMD9TNkPfD9++ljOWuB8eIv7v6H4YzuPSy0wCrVmyGR1++PdvzOvD2N7fVIjN/h8 8gUPHpDWI= X-Received: by 2002:a05:6808:c1f9:b0:45c:75ec:b9d0 with SMTP id 5614622812f47-45f34cb4ca2mr5143633b6e.34.1769993743045; Sun, 01 Feb 2026 16:55:43 -0800 (PST) Received: from localhost ([2a03:2880:10ff:4::]) by smtp.gmail.com with ESMTPSA id 5614622812f47-45f08f6010esm8293308b6e.15.2026.02.01.16.55.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 01 Feb 2026 16:55:42 -0800 (PST) From: Usama Arif To: ziy@nvidia.com, Andrew Morton , David Hildenbrand , lorenzo.stoakes@oracle.com, linux-mm@kvack.org Cc: hannes@cmpxchg.org, riel@surriel.com, shakeel.butt@linux.dev, kas@kernel.org, baohua@kernel.org, dev.jain@arm.com, baolin.wang@linux.alibaba.com, npache@redhat.com, Liam.Howlett@oracle.com, ryan.roberts@arm.com, vbabka@suse.cz, lance.yang@linux.dev, linux-kernel@vger.kernel.org, kernel-team@meta.com, Usama Arif Subject: [RFC 12/12] selftests/mm: add PUD THP migration test Date: Sun, 1 Feb 2026 16:50:29 -0800 Message-ID: <20260202005451.774496-13-usamaarif642@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260202005451.774496-1-usamaarif642@gmail.com> References: <20260202005451.774496-1-usamaarif642@gmail.com> 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 test that uses mbind() to change the NUMA memory policy, which triggers migration. The kernel must split PUD THPs before migration since there is no PUD-level migration entry support. The test verifies data integrity after the migration attempt. Signed-off-by: Usama Arif --- tools/testing/selftests/mm/pud_thp_test.c | 42 +++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/tools/testing/selftests/mm/pud_thp_test.c b/tools/testing/self= tests/mm/pud_thp_test.c index 961fdc489d8a2..7e227f29e69fb 100644 --- a/tools/testing/selftests/mm/pud_thp_test.c +++ b/tools/testing/selftests/mm/pud_thp_test.c @@ -32,6 +32,14 @@ #define MADV_PAGEOUT 21 #endif =20 +#ifndef MPOL_BIND +#define MPOL_BIND 2 +#endif + +#ifndef MPOL_MF_MOVE +#define MPOL_MF_MOVE (1 << 1) +#endif + /* Get PUD-aligned address within a region */ static inline void *pud_align(void *addr) { @@ -315,4 +323,38 @@ TEST_F(pud_thp, reclaim_pageout) self->split_before, split_after); } =20 +/* + * Test: Migration via mbind + * Verifies that migration path correctly handles PUD THPs by splitting + */ +TEST_F(pud_thp, migration_mbind) +{ + unsigned char *bytes =3D (unsigned char *)self->aligned; + unsigned long nodemask =3D 1UL; /* Node 0 */ + unsigned long split_after; + int ret; + + /* Touch memory to allocate PUD THP */ + memset(self->aligned, 0xBB, PUD_SIZE); + + /* Try to migrate by changing NUMA policy */ + ret =3D syscall(__NR_mbind, self->aligned, PUD_SIZE, MPOL_BIND, &nodemask, + sizeof(nodemask) * 8, MPOL_MF_MOVE); + /* + * mbind may fail with EINVAL (single node) or EIO (migration failed), + * which is acceptable - we just want to exercise the migration path. + */ + if (ret < 0 && errno !=3D EINVAL && errno !=3D EIO) + TH_LOG("mbind returned unexpected error: %s", strerror(errno)); + + split_after =3D read_vmstat("thp_split_pud"); + + /* Verify data integrity */ + ASSERT_EQ(bytes[0], 0xBB); + ASSERT_EQ(bytes[PUD_SIZE - 1], 0xBB); + + TH_LOG("Migration completed (thp_split_pud: %lu -> %lu)", + self->split_before, split_after); +} + TEST_HARNESS_MAIN --=20 2.47.3