From patchwork Mon May 15 08:19:32 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hou Wenlong X-Patchwork-Id: 93964 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp6757126vqo; Mon, 15 May 2023 01:28:05 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ73psyUaLVQTSosoAFBwJ8AeO40KQX1J0/ke/F+/7o64dXaNNMT1+5NqmXnBM4DdpW8+kkF X-Received: by 2002:a05:6a20:3d8a:b0:106:4e09:151e with SMTP id s10-20020a056a203d8a00b001064e09151emr1908560pzi.39.1684139285338; Mon, 15 May 2023 01:28:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1684139285; cv=none; d=google.com; s=arc-20160816; b=JQ8rwAJjPZf7z3IY94UPSVSAYudx1vWQ5chTDMa69W97WcB8cwZhXxrLOlVX3ZX+WC Su8Kr8LsXFgY/Czqb1btWyMjqC4lFaTDZG6rmqYFHcvbSqPJhJYGQKvO4GcDQ/WZ9vjh Q9P5UYWahMK2z5bEp3gxfIWKTmuuDwTF4jYvEFRtjevgVl1jTP3ul53AffRPSKJfQ8cp KgGRhwTV4u2AzENgFlxoNX8itTzuGGfa48fUndrcNddvQuog4E6zPlvVzj2SyRkASLHM fAhANXX0dIC96YdjiEzjRtXPuz3CW/vcMCait5lBtiFoy3cc+nVY/Ki07GqFMcz1paGj /RDg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=Rv5Ygl+1TBewkKWmVJ8ki/Ej4aRAwO5AI6tLSo+vRkA=; b=QhKpx6TJo8mc1xOwtgW1XI6pguqcKwIWzRl9SKpjKTl8t2Ml8CpjUGuXb3SxMhDUYb J0sDvpYFXSwL4lxCI5SLITFMZ3/ODld0z5HOJ2fMrC8nnhTJxpbliTy3Va/dl+6V9nxZ shfUbP/YUBJ5im54y9DtxyJcTp7Bz5H8bmh4CoEK/aefoKNhzS7OkgvcmKfI4pZ7L67m DOGCwjQ9aHk7jZyuEa/FB/GT0lAsZwZm8Ek3sfiw/PXLCAdSr6OkkBSJ7MK5beLUJmZ/ HGY0XQeDNgaAX+Atq/o64JVyZSB/U7iinZsImRuCdzMWKBp1Z2mgm2LSXfAV7WrB7grL +fEw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=antgroup.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id x3-20020a63b343000000b0051f0bd40bb0si15834000pgt.779.2023.05.15.01.27.52; Mon, 15 May 2023 01:28:05 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=antgroup.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232629AbjEOIYB (ORCPT + 99 others); Mon, 15 May 2023 04:24:01 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46312 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229535AbjEOIV7 (ORCPT ); Mon, 15 May 2023 04:21:59 -0400 Received: from out0-217.mail.aliyun.com (out0-217.mail.aliyun.com [140.205.0.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3668610D4 for ; Mon, 15 May 2023 01:20:23 -0700 (PDT) X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R201e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=ay29a033018047187;MF=houwenlong.hwl@antgroup.com;NM=1;PH=DS;RN=21;SR=0;TI=SMTPD_---.T2DpdRe_1684138815; Received: from localhost(mailfrom:houwenlong.hwl@antgroup.com fp:SMTPD_---.T2DpdRe_1684138815) by smtp.aliyun-inc.com; Mon, 15 May 2023 16:20:16 +0800 From: "Hou Wenlong" To: linux-kernel@vger.kernel.org Cc: "Lai Jiangshan" , "Hou Wenlong" , "Andy Lutomirski" , "Thomas Gleixner" , "Ingo Molnar" , "Borislav Petkov" , "Dave Hansen" , , "H. Peter Anvin" , "Juergen Gross" , " =?utf-8?q?Srivatsa_S=2E_Bhat_=28VMware=29?= " , "Alexey Makhalov" , "VMware PV-Drivers Reviewers" , "Boris Ostrovsky" , "Suren Baghdasaryan" , "Andrew Morton" , " =?utf-8?q?Mike_Rapoport_=28I?= =?utf-8?q?BM=29?= " , "Kirill A. Shutemov" , , Subject: [PATCH RFC 1/4] x86/vsyscall: Don't use set_fixmap() to map vsyscall page Date: Mon, 15 May 2023 16:19:32 +0800 Message-Id: <7453c8b3b3b273e45c2541d09b950ffc4a97189d.1684137557.git.houwenlong.hwl@antgroup.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: References: MIME-Version: 1.0 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE,UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1765948035096625115?= X-GMAIL-MSGID: =?utf-8?q?1765948035096625115?= In order to unify FIXADDR_TOP for x86 and allow the fixmap area to be movable, the vsyscall page should be mapped individually. However, for XENPV guests, the vsyscall page needs to be mapped into the user pagetable as well. Therefore, a new PVMMU operation is introduced to assist in mapping the vsyscall page. Suggested-by: Lai Jiangshan Signed-off-by: Hou Wenlong --- arch/x86/entry/vsyscall/vsyscall_64.c | 3 +-- arch/x86/include/asm/paravirt.h | 7 +++++++ arch/x86/include/asm/paravirt_types.h | 4 ++++ arch/x86/include/asm/vsyscall.h | 13 +++++++++++++ arch/x86/kernel/paravirt.c | 4 ++++ arch/x86/xen/mmu_pv.c | 20 ++++++++++++++------ 6 files changed, 43 insertions(+), 8 deletions(-) diff --git a/arch/x86/entry/vsyscall/vsyscall_64.c b/arch/x86/entry/vsyscall/vsyscall_64.c index e0ca8120aea8..4373460ebbde 100644 --- a/arch/x86/entry/vsyscall/vsyscall_64.c +++ b/arch/x86/entry/vsyscall/vsyscall_64.c @@ -385,8 +385,7 @@ void __init map_vsyscall(void) * page. */ if (vsyscall_mode == EMULATE) { - __set_fixmap(VSYSCALL_PAGE, physaddr_vsyscall, - PAGE_KERNEL_VVAR); + __set_vsyscall_page(physaddr_vsyscall, PAGE_KERNEL_VVAR); set_vsyscall_pgtable_user_bits(swapper_pg_dir); } diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravirt.h index b49778664d2b..c9543d383df0 100644 --- a/arch/x86/include/asm/paravirt.h +++ b/arch/x86/include/asm/paravirt.h @@ -576,6 +576,13 @@ static inline void __set_fixmap(unsigned /* enum fixed_addresses */ idx, { pv_ops.mmu.set_fixmap(idx, phys, flags); } + +#ifdef CONFIG_X86_VSYSCALL_EMULATION +static inline void __set_vsyscall_page(phys_addr_t phys, pgprot_t flags) +{ + pv_ops.mmu.set_vsyscall_page(phys, flags); +} +#endif #endif #if defined(CONFIG_SMP) && defined(CONFIG_PARAVIRT_SPINLOCKS) diff --git a/arch/x86/include/asm/paravirt_types.h b/arch/x86/include/asm/paravirt_types.h index 4acbcddddc29..2dc9397e064d 100644 --- a/arch/x86/include/asm/paravirt_types.h +++ b/arch/x86/include/asm/paravirt_types.h @@ -224,6 +224,10 @@ struct pv_mmu_ops { an mfn. We can tell which is which from the index. */ void (*set_fixmap)(unsigned /* enum fixed_addresses */ idx, phys_addr_t phys, pgprot_t flags); + +#ifdef CONFIG_X86_VSYSCALL_EMULATION + void (*set_vsyscall_page)(phys_addr_t phys, pgprot_t flags); +#endif #endif } __no_randomize_layout; diff --git a/arch/x86/include/asm/vsyscall.h b/arch/x86/include/asm/vsyscall.h index ab60a71a8dcb..73691fc60924 100644 --- a/arch/x86/include/asm/vsyscall.h +++ b/arch/x86/include/asm/vsyscall.h @@ -2,6 +2,7 @@ #ifndef _ASM_X86_VSYSCALL_H #define _ASM_X86_VSYSCALL_H +#include #include #include @@ -15,6 +16,18 @@ extern void set_vsyscall_pgtable_user_bits(pgd_t *root); */ extern bool emulate_vsyscall(unsigned long error_code, struct pt_regs *regs, unsigned long address); +static inline void native_set_vsyscall_page(phys_addr_t phys, pgprot_t flags) +{ + pgprot_val(flags) &= __default_kernel_pte_mask; + set_pte_vaddr(VSYSCALL_ADDR, pfn_pte(phys >> PAGE_SHIFT, flags)); +} + +#ifndef CONFIG_PARAVIRT_XXL +#define __set_vsyscall_page native_set_vsyscall_page +#else +#include +#endif + #else static inline void map_vsyscall(void) {} static inline bool emulate_vsyscall(unsigned long error_code, diff --git a/arch/x86/kernel/paravirt.c b/arch/x86/kernel/paravirt.c index ac10b46c5832..13c81402f377 100644 --- a/arch/x86/kernel/paravirt.c +++ b/arch/x86/kernel/paravirt.c @@ -33,6 +33,7 @@ #include #include #include +#include /* * nop stub, which must not clobber anything *including the stack* to @@ -357,6 +358,9 @@ struct paravirt_patch_template pv_ops = { }, .mmu.set_fixmap = native_set_fixmap, +#ifdef CONFIG_X86_VSYSCALL_EMULATION + .mmu.set_vsyscall_page = native_set_vsyscall_page, +#endif #endif /* CONFIG_PARAVIRT_XXL */ #if defined(CONFIG_PARAVIRT_SPINLOCKS) diff --git a/arch/x86/xen/mmu_pv.c b/arch/x86/xen/mmu_pv.c index b3b8d289b9ab..c42c60faa3bb 100644 --- a/arch/x86/xen/mmu_pv.c +++ b/arch/x86/xen/mmu_pv.c @@ -59,6 +59,7 @@ #include #include +#include #include #include #include @@ -2020,9 +2021,6 @@ static void xen_set_fixmap(unsigned idx, phys_addr_t phys, pgprot_t prot) switch (idx) { case FIX_BTMAP_END ... FIX_BTMAP_BEGIN: -#ifdef CONFIG_X86_VSYSCALL_EMULATION - case VSYSCALL_PAGE: -#endif /* All local page mappings */ pte = pfn_pte(phys, prot); break; @@ -2058,14 +2056,21 @@ static void xen_set_fixmap(unsigned idx, phys_addr_t phys, pgprot_t prot) vaddr = __fix_to_virt(idx); if (HYPERVISOR_update_va_mapping(vaddr, pte, UVMF_INVLPG)) BUG(); +} #ifdef CONFIG_X86_VSYSCALL_EMULATION +static void xen_set_vsyscall_page(phys_addr_t phys, pgprot_t prot) +{ + pte_t pte = pfn_pte(phys >> PAGE_SHIFT, prot); + + if (HYPERVISOR_update_va_mapping(VSYSCALL_ADDR, pte, UVMF_INVLPG)) + BUG(); + /* Replicate changes to map the vsyscall page into the user pagetable vsyscall mapping. */ - if (idx == VSYSCALL_PAGE) - set_pte_vaddr_pud(level3_user_vsyscall, vaddr, pte); -#endif + set_pte_vaddr_pud(level3_user_vsyscall, VSYSCALL_ADDR, pte); } +#endif static void __init xen_post_allocator_init(void) { @@ -2156,6 +2161,9 @@ static const typeof(pv_ops) xen_mmu_ops __initconst = { }, .set_fixmap = xen_set_fixmap, +#ifdef CONFIG_X86_VSYSCALL_EMULATION + .set_vsyscall_page = xen_set_vsyscall_page, +#endif }, }; From patchwork Mon May 15 08:19:33 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hou Wenlong X-Patchwork-Id: 93965 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp6757178vqo; Mon, 15 May 2023 01:28:12 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4s+5e/WUUz+my8tD60WM9FUkxnC13rCTB16IpMLDnNHNgi2bE6GxpSDV+PXmqvndi9JqKf X-Received: by 2002:a05:6a21:7891:b0:101:73a9:1680 with SMTP id bf17-20020a056a21789100b0010173a91680mr27350282pzc.8.1684139291897; Mon, 15 May 2023 01:28:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1684139291; cv=none; d=google.com; s=arc-20160816; b=STHc8tP7ZDnpXWD9nsu5RVQMuwNpwYDCtLAGCRt60jX8/eQyM4JwcNufU9Jn3Bg0vG Jo4TZCggooS+w9hiomHTlDwOHpGku5QT1js/EeYwJ37KGIc0Q0Y0rW3ZAWzYVymF4qG2 HMTTQkK4Lkewku0EJhVmDhFKvbkxmPurxzDGRFEbBRXp/SPr2DshS2RhHgIHkvhVPvCR Vekdd5ctcDn7okKbLYu43Hc1SOLbTeqazrv6WRCzxVnQGjr65LO9piaRe6dlWqgi2Vxj yyCzUaHV6XR2HiZrpNMHV0COdLx4ID86WbWlMfdZZxbcFGiNPpURBQ2T5yCV9W7l/WND 8dKg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=SYB5nrbpX20wJmmtE8Nyqwb9hyizIIOdW60TWaSoJxs=; b=A9X/BtnjdYre4RR395xiCn2s9dMIiiZwcatQON/F1Hptd1g5o8cmCwyZe/130rFwes wuikmGF1ZH5H2Xml4EJQ1O371/yNsRpVada5dbp5kNcjEzTC07eyFv/sUEtJoQNrztQA N/i1sWaqVBleIDQevde9mi0ghrvGrz8HT+XLlcyO49Ht7qPmtwVFfke4vAD1yqE9Xj/J YQNE/KsgTMpw/w8UpFPlsSgxzsSllxHJAOssGcw2drAcHXa5cglWL8s4jkc8cLCA0Rb/ HiS7D0FpAun6zSkD9Z3iyzgpIanQuIvCH7rVViUVbk5oEh65A2JNG+/+FpbPY9JRdpSS BWeA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=antgroup.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id d129-20020a633687000000b00525030ba5acsi16048966pga.279.2023.05.15.01.27.59; Mon, 15 May 2023 01:28:11 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=antgroup.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235181AbjEOIYQ (ORCPT + 99 others); Mon, 15 May 2023 04:24:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46332 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231829AbjEOIWL (ORCPT ); Mon, 15 May 2023 04:22:11 -0400 Received: from out0-222.mail.aliyun.com (out0-222.mail.aliyun.com [140.205.0.222]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4AC2310D7 for ; Mon, 15 May 2023 01:20:28 -0700 (PDT) X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R621e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=ay29a033018047194;MF=houwenlong.hwl@antgroup.com;NM=1;PH=DS;RN=12;SR=0;TI=SMTPD_---.T2G7nz7_1684138818; Received: from localhost(mailfrom:houwenlong.hwl@antgroup.com fp:SMTPD_---.T2G7nz7_1684138818) by smtp.aliyun-inc.com; Mon, 15 May 2023 16:20:19 +0800 From: "Hou Wenlong" To: linux-kernel@vger.kernel.org Cc: "Lai Jiangshan" , "Hou Wenlong" , "Juergen Gross" , "Boris Ostrovsky" , "Thomas Gleixner" , "Ingo Molnar" , "Borislav Petkov" , "Dave Hansen" , , "H. Peter Anvin" , Subject: [PATCH RFC 2/4] x86/xen: Pin up to VSYSCALL_ADDR when vsyscall page is out of fixmap area Date: Mon, 15 May 2023 16:19:33 +0800 Message-Id: X-Mailer: git-send-email 2.31.1 In-Reply-To: References: MIME-Version: 1.0 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE,UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1765948042082699947?= X-GMAIL-MSGID: =?utf-8?q?1765948042082699947?= If the vsyscall page is moved out of the fixmap area, then FIXADDR_TOP would be below the vsyscall page. Therefore, it should be pinned up to VSYSCALL_ADDR if vsyscall is enabled. Suggested-by: Lai Jiangshan Signed-off-by: Hou Wenlong --- arch/x86/xen/mmu_pv.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/arch/x86/xen/mmu_pv.c b/arch/x86/xen/mmu_pv.c index c42c60faa3bb..c1f298c31e64 100644 --- a/arch/x86/xen/mmu_pv.c +++ b/arch/x86/xen/mmu_pv.c @@ -587,6 +587,12 @@ static void xen_p4d_walk(struct mm_struct *mm, p4d_t *p4d, xen_pud_walk(mm, pud, func, last, limit); } +#ifdef CONFIG_X86_VSYSCALL_EMULATION +#define __KERNEL_MAP_TOP (VSYSCALL_ADDR + PAGE_SIZE) +#else +#define __KERNEL_MAP_TOP FIXADDR_TOP +#endif + /* * (Yet another) pagetable walker. This one is intended for pinning a * pagetable. This means that it walks a pagetable and calls the @@ -594,7 +600,7 @@ static void xen_p4d_walk(struct mm_struct *mm, p4d_t *p4d, * at every level. It walks the entire pagetable, but it only bothers * pinning pte pages which are below limit. In the normal case this * will be STACK_TOP_MAX, but at boot we need to pin up to - * FIXADDR_TOP. + * __KERNEL_MAP_TOP. * * We must skip the Xen hole in the middle of the address space, just after * the big x86-64 virtual hole. @@ -609,7 +615,7 @@ static void __xen_pgd_walk(struct mm_struct *mm, pgd_t *pgd, /* The limit is the last byte to be touched */ limit--; - BUG_ON(limit >= FIXADDR_TOP); + BUG_ON(limit >= __KERNEL_MAP_TOP); /* * 64-bit has a great big hole in the middle of the address @@ -797,7 +803,7 @@ static void __init xen_after_bootmem(void) #ifdef CONFIG_X86_VSYSCALL_EMULATION SetPagePinned(virt_to_page(level3_user_vsyscall)); #endif - xen_pgd_walk(&init_mm, xen_mark_pinned, FIXADDR_TOP); + xen_pgd_walk(&init_mm, xen_mark_pinned, __KERNEL_MAP_TOP); } static void xen_unpin_page(struct mm_struct *mm, struct page *page, From patchwork Mon May 15 08:19:35 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hou Wenlong X-Patchwork-Id: 93966 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp6757620vqo; Mon, 15 May 2023 01:29:14 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4MYZWufK4nFrtjB7FZld1YCSfpXRdpLPiwa60bXFlYp78beiJm3NKNtbvJFNQWpm1KbV7r X-Received: by 2002:a05:6a21:9999:b0:100:c8ed:c207 with SMTP id ve25-20020a056a21999900b00100c8edc207mr33700961pzb.39.1684139354330; Mon, 15 May 2023 01:29:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1684139354; cv=none; d=google.com; s=arc-20160816; b=qnFkHhB1+q6QbbgbAFrLSvY+2WsGiT2Xb3QRv9Yg/w10w25S24i56oJzjd2r+L2xVZ NXYE3lkFf/hQjO+S6UyPsevbzQFC+Y9aHcjQ2x6v3XOYoNyN/HWLSHbfMJ/yi1RL1kWu xsJ6/u/M02ycv218SlODQsZTPlavceSenz8luifDO2MvyajjOKlLp00KaRHy7xcWPy+S NvxQ1z1JwbPh6tpRzvzUXF53Zc2osbwwcNQ1RYu3w4dT4ZYfyLF/W1vXDPPqZ+YI7aAy r76xATYphup7Bl/KmedUAjLVc4SHqiopBUgIA8gZPiX11rybptv/dWTDaFYTw6vSIlVA 5qzA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=6PVGhGivxNd4qZf9Wkrq0ai63TIfLjvRp/YNKU8eGVU=; b=vecRQHMz363KCkMjQH6W4T5h7upBXHrH8/I2aRR//w/qzgOMOF+ifymlRdVDdRUdkE 7DdwIdx2oVfyfrxKN7bOHKF+10F4pHdhgTxGWuxF76oYkMjuLU480/gBi8/zko+6S4W0 gqYWr+buS4clYZJhhmx695duIzEMaH9hf1vdHY6sdMcigW3QH53KqqcJCvFz75rnJYcX NsyNSJe12/zDjwdIo++9BCXR7lEoLQm2RG2ZkHP9nfCo75smXj/y6HZjS71VYcamLLAV t8L/Q0+npY/GeUUhIKdTztps/gWy8oeCgAL2SBv5oBoiv9mxI0EE35g7JKgUW+kiGqkk JSNQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=antgroup.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id x3-20020a63b343000000b0051f0bd40bb0si15834000pgt.779.2023.05.15.01.29.02; Mon, 15 May 2023 01:29:14 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=antgroup.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236330AbjEOIYW (ORCPT + 99 others); Mon, 15 May 2023 04:24:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46344 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229820AbjEOIWP (ORCPT ); Mon, 15 May 2023 04:22:15 -0400 Received: from out0-217.mail.aliyun.com (out0-217.mail.aliyun.com [140.205.0.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E005A10E7 for ; Mon, 15 May 2023 01:20:39 -0700 (PDT) X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R131e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=ay29a033018047192;MF=houwenlong.hwl@antgroup.com;NM=1;PH=DS;RN=16;SR=0;TI=SMTPD_---.T2DpdaM_1684138832; Received: from localhost(mailfrom:houwenlong.hwl@antgroup.com fp:SMTPD_---.T2DpdaM_1684138832) by smtp.aliyun-inc.com; Mon, 15 May 2023 16:20:33 +0800 From: "Hou Wenlong" To: linux-kernel@vger.kernel.org Cc: "Lai Jiangshan" , "Hou Wenlong" , "Thomas Gleixner" , "Ingo Molnar" , "Borislav Petkov" , "Dave Hansen" , , "H. Peter Anvin" , "Andy Lutomirski" , "Peter Zijlstra" , "Juergen Gross" , "Anshuman Khandual" , "Mike Rapoport" , "Josh Poimboeuf" , "Pasha Tatashin" Subject: [PATCH RFC 4/4] x86/fixmap: Unify FIXADDR_TOP Date: Mon, 15 May 2023 16:19:35 +0800 Message-Id: <681844dc69a3b746e92a685b706595bff7613481.1684137557.git.houwenlong.hwl@antgroup.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: References: MIME-Version: 1.0 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE,UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1765948032976526777?= X-GMAIL-MSGID: =?utf-8?q?1765948107676058104?= Since FIXADDR_TOP is unrelated to the vsyscall page now, it can be declared as a variable for x86_64, thereby unifying it for x86. Suggested-by: Lai Jiangshan Signed-off-by: Hou Wenlong --- arch/x86/include/asm/fixmap.h | 13 ------------- arch/x86/kernel/head64.c | 1 - arch/x86/mm/dump_pagetables.c | 3 ++- arch/x86/mm/ioremap.c | 5 ++--- arch/x86/mm/pgtable.c | 13 +++++++++++++ arch/x86/mm/pgtable_32.c | 3 --- 6 files changed, 17 insertions(+), 21 deletions(-) diff --git a/arch/x86/include/asm/fixmap.h b/arch/x86/include/asm/fixmap.h index eeb152ad9682..9433109e4853 100644 --- a/arch/x86/include/asm/fixmap.h +++ b/arch/x86/include/asm/fixmap.h @@ -40,21 +40,8 @@ #include #endif -/* - * We can't declare FIXADDR_TOP as variable for x86_64 because vsyscall - * uses fixmaps that relies on FIXADDR_TOP for proper address calculation. - * Because of this, FIXADDR_TOP x86 integration was left as later work. - */ -#ifdef CONFIG_X86_32 -/* - * Leave one empty page between vmalloc'ed areas and - * the start of the fixmap. - */ extern unsigned long __FIXADDR_TOP; #define FIXADDR_TOP ((unsigned long)__FIXADDR_TOP) -#else -#define FIXADDR_TOP (0xffffffffff600000UL - PAGE_SIZE) -#endif /* * Here we define all the compile-time 'special' virtual diff --git a/arch/x86/kernel/head64.c b/arch/x86/kernel/head64.c index 49f7629b17f7..34fc86e81872 100644 --- a/arch/x86/kernel/head64.c +++ b/arch/x86/kernel/head64.c @@ -485,7 +485,6 @@ asmlinkage __visible void __init __noreturn x86_64_start_kernel(char * real_mode BUILD_BUG_ON(!(MODULES_VADDR > __START_KERNEL)); MAYBE_BUILD_BUG_ON(!(((MODULES_END - 1) & PGDIR_MASK) == (__START_KERNEL & PGDIR_MASK))); - BUILD_BUG_ON(__fix_to_virt(__end_of_fixed_addresses) <= MODULES_END); cr4_init_shadow(); diff --git a/arch/x86/mm/dump_pagetables.c b/arch/x86/mm/dump_pagetables.c index e1b599ecbbc2..df1a708a038a 100644 --- a/arch/x86/mm/dump_pagetables.c +++ b/arch/x86/mm/dump_pagetables.c @@ -104,7 +104,7 @@ static struct addr_marker address_markers[] = { [HIGH_KERNEL_NR] = { __START_KERNEL_map, "High Kernel Mapping" }, [MODULES_VADDR_NR] = { MODULES_VADDR, "Modules" }, [MODULES_END_NR] = { MODULES_END, "End Modules" }, - [FIXADDR_START_NR] = { FIXADDR_START, "Fixmap Area" }, + [FIXADDR_START_NR] = { 0UL, "Fixmap Area" }, [END_OF_SPACE_NR] = { -1, NULL } }; @@ -453,6 +453,7 @@ static int __init pt_dump_init(void) address_markers[KASAN_SHADOW_START_NR].start_address = KASAN_SHADOW_START; address_markers[KASAN_SHADOW_END_NR].start_address = KASAN_SHADOW_END; #endif + address_markers[FIXADDR_START_NR].start_address = FIXADDR_START; #endif #ifdef CONFIG_X86_32 address_markers[VMALLOC_START_NR].start_address = VMALLOC_START; diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c index aa7d279321ea..44f9c6781c15 100644 --- a/arch/x86/mm/ioremap.c +++ b/arch/x86/mm/ioremap.c @@ -879,10 +879,9 @@ void __init early_ioremap_init(void) pmd_t *pmd; #ifdef CONFIG_X86_64 - BUILD_BUG_ON((fix_to_virt(0) + PAGE_SIZE) & ((1 << PMD_SHIFT) - 1)); -#else - WARN_ON((fix_to_virt(0) + PAGE_SIZE) & ((1 << PMD_SHIFT) - 1)); + BUG_ON(__fix_to_virt(__end_of_fixed_addresses) <= MODULES_END); #endif + WARN_ON((fix_to_virt(0) + PAGE_SIZE) & ((1 << PMD_SHIFT) - 1)); early_ioremap_setup(); diff --git a/arch/x86/mm/pgtable.c b/arch/x86/mm/pgtable.c index e4f499eb0f29..2d73db9c7cbc 100644 --- a/arch/x86/mm/pgtable.c +++ b/arch/x86/mm/pgtable.c @@ -627,6 +627,19 @@ pmd_t pmdp_invalidate_ad(struct vm_area_struct *vma, unsigned long address, } #endif +#ifdef CONFIG_X86_32 +/* + * Leave one empty page between vmalloc'ed areas and + * the start of the fixmap. + */ +#define __FIXADDR_TOP_BASE 0xfffff000 +#else +#define __FIXADDR_TOP_BASE (0xffffffffff600000UL - PAGE_SIZE) +#endif + +unsigned long __FIXADDR_TOP = __FIXADDR_TOP_BASE; +EXPORT_SYMBOL(__FIXADDR_TOP); + /** * reserve_top_address - reserves a hole in the top of kernel address space * @reserve - size of hole to reserve diff --git a/arch/x86/mm/pgtable_32.c b/arch/x86/mm/pgtable_32.c index c234634e26ba..2b9a00976fee 100644 --- a/arch/x86/mm/pgtable_32.c +++ b/arch/x86/mm/pgtable_32.c @@ -65,9 +65,6 @@ void set_pte_vaddr(unsigned long vaddr, pte_t pteval) flush_tlb_one_kernel(vaddr); } -unsigned long __FIXADDR_TOP = 0xfffff000; -EXPORT_SYMBOL(__FIXADDR_TOP); - /* * vmalloc=size forces the vmalloc area to be exactly 'size' * bytes. This can be used to increase (or decrease) the