From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8EDA9D1A427 for ; Sat, 12 Oct 2024 02:40:34 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E16636B009F; Fri, 11 Oct 2024 22:40:33 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id DC48B6B00A0; Fri, 11 Oct 2024 22:40:33 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C65A26B00A1; Fri, 11 Oct 2024 22:40:33 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id A4C526B009F for ; Fri, 11 Oct 2024 22:40:33 -0400 (EDT) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id BF4BFA1999 for ; Sat, 12 Oct 2024 02:40:23 +0000 (UTC) X-FDA: 82663396662.30.2884CE2 Received: from mail.loongson.cn (mail.loongson.cn [114.242.206.163]) by imf19.hostedemail.com (Postfix) with ESMTP id 4F9381A0005 for ; Sat, 12 Oct 2024 02:40:25 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf19.hostedemail.com: domain of maobibo@loongson.cn designates 114.242.206.163 as permitted sender) smtp.mailfrom=maobibo@loongson.cn ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1728700678; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=H7mMbSfNJgTzy1idiofQAFjU5REtPnuTZBXvPYcneog=; b=sTrf8HzTzEyTOkjmNFJZY4cXmCXCjVczTImQUltKRJzpeUmyD3phSs6dglMqvofRkUe1dC RN2ML8d/vFVWxEQW9gOwpmySWeevhGe8uH2MplqOhW2rGtDAOWyFTfyqNT6KSJmQT2Gwvz HpmwDMjeVsYXxgJjY+2heezXDp7+92A= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1728700678; a=rsa-sha256; cv=none; b=zIYZ7Pf1c3ROS/vlNKU73HYax0VYbi6J8uDzfy+gwD9EITa+85ZNrVrRP8FVTIRapCd598 9qDBvupmFqLPpRIQJ9ieTrIBHAc0YRdBrJJuC++LnVBn84qvwxY3EA/j475vNTzpFwul4t T3zv0mcpf5llv7v2fWNeMeBLBfnf8es= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf19.hostedemail.com: domain of maobibo@loongson.cn designates 114.242.206.163 as permitted sender) smtp.mailfrom=maobibo@loongson.cn Received: from loongson.cn (unknown [10.20.42.62]) by gateway (Coremail) with SMTP id _____8DxNOmY4QlnP2gUAA--.29901S3; Sat, 12 Oct 2024 10:40:25 +0800 (CST) Received: from [10.20.42.62] (unknown [10.20.42.62]) by front1 (Coremail) with SMTP id qMiowMBxXuSV4QlnS54kAA--.51895S3; Sat, 12 Oct 2024 10:40:23 +0800 (CST) Subject: Re: [PATCH 1/4] LoongArch: Set pte entry with PAGE_GLOBAL for kernel space To: Huacai Chen Cc: Andrey Ryabinin , Andrew Morton , David Hildenbrand , Barry Song , loongarch@lists.linux.dev, linux-kernel@vger.kernel.org, kasan-dev@googlegroups.com, linux-mm@kvack.org References: <20241010035048.3422527-1-maobibo@loongson.cn> <20241010035048.3422527-2-maobibo@loongson.cn> From: maobibo Message-ID: <56c7ae02-1426-b503-9afa-5a87a2b4bd21@loongson.cn> Date: Sat, 12 Oct 2024 10:40:03 +0800 User-Agent: Mozilla/5.0 (X11; Linux loongarch64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit X-CM-TRANSID:qMiowMBxXuSV4QlnS54kAA--.51895S3 X-CM-SenderInfo: xpdruxter6z05rqj20fqof0/ X-Coremail-Antispam: 1Uk129KBj93XoW3XryDZrW3Cr4kCr48Kw1UCFX_yoW7ZrWDpr 9rAFn5WF48Wr97Aa97tF1qgr15Xws3KF42gF1akFWrAFnF9r1kWr1kG3sxuFy8XayUCayF 9r1rKa43XF4UtagCm3ZEXasCq-sJn29KB7ZKAUJUUUUf529EdanIXcx71UUUUU7KY7ZEXa sCq-sGcSsGvfJ3Ic02F40EFcxC0VAKzVAqx4xG6I80ebIjqfuFe4nvWSU5nxnvy29KBjDU 0xBIdaVrnRJUUUPFb4IE77IF4wAFF20E14v26r1j6r4UM7CY07I20VC2zVCF04k26cxKx2 IYs7xG6rWj6s0DM7CIcVAFz4kK6r1Y6r17M28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48v e4kI8wA2z4x0Y4vE2Ix0cI8IcVAFwI0_Gr0_Xr1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI 0_Gr0_Cr1l84ACjcxK6I8E87Iv67AKxVWxJVW8Jr1l84ACjcxK6I8E87Iv6xkF7I0E14v2 6r4j6r4UJwAaw2AFwI0_JF0_Jw1le2I262IYc4CY6c8Ij28IcVAaY2xG8wAqjxCEc2xF0c Ia020Ex4CE44I27wAqx4xG64xvF2IEw4CE5I8CrVC2j2WlYx0E2Ix0cI8IcVAFwI0_JF0_ Jw1lYx0Ex4A2jsIE14v26r1j6r4UMcvjeVCFs4IE7xkEbVWUJVW8JwACjcxG0xvEwIxGrw CYjI0SjxkI62AI1cAE67vIY487MxkF7I0En4kS14v26r126r1DMxAIw28IcxkI7VAKI48J MxC20s026xCaFVCjc4AY6r1j6r4UMxCIbckI1I0E14v26r126r1DMI8I3I0E5I8CrVAFwI 0_Jr0_Jr4lx2IqxVCjr7xvwVAFwI0_JrI_JrWlx4CE17CEb7AF67AKxVWUtVW8ZwCIc40Y 0x0EwIxGrwCI42IY6xIIjxv20xvE14v26r1I6r4UMIIF0xvE2Ix0cI8IcVCY1x0267AKxV WUJVW8JwCI42IY6xAIw20EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Jr0_Gr1l IxAIcVC2z280aVCY1x0267AKxVWUJVW8JbIYCTnIWIevJa73UjIFyTuYvjxUcbAwUUUUU X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 4F9381A0005 X-Stat-Signature: 13mhendozoc8oeoq6ra8iub4s4bey15t X-Rspam-User: X-HE-Tag: 1728700825-402195 X-HE-Meta: U2FsdGVkX1/uaMv4QQusv6aRYDeTkYasASl0pUtHrUgjkLhWRCfxHIUtiTVrpFlhN//jO1wzKwzAeWys1ybgguFipEqmpoLfg1psECJWh+Jp2IRqiXWTU5IjCmtUtcjmCyD10F63Dj839wymHKpxDBTaDfrnrvKxjH7tDsH0RTph/GIPBuFg0ZpfJj4U+boHLQRBaG6yTrCBJY4Ied3r3D/PkBuiMfxDtsuiIxw9CzrLo2vCQm0rnGYbynhwXeJ7Jy/75HDUgq16mEm1Sg3N3QgUhS0u2slCJqGUAJ4OZtz0LD/a7D8BOtFx1J/8pi/lvxz4FaKh0PVsB25hv3dMk1nXi38Z2HsbxvNufJA1psAW28A7rWhnY7lZUeRkQCoIkpMUusOcI8zwFvAKch+SLmiFG5wTZwk0DF2rBcfhC6M+/kd8eLbbjBSpqrU1+eAgl+YNFxqACpp6qJx+mNoPlH30t7wRDPHgxKMxR5XptzHVShSDbnM8gYhIdYvvS722fOFRZz4tNkcbpk0M4/rrZA+CzKo7IIddUE3rnxdD8mBdNXxrxcu2zNBAs4HRWj41MH6HcYmPKXRn2dtN0Zeok4nZweHlYo1UAevyHFBlAB4mjf8SEJhaLz+qwX2lS8AUer9XpRu1KV8mV3Q0KIRKjjjKRoek2xt3gVmPOfsArn9oGNCdnHZYTzPKrWnp595x9G8Nyn9vVQLPxqK9f1z9NsWF5xPDGEV7ML30B+77SRZRy8YUqIBxpLmayCmuWbcJKmAgYheVhRrIxuJRBzJV63LOlL9EDoQJ8GnKgGgH9ySn0piACR/Wd0pH8HmTRcA1tlrSdOWIiIVUbbZe6u2s6177yVSB7HQ2JfkBrWAzK+NuLUVeJCBHYhcxEl+w/Yolpv4Wf6WnH3DLvNgqJ0Tx239aELA53TSvzvwx/BLGDJeC2BzogVF6mCG2u9CYyWexYWasSNlxX5mta+LnRzk 8ul5yrZ+ 0cK6XXbAn8m7D9siwZuCR6LkSGB4AiWxOYHTVzckS2PKLmS98giu7U4ADE4sM6aY5NesUWY8H8/aNOS3u+lsl/gnkoXdiV/Z5bPyj9ozSXTt+d0QNOq0PNyyWhLNWFj9L+GpDC1FdT8WRSyyz9ngx67J0WwjrjdJmCLjZfb5EKfr6jZLvt73bdg2KufvMhLH0ybOC X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Huacai, On 2024/10/12 上午10:15, Huacai Chen wrote: > Hi, Bibo, > > On Thu, Oct 10, 2024 at 11:50 AM Bibo Mao wrote: >> >> Unlike general architectures, there are two pages for one TLB entry >> on LoongArch system. For kernel space, it requires both two pte >> entries with PAGE_GLOBAL set, else HW treats it as non-global tlb, >> there will be potential problems if tlb entry for kernel space is >> not global. Such as fail to flush kernel tlb with function >> local_flush_tlb_kernel_range() which only flush tlb with global bit. >> >> Here function kernel_pte_init() is added, it can be used to init >> pte table when it is created, so the default inital pte is >> PAGE_GLOBAL rather than zero at beginning. > I think kernel_pte_init() is also needed in zero_pmd_populate() in > mm/kasan/init.c. And moreover, the second patch should be squashed in yes, it is needed in zero_pmd_populate() in mm/kasan/init.c, will add it in next version. > this one because they should be as a whole. Though the second one > touches the common code, I can merge it with mm maintainer's acked-by. Sure, will merge it with the second one into one patch. Regards Bibo Mao > > > Huacai > >> >> Kernel space areas includes fixmap, percpu, vmalloc and kasan areas >> set default pte entry with PAGE_GLOBAL set. >> >> Signed-off-by: Bibo Mao >> --- >> arch/loongarch/include/asm/pgalloc.h | 13 +++++++++++++ >> arch/loongarch/include/asm/pgtable.h | 1 + >> arch/loongarch/mm/init.c | 4 +++- >> arch/loongarch/mm/kasan_init.c | 4 +++- >> arch/loongarch/mm/pgtable.c | 22 ++++++++++++++++++++++ >> 5 files changed, 42 insertions(+), 2 deletions(-) >> >> diff --git a/arch/loongarch/include/asm/pgalloc.h b/arch/loongarch/include/asm/pgalloc.h >> index 4e2d6b7ca2ee..b2698c03dc2c 100644 >> --- a/arch/loongarch/include/asm/pgalloc.h >> +++ b/arch/loongarch/include/asm/pgalloc.h >> @@ -10,8 +10,21 @@ >> >> #define __HAVE_ARCH_PMD_ALLOC_ONE >> #define __HAVE_ARCH_PUD_ALLOC_ONE >> +#define __HAVE_ARCH_PTE_ALLOC_ONE_KERNEL >> #include >> >> +static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm) >> +{ >> + pte_t *pte; >> + >> + pte = (pte_t *) __get_free_page(GFP_KERNEL); >> + if (!pte) >> + return NULL; >> + >> + kernel_pte_init(pte); >> + return pte; >> +} >> + >> static inline void pmd_populate_kernel(struct mm_struct *mm, >> pmd_t *pmd, pte_t *pte) >> { >> diff --git a/arch/loongarch/include/asm/pgtable.h b/arch/loongarch/include/asm/pgtable.h >> index 9965f52ef65b..22e3a8f96213 100644 >> --- a/arch/loongarch/include/asm/pgtable.h >> +++ b/arch/loongarch/include/asm/pgtable.h >> @@ -269,6 +269,7 @@ extern void set_pmd_at(struct mm_struct *mm, unsigned long addr, pmd_t *pmdp, pm >> extern void pgd_init(void *addr); >> extern void pud_init(void *addr); >> extern void pmd_init(void *addr); >> +extern void kernel_pte_init(void *addr); >> >> /* >> * Encode/decode swap entries and swap PTEs. Swap PTEs are all PTEs that >> diff --git a/arch/loongarch/mm/init.c b/arch/loongarch/mm/init.c >> index 8a87a482c8f4..9f26e933a8a3 100644 >> --- a/arch/loongarch/mm/init.c >> +++ b/arch/loongarch/mm/init.c >> @@ -198,9 +198,11 @@ pte_t * __init populate_kernel_pte(unsigned long addr) >> if (!pmd_present(pmdp_get(pmd))) { >> pte_t *pte; >> >> - pte = memblock_alloc(PAGE_SIZE, PAGE_SIZE); >> + pte = memblock_alloc_raw(PAGE_SIZE, PAGE_SIZE); >> if (!pte) >> panic("%s: Failed to allocate memory\n", __func__); >> + >> + kernel_pte_init(pte); >> pmd_populate_kernel(&init_mm, pmd, pte); >> } >> >> diff --git a/arch/loongarch/mm/kasan_init.c b/arch/loongarch/mm/kasan_init.c >> index 427d6b1aec09..34988573b0d5 100644 >> --- a/arch/loongarch/mm/kasan_init.c >> +++ b/arch/loongarch/mm/kasan_init.c >> @@ -152,6 +152,8 @@ static void __init kasan_pte_populate(pmd_t *pmdp, unsigned long addr, >> phys_addr_t page_phys = early ? >> __pa_symbol(kasan_early_shadow_page) >> : kasan_alloc_zeroed_page(node); >> + if (!early) >> + kernel_pte_init(__va(page_phys)); >> next = addr + PAGE_SIZE; >> set_pte(ptep, pfn_pte(__phys_to_pfn(page_phys), PAGE_KERNEL)); >> } while (ptep++, addr = next, addr != end && __pte_none(early, ptep_get(ptep))); >> @@ -287,7 +289,7 @@ void __init kasan_init(void) >> set_pte(&kasan_early_shadow_pte[i], >> pfn_pte(__phys_to_pfn(__pa_symbol(kasan_early_shadow_page)), PAGE_KERNEL_RO)); >> >> - memset(kasan_early_shadow_page, 0, PAGE_SIZE); >> + kernel_pte_init(kasan_early_shadow_page); >> csr_write64(__pa_symbol(swapper_pg_dir), LOONGARCH_CSR_PGDH); >> local_flush_tlb_all(); >> >> diff --git a/arch/loongarch/mm/pgtable.c b/arch/loongarch/mm/pgtable.c >> index eb6a29b491a7..228ffc1db0a3 100644 >> --- a/arch/loongarch/mm/pgtable.c >> +++ b/arch/loongarch/mm/pgtable.c >> @@ -38,6 +38,28 @@ pgd_t *pgd_alloc(struct mm_struct *mm) >> } >> EXPORT_SYMBOL_GPL(pgd_alloc); >> >> +void kernel_pte_init(void *addr) >> +{ >> + unsigned long *p, *end; >> + unsigned long entry; >> + >> + entry = (unsigned long)_PAGE_GLOBAL; >> + p = (unsigned long *)addr; >> + end = p + PTRS_PER_PTE; >> + >> + do { >> + p[0] = entry; >> + p[1] = entry; >> + p[2] = entry; >> + p[3] = entry; >> + p[4] = entry; >> + p += 8; >> + p[-3] = entry; >> + p[-2] = entry; >> + p[-1] = entry; >> + } while (p != end); >> +} >> + >> void pgd_init(void *addr) >> { >> unsigned long *p, *end; >> -- >> 2.39.3 >>