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 692C8C0015E for ; Wed, 19 Jul 2023 15:29:54 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D36ED28006F; Wed, 19 Jul 2023 11:29:53 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id CE73B28004C; Wed, 19 Jul 2023 11:29:53 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BD58B28006F; Wed, 19 Jul 2023 11:29:53 -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 AA6FF28004C for ; Wed, 19 Jul 2023 11:29:53 -0400 (EDT) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 7F51F1603E0 for ; Wed, 19 Jul 2023 15:29:53 +0000 (UTC) X-FDA: 81028746666.27.14B8B00 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf03.hostedemail.com (Postfix) with ESMTP id 659832001A for ; Wed, 19 Jul 2023 15:29:51 +0000 (UTC) Authentication-Results: imf03.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=aE57eKlq; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf03.hostedemail.com: domain of chenhuacai@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=chenhuacai@kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1689780591; 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=IdN7vdVOZg7Exr6pjGBZTBejDO8Y0wA5aiknBnRxQJk=; b=xbMYrAV49/cK75H6P9290/RHdSjwaMh9/Qgf/uxB+IGzK/GDgoD05VREgDZa7hYaIISVSd S9TEZozgeQKoKQkDxZ/uDQnU6g2ekdQzt044gaG5X32e3CrVV/yCISCPoLj9B47/1k8a7t VX2ZPFHyOeiXrCvq/+CW91EzrxsZTTM= ARC-Authentication-Results: i=1; imf03.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=aE57eKlq; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf03.hostedemail.com: domain of chenhuacai@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=chenhuacai@kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1689780591; a=rsa-sha256; cv=none; b=mTZG4lb8/Zzq1ev8YsjqNXAN3IxX9QoA/NDcrp6nCyBSbUh1TV5+dtD4a6dR0BxssWqmHy D2G/hm2y5T/m0W+fMPtlR8nzr1G5VgqKd8H/LouhMoIMena+odZtAfPLSo4Z6FRCxZISfn /a0Neyd1afm74vGJozAa5Max/Sj43fY= Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 605706173E for ; Wed, 19 Jul 2023 15:29:50 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6C30CC43391 for ; Wed, 19 Jul 2023 15:29:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1689780589; bh=x6U9CSmNrPjA7rIrDR5bXjiuMMRbQ+HjhasvEpxyg7Y=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=aE57eKlqXXbKctGl0N7MNpi72dHU2BFMZc+qOX423QK0AzkJrVx5e3XoynkofeOJ4 69C+5QqC/ocokt871i1fXSH3Khz9wz0+yHHVdOHUd4rIiAy8hgkFqj4E9LC0QfioBp OrJwBRHnsfC/N6qv7LBKHOAmPxTuuyA6O4W0yooRtv9Wo9WXdTHFD2Ue1xY4tg37yG zmHoDO7KJrovGPDPBuAtG13EMNQbkLtCbHHXeBegK1Mb+OKKufw412W/bR9pmPD0Hd 3eRIJ7N6Va8y/cQ+9IJ66pa9al6hph+9ijh3S4p2r3PxlSTYjAwQk/IS7vVooMc1vD hMWcTrJz6SVXg== Received: by mail-ed1-f51.google.com with SMTP id 4fb4d7f45d1cf-51e48e1f6d1so9609595a12.1 for ; Wed, 19 Jul 2023 08:29:49 -0700 (PDT) X-Gm-Message-State: ABy/qLZiswxRobjY0hSjRF0WZcmM4kA9CrU+iWeiqvUp6AsQ8jvtYWoq dJBF51Cms3iLvixTw2HLG9CtzNm+gkaq3l0HdPI= X-Google-Smtp-Source: APBJJlE8T2g2MbXd3kHXTq5+8RLXye8bzYsszr03WXB8tQzWPPD/Yc6GiA/Q1wvEonoqPwmQuIkQexYoJ0l2sWHnbl0= X-Received: by 2002:a05:6402:608:b0:51e:1a51:d414 with SMTP id n8-20020a056402060800b0051e1a51d414mr2367053edv.32.1689780587597; Wed, 19 Jul 2023 08:29:47 -0700 (PDT) MIME-Version: 1.0 References: <20230719082732.2189747-1-lienze@kylinos.cn> <20230719082732.2189747-2-lienze@kylinos.cn> In-Reply-To: <20230719082732.2189747-2-lienze@kylinos.cn> From: Huacai Chen Date: Wed, 19 Jul 2023 23:29:37 +0800 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH 1/4] LoongArch: mm: Add page table mapped mode support To: Enze Li Cc: kernel@xen0n.name, loongarch@lists.linux.dev, glider@google.com, elver@google.com, akpm@linux-foundation.org, kasan-dev@googlegroups.com, linux-mm@kvack.org, zhangqing@loongson.cn, yangtiezhu@loongson.cn, dvyukov@google.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspam-User: X-Stat-Signature: s3px4xq4hbak46grroqj6m1z95rn9fsa X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 659832001A X-HE-Tag: 1689780591-250254 X-HE-Meta: U2FsdGVkX18ohogg4iZGSk4DfjcFZ3F27Wt0hMxgk1/HZ2qc+KAfaJPbVyIbTgI5qIj2+frNtAHQIs9TztKLES19fJ12TdX6sI7Nj+CcRPRpuRw34ZxWm3TT1XMju3KHf2/zqcmgLN3cJxqaKrX9XnqtM9tKPCDxBd7EfHKodxGxIBI4upYfiEcGQJOEFBvIVZuiZvpdcT24Q7crj41y+LNzbR4GpWqZMQdaNsgThT+2gajGQs173d4qrLNMWIn4YTOUjJ/BrwTvi8S7ll/f5NCStEMFmjCXHgn8wJRfVU0oxvvL67NvDDuvK+gjWMPzdbYieX3wq1IeIOFReMKqef8AZZVeIjSIcYeUgOhNxzfvYlgYXlz1//xg9780RkA1vwa5zPjFCRUz/upWR4omNOoXUqvpU8wRzQhz4ussTCIC/PtveJ9amSN7FuOkXR8S/l1K197c1LC/AeYWjZpPW/vPTKCfs2Gwgm7/Y9UhINQGQehx9pG/fk9FsMF725m/1Mi0hqasJXnQYkECqZC+imZkmYF9ScVGUq6XxW9e+5Ii17n/fIQ6pNnIZbXggiQdNCLUqDmk5PAtM46/AD77jszrtWGCJjD0BlzuhlK9q6DFw4AinPsHsaEsRlRxbjdfftG2vgqpXEExu9VJguHZD075hMVNfCLqg/fIwt6rbVzybdVUAwKiElN73lMIbiinI4KxT+S3TvaHPdLwaRQjBDfcRFNgEVn9GfwKH0PbcNZznvMOY+nMAvFnEtNqGXtXdioSSGl/ftNCZ4bASQMuyyteZ6dUM5aVECkN9ylE6226NDfT0dt4Ub9A2i8QaIb4qtbSntjxn1QssNjjIcIAV3PJiuBtwMVzU9RJ0LuXfMsUrozIWwIJypQ6eCcMg8Un0Op9zXi/svTRoQFuafZVVB9I7ITPTjZHk25KSbgJ80y04yM7gDxSaCSsaOjVW1Mrn4R09fQvT61EJ+9QD7R R8PiYH6x zxUwvKDkiOG8R8UBkgj6yCE+vGjo0WBg50R4scC9O2PmMFrl6VnIzXcIJYzSYedOKnrSR4O6GFAkewGZOJYf7DNYBHlyiAVDF+fJwOQ9uv+V4xsbyKrnKEGqAfEQOqef8C3J/GnjLLitp40rKhGsAqGmWDvazbmXgQo3VDCD4rGZwtXoo96ss7owxPwIZBMnrqq+ckDQHXIpsV3sBmrTrB+Unx7uhS7o0WW5+jkvAH5aDOp5y/cyByvCJ2rdoGCajpKBdgPkGSqC5M7HARjfRm5jUIopoK2WvQjfnUJi2v5rJscQABweaiTUEQsvkqpIyPKrnvqW8V9Uc7L+H/H0tOIuX3uF7k8Z7PlghFfWto1Vl70bhSHx/n5l3wE4guzabVKqb2ZwqcWpDLZf1GFdi+OFDqQ== 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: Hi, Enze, On Wed, Jul 19, 2023 at 4:34=E2=80=AFPM Enze Li wrote: > > According to LoongArch documentation online, there are two types of addre= ss > translation modes: direct mapped address translation mode (direct mapped = mode) > and page table mapped address translation mode (page table mapped mode). > > Currently, the upstream code only supports DMM (Direct Mapped Mode). > This patch adds a function that determines whether PTMM (Page Table > Mapped Mode) should be used, and also adds the corresponding handler > funcitons for both modes. > > For more details on the two modes, see [1]. > > [1] https://loongson.github.io/LoongArch-Documentation/LoongArch-Vol1-EN.= html#virtual-address-space-and-address-translation-mode > > Signed-off-by: Enze Li > --- > arch/loongarch/include/asm/page.h | 10 ++++++++++ > arch/loongarch/include/asm/pgtable.h | 6 ++++++ > arch/loongarch/mm/pgtable.c | 25 +++++++++++++++++++++++++ > 3 files changed, 41 insertions(+) > > diff --git a/arch/loongarch/include/asm/page.h b/arch/loongarch/include/a= sm/page.h > index 26e8dccb6619..05919be15801 100644 > --- a/arch/loongarch/include/asm/page.h > +++ b/arch/loongarch/include/asm/page.h > @@ -84,7 +84,17 @@ typedef struct { unsigned long pgprot; } pgprot_t; > #define sym_to_pfn(x) __phys_to_pfn(__pa_symbol(x)) > > #define virt_to_pfn(kaddr) PFN_DOWN(PHYSADDR(kaddr)) > + > +#ifdef CONFIG_64BIT > +#define virt_to_page(kaddr) \ > +({ \ > + is_PTMM_addr((unsigned long)kaddr) ? \ > + PTMM_virt_to_page((unsigned long)kaddr) : \ > + DMM_virt_to_page((unsigned long)kaddr); \ > +}) 1, Rename these helpers to is_dmw_addr()/dmw_virt_to_page()/tlb_virt_to_page() will be better. 2, These helpers are so simple so can be defined as inline function or macros in page.h. 3, CONFIG_64BIT can be removed here. Huacai > +#else > #define virt_to_page(kaddr) pfn_to_page(virt_to_pfn(kaddr)) > +#endif > > extern int __virt_addr_valid(volatile void *kaddr); > #define virt_addr_valid(kaddr) __virt_addr_valid((volatile void *)(kaddr= )) > diff --git a/arch/loongarch/include/asm/pgtable.h b/arch/loongarch/includ= e/asm/pgtable.h > index ed6a37bb55b5..0fc074b8bd48 100644 > --- a/arch/loongarch/include/asm/pgtable.h > +++ b/arch/loongarch/include/asm/pgtable.h > @@ -360,6 +360,12 @@ static inline void pte_clear(struct mm_struct *mm, u= nsigned long addr, pte_t *pt > #define PMD_T_LOG2 (__builtin_ffs(sizeof(pmd_t)) - 1) > #define PTE_T_LOG2 (__builtin_ffs(sizeof(pte_t)) - 1) > > +#ifdef CONFIG_64BIT > +struct page *DMM_virt_to_page(unsigned long kaddr); > +struct page *PTMM_virt_to_page(unsigned long kaddr); > +bool is_PTMM_addr(unsigned long kaddr); > +#endif > + > extern pgd_t swapper_pg_dir[]; > extern pgd_t invalid_pg_dir[]; > > diff --git a/arch/loongarch/mm/pgtable.c b/arch/loongarch/mm/pgtable.c > index 36a6dc0148ae..4c6448f996b6 100644 > --- a/arch/loongarch/mm/pgtable.c > +++ b/arch/loongarch/mm/pgtable.c > @@ -9,6 +9,31 @@ > #include > #include > > +#ifdef CONFIG_64BIT > +/* DMM stands for Direct Mapped Mode. */ > +struct page *DMM_virt_to_page(unsigned long kaddr) > +{ > + return pfn_to_page(virt_to_pfn(kaddr)); > +} > +EXPORT_SYMBOL_GPL(DMM_virt_to_page); > + > +/* PTMM stands for Page Table Mapped Mode. */ > +struct page *PTMM_virt_to_page(unsigned long kaddr) > +{ > + return pte_page(*virt_to_kpte(kaddr)); > +} > +EXPORT_SYMBOL_GPL(PTMM_virt_to_page); > + > +bool is_PTMM_addr(unsigned long kaddr) > +{ > + if (unlikely((kaddr & GENMASK(BITS_PER_LONG - 1, cpu_vabits)) =3D= =3D > + GENMASK(BITS_PER_LONG - 1, cpu_vabits))) > + return true; > + return false; > +} > +EXPORT_SYMBOL_GPL(is_PTMM_addr); > +#endif > + > pgd_t *pgd_alloc(struct mm_struct *mm) > { > pgd_t *ret, *init; > -- > 2.34.1 > >