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 176FCC001DF for ; Tue, 1 Aug 2023 02:58:54 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 841F42800CF; Mon, 31 Jul 2023 22:58:53 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 81C122800D0; Mon, 31 Jul 2023 22:58:53 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 66C602800CF; Mon, 31 Jul 2023 22:58: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 54EE32800C8 for ; Mon, 31 Jul 2023 22:58:53 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 210DF140230 for ; Tue, 1 Aug 2023 02:58:53 +0000 (UTC) X-FDA: 81074028546.25.64C7D80 Received: from mailgw.kylinos.cn (mailgw.kylinos.cn [124.126.103.232]) by imf19.hostedemail.com (Postfix) with ESMTP id 016A21A0010 for ; Tue, 1 Aug 2023 02:58:50 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=none; spf=pass (imf19.hostedemail.com: domain of lienze@kylinos.cn designates 124.126.103.232 as permitted sender) smtp.mailfrom=lienze@kylinos.cn; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690858731; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=LEZmny6//EuLIABYOVGnxXOBW3iglITl5IP+o3bNzLw=; b=cMoXFm5NF0jTB2ez6s1YS+PP2PtcdYSJJh3UUOOLVukSqkpVJ3zfx5q546a2cMq3kaHlWb 3QEoky8RX8CDET7pIlje0L+H+Hzm+elj2BJUb02ng7Ey7Hv4Uf/i2PO/cvS7YW28fiLezw VrOm9DR2FRfY4n5E6lOkJRkgsJ0pnRc= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690858731; a=rsa-sha256; cv=none; b=intIvGE/DcIUfpZRPqAQT4QrAADg2OZCp1f5TcOjS3ElxcNyOVAisv2rHfrQ7TnirCU6oa XVl+6hgFb3LLx+fKmkkDzgyHMcaUfvWU6TD8zWRTp2kbGfVTYCIuLPH8V6QZScbmj7NRKV hKVVBD+EhbjW5Dn1a6A0jgAwRw2x/C4= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=none; spf=pass (imf19.hostedemail.com: domain of lienze@kylinos.cn designates 124.126.103.232 as permitted sender) smtp.mailfrom=lienze@kylinos.cn; dmarc=none X-UUID: 00eaf5245e3442bda9c7ec9a9182a597-20230801 X-CID-P-RULE: Release_Ham X-CID-O-INFO: VERSION:1.1.28,REQID:7e67ea3d-041b-43b2-a9c6-58361bb94025,IP:15, URL:0,TC:0,Content:0,EDM:0,RT:0,SF:-15,FILE:0,BULK:0,RULE:Release_Ham,ACTI ON:release,TS:0 X-CID-INFO: VERSION:1.1.28,REQID:7e67ea3d-041b-43b2-a9c6-58361bb94025,IP:15,UR L:0,TC:0,Content:0,EDM:0,RT:0,SF:-15,FILE:0,BULK:0,RULE:Release_Ham,ACTION :release,TS:0 X-CID-META: VersionHash:176cd25,CLOUDID:fa48bfa0-0933-4333-8d4f-6c3c53ebd55b,B ulkID:230801105842MI9Q464W,BulkQuantity:0,Recheck:0,SF:19|44|38|24|17|102, TC:nil,Content:0,EDM:-3,IP:-2,URL:1,File:nil,Bulk:nil,QS:nil,BEC:nil,COL:0 ,OSI:0,OSA:0,AV:0,LES:1,SPR:NO,DKR:0,DKP:0 X-CID-BVR: 0 X-CID-BAS: 0,_,0,_ X-CID-FACTOR: TF_CID_SPAM_SNR,TF_CID_SPAM_FAS,TF_CID_SPAM_FSD,TF_CID_SPAM_FSI, TF_CID_SPAM_ULS X-UUID: 00eaf5245e3442bda9c7ec9a9182a597-20230801 X-User: lienze@kylinos.cn Received: from ubuntu.. [(39.156.73.12)] by mailgw (envelope-from ) (Generic MTA with TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 256/256) with ESMTP id 440130864; Tue, 01 Aug 2023 10:58:41 +0800 From: Enze Li To: chenhuacai@kernel.org, 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 Cc: zhangqing@loongson.cn, yangtiezhu@loongson.cn, dvyukov@google.com, Enze Li Subject: [PATCH 2/4 v3] LoongArch: mm: Add page table mapped mode support Date: Tue, 1 Aug 2023 10:58:13 +0800 Message-Id: <20230801025815.2436293-3-lienze@kylinos.cn> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230801025815.2436293-1-lienze@kylinos.cn> References: <20230801025815.2436293-1-lienze@kylinos.cn> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Stat-Signature: jayc8w649f5ha3xpnmaeh3wewabzmitk X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 016A21A0010 X-Rspam-User: X-HE-Tag: 1690858730-220260 X-HE-Meta: U2FsdGVkX1+NRQP8GEmQDwhvDfmnoKqf4XAdKRAdHVS3Hsxycro9PA6Kp4Sbe5MF2N3f6Ry3xWkfxt+AN/WI4eULikVytS9YQ6RvFMaiTGLP/wDiyYdVnO4uD6dCOIfbMyD3/CxHpltsshKHM7c8jKSKiFqoKT+IcD59xaNo+bR5CwZl6SNBC/tzck9nhsZ819uzYY8kI9Lud8hmnyf4LeEIFaA+37gwmY59M/anVWVTuSp3REY05vHyLqMI7aYhAewYHKMNxymqel2iU0Nw+QLe6UHAmQgdQs6VPnKAbUHR9/lJA3TCfhzd0UxGhE7a4LIMHF+GoepW4w7AslUwyJGjQaZm1FesDyrNN6PTkiVOlho4AHxLcbvi9D5y5NKDUT+x0VpJMLEhN0xOGRYujoGEBt7IzrCOgtY8j9+PP/dztb94U1/L3MzjipgyTaOWFbkK+W/LNy9Yz/ynabKfDouiurUBWf7LHjsI7C0xPFE1Yzz0fB/iM0qTq0IJyXg+hn0vaZFTEC3aQIQYbZR+cZ0f3zIRRLHRROsijryjTffkgtEmcErZKao+f12wCGgk7XG7IUR0ZpKPN6mcSclEElOWTYSC1jPYKpIy46rbve8Yr2k//BLhsNIEyA0XrZwsVzWEJ37TxWD1UzoJy1jjZhlIdMOOTNMw6CS7V58nzZlSzIHSSaApCfqcvlI8opwj1OlezvI2FMKjt7/L9yBD37pr6vVh2xLxyp4S21sbKvLltiPYg7GGEOrIh3Z1bO/+frevd6ANx9VFz8ifbe5fQeEaM6wtNM7JZjG9BqTu+kayZE0Mf0T0dEuZ8vCeIXybxPkuPXyHfJIHhGOx5d2zdfIMBuBxC08AnEr/GWUOmmhwJJfJulUvSM83Kxo0mLL8yWryAt9ToWQiyHuaYu1MJuJpP35ZjcLNgHvXl20pY9LOtqqQm0vFZoE+Nqgbr2l97Pbj3+kbWLGRIh2EHpg 6GRUP22j kf6yOPTOGRwgt5XbZlZx5FDM8seaRsLdhzvpIJFIs/70O07zzabqZ1TPOVntcZXO0rKcLw8glnphHDG6BWSPg3v8bhyFtLLYTNPYtg9zEfkhmxeCGa2f/LtN66g== 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: According to LoongArch documentation online, there are two types of address translation modes: direct mapped address translation mode (direct mapped mode) and page table mapped address translation mode (page table mapped mode). Currently, the upstream kernel only supports direct mapped mode. This patch adds a function that determines whether page table mapped mode should be used, and also adds the corresponding handler functions 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 | 8 +++++++- arch/loongarch/include/asm/pgtable.h | 3 +++ arch/loongarch/mm/pgtable.c | 7 +++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/arch/loongarch/include/asm/page.h b/arch/loongarch/include/asm/page.h index 26e8dccb6619..a256fd6cb7bb 100644 --- a/arch/loongarch/include/asm/page.h +++ b/arch/loongarch/include/asm/page.h @@ -84,7 +84,13 @@ 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)) -#define virt_to_page(kaddr) pfn_to_page(virt_to_pfn(kaddr)) + +#define virt_to_page(kaddr) \ +({ \ + ((unsigned long)kaddr >= vm_map_base) ? \ + tlb_virt_to_page((unsigned long)kaddr) : \ + dmw_virt_to_page((unsigned long)kaddr); \ +}) 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/include/asm/pgtable.h index 38afeb7dd58b..716a7fcab15e 100644 --- a/arch/loongarch/include/asm/pgtable.h +++ b/arch/loongarch/include/asm/pgtable.h @@ -353,6 +353,9 @@ static inline void pte_clear(struct mm_struct *mm, unsigned 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) +inline struct page *tlb_virt_to_page(unsigned long kaddr); +#define dmw_virt_to_page(kaddr) pfn_to_page(virt_to_pfn(kaddr)) + 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..fea8fd2cf141 100644 --- a/arch/loongarch/mm/pgtable.c +++ b/arch/loongarch/mm/pgtable.c @@ -9,6 +9,13 @@ #include #include + +inline struct page *tlb_virt_to_page(unsigned long kaddr) +{ + return pte_page(*virt_to_kpte(kaddr)); +} +EXPORT_SYMBOL_GPL(tlb_virt_to_page); + pgd_t *pgd_alloc(struct mm_struct *mm) { pgd_t *ret, *init; -- 2.34.1