From nobody Thu Apr 2 00:13:52 2026 Received: from mail-dy1-f182.google.com (mail-dy1-f182.google.com [74.125.82.182]) (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 EF60B352C5C for ; Wed, 11 Feb 2026 19:52:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770839570; cv=none; b=B9H8l5zXUgNzqCYJHQdslgSWRiV91qLf3J4s+1AjQLeShEtAcXfqeqPEv2SZSjx2/ip4sO1FJXsPXT75qDqaTtA8bSm2iR+lf2G7rK5KRuNv28qwrjudIL0M+jMp2YuaFUGoLDZoRC+nzCAjbvrgcK3uF8/6yxA0idC91Rp3y7E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770839570; c=relaxed/simple; bh=kVNFmmhEA/18Yty/d1sA6KBeNN2ApPvD66j4ouN24bk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=n51OXn9SXx8yZeel1Ss3MKKLd9IgCSsCDWo9IYdIy0REA2X00MIYiLqCRr851McWked+zhT8cFoFOqxgTagHk+4IvAboWaGbUOrCD3kIyTdldov9wCYx/PGB/nMv27WAnYUsPuD/nsF1ignn52gqhOAs3pEkE6HSInLryJZOIN0= 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=V8nQqbGB; arc=none smtp.client-ip=74.125.82.182 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="V8nQqbGB" Received: by mail-dy1-f182.google.com with SMTP id 5a478bee46e88-2b86ce04c5cso517057eec.1 for ; Wed, 11 Feb 2026 11:52:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770839566; x=1771444366; 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=PW0O7GWcMWLn2TYy5yKCekih8BmMZppbzDUWkPTzKZs=; b=V8nQqbGB7uwQSwHcAVvehHMCgpmU8jMerkCTu36zSc1djh2j941nf2q7+RmaWNJzX4 lO/hfzagLpSQnTIyloUKuaK3YG+77pT+PwSVKgIuq49vzJZcn6s832S7WqA9zRQIiRgm NjO2zt+LRqwmC3lJx5R6t/ZFOGXv7zwmDBF2+8yNq5XQHl/rtUm0FrqtmFn+lw1u9AGJ bImzLcT8SB1ae1DnwUljvGv7MbIfBR78ebeaijxvqkdYds9eejXEW+liDxsVKa41uEMU wVo76r4xWgQjVR17WFeDiPBVtMWd/rKob0u6/uVpbAUyBiyAFk0yV1quWrfyOX2JqOOv pG7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770839567; x=1771444367; 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=PW0O7GWcMWLn2TYy5yKCekih8BmMZppbzDUWkPTzKZs=; b=PmhTzzg1QF3mhuA0W+O7RLZ2Fh790DmkxLMOtQeNv9aVE4edF1xGZSaPUMlBs6nCN8 +7ogJMKC9PA3GPDOWFpLUlR/b8NVV0I+lc1tdiP8Jp89N3M1BDynk3lUaY2tsJ8C2n8m MT4ND3X9KGDS2j0Oueus5udR83iYfRx5TYRjXWyrAtIzYj76fEcx0MzfQk8hxe7yoOOW Oh1W3GCxYmUocX3MgWyA3bsp03qK8Q5+r+vYYQ2lO2i/mJDGWHHAdGS+KP3OejxL4+6S dISfo04NwRpfe65vfZktLQXbWJQbL6E0XKWHhijsnPC+eVXfzM0Vr2M5X/xxZjdPq8rE DJvw== X-Gm-Message-State: AOJu0Yzgwb+sIT20Q9vYaUszKT4MUAphCphcEhAk3lOC+dW7Y2pJyUas mCvm+UweLX5AkOiPj1qvOd9TfkDBRIOVP5ahDVYSI0xXV0lu/4XY4QEh8YruWw== X-Gm-Gg: AZuq6aKpLqD2xPQVWajr9rMUpWmzjmT37kdglM503w3sn8U/umy6h7qLxy3ersfqv2u IO8JuPJx6Imxcu3QIa6X/xTVRT1V+LgW/DlAJTF/jRJVwU9D+rd5weBxOAyZ22FoMApUi4CpoWs DbmH3wGTTq3ck1K+YxydKRCglrxdAOt8Evkap1xsNrJWZXI22NJJ8epHMaF2P/0uDJ8raAzTqGg KdTVKyLAtdEtU2CbOTDe+YMFXzcy8MZzeybZbDqlXnIXntz4dHWS2jdH6hOGonME+NE10yx8o41 ImFBpPZfKx1ElMSjpei04aqmDaetH3BgwXUpjOUe6ppL9cRq64cjy3Zlph2GHOdxARVl95eanYP 9EqufdF7U1xKM/wwaxFFYYzuI8nn7Kyiaf1hGg2ECcDA55FO0vKF2u+OGXH1vuEPcOV4uTTg+zf dnEOpg6RnLlpIQ4qdJCaWaS3+u2NPX/yqmzvE/5gx+Dam0yZGkyqROOMBe6KEeyO8ivg== X-Received: by 2002:a05:7300:7ba0:b0:2b7:12f8:5eea with SMTP id 5a478bee46e88-2baa7f682f7mr297764eec.9.1770839566550; Wed, 11 Feb 2026 11:52:46 -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 5a478bee46e88-2ba9dcfe6b7sm2426463eec.29.2026.02.11.11.52.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Feb 2026 11:52:45 -0800 (PST) From: "Vishal Moola (Oracle)" To: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, "Mike Rapoport (Microsoft)" Cc: akpm@linux-foundation.org, "Matthew Wilcox (Oracle)" , Dave Hansen , Andy Lutomirski , Peter Zijlstra , "Vishal Moola (Oracle)" , Dave Hansen Subject: [PATCH v5 1/4] mm: Add address apis for ptdescs Date: Wed, 11 Feb 2026 11:52:30 -0800 Message-ID: <20260211195233.368497-2-vishal.moola@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260211195233.368497-1-vishal.moola@gmail.com> References: <20260211195233.368497-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" Architectures frequently only care about the address associated with a page table. The current ptdesc api forced callers to acquire a ptdesc to use them. Add more apis to abstract ptdescs away from architectures that don't need the descriptor. Add pgtable_alloc_addr() and pgtable_free_addr() to operate on the underlying addresses associated with page table descriptors, similar to get_free_pages() and free_pages(). Zero the allocations since theres no reason to want a page table with stale data. Have pgtable_alloc_addr() return a void pointer. This will simplify code for callers since they all want pointers. Suggested-by: Dave Hansen Signed-off-by: Vishal Moola (Oracle) --- include/linux/mm.h | 4 ++++ mm/memory.c | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/include/linux/mm.h b/include/linux/mm.h index f8a8fd47399c..9b6d3d910990 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -3419,6 +3419,10 @@ static inline void __pagetable_free(struct ptdesc *p= t) __free_pages(page, compound_order(page)); } =20 +void *pgtable_alloc_addr_noprof(gfp_t gfp, unsigned int order); +#define pgtable_alloc_addr(...) alloc_hooks(pgtable_alloc_addr_noprof(= __VA_ARGS__)) +void pgtable_free_addr(const void *addr); + #ifdef CONFIG_ASYNC_KERNEL_PGTABLE_FREE void pagetable_free_kernel(struct ptdesc *pt); #else diff --git a/mm/memory.c b/mm/memory.c index 1a26947ed8cd..b9653377d647 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -7452,6 +7452,40 @@ long copy_folio_from_user(struct folio *dst_folio, } #endif /* CONFIG_TRANSPARENT_HUGEPAGE || CONFIG_HUGETLBFS */ =20 +/** + * pgtable_alloc_addr - Allocate pagetables to get an address + * @gfp: GFP flags + * @order: desired pagetable order + * + * pgtable_alloc_addr is like pagetable_alloc. This is for callers who onl= y want a + * page table's address, not its ptdesc. + * + * Return: The address associated with the allocated page table, or 0 on + * failure. + */ +void *pgtable_alloc_addr_noprof(gfp_t gfp, unsigned int order) +{ + struct ptdesc *ptdesc =3D pagetable_alloc_noprof(gfp | __GFP_ZERO, order); + + if (!ptdesc) + return 0; + return ptdesc_address(ptdesc); +} + +/** + * pgtable_free_addr - Free pagetables by address + * @addr: The virtual address from pgtable_alloc() + * + * This function is for callers who have the address but no ptdesc. If you + * have the ptdesc, use pagetable_free() instead. + */ +void pgtable_free_addr(const void *addr) +{ + struct ptdesc *ptdesc =3D virt_to_ptdesc(addr); + + pagetable_free(ptdesc); +} + #if defined(CONFIG_SPLIT_PTE_PTLOCKS) && ALLOC_SPLIT_PTLOCKS =20 static struct kmem_cache *page_ptl_cachep; --=20 2.52.0 From nobody Thu Apr 2 00:13:52 2026 Received: from mail-dy1-f178.google.com (mail-dy1-f178.google.com [74.125.82.178]) (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 AF9443542E8 for ; Wed, 11 Feb 2026 19:52:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770839571; cv=none; b=Ty7/8AS/atLvZgWsjSl5C3jJNYisq1li3+sor0WP0lNSk2JfgOqb/s3kcePwbmXOrClQ3iFZZWdh4hXw2Ym/nQz8BPrfjYvh/339k0nutcXSHWTqWRgujcUt9IgEb2Ox0Nk3unrNXW4AOLsO4cnHogkfTpgAihRJqT0W6LqV2os= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770839571; c=relaxed/simple; bh=nVeW0ueUrqWLIhHny9+XkqtC27r3nI/xHCpqMYvjRZo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WgsyRO4HWmmPNOV0EVHXDT/zjTMp4y0SJTBuu7ADNrBJE02ZZFK5cyyIWWrHzYXkRbhnkcSPXKpCehR3wxKngdGAZBWUx/gn6EyNdVGEhq6LNKm70SYQOTKuSSkOZs2Tqclx+Yy4ZTqTrdS8DLAcREgnMc4doZl4jw0mefVl9Gg= 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=HT8khDNJ; arc=none smtp.client-ip=74.125.82.178 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="HT8khDNJ" Received: by mail-dy1-f178.google.com with SMTP id 5a478bee46e88-2baab3137bcso72244eec.0 for ; Wed, 11 Feb 2026 11:52:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770839568; x=1771444368; 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=4U9AcPwf6eZnSFLQLBgOYPeBTOa/PXxHfyOcSPxP5zo=; b=HT8khDNJEfhCzas+pk+xntHJgu4JpisNf7vELE6bZKQKfZJwMalc6mbwNQ6TXh35Ly yYWrHoy4Y7Ah0Tcftlia5TSdW54hhBaUUVDIgQ0VmmaedqGz3tw0A68ADOKLhjGKG0l9 VtgGTammTi/GyXaFuDJafFsPgUxzcporzqTXo7Q4zdg4Z2LVpGKkjEe5K791ETvwf4ii 7V2q6p6gshQgRIqRXKweczTVVYypxC5smNEqiN7BJyD5iSsHEhrB+lNyTYcvS5oKwV35 FDz0KUYVfefb7GtCpEtpHtxZsxw4RudWoyDxbSThS6M/lfbU3Bl++YuhzQa6BAeA+Ou8 kWww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770839568; x=1771444368; 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=4U9AcPwf6eZnSFLQLBgOYPeBTOa/PXxHfyOcSPxP5zo=; b=DNsavFQwUDzGFc9FGVKOic5uSPCTnbEayP0dZBbcKzMIQDuYKr9yRSgee3SPI+M3F0 A/g543DPwMLwqWhDq4uIB+8qn4rYdV+DUZGvDfr4mqmg4Ax9Lb4Ei+E+53mYS8PI1ejc LcR571434Y8AmsvZazA7ukWVny+Rbm0epGdjmgxjXL/p3CrY55Yg7Ym8EV0Wq6TyrpPr dVumwsUDoD9g5ktcrEEByhqAugJwBHz3infMAajSus+0mLAUaL6Yj3J9FIxE3ykhOvw1 p4A3uoiTwmjIdxvQshww+tek6gno7gT0PDPgWHBr+XRPdQ7iGliY2GxF0guqfUMDD/Pg WExA== X-Gm-Message-State: AOJu0YyDxIh6EIuwPfbKOT0AjjKCNiH1MXFOGL0KKDbU3ssL1NZpVQlx vHGuVD+I6kx6CDMRQs7dHO056T5PD5E09Y/IpokhFzgI2mrBcmvNZMBR9QNSbg== X-Gm-Gg: AZuq6aLzw5My5OTgU1z2npaU3dpnqsJalphA2Oz7oeN7aNV845niayPzxYLv/E4yXED AsLX00BXhKO2anqZfhfWR2bCc3l3++pHvJ+5TxwUyMx0csZruDH6d1nkWwKsImMUZuFWmg075tu L9wYj3xqwVj+f+MmOVGsj8xIQEPlYri4TczxVoSdr1iUh6OpKfo7ZQ4sATpxePGXbkeC6zZpasa JOokKdfHEwBFKN9+m5LhnhcHe2XWTRFQsxeJX5/r+df6yGNiYsYZcYm5JzXNw3ifh7ygYgiYWcu vkFkqhJbfjI7fKbIQbYUakRxUNLnAaUg/oAMP2tR39gettQgXnfkDN5fERLq2zrTHPkQF7pGUy+ v+tdlwG9kTMA9uo/1injV2fBVh4w6QiF44j3XbAHK4Rqu1V7wcPdvrnmzcq0bk79C1FE3W8GICr SOEGBzmS9jaqPN7vCLLg0i7iBA3Iy5iCBE5Lk2YLbfBAyV3KXG5RiFOtc= X-Received: by 2002:a05:7300:cc12:b0:2b8:711:ae6e with SMTP id 5a478bee46e88-2baa7fae41emr212685eec.1.1770839568020; Wed, 11 Feb 2026 11:52:48 -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 5a478bee46e88-2ba9dcfe6b7sm2426463eec.29.2026.02.11.11.52.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Feb 2026 11:52:47 -0800 (PST) From: "Vishal Moola (Oracle)" To: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, "Mike Rapoport (Microsoft)" Cc: akpm@linux-foundation.org, "Matthew Wilcox (Oracle)" , Dave Hansen , Andy Lutomirski , Peter Zijlstra , "Vishal Moola (Oracle)" Subject: [PATCH v5 2/4] x86/mm/pat: Convert pte code to use ptdescs Date: Wed, 11 Feb 2026 11:52:31 -0800 Message-ID: <20260211195233.368497-3-vishal.moola@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260211195233.368497-1-vishal.moola@gmail.com> References: <20260211195233.368497-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 pte allocation/free sites to use ptdescs. Also, rename *_pte_page() functions to *_pte(). 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 | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/arch/x86/mm/pat/set_memory.c b/arch/x86/mm/pat/set_memory.c index 6c6eb486f7a6..04eae65aedfc 100644 --- a/arch/x86/mm/pat/set_memory.c +++ b/arch/x86/mm/pat/set_memory.c @@ -1400,7 +1400,7 @@ static int collapse_large_pages(unsigned long addr, s= truct list_head *pgtables) return collapsed; } =20 -static bool try_to_free_pte_page(pte_t *pte) +static bool try_to_free_pte(pte_t *pte) { int i; =20 @@ -1408,7 +1408,7 @@ static bool try_to_free_pte_page(pte_t *pte) if (!pte_none(pte[i])) return false; =20 - free_page((unsigned long)pte); + pgtable_free_addr(pte); return true; } =20 @@ -1435,7 +1435,7 @@ static bool unmap_pte_range(pmd_t *pmd, unsigned long= start, unsigned long end) pte++; } =20 - if (try_to_free_pte_page((pte_t *)pmd_page_vaddr(*pmd))) { + if (try_to_free_pte((pte_t *)pmd_page_vaddr(*pmd))) { pmd_clear(pmd); return true; } @@ -1537,9 +1537,9 @@ static void unmap_pud_range(p4d_t *p4d, unsigned long= start, unsigned long end) */ } =20 -static int alloc_pte_page(pmd_t *pmd) +static int alloc_pte(pmd_t *pmd) { - pte_t *pte =3D (pte_t *)get_zeroed_page(GFP_KERNEL); + pte_t *pte =3D pgtable_alloc_addr(GFP_KERNEL, 0); if (!pte) return -1; =20 @@ -1600,7 +1600,7 @@ static long populate_pmd(struct cpa_data *cpa, */ pmd =3D pmd_offset(pud, start); if (pmd_none(*pmd)) - if (alloc_pte_page(pmd)) + if (alloc_pte(pmd)) return -1; =20 populate_pte(cpa, start, pre_end, cur_pages, pmd, pgprot); @@ -1641,7 +1641,7 @@ static long populate_pmd(struct cpa_data *cpa, if (start < end) { pmd =3D pmd_offset(pud, start); if (pmd_none(*pmd)) - if (alloc_pte_page(pmd)) + if (alloc_pte(pmd)) return -1; =20 populate_pte(cpa, start, end, num_pages - cur_pages, --=20 2.52.0 From nobody Thu Apr 2 00:13:52 2026 Received: from mail-dy1-f180.google.com (mail-dy1-f180.google.com [74.125.82.180]) (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 1AB5C352C44 for ; Wed, 11 Feb 2026 19:52:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770839572; cv=none; b=R9JIUUlCJqFscn4uHWi+r2XjmSY7M6d8uGxVfwdgHVk0K3Re/eghieSpN6HBjZZ3KJ2agr8mcVfTY5FHHCURak0szUzTF8ubesByqs0Iy+wrSRvuOEfZf3PSlGEzuPJ+y+sao0WNaJlEgJf6j38ZpLLCYJhplUEdi24xN2eeVoc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770839572; c=relaxed/simple; bh=+VX2hUqBGrEfE2KhFPil3DUMkOpx1u6yFFSMu6iY+aE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ln8MW/KTevaiSwkmfWICbp7jNQNMg00GJFxJhJ4YmsbM8mXf618w2dSLQA2UIa54V84eTq4fxHuWsKTwIqgslWPTYJ8zz2mtV145TBRFxitAqjikylHqAfllGeL2P11qjyjWp0wHER0b3OQyj3Ar1RBKbboMLzDPSvZBLEcagIg= 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=XT23eH/n; arc=none smtp.client-ip=74.125.82.180 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="XT23eH/n" Received: by mail-dy1-f180.google.com with SMTP id 5a478bee46e88-2baa098ffc6so782961eec.0 for ; Wed, 11 Feb 2026 11:52:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770839570; x=1771444370; 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=v/OVo450sy8C6bfsuVz6bqbboM9QbTUPBayqtGks/a0=; b=XT23eH/nCEIC8DqYJFqF73LrdUcVnX0wgA9lpIeTNJd7tkOVKfL803JoT/7OUlC6Kj RhS7K+Gy3df5Yc61gRcKAoM27PGT0mazxSvqnPVwtByqLH232DGGU82k26KXpSxzy/V6 9nWsP/iLgQAMkoI96oW6EVp0UPAsUqBViXC6+Ox9f7SRIODdT7rRoPtwwLubMGXhAOGa kMusX/EkP619F4kx91efuXTBgK4bjFfEhBoAe3ZUTHYNXOarvsiHX6JXC1UBRxOjJYC6 Woqpnq99184BPQpzcBaoiFBubdjnntUQ4zOsDY6ZX6U+bjiMYi4Fs+p6bCpvFGacIMzm Sj1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770839570; x=1771444370; 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=v/OVo450sy8C6bfsuVz6bqbboM9QbTUPBayqtGks/a0=; b=jrhia+an1uE7/Atv9uP94NxdGJYlW7b7Z3WQh1xplT/rYUPpDa0wuljDiJfvBkTI3I 8FHm70ZAFSiPSzCP5mj2RODst3i+Yz+EVVnCPeedcUImH1rWmdWr/qt6h8rgnPIpqK7i PPWK5PFJRhgS3pajabxHKDTk+oqtHnThNqk1bAABvAadytYktE1InIawM8idEoktBSsx CqoguOd0IImrj0v6Y4M3gYMN7olRRpuIQ+qYy1jGYYq1DUgIajMtUbJkTf/fqzDzHvAb u8a60EkUXRhDm4eZdvF1toq/Hb7HKJrqW1HbajcD/Bk70i0Tql4yWRj9ZNdW/jb4B15J MWig== X-Gm-Message-State: AOJu0Yw9+NYpgJz03UFhRfuUw6i8DeB4tKMOa2uvwzqJ3CG4QDNGJ2e8 eacTDedrQj/e1XQA/g22ci/1npACKZoQ6+0d5i180qW5SHuMUX3R/ik/TK5nQA== X-Gm-Gg: AZuq6aJQneWV+n5UP8+pm0i8vigkp/0ibQX9k8s39EHu3w0qecGfCi305UWaxe+5gIe P0I5PnCKLv6gbWJetoFea+mv5gTbc3+w0ICvurGqyVPOB6DhoauRJfAXRLhUZ9YGOJuOHsVAvav ZnGTobOhG4dTT+Y5/wV5ZhfA0FQbT4JnDm6TTqX8g5MITSVMa84OzIOBSu2Q5QPyeW8e9bIy2jc HDCc72jpfJINHv8Gii1x2Wf6cu7pckc/MYWf9bMD1F6Myh1b/ApNIEHERHGWGxsq4d4w7Yt/90i fujplwYxKr4pHIaVE9+KHcnxYt4VceQmFjwdANO7zOwg8UcAzPFHsrlEQABMGBWIVnaAbx/h7Tk 5MqscYVogICoVkRjdZErRzPj7kQwuYjjfPdHhVKonCsKnyq8l1rQu1M31gsXUnI+63QLxGH6jFM ziGECeULgU2eYUailfTZq1awhdAMEoY/iJGx8XF57vAEfiH4B72cZ8Wmw= X-Received: by 2002:a05:693c:3106:b0:2ba:81b2:7811 with SMTP id 5a478bee46e88-2baa809928fmr185399eec.40.1770839569589; Wed, 11 Feb 2026 11:52:49 -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 5a478bee46e88-2ba9dcfe6b7sm2426463eec.29.2026.02.11.11.52.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Feb 2026 11:52:49 -0800 (PST) From: "Vishal Moola (Oracle)" To: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, "Mike Rapoport (Microsoft)" Cc: akpm@linux-foundation.org, "Matthew Wilcox (Oracle)" , Dave Hansen , Andy Lutomirski , Peter Zijlstra , "Vishal Moola (Oracle)" Subject: [PATCH v5 3/4] x86/mm/pat: Convert pmd code to use ptdescs Date: Wed, 11 Feb 2026 11:52:32 -0800 Message-ID: <20260211195233.368497-4-vishal.moola@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260211195233.368497-1-vishal.moola@gmail.com> References: <20260211195233.368497-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. Allocate ptdescs in popoulate_pgd() as well since those allocations may later be freed by try_to_free_pmd_page(). 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 04eae65aedfc..9d6681443e54 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 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 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 pgtable_alloc_addr(GFP_KERNEL, 0); if (!pud) return -1; =20 --=20 2.52.0 From nobody Thu Apr 2 00:13:52 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 B3D53632 for ; Wed, 11 Feb 2026 20:00:34 +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=1770840035; cv=none; b=NAmrFP6PDfZhT/Qo7dgLINt+mK/nphuwNNMRlVijzVwmFiZoe2nUD/Mp1Rso0mX2K/5mx02xAqFGxnwi6gBk8Abth6iox43m2tXw6aRBJUWp+ggfpqcgwVnOZQrkum3Wq+WApX8okehlNUBYaBuu4cRmx8v8DDhpXz7B29vKo3w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770840035; c=relaxed/simple; bh=d1pFElJ17Ib38KivBl93BreLLqobq4g7aeWF9/qA7N4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Ic2GnjTu5zq2YJx1ZDnqVPUMK5MldumIq89QTbZzcOdKCe3CkVForNzChGJg960BEu5Sr25Lr/y9tAXBbco9yuQL76fyScGhHhrRGH4cQ5ealU61+OscpfA9Xn5aRlgSD3O9mafw9DP0rBPrhceyKxyyNj/0KVax3wT6WZ64dDE= 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=LOzS7XzW; 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="LOzS7XzW" Received: by mail-oa1-f44.google.com with SMTP id 586e51a60fabf-4086661715cso5405880fac.2 for ; Wed, 11 Feb 2026 12:00:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770840033; x=1771444833; 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=Ga0aGdYXFgX1ter7TBdhMViz8gXJdTbwK+zBh1REc8s=; b=LOzS7XzW/XDUkP5z8cZx5I0+3fSJuU7Zzov+GVRs9r80ibkRL1yRb3NSjXc3k3GZOO kICUflPzWS5ojIWIic6SF4tNIwYSl1UcEZxpRBATGmTn1PUzhHFlEfhuHtMtJEIuZiGt pxxSIqZMGigZjY/2aeRz2QMKqBB94tu6+A+UIiGc3Noz20lAJTSALavSnSMT7V46XXSK t9YcqX7sNdPQMrlGyo/jIa++S4jUvtwHKZMT56J1Y1B3xzxlrDg93ovkbGJ4UJBpdWV0 7vsx8/3wM2oJePSXFDRe5n/wxFtidhhuwDGpkVGUYJLIo04asBzSsFDbebp2szEHyTQJ e7GQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770840033; x=1771444833; 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=Ga0aGdYXFgX1ter7TBdhMViz8gXJdTbwK+zBh1REc8s=; b=S6dxcRqai4fBqdLmenzXA8fdE3pNOWbxVqgHq8f/eMJe5BVU7R/p0va0g3Twp/qSka NWV3n66GC4ZTvlN4LY7oJWFrU1ouAw44LJivIaMydE9HDdV9e5blSSnL5t+XR1xSRUad 09LNiyhJFJ68q4ORv2//kn31E8tvAuD8qzQXHLh35HNIm63tUeB3ugf/Di9lpbZshxF+ FAvaFjE24hwro9nyjgsdiVxUJwjN7YowooNAXZrzVe+fTuhJOBZXCxwE6xQ8va9yTNmb uXtrX3i3v6REj1zx1vBikwS4lDcHm/lSO+hz5WFyN0crKNKl2Hhf1xoqku0Ykd7mWFbd nPxA== X-Gm-Message-State: AOJu0YwTe/p98LOwyLg5AK2r3tzlyoGzDPpCb9JlC4jwOgW7egvGikKt 3gIFpwws9CYaqAnBut3rgz2VXHuKlJ2LRTmInACUhtWSGa4AtdVDc2g3DyzHgg== X-Gm-Gg: AZuq6aIMTkwWmP1koGcuNM+ihwuFfdilhNDRZmNfvJlnbBJC9wwb1pBSTWoN8o7n5B9 4KhuStWc30RkS0o3DnhRk/BlSk2t09n3jgWodxJksb0zoPn97J6UE40sY6K2N5NGRrQhDiH0XgP fhZA3UzTfEQ5RyUs/tgRdPvzsP6RVgxNdHyXF4NRhQWbUNauFTa/1lPYOA5GxPKEHeB+t5BYgzP GgcxBvnoiTvpP9cYA7Afjp/RE4Cl5vt9fkDHjPyZmJ/s44iVaDbfv/5Asa8oMjM0Ph9Sejr/5DM Iu+K88EoulhqiBb2LdOFiBQX6K0WkbxGHhhPi3d008zcG02MXvnzAjtecLGkhuJY+ve9ZWtJlTp 8VE3F7OkFZcWRtaq1353uqcEvikprTTJyVEs+5CCRgKxa5EM7jPGix/4SyRZD5LKlIy9QPnOJI7 2pn6otVuZ1V5h2WO9xaQlRQfKg0r69TTuRWE4hTs2c9aAurxFqC8Dpaqg= X-Received: by 2002:a05:7300:7b92:b0:2ba:9b30:37f3 with SMTP id 5a478bee46e88-2baa7f7e7f5mr213179eec.6.1770839571412; Wed, 11 Feb 2026 11:52:51 -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 5a478bee46e88-2ba9dcfe6b7sm2426463eec.29.2026.02.11.11.52.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Feb 2026 11:52:50 -0800 (PST) From: "Vishal Moola (Oracle)" To: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, "Mike Rapoport (Microsoft)" Cc: akpm@linux-foundation.org, "Matthew Wilcox (Oracle)" , Dave Hansen , Andy Lutomirski , Peter Zijlstra , "Vishal Moola (Oracle)" Subject: [PATCH v5 4/4] x86/mm/pat: Convert split_large_page() to use ptdescs Date: Wed, 11 Feb 2026 11:52:33 -0800 Message-ID: <20260211195233.368497-5-vishal.moola@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260211195233.368497-1-vishal.moola@gmail.com> References: <20260211195233.368497-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" In order to separately allocate ptdescs from pages, we need all allocation and free sites to use the appropriate functions. split_large_page() allocates a page to be used as a page table. This should be allocating a ptdesc, so convert it. Signed-off-by: Vishal Moola (Oracle) Acked-by: Mike Rapoport (Microsoft) --- arch/x86/mm/pat/set_memory.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/arch/x86/mm/pat/set_memory.c b/arch/x86/mm/pat/set_memory.c index 9d6681443e54..dfaec7b16ac4 100644 --- a/arch/x86/mm/pat/set_memory.c +++ b/arch/x86/mm/pat/set_memory.c @@ -1119,9 +1119,10 @@ static void split_set_pte(struct cpa_data *cpa, pte_= t *pte, unsigned long pfn, =20 static int __split_large_page(struct cpa_data *cpa, pte_t *kpte, unsigned long addres= s, - struct page *base) + struct ptdesc *ptdesc) { unsigned long lpaddr, lpinc, ref_pfn, pfn, pfninc =3D 1; + struct page *base =3D ptdesc_page(ptdesc); pte_t *pbase =3D (pte_t *)page_address(base); unsigned int i, level; pgprot_t ref_prot; @@ -1226,18 +1227,18 @@ __split_large_page(struct cpa_data *cpa, pte_t *kpt= e, unsigned long address, static int split_large_page(struct cpa_data *cpa, pte_t *kpte, unsigned long address) { - struct page *base; + struct ptdesc *ptdesc; =20 if (!debug_pagealloc_enabled()) spin_unlock(&cpa_lock); - base =3D alloc_pages(GFP_KERNEL, 0); + ptdesc =3D pagetable_alloc(GFP_KERNEL, 0); if (!debug_pagealloc_enabled()) spin_lock(&cpa_lock); - if (!base) + if (!ptdesc) return -ENOMEM; =20 - if (__split_large_page(cpa, kpte, address, base)) - __free_page(base); + if (__split_large_page(cpa, kpte, address, ptdesc)) + pagetable_free(ptdesc); =20 return 0; } --=20 2.52.0