From nobody Sat Feb 7 05:57:35 2026 Received: from mail-dl1-f42.google.com (mail-dl1-f42.google.com [74.125.82.42]) (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 5C2B828DF07 for ; Thu, 5 Feb 2026 01:35:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770255352; cv=none; b=Zmk7QHJUrAT9UiH4+rj+lkcRaf+2x9QLMP3VXa+OEeT/k85VoOUIIXSwXM+kVV2IFE/Jf79yRt7I5baUSfCGBtxY0wQLtAnbYTxUDVja6INP0sdEjhBMAV24C9QdZnx6hp4lF5vjaE71qb8Bo1acPSXTRzEa1VEPh7UQUZrb2TI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770255352; c=relaxed/simple; bh=vnefgSUg/EyZcfdw3rPiNEtAaxMblSpzza1WocM12gI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hh+9vFnXR8trLDUIM7dczvh4EUfBr+1b9sv5vlCK2xLmsNlTo5tnDZIFPrBaZ27aWjexJvc8yvRzNqgdYw73DOYiwfcwYj6uUI2wn+MzwbmgHNdbPGHPb1umT780CV0WMJSdD6NaSRApN6zEF62DjbWBDxqBCQ98fp0YQC6MxQw= 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=hUp6qhUx; arc=none smtp.client-ip=74.125.82.42 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="hUp6qhUx" Received: by mail-dl1-f42.google.com with SMTP id a92af1059eb24-126ea4b77adso455315c88.1 for ; Wed, 04 Feb 2026 17:35:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770255351; x=1770860151; 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=JS1rPHn8kZyPcvTQXgyDxncq77srAM3QsnsXxPBvNxs=; b=hUp6qhUx+muphAKqVWxAkNK8xs3u5eCbnq2+VpcgUz2iJVZtSzAbl7tNJFaRlUUF5B 7RODwIqWLHuIDjXGRAuV2AC+RTUvSTBj4FItaJMjKve05wH9sKLMqTbK9aZl8ueOlmt6 x58ZLmdj/Ori5EHZmqUedKeyduh69KiK979/4UwEV6gbsaD2Zqz0PGMVLkEEHTUgC4Rl QjDWIDUk05qztmSCohD6Ubw5Dba7EyCytDnhZgWA/AXGT3sAIW7an+Rtpp0ecwgv0Hc4 +mQq4OpWcUHk1ijzlcyALJQrbOmuTBAOzTCD/jcVZZYY5Pq7REYb19XtrjaoTrikTSBb N0Vw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770255351; x=1770860151; 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=JS1rPHn8kZyPcvTQXgyDxncq77srAM3QsnsXxPBvNxs=; b=qVdX0LaVP1zPrXvUFXP5t+tZQ+1FIpmHGxojnGz5oh/415PMh1RcBUAa7+on+RKTci 2IxsxLvzh5BuWzkxXLlkjSS/FfKRlumCtiKQm7t6FfuXgwogFi6Hg8/+AcpK8MfRZ/xK /Zth9jQbGALRD4X97Al/8G9QlSDbAx0JeCkb8GOna8rBjoGcn55o6T83DtM6HGq0lgKt 7nS/lX9zKpJBC91t3Qi4KxRUFTZRjtPGwM7EYlFgoT45CUfQ5oUvli/mzMVXUWR41+Mr vePWktmzArvE0S/nvKHdLzwDsVme7PzJGIXGyirriY0uDNl18yYTDezKNkNSgqbcHXXC sJSQ== X-Gm-Message-State: AOJu0YyLPS3zYt4YYXv0SY4Sd6C5FDGL/mhc2sJZL5By6hxS2L/rv2qQ aqSuu1Nz0Sf9ssUsa+E26qyJQLjYFO+kITgvLl/DRQV4TYg+jZf99mx6v0flVA== X-Gm-Gg: AZuq6aL2x8OT4j8FPNadja590DbEHbso2jVOla+MgUTgsOCaliYQJBITK1VnwL3ii91 gkuiubyYT0qOtYsJHyaXjTjlVE/dFJ+A0H/dtziGI+xJif3+gl46komrXEauNsuxxvqR4zXlrxU et6YJg/X8i9duekVASrOPuSVZ3pcgpKG+YvHJcch/TQxgHs9QmlM7j1mZG3GZMTvl1ztZx2jQSm wWMF8hEym+YyMLJ/tjIz4jh8X7jjGogrNiM2eNIH7cgInTlMx2A7Km4Id18m6QYOJf8wDUGJbl7 cL7k4SAKfXyv2+wHjXGezUYzic3ozW0RBHO65tYvWh2CHTBAsmKxQND608wWV4g99HOC0L5buq8 DGbEGKCVQCyoas9RpSlMiIL+b4HqB/fsDNpAN8VEQEfVuFccH7SNDzYilKMpwB59b9oxDu24wI5 TjKh2uM7BOx2+cL7RAQlrd7DJOEA4HLF9QJXyfy4LMLpDYWRAcbXAH1g== X-Received: by 2002:a05:7022:207:b0:124:adfd:623d with SMTP id a92af1059eb24-126f47c3357mr2146966c88.31.1770255350963; Wed, 04 Feb 2026 17:35:50 -0800 (PST) Received: from fedora (c-67-164-59-41.hsd1.ca.comcast.net. [67.164.59.41]) by smtp.googlemail.com with ESMTPSA id a92af1059eb24-126f4e0f98asm3424982c88.5.2026.02.04.17.35.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 04 Feb 2026 17:35:50 -0800 (PST) From: "Vishal Moola (Oracle)" To: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, "Mike Rapoport (Microsoft)" , Dave Hansen Cc: akpm@linux-foundation.org, "Matthew Wilcox (Oracle)" , Andy Lutomirski , Peter Zijlstra , "Vishal Moola (Oracle)" Subject: [PATCH v4 3/4] x86/mm/pat: Convert pmd code to use ptdescs Date: Wed, 4 Feb 2026 17:35:26 -0800 Message-ID: <20260205013527.322157-4-vishal.moola@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260205013527.322157-1-vishal.moola@gmail.com> References: <20260205013527.322157-1-vishal.moola@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" We need all allocation and free sites to use the ptdesc APIs in order to allocate them separately from regular pages. Convert these pmd allocation/free sites to use ptdescs. populate_pgd() also allocates pagetables that may later be freed by try_to_free_pmd_page(), so allocate ptdescs there as well. Also, rename *_pmd_page() functions to *_pmd(). Rename them now to avoid any confusion later. Eventually these allocations will be backed by a ptdesc not a page, but that's not important to callers either. Signed-off-by: Vishal Moola (Oracle) --- arch/x86/mm/pat/set_memory.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/arch/x86/mm/pat/set_memory.c b/arch/x86/mm/pat/set_memory.c index c6c68fbbb046..dfe05cdf460c 100644 --- a/arch/x86/mm/pat/set_memory.c +++ b/arch/x86/mm/pat/set_memory.c @@ -1412,7 +1412,7 @@ static bool try_to_free_pte(pte_t *pte) return true; } =20 -static bool try_to_free_pmd_page(pmd_t *pmd) +static bool try_to_free_pmd(pmd_t *pmd) { int i; =20 @@ -1420,7 +1420,7 @@ static bool try_to_free_pmd_page(pmd_t *pmd) if (!pmd_none(pmd[i])) return false; =20 - free_page((unsigned long)pmd); + pgtable_free_addr(pmd); return true; } =20 @@ -1446,7 +1446,7 @@ static void __unmap_pmd_range(pud_t *pud, pmd_t *pmd, unsigned long start, unsigned long end) { if (unmap_pte_range(pmd, start, end)) - if (try_to_free_pmd_page(pud_pgtable(*pud))) + if (try_to_free_pmd(pud_pgtable(*pud))) pud_clear(pud); } =20 @@ -1490,7 +1490,7 @@ static void unmap_pmd_range(pud_t *pud, unsigned long= start, unsigned long end) * Try again to free the PMD page if haven't succeeded above. */ if (!pud_none(*pud)) - if (try_to_free_pmd_page(pud_pgtable(*pud))) + if (try_to_free_pmd(pud_pgtable(*pud))) pud_clear(pud); } =20 @@ -1547,9 +1547,9 @@ static int alloc_pte(pmd_t *pmd) return 0; } =20 -static int alloc_pmd_page(pud_t *pud) +static int alloc_pmd(pud_t *pud) { - pmd_t *pmd =3D (pmd_t *)get_zeroed_page(GFP_KERNEL); + pmd_t *pmd =3D (pmd_t *) pgtable_alloc_addr(GFP_KERNEL, 0); if (!pmd) return -1; =20 @@ -1622,7 +1622,7 @@ static long populate_pmd(struct cpa_data *cpa, * We cannot use a 1G page so allocate a PMD page if needed. */ if (pud_none(*pud)) - if (alloc_pmd_page(pud)) + if (alloc_pmd(pud)) return -1; =20 pmd =3D pmd_offset(pud, start); @@ -1678,7 +1678,7 @@ static int populate_pud(struct cpa_data *cpa, unsigne= d long start, p4d_t *p4d, * Need a PMD page? */ if (pud_none(*pud)) - if (alloc_pmd_page(pud)) + if (alloc_pmd(pud)) return -1; =20 cur_pages =3D populate_pmd(cpa, start, pre_end, cur_pages, @@ -1715,7 +1715,7 @@ static int populate_pud(struct cpa_data *cpa, unsigne= d long start, p4d_t *p4d, =20 pud =3D pud_offset(p4d, start); if (pud_none(*pud)) - if (alloc_pmd_page(pud)) + if (alloc_pmd(pud)) return -1; =20 tmp =3D populate_pmd(cpa, start, end, cpa->numpages - cur_pages, @@ -1743,7 +1743,7 @@ static int populate_pgd(struct cpa_data *cpa, unsigne= d long addr) pgd_entry =3D cpa->pgd + pgd_index(addr); =20 if (pgd_none(*pgd_entry)) { - p4d =3D (p4d_t *)get_zeroed_page(GFP_KERNEL); + p4d =3D (p4d_t *)pgtable_alloc_addr(GFP_KERNEL, 0); if (!p4d) return -1; =20 @@ -1755,7 +1755,7 @@ static int populate_pgd(struct cpa_data *cpa, unsigne= d long addr) */ p4d =3D p4d_offset(pgd_entry, addr); if (p4d_none(*p4d)) { - pud =3D (pud_t *)get_zeroed_page(GFP_KERNEL); + pud =3D (pud_t *)pgtable_alloc_addr(GFP_KERNEL, 0); if (!pud) return -1; =20 --=20 2.52.0