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 6D703D1A42C for ; Sat, 12 Oct 2024 02:16:10 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id F152B6B00A8; Fri, 11 Oct 2024 22:16:09 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id EC3B56B00A9; Fri, 11 Oct 2024 22:16:09 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D641B6B00AB; Fri, 11 Oct 2024 22:16:09 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id B81C96B00A8 for ; Fri, 11 Oct 2024 22:16:09 -0400 (EDT) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id E74E6C19DC for ; Sat, 12 Oct 2024 02:16:03 +0000 (UTC) X-FDA: 82663335216.18.9B4D6F2 Received: from nyc.source.kernel.org (nyc.source.kernel.org [147.75.193.91]) by imf08.hostedemail.com (Postfix) with ESMTP id 19749160005 for ; Sat, 12 Oct 2024 02:16:04 +0000 (UTC) Authentication-Results: imf08.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=iu0MTPvZ; spf=pass (imf08.hostedemail.com: domain of chenhuacai@kernel.org designates 147.75.193.91 as permitted sender) smtp.mailfrom=chenhuacai@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1728699229; 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:dkim-signature; bh=5BqJR1DRisdo6nbRH5DioK+PKwu4x6E53fp43hUwjRM=; b=3WsUuskizely3zoWfGzCEsaI89fjkF1qb+jvnZaivR6kxgp/5sZs6G5WHogWivmz+b6Cs0 +DG9qY3+fCTYtES7zammUHv/cXbLytg/TULnBb8HtRpGAtel8CL8/4+CguOOznrmgLvePC Flo9yYsN2RHoql5OpZSew4BUQ+uG6oo= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1728699229; a=rsa-sha256; cv=none; b=aCeWsvHHX8QZIn7YHjLSwPd0M4cRy6DePbAUDNcYM1qNZr9eZCorEP1iDPHoHgs8/JUMie HWhV+zAzh5+HhXBswXdUKGTkA5+1KsAEYNqaO0qR8qKnB3SXnlEsFnFgc/FiBxTi4XfiBu XjNFGD31/DzFIvbtnr0daveK7LREL2s= ARC-Authentication-Results: i=1; imf08.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=iu0MTPvZ; spf=pass (imf08.hostedemail.com: domain of chenhuacai@kernel.org designates 147.75.193.91 as permitted sender) smtp.mailfrom=chenhuacai@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by nyc.source.kernel.org (Postfix) with ESMTP id ACA05A45373 for ; Sat, 12 Oct 2024 02:15:57 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 20969C4CECF for ; Sat, 12 Oct 2024 02:16:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1728699366; bh=ipLevwVho6xfPxzQepi7i+HFT0CrMqTtqbhSK3Ab2sI=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=iu0MTPvZfNsm2olrMaH7g7ncBPxOpgvKVWTUHa9ZaOsWhCaMRZPvmFvyxqE1ngrLT z3HyjRz8oXXB6Hncjyj96HSy3c47VHRx0gplYI2Kg2jawPkOl2/RPvt5+VSXjtr91i RfJhK4XO5nzd3wSrqfeOYg6H0j0pTyu+MVg0d9h/bpLcHDzkGauGPGOZJ1XbBDSqho mrgyEjUCd5hWLPBl88JywTqW24EuhDOi/Bqws+LiHecWXsXrPxdH/oSyloXTpEvPCc j4N6W4QfK8O1RlvtSRRDp191T++Kr8n6F+MOiZPVwKp+lqi0hkCjy4/dV1UJi0Qd0B 58y+hf0Uj5g+g== Received: by mail-ed1-f49.google.com with SMTP id 4fb4d7f45d1cf-5c9428152c0so2605887a12.1 for ; Fri, 11 Oct 2024 19:16:06 -0700 (PDT) X-Forwarded-Encrypted: i=1; AJvYcCW1ZmsYgJfBDxagwiFde7EfxCgwE4tvGqgh2aC0KO0xf0Tbb2JSBnavyqcIzI4SPvKM7eQpKMG7Zw==@kvack.org X-Gm-Message-State: AOJu0Yw/VnHxWOEI4hYRqLohVEAj1P9gitqUPkl3N07WFL2zFPdejqdp XFh8Qh1XOM3f9M1PXZ2va6SNauoRsycyIYjp7VbIbenZ8N7vkjfepZLe2JTIRHErRJ+IDW3LSkT P43ouOEfdCFCoaBYW0b21TkOG/WM= X-Google-Smtp-Source: AGHT+IFj/Gftu3mO/DwZxwaVooTnN2cbu/tWKknPFAqTcJHrOb/oJCsQc9HNnK+icjEcA28LkqkuHkNJsQl4A8usx9Q= X-Received: by 2002:a17:907:368d:b0:a99:5466:2556 with SMTP id a640c23a62f3a-a99b966b636mr417240566b.61.1728699364644; Fri, 11 Oct 2024 19:16:04 -0700 (PDT) MIME-Version: 1.0 References: <20241010035048.3422527-1-maobibo@loongson.cn> <20241010035048.3422527-2-maobibo@loongson.cn> In-Reply-To: <20241010035048.3422527-2-maobibo@loongson.cn> From: Huacai Chen Date: Sat, 12 Oct 2024 10:15:51 +0800 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH 1/4] LoongArch: Set pte entry with PAGE_GLOBAL for kernel space To: Bibo Mao 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 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: 19749160005 X-Stat-Signature: yufmekhy3xkmauhcmbydrjsz4akk7e5x X-Rspamd-Server: rspam09 X-Rspam-User: X-HE-Tag: 1728699364-94397 X-HE-Meta: U2FsdGVkX1949OETlaPLpUV8Q/e2zrXvN55avAuvHR9At3lel4eHxMeUnYtFcJ/CNwt+IrHvKM/HmlGJbXHVEYwjR+vO/xyQDY7z+VA0NIiT3Z7iDS02k5Fb59NggB4UEMmTz1aTZUd+jg2KitBoq+UwQqRm6Efi0RkK7wwMVtigQS1WRWPXbsbkvrK1erXQNscX6qtaW8u+1865zEY0JlcIAbkfKRPJ3X1tJOg2WjsWE1YdyO5MVnv6/qJtesYoEncxRX/rANA3/weiXacCPTa+T4bbzHypgREAfP+rQsZp3anUhZ0WisklOw6KM0iLb+UwP0jqqvugSTFrnDjQtWPeR2JNL4tFNElh6lmjJHRvPxZwgPucAmCZGa9cnukBZvtVItQAbnPU2RicDXnzIqGFAt7BTjE4KlmGFqyJeQoSYNoickrzGuDx3Bv5pzqxwi5b9Duwp+7MRMok5VRKTpZWcBSV9IN0ZkSRlZkIQhxuTGiB2zXd+U/GINl925GLHtAaZ4RPkXMaS2gwSArJLwG6SX0d3HIXv4VNGTPw0cG+i4Orwmrm41J2xMUWLvjBvHHw/d4Yv/Fr+qYf9aVMtR5bHfBeID19mVRruZo4LAy8nFihAgrxdr3SyTg4CqrtJ4bXkz65RcHZrKi0yOLGMfMdleO1vXfKIttJtKlkkUR8DHlUqoFboPmA4vmEqV5sLRWpN6u5AzlRMt6BpE1XiqaoCpklTJGZst4wP1RV+Y2jj2Ig8xepDWpdvZVpRQIhXZEb5Ynuxur62TdUfalgCWHKJGbTVlySlo/uYCBaqaVzCCxu4VKkINiIzeI5szlU8HcKxrM5bThbdH3SKN6E43H1CK8R/LeHsIgBTCSShFh6fiYbrRA2yXW5fxamRRm7GlqIbDLt5nDRYm1gc+4b+axm3h0l565YG/t8p2xrm1eg110YyoBbZzfYSp4bHDgyvDVnKZjOCVktoqmdIRo UKut7aRK +XbuUSPLKNQYkwl80Wnu4P55hgxek6XkYIPIv1UYi+4gviI25qU5Z7WUVhcfy8rrLqSt328xZnfpu8NPyBYUeCoRUlmcFHwZx9BVXmAIF0GREjmZNo05hZKxpCIbi5qHb5NQ61H02LpijPO30jjGIERA8wty83nFzBasonkqYSVi6Cnh6FWgFa7WBVU0wGdUuglocSwWhiMGiuKbiiPslJBvigkV5TTRHA6PYiQsfCgbdLN796zeW64WKlpbKq696P7v9jeo2VSvLfXc1MrKYqBMh5Zh8t7Dc89bUn2s7R7pMU88ytMoJae1My5Ev9h3hjXswUnAhvNEfpxTRU3MVjxHJEsciXoRNLIFufLwGaWJUrmCmAhQfQNinFFB47yBKuAsqg3oQaDkJypLMCiN5QKhVFg== 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: Hi, Bibo, On Thu, Oct 10, 2024 at 11:50=E2=80=AFAM Bibo Mao wro= te: > > 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 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. 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/includ= e/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 =3D (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/includ= e/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 add= r) > if (!pmd_present(pmdp_get(pmd))) { > pte_t *pte; > > - pte =3D memblock_alloc(PAGE_SIZE, PAGE_SIZE); > + pte =3D 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_ini= t.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, un= signed long addr, > phys_addr_t page_phys =3D early ? > __pa_symbol(kasan_early_shadow_pa= ge) > : kasan_alloc_zeroed_page(n= ode); > + if (!early) > + kernel_pte_init(__va(page_phys)); > next =3D addr + PAGE_SIZE; > set_pte(ptep, pfn_pte(__phys_to_pfn(page_phys), PAGE_KERN= EL)); > } while (ptep++, addr =3D next, addr !=3D 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_sha= dow_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 =3D (unsigned long)_PAGE_GLOBAL; > + p =3D (unsigned long *)addr; > + end =3D p + PTRS_PER_PTE; > + > + do { > + p[0] =3D entry; > + p[1] =3D entry; > + p[2] =3D entry; > + p[3] =3D entry; > + p[4] =3D entry; > + p +=3D 8; > + p[-3] =3D entry; > + p[-2] =3D entry; > + p[-1] =3D entry; > + } while (p !=3D end); > +} > + > void pgd_init(void *addr) > { > unsigned long *p, *end; > -- > 2.39.3 >