From nobody Sat Feb 7 08:28:29 2026 Received: from mail-oa1-f44.google.com (mail-oa1-f44.google.com [209.85.160.44]) (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 D79DD1E1DEC for ; Mon, 2 Feb 2026 00:55:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769993745; cv=none; b=U21qr2UI3jZWhOSl4Nh1TRmSBs+jUBaC3qDIBRReWOsZVK+tGxrYjZE1mBC6AQrl2pWgdpphackeCQrsofSBNvkblhMZwELEjngV8UZoYKgUaipO6Pk1ae7cd2OhvD9zVvo6gBQDXIEgHnOoSYnzIRmJAGVC46n5EwgjOacwF1s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769993745; c=relaxed/simple; bh=gbKvyB+aiTFTZUMAein1LUGPTeFjm59N1+OrIl3/GXs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=onSQeAlnbUyc6QzINqreaYlAOqjEk/SDKtYuK5CuvRI8G/JgarH2kqKfsdXFfg8URgwiD3+7//P4gqbdeGaqwKHI3F6K8sTuWLUtNjrQtdJOkjd1pi+U36Ulpq+NdJGuzV4vW4oAuYV1EFkrwoc/d6XLBRAYTCe/FWXZCa6tzUo= 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=He3OQrZS; arc=none smtp.client-ip=209.85.160.44 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="He3OQrZS" Received: by mail-oa1-f44.google.com with SMTP id 586e51a60fabf-4094fbd1808so1563500fac.1 for ; Sun, 01 Feb 2026 16:55:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769993739; x=1770598539; 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=I8vQRA+06SerFEKUWpG9738UD1yc3kHqwB4W4DvkIi8=; b=He3OQrZS4ymLhSiFF3GmTW9V9rYcbzz8cv8IA6WILbyKsm9l523vBykCwyHCw9039i wsnhoJvBYhywjD8aCB/FF12/b7QQF/Cl1OMgNZneYz/X7xoRV7w/Uj2xcrxP0zjieaLl X3KdpsPbY+C4/cwVmLkUpfUXK5RvXkYJSDtU5xgi0RsrHpxsytdPTTD99VVqrUSM94P5 7Uuha9ZTl5NF/1VP8OZDKIhNjrnDn1voxHqOA8GJJ3m4aAAbBp6c922+fJDvks9SO2DF O6GR3GNFO/ApA6bRXJQFXtLvrPiCzWpKMP842HZI2l2tDGiBfm2K2ZZ/uc1q49NgTK5o bVwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769993739; x=1770598539; 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=I8vQRA+06SerFEKUWpG9738UD1yc3kHqwB4W4DvkIi8=; b=ZwZWe+gV8caz7Z/2/d+Xt7E1rMxjEmT+SVYE/J3+k3tf4qEoGYsFszIAlziVR+ZjgR sWgXmLFXXa9WjDnh+pyl9/hhI2xzk8tzLM2vPvFT0k4utlo7dkzp2okNXv/UDXCOoG1x qgNUihBkNKEX679t2LIwHaqmbwgKH6xlUYO5Pc1cTLPNHiQeSwPrdAqOaP+2Z3aqaUIM N4QGiRucdl6W4r1P3fESSP0uNgKh7qWBBIl95O5o807U8JWkM1fO3V0+ZQf5ozQ6mJjZ 8pwY/hcHcOvWSGiJoQVWLrdtGzEck36Wd3HdWY7Flg+uktJjNcEns9MB3ms2SbocHm3e 2ftg== X-Forwarded-Encrypted: i=1; AJvYcCWgEy6dihPePoOsCxKeMWFkz419s5Zk8Hvjd5HN7YD6UIohxo/TcBZeHhwUScT4LTf5eEbhayaWaC5dV9k=@vger.kernel.org X-Gm-Message-State: AOJu0Yz7hkQ5MhLliRgldTM/ksJysLhUd4tkDVfFuVKCY5xyeUrJKEOF 6wsRDjOOd6Ma2fUdbV7Jmqi+AhESU40CXWTKNBLWYArRhR3v17LJtTSV X-Gm-Gg: AZuq6aKt9JCu6qyJ1eQkFFMLG9gfH239V6MzieeHPOt80O9wzWg1H8EG6KCxC0s3eIJ P6GSyezOg2karkOTt6C4sJAGRx/XJAk6Qf/tLqkBIDVUKXK66iI8lTW14tXSi6pKXAQrTz3a+iG QWUSQiCdohs4Q3Y9CFD30j8NrfKVTywXR1ytVngARLa4uGpI3aPym8LpyV/1mwfDMYBGpUnJbNb gCUcv/Yqj7iluppcBoG1+FNuN4/WXISw8E84+QTnNuctlOT7iBvfgS+eDdfkB+TrWPf4M+xFkkT Fl20PvpQxos5ScN8Fwbr+HAyCP3qzwHM1bmu3Rp60YqfO5q6N5216LJqS+NiBjyFBGQv/ciTobF /S252VJ79KVYld3UMgsNk+AufO4YIwkwjNnq41+IN90kGgfZ0+nXopfbZJ0eUsQCXYdyw0o9qeU RFEvBv0q5O X-Received: by 2002:a05:6870:890f:b0:409:47c2:bea with SMTP id 586e51a60fabf-409a6f87b2fmr5052931fac.41.1769993738683; Sun, 01 Feb 2026 16:55:38 -0800 (PST) Received: from localhost ([2a03:2880:10ff:72::]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-4095752ef7bsm10547305fac.16.2026.02.01.16.55.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 01 Feb 2026 16:55:38 -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 09/12] selftests/mm: add PUD THP partial munmap test Date: Sun, 1 Feb 2026 16:50:26 -0800 Message-ID: <20260202005451.774496-10-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 allocates a PUD THP and unmaps a 2MB region from the middle. Since the PUD can no longer cover the entire region, it must be split. The test verifies that memory before and after the hole remains accessible with correct data. Signed-off-by: Usama Arif --- tools/testing/selftests/mm/pud_thp_test.c | 31 +++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/tools/testing/selftests/mm/pud_thp_test.c b/tools/testing/self= tests/mm/pud_thp_test.c index 27a509cd477d5..8d4cb0e60f7f7 100644 --- a/tools/testing/selftests/mm/pud_thp_test.c +++ b/tools/testing/selftests/mm/pud_thp_test.c @@ -225,4 +225,35 @@ TEST_F(pud_thp, fork_cow) self->split_before, split_after); } =20 +/* + * Test: Partial munmap triggers split + * Verifies that unmapping part of a PUD THP splits it correctly + */ +TEST_F(pud_thp, partial_munmap) +{ + unsigned long *ptr =3D (unsigned long *)self->aligned; + unsigned long *after_hole; + unsigned long split_after; + int ret; + + /* Touch memory to allocate PUD THP */ + memset(self->aligned, 0xDD, PUD_SIZE); + + /* Unmap a 2MB region in the middle - should trigger PUD split */ + ret =3D munmap((char *)self->aligned + PUD_SIZE / 2, PMD_SIZE); + ASSERT_EQ(ret, 0); + + split_after =3D read_vmstat("thp_split_pud"); + + /* Verify memory before the hole is still accessible and correct */ + ASSERT_EQ(ptr[0], 0xDDDDDDDDDDDDDDDDUL); + + /* Verify memory after the hole is still accessible and correct */ + after_hole =3D (unsigned long *)((char *)self->aligned + PUD_SIZE / 2 + P= MD_SIZE); + ASSERT_EQ(*after_hole, 0xDDDDDDDDDDDDDDDDUL); + + TH_LOG("Partial munmap completed (thp_split_pud: %lu -> %lu)", + self->split_before, split_after); +} + TEST_HARNESS_MAIN --=20 2.47.3