From nobody Mon Jan 26 07:40:54 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=quarantine dis=none) header.from=antgroup.com ARC-Seal: i=1; a=rsa-sha256; t=1769076432; cv=none; d=zohomail.com; s=zohoarc; b=EkgrxMBliAWO1XkYe8Utr8nehaA7nMba+yxQslOOqreuGWhcT5jnEB6rN07JBRVdosL6MjPZcoYsRAtkll23VJDQl0BHU26zVo8YzLhSt9H+mYRg761wSHpNx7v3IaNeLJ0xZtiis5Ihh6U0xD6zyXjBXAPhUGmdfN62ltfDwkY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769076432; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=+IzdvJQKHxyyb3zk/1TUPey9oqBuebDgXOHFwXWkTQw=; b=dD9b0zDZ0TK5zHgn2S6a0bJFAMfYdsHbywOwxfmWk1UjWu8PyfHSiRMmrF4QolJiw0dIWPBNrSv+ywbaqkwGdq4+MIMV/dFwY/fRMbpDtssWrXdbNwkTf1sI61XWfvFgcsB09dKxfMTWImFMRUnmZNKxiF3lIo6T/5D7rD9SzKY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1769076431661177.18250861604974; Thu, 22 Jan 2026 02:07:11 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.1210695.1522318 (Exim 4.92) (envelope-from ) id 1viraQ-0007a0-2f; Thu, 22 Jan 2026 10:06:46 +0000 Received: by outflank-mailman (output) from mailman id 1210695.1522318; Thu, 22 Jan 2026 10:06:46 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1viraP-0007Zt-Uw; Thu, 22 Jan 2026 10:06:45 +0000 Received: by outflank-mailman (input) for mailman id 1210695; Thu, 22 Jan 2026 10:06:44 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1viraN-0007Zl-G2 for xen-devel@lists.xenproject.org; Thu, 22 Jan 2026 10:06:44 +0000 Received: from out28-101.mail.aliyun.com (out28-101.mail.aliyun.com [115.124.28.101]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 08fbd6d5-f77a-11f0-b15e-2bf370ae4941; Thu, 22 Jan 2026 11:06:38 +0100 (CET) Received: from localhost(mailfrom:houwenlong.hwl@antgroup.com fp:SMTPD_---.gCtgiB8_1769076393 cluster:ay29) by smtp.aliyun-inc.com; Thu, 22 Jan 2026 18:06:33 +0800 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 08fbd6d5-f77a-11f0-b15e-2bf370ae4941 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=antgroup.com; s=default; t=1769076395; h=From:To:Subject:Date:Message-Id:MIME-Version; bh=+IzdvJQKHxyyb3zk/1TUPey9oqBuebDgXOHFwXWkTQw=; b=FeFS8h/I4CvU0AfgwAdQHTmGyoeo0sRtDLr2bvnUbJQtmgBFIxTSbRwJFWidAcqUX1xmR4zICSx2LvwlpZ/uCNHd4Om6ZlJ/O93bHEbSa6SeQUgXcWmwViAxIjTkTsKZsT0QotHD9dZ67gdjzAeFyxZnlQkhICGh7OIA/BCUtyM= From: Hou Wenlong To: linux-kernel@vger.kernel.org Cc: Hou Wenlong , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, "H. Peter Anvin" , Juergen Gross , Boris Ostrovsky , Ard Biesheuvel , Thomas Huth , Kiryl Shutsemau , Uros Bizjak , Brian Gerst , xen-devel@lists.xenproject.org Subject: [PATCH] x86/xen: Build identity mapping page tables dynamically for XENPV Date: Thu, 22 Jan 2026 18:06:14 +0800 Message-Id: <453981eae7e8158307f971d1632d5023adbe03c3.1769074722.git.houwenlong.hwl@antgroup.com> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @antgroup.com) X-ZM-MESSAGEID: 1769076434985158500 Content-Type: text/plain; charset="utf-8" After commit 47ffe0578aee ("x86/pvh: Add 64bit relocation page tables"), the PVH entry uses a new set of page tables instead of the preconstructed page tables in head64.S. Since those preconstructed page tables are only used in XENPV now and XENPV does not actually need the preconstructed identity page tables directly, they can be filled in xen_setup_kernel_pagetable(). Therefore, build the identity mapping page table dynamically to remove the preconstructed page tables and make the code cleaner. Signed-off-by: Hou Wenlong Acked-by: Borislav Petkov (AMD) --- arch/x86/include/asm/pgtable_64.h | 2 -- arch/x86/kernel/head_64.S | 28 ---------------------------- arch/x86/xen/mmu_pv.c | 9 +++++++++ 3 files changed, 9 insertions(+), 30 deletions(-) diff --git a/arch/x86/include/asm/pgtable_64.h b/arch/x86/include/asm/pgtab= le_64.h index f06e5d6a2747..ce45882ccd07 100644 --- a/arch/x86/include/asm/pgtable_64.h +++ b/arch/x86/include/asm/pgtable_64.h @@ -19,10 +19,8 @@ extern p4d_t level4_kernel_pgt[512]; extern p4d_t level4_ident_pgt[512]; extern pud_t level3_kernel_pgt[512]; -extern pud_t level3_ident_pgt[512]; extern pmd_t level2_kernel_pgt[512]; extern pmd_t level2_fixmap_pgt[512]; -extern pmd_t level2_ident_pgt[512]; extern pte_t level1_fixmap_pgt[512 * FIXMAP_PMD_NUM]; extern pgd_t init_top_pgt[]; =20 diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S index 21816b48537c..85d4a5094f6b 100644 --- a/arch/x86/kernel/head_64.S +++ b/arch/x86/kernel/head_64.S @@ -616,38 +616,10 @@ SYM_DATA(early_recursion_flag, .long 0) =20 .data =20 -#if defined(CONFIG_XEN_PV) || defined(CONFIG_PVH) -SYM_DATA_START_PTI_ALIGNED(init_top_pgt) - .quad level3_ident_pgt - __START_KERNEL_map + _KERNPG_TABLE_NOENC - .org init_top_pgt + L4_PAGE_OFFSET*8, 0 - .quad level3_ident_pgt - __START_KERNEL_map + _KERNPG_TABLE_NOENC - .org init_top_pgt + L4_START_KERNEL*8, 0 - /* (2^48-(2*1024*1024*1024))/(2^39) =3D 511 */ - .quad level3_kernel_pgt - __START_KERNEL_map + _PAGE_TABLE_NOENC - .fill PTI_USER_PGD_FILL,8,0 -SYM_DATA_END(init_top_pgt) - -SYM_DATA_START_PAGE_ALIGNED(level3_ident_pgt) - .quad level2_ident_pgt - __START_KERNEL_map + _KERNPG_TABLE_NOENC - .fill 511, 8, 0 -SYM_DATA_END(level3_ident_pgt) -SYM_DATA_START_PAGE_ALIGNED(level2_ident_pgt) - /* - * Since I easily can, map the first 1G. - * Don't set NX because code runs from these pages. - * - * Note: This sets _PAGE_GLOBAL despite whether - * the CPU supports it or it is enabled. But, - * the CPU should ignore the bit. - */ - PMDS(0, __PAGE_KERNEL_IDENT_LARGE_EXEC, PTRS_PER_PMD) -SYM_DATA_END(level2_ident_pgt) -#else SYM_DATA_START_PTI_ALIGNED(init_top_pgt) .fill 512,8,0 .fill PTI_USER_PGD_FILL,8,0 SYM_DATA_END(init_top_pgt) -#endif =20 SYM_DATA_START_PAGE_ALIGNED(level4_kernel_pgt) .fill 511,8,0 diff --git a/arch/x86/xen/mmu_pv.c b/arch/x86/xen/mmu_pv.c index 9fa00c4a8858..7d77c233002b 100644 --- a/arch/x86/xen/mmu_pv.c +++ b/arch/x86/xen/mmu_pv.c @@ -105,6 +105,9 @@ pte_t xen_make_pte_init(pteval_t pte); static pud_t level3_user_vsyscall[PTRS_PER_PUD] __page_aligned_bss; #endif =20 +static pud_t level3_ident_pgt[PTRS_PER_PUD] __page_aligned_bss; +static pmd_t level2_ident_pgt[PTRS_PER_PMD] __page_aligned_bss; + /* * Protects atomic reservation decrease/increase against concurrent increa= ses. * Also protects non-atomic updates of current_pages and balloon lists. @@ -1773,6 +1776,12 @@ void __init xen_setup_kernel_pagetable(pgd_t *pgd, u= nsigned long max_pfn) /* Zap identity mapping */ init_top_pgt[0] =3D __pgd(0); =20 + init_top_pgt[pgd_index(__PAGE_OFFSET_BASE_L4)].pgd =3D + __pa_symbol(level3_ident_pgt) + _KERNPG_TABLE_NOENC; + init_top_pgt[pgd_index(__START_KERNEL_map)].pgd =3D + __pa_symbol(level3_kernel_pgt) + _PAGE_TABLE_NOENC; + level3_ident_pgt[0].pud =3D __pa_symbol(level2_ident_pgt) + _KERNPG_TABLE= _NOENC; + /* Pre-constructed entries are in pfn, so convert to mfn */ /* L4[273] -> level3_ident_pgt */ /* L4[511] -> level3_kernel_pgt */ --=20 2.31.1