From patchwork Thu Apr 4 13:36:34 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Huacai Chen X-Patchwork-Id: 13617863 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 5DCABCD1292 for ; Thu, 4 Apr 2024 13:37:17 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C88076B0083; Thu, 4 Apr 2024 09:37:16 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id C38116B0087; Thu, 4 Apr 2024 09:37:16 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id AFF576B0088; Thu, 4 Apr 2024 09:37:16 -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 949696B0083 for ; Thu, 4 Apr 2024 09:37:16 -0400 (EDT) Received: from smtpin08.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 227B9A0A9C for ; Thu, 4 Apr 2024 13:37:16 +0000 (UTC) X-FDA: 81971950872.08.30C01F5 Received: from sin.source.kernel.org (sin.source.kernel.org [145.40.73.55]) by imf22.hostedemail.com (Postfix) with ESMTP id 0BBD6C0009 for ; Thu, 4 Apr 2024 13:37:13 +0000 (UTC) Authentication-Results: imf22.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf22.hostedemail.com: domain of "SRS0=Mf8M=LJ=loongson.cn=chenhuacai@kernel.org" designates 145.40.73.55 as permitted sender) smtp.mailfrom="SRS0=Mf8M=LJ=loongson.cn=chenhuacai@kernel.org" ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1712237834; a=rsa-sha256; cv=none; b=3xFZtdusExNQErPe7EZUhYT6xhLzZ03TWEbnHjnZFa3EB+rizILgl++lA7xqZ1SSsaikq7 vqIVcci2nxJE4G9DfhlxBtF2yX6bqOLTuXuIQABz7e1b/G23AJrxm8iLWQXOv+s4uNey70 5aFZbAxaEvwPs/wD5y7VGs5fu5vke78= ARC-Authentication-Results: i=1; imf22.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf22.hostedemail.com: domain of "SRS0=Mf8M=LJ=loongson.cn=chenhuacai@kernel.org" designates 145.40.73.55 as permitted sender) smtp.mailfrom="SRS0=Mf8M=LJ=loongson.cn=chenhuacai@kernel.org" ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1712237834; 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=2yJUX/E8rOc1QE9BIxZ13eU/GVBgHCKj0SBjtOIwJVY=; b=FvsTreoxTm0QzCbPQr5Ywr1HJHX7Ew+Td2LLlieFJQ+z1gc5buixOfRDBxYnqfQfF2qPhU szewvd482RnkowrviziPg1M1/XzdiJVuWx7DRJufpBsvg/QFzWsPZCi/9kQ8Xa5pKznp3Z lEU7D5LUScPZ4BDWtUjPduQgNPgistI= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id 091A8CE31BE; Thu, 4 Apr 2024 13:37:11 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id A1A4AC433C7; Thu, 4 Apr 2024 13:37:07 +0000 (UTC) From: Huacai Chen To: Andrew Morton , Huacai Chen Cc: loongarch@lists.linux.dev, linux-mm@kvack.org, Xuefeng Li , Guo Ren , Xuerui Wang , Jiaxun Yang , linux-kernel@vger.kernel.org, loongson-kernel@lists.loongnix.cn, Huacai Chen Subject: [PATCH 1/3] mm: Move lowmem_page_address() a little later Date: Thu, 4 Apr 2024 21:36:34 +0800 Message-ID: <20240404133642.971583-2-chenhuacai@loongson.cn> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240404133642.971583-1-chenhuacai@loongson.cn> References: <20240404133642.971583-1-chenhuacai@loongson.cn> MIME-Version: 1.0 X-Rspamd-Server: rspam08 X-Rspamd-Queue-Id: 0BBD6C0009 X-Stat-Signature: qz1rqmmu7opbdwip1b9czy7h7x4e16qp X-Rspam-User: X-HE-Tag: 1712237833-260428 X-HE-Meta: U2FsdGVkX1+4GTQ9Lfj/t027blPFBScJ6/3NwcqcL3H/ut+e9dyfIip/KOHIbFVykUQV/8GyH/ffBJAyZrFyFWiyE5KpvFLmn+9W3JxuaIyBNH/N6reOv0/atFPDgO7Pa5tqI5PKDjxyZeNaTml3YAKf5uNFNilVMOPKS4Vt5mC0ZmIz1OEImcww3PdpB5HyYZrfdKTz8uBlRGEPjwGdZPobeTBVPn9kRAHaTdYIgBUCVyr/JzuDmwk6U18aDT+bWP0XOqs2VtuR7qA9A3bghytZ8IpJrm1hgauZHdl11GOw0JRPlwurEq8qR/2TNjjjcYVXhXmoFSJ8CX55/L7PC4zRKZPcB4QYjxu5+iPxvUJWbgAuF3t560p1XPIioNgEzKDmu3A3jkoU9/mf/74Gygl7aYTLsClaa4pq6eDDhSBPvTpJdllS0tQ/RpZRx+fvSULmADTxf433dq3K/W+3S6PpnUCXdoBd1PXgaBaAF5bKs5LAppx/httqJkF1SJvgOvrKozdAVZ4znqorzNxIfKqovCSs5EwPhEm9bptGW9m2t6cqyFiyEm2XDi30zVpryq8093FXroMCAP7dkMyO3IaYr+PbM15Tn92XkUd0t2tnWV0EE7dJBz23R9On27/hee+WFn4qh7spfZLGXDpC6NOgHdmUopW2eSS0GdHiyCSWJGgYM130PKPlU0dgWEgh87tzt+zkoJPlJwS/DMCyW4Or8PlHFAhyPRbVkFVZBZv2W5IgU/qUHpPvdkIjF8OG2r/+zhPRz+AfVnK5EtJuK88T6GdOHETfOPTWpAzjkX5YVAip1LNL2oOsTTWN20hixhPd+NssFtQ4k4MV5ffnAto98DfR1SmbMYZT2ZWcB133SfPpFV2JmfuQJHRGBn+uemiPlRtK4oBxbzAQrApyn1T/dBQMwS/xGiFm03evf1K6lei7Txr2dCIluU3vDGY4yvyo8di0AUC3KLjibAE WYYa01Gk F2+DkfxoH6pqYlpKsoipq1aGV+OXLUeub8eTBFcYII3+JWnuY1sw084lmhdgn8DkR5m7uo+btIq9FOt7nSl7s0O6mIyEkl8aPCWvpsMMGcozUMFxsDUe6yZa0VnTqNXQd6KI6CV9ZnahfQbcjWSjX722LcXvOHsEGS41VCI+Dhee6JwOlAnFPvpvcKeULUd2eNadxvXP757s9EoYMkPHUYghnLHg+tq1T+SfXomISmOxH7JJCPm/sncPenusawaDXnnkSuIxqPVv7Bp3C/RRM/XomZ1uDKyOqfrfAPsWEbDt9SjaQC8DLyfoRHjCVFpWu+WIsyaQVd0URuM1rBcO63vEa9Ea8ybmsaBa5 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: LoongArch will override page_to_virt() which use page_address() in the KFENCE case (by defining WANT_PAGE_VIRTUAL/HASHED_PAGE_VIRTUAL). So move lowmem_page_address() a little later to avoid such build errors: error: implicit declaration of function 'page_address'. Signed-off-by: Huacai Chen Acked-by: Andrew Morton --- include/linux/mm.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/include/linux/mm.h b/include/linux/mm.h index 0436b919f1c7..7b0ee64225de 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -2207,11 +2207,6 @@ static inline int arch_make_folio_accessible(struct folio *folio) */ #include -static __always_inline void *lowmem_page_address(const struct page *page) -{ - return page_to_virt(page); -} - #if defined(CONFIG_HIGHMEM) && !defined(WANT_PAGE_VIRTUAL) #define HASHED_PAGE_VIRTUAL #endif @@ -2234,6 +2229,11 @@ void set_page_address(struct page *page, void *virtual); void page_address_init(void); #endif +static __always_inline void *lowmem_page_address(const struct page *page) +{ + return page_to_virt(page); +} + #if !defined(HASHED_PAGE_VIRTUAL) && !defined(WANT_PAGE_VIRTUAL) #define page_address(page) lowmem_page_address(page) #define set_page_address(page, address) do { } while(0) From patchwork Thu Apr 4 13:36:35 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Huacai Chen X-Patchwork-Id: 13617864 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 277DDCD1284 for ; Thu, 4 Apr 2024 13:37:23 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A3DD96B0087; Thu, 4 Apr 2024 09:37:22 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9EE376B0088; Thu, 4 Apr 2024 09:37:22 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8DDF66B0089; Thu, 4 Apr 2024 09:37:22 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 6C7876B0087 for ; Thu, 4 Apr 2024 09:37:22 -0400 (EDT) Received: from smtpin07.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id DF3ACA0195 for ; Thu, 4 Apr 2024 13:37:21 +0000 (UTC) X-FDA: 81971951082.07.2D98D23 Received: from sin.source.kernel.org (sin.source.kernel.org [145.40.73.55]) by imf07.hostedemail.com (Postfix) with ESMTP id A8A9240005 for ; Thu, 4 Apr 2024 13:37:19 +0000 (UTC) Authentication-Results: imf07.hostedemail.com; dkim=none; spf=pass (imf07.hostedemail.com: domain of "SRS0=Mf8M=LJ=loongson.cn=chenhuacai@kernel.org" designates 145.40.73.55 as permitted sender) smtp.mailfrom="SRS0=Mf8M=LJ=loongson.cn=chenhuacai@kernel.org"; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1712237840; 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=3f99SFlkVL5OOnE6U6HiiQqsAZsGzkWrHeOu0tQxUQ0=; b=PQyWcHcXoo6ght3/rf/Q9HqSMYoi3vdPNQ3Et4gGoEij4RmJXNnpm3bFo90okHZHRz/Xi9 jZZ8RJjv/lr16e76N/mA7AvklsjCyLrIMwDITScSYX7pKOhx8AnldpKvYq/oDZt+0vad5g 44QWDXxwu3t3FuY9i9uUfsUSewYRUkA= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1712237840; a=rsa-sha256; cv=none; b=qYE++ZrmbE7CBfe5QFEtS7e3vaBvJRupYHapF365cLwgV36/fKrJ6Pq08HmN0BnKrekotC DwutOyyNK+D/8HV/0g3l9y58gxIXXJJhF5AitXGWGNQOaSrlvr9X1praPJd7ab4yIsiZUY KtVDr26no8qISEMHEoSCjT98D4fIC1o= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=none; spf=pass (imf07.hostedemail.com: domain of "SRS0=Mf8M=LJ=loongson.cn=chenhuacai@kernel.org" designates 145.40.73.55 as permitted sender) smtp.mailfrom="SRS0=Mf8M=LJ=loongson.cn=chenhuacai@kernel.org"; dmarc=none Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id 93924CE2B37; Thu, 4 Apr 2024 13:37:16 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3756EC433C7; Thu, 4 Apr 2024 13:37:13 +0000 (UTC) From: Huacai Chen To: Andrew Morton , Huacai Chen Cc: loongarch@lists.linux.dev, linux-mm@kvack.org, Xuefeng Li , Guo Ren , Xuerui Wang , Jiaxun Yang , linux-kernel@vger.kernel.org, loongson-kernel@lists.loongnix.cn, Huacai Chen Subject: [PATCH 2/3] LoongArch: Make {virt, phys, page, pfn} translation work with KFENCE Date: Thu, 4 Apr 2024 21:36:35 +0800 Message-ID: <20240404133642.971583-3-chenhuacai@loongson.cn> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240404133642.971583-1-chenhuacai@loongson.cn> References: <20240404133642.971583-1-chenhuacai@loongson.cn> MIME-Version: 1.0 X-Rspamd-Queue-Id: A8A9240005 X-Rspam-User: X-Stat-Signature: dfdg97p4zyfbfwyyaremypj9pte8qsjf X-Rspamd-Server: rspam03 X-HE-Tag: 1712237839-391752 X-HE-Meta: U2FsdGVkX1/y7sHCSpPmWKRJaetb0M0J5sWyKHhmRFt9ZOQCCOIYewLKbrcq05zfA4Vj8+edxqPEbbrpGsbukxOHcRvHKV8IwVyHWaTJpKq9Txgx7LdDEoLyV09bs1LhO4YoHSy9m4uVsvqc2bF+ZLRTK7Cis+u824ySdv/D7ZSQF5VPHYPNQzd4Ew/5oQkRtZ640kiLabMCulgsFBSD1onukhi/FgICtdtdYRchvz5sq+Uljz15f1LWu+Mc1uywuk3U18ItQNnWMHXXCt4RnqVMDaCbqBHpdZvUxjjLExe/qHi8DXittcolPugrcAPz8W7HvhXc4NeWsdmy81l7NjM86frIos4feVGXmyBtQ0F3tMepFwUagiRaSfumtcbVoNAQe1CpuVx3i/sBgnUeKxtaCCTVCQ5ZkAasbDEgbBaSd8CYrQ4wwbWOYkOjEeo0IwKcch+cLbWhITJHSH8znOw82pqN3QBQ9tyzz4I153OOlH1TSZ4TELc8ZvuPIGDeghNp570FfLGHxNZz9IeZCC5YY6525VUq0y0O1+rwbAKmlL9CIEszbeJY27FL+bwljyBxeWaUdKvAfwaMlmyAHHEyGo0XOGuMa+YK/8OT5LHRLrREJsGr+Ek697mCHM4d3zfmcj5mdAMtWM5szKFm/whsc2TSyjIRd9oHuK6F14DaaSUSSyzVdypo/vG9El/myHRFvSNXAk1dJS9DtagA/yp1IANpgnxOf3sS5JHd2z7fZpk97Acobwr3RtHG+rm9zJUIYuTJc4yDca/oaEaIjFBCLKh7G/Znqd41HJ+fjlrQ95tEiQW3SegLQmNTdJwSA6fqVn9q974Na4K7EyuG2/eT/fSxhGBc0NIJznewPTUIM+eTj3g4E/vPGrYvPZuHjtYuPWdU8BXGeIgHdweq5n0momFKqPLB+BAHnYn2KxA0MtHTLDowWpGSa5gmrqtmkUDvGmkNvDQvHhmXmmx 6y9KoIB3 G6wjD0gvQjX2OtyMDZVcjk4j1La2xL6a8PF2bZ/OcP2GZlguqpTlRe1aQxDRcMGgsQVAfLtGT6FdPPmKCbjIJsneJXophfVYDGxzzoGthqCh3FTFwoMFfm8GOEvB7SK1W18jBoRyVluEjqCLUpqQ2NNwQhF7NLzb81xywuaYMlVD09l80XFbM0g2wkH6+zYdbdlMlBJEb9hdieGVlSVLYe3D9yBfmFff1lpywYMW+6g27o4aue5rHr5r6crn+9jkqYgAkP/iXzKUxybSC/KQsa1nYS7XooroNkvsLA1AHbHhzskE= 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: KFENCE changes virt_to_page() to be able to translate tlb mapped virtual addresses, but forget to change virt_to_phys()/phys_to_virt() and other translation functions as well. This patch fix it, otherwise some drivers (such as nvme and virtio-blk) cannot work with KFENCE. All {virt, phys, page, pfn} translation functions are updated: 1, virt_to_pfn()/pfn_to_virt(); 2, virt_to_page()/page_to_virt(); 3, virt_to_phys()/phys_to_virt(). DMW/TLB mapped addresses are distinguished by comparing the vaddress with vm_map_base in virt_to_xyz(), and we define WANT_PAGE_VIRTUAL in the KFENCE case for the reverse translations, xyz_to_virt(). Signed-off-by: Huacai Chen --- arch/loongarch/include/asm/io.h | 20 +++++++++++++++----- arch/loongarch/include/asm/kfence.h | 9 +++++++++ arch/loongarch/include/asm/page.h | 26 +++++++++++++++++++++++++- arch/loongarch/mm/pgtable.c | 4 ++-- 4 files changed, 51 insertions(+), 8 deletions(-) diff --git a/arch/loongarch/include/asm/io.h b/arch/loongarch/include/asm/io.h index 4a8adcca329b..c2f9979b2979 100644 --- a/arch/loongarch/include/asm/io.h +++ b/arch/loongarch/include/asm/io.h @@ -14,11 +14,6 @@ #include #include -/* - * Change "struct page" to physical address. - */ -#define page_to_phys(page) ((phys_addr_t)page_to_pfn(page) << PAGE_SHIFT) - extern void __init __iomem *early_ioremap(u64 phys_addr, unsigned long size); extern void __init early_iounmap(void __iomem *addr, unsigned long size); @@ -73,6 +68,21 @@ extern void __memcpy_fromio(void *to, const volatile void __iomem *from, size_t #define __io_aw() mmiowb() +#ifdef CONFIG_KFENCE +#define virt_to_phys(kaddr) \ +({ \ + (likely((unsigned long)kaddr < vm_map_base)) ? __pa((unsigned long)kaddr) : \ + page_to_phys(tlb_virt_to_page((unsigned long)kaddr)) + offset_in_page((unsigned long)kaddr);\ +}) + +#define phys_to_virt(paddr) \ +({ \ + extern char *__kfence_pool; \ + (unlikely(__kfence_pool == NULL)) ? __va((unsigned long)paddr) : \ + page_address(phys_to_page((unsigned long)paddr)) + offset_in_page((unsigned long)paddr);\ +}) +#endif + #include #define ARCH_HAS_VALID_PHYS_ADDR_RANGE diff --git a/arch/loongarch/include/asm/kfence.h b/arch/loongarch/include/asm/kfence.h index 6c82aea1c993..a6a5760da3a3 100644 --- a/arch/loongarch/include/asm/kfence.h +++ b/arch/loongarch/include/asm/kfence.h @@ -16,6 +16,7 @@ static inline bool arch_kfence_init_pool(void) { int err; + char *kaddr, *vaddr; char *kfence_pool = __kfence_pool; struct vm_struct *area; @@ -35,6 +36,14 @@ static inline bool arch_kfence_init_pool(void) return false; } + kaddr = kfence_pool; + vaddr = __kfence_pool; + while (kaddr < kfence_pool + KFENCE_POOL_SIZE) { + set_page_address(virt_to_page(kaddr), vaddr); + kaddr += PAGE_SIZE; + vaddr += PAGE_SIZE; + } + return true; } diff --git a/arch/loongarch/include/asm/page.h b/arch/loongarch/include/asm/page.h index 44027060c54a..e85df33f11c7 100644 --- a/arch/loongarch/include/asm/page.h +++ b/arch/loongarch/include/asm/page.h @@ -78,7 +78,26 @@ typedef struct { unsigned long pgprot; } pgprot_t; struct page *dmw_virt_to_page(unsigned long kaddr); struct page *tlb_virt_to_page(unsigned long kaddr); -#define virt_to_pfn(kaddr) PFN_DOWN(PHYSADDR(kaddr)) +#define pfn_to_phys(pfn) __pfn_to_phys(pfn) +#define phys_to_pfn(paddr) __phys_to_pfn(paddr) + +#define page_to_phys(page) pfn_to_phys(page_to_pfn(page)) +#define phys_to_page(paddr) pfn_to_page(phys_to_pfn(paddr)) + +#ifndef CONFIG_KFENCE + +#define page_to_virt(page) __va(page_to_phys(page)) +#define virt_to_page(kaddr) phys_to_page(__pa(kaddr)) + +#else + +#define WANT_PAGE_VIRTUAL + +#define page_to_virt(page) \ +({ \ + extern char *__kfence_pool; \ + (__kfence_pool == NULL) ? __va(page_to_phys(page)) : page_address(page); \ +}) #define virt_to_page(kaddr) \ ({ \ @@ -86,6 +105,11 @@ struct page *tlb_virt_to_page(unsigned long kaddr); dmw_virt_to_page((unsigned long)kaddr) : tlb_virt_to_page((unsigned long)kaddr);\ }) +#endif + +#define pfn_to_virt(pfn) page_to_virt(pfn_to_page(pfn)) +#define virt_to_pfn(kaddr) page_to_pfn(virt_to_page(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/mm/pgtable.c b/arch/loongarch/mm/pgtable.c index 2aae72e63871..bda018150000 100644 --- a/arch/loongarch/mm/pgtable.c +++ b/arch/loongarch/mm/pgtable.c @@ -11,13 +11,13 @@ struct page *dmw_virt_to_page(unsigned long kaddr) { - return pfn_to_page(virt_to_pfn(kaddr)); + return phys_to_page(__pa(kaddr)); } EXPORT_SYMBOL(dmw_virt_to_page); struct page *tlb_virt_to_page(unsigned long kaddr) { - return pfn_to_page(pte_pfn(*virt_to_kpte(kaddr))); + return phys_to_page(pfn_to_phys(pte_pfn(*virt_to_kpte(kaddr)))); } EXPORT_SYMBOL(tlb_virt_to_page); From patchwork Thu Apr 4 13:36:36 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Huacai Chen X-Patchwork-Id: 13617865 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 86409CD1292 for ; Thu, 4 Apr 2024 13:37:29 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 201C46B0088; Thu, 4 Apr 2024 09:37:29 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 1B20D6B0089; Thu, 4 Apr 2024 09:37:29 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0A0C46B008A; Thu, 4 Apr 2024 09:37:29 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id E3DE26B0088 for ; Thu, 4 Apr 2024 09:37:28 -0400 (EDT) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 70ACE160E7B for ; Thu, 4 Apr 2024 13:37:28 +0000 (UTC) X-FDA: 81971951376.19.AAB7CCB Received: from sin.source.kernel.org (sin.source.kernel.org [145.40.73.55]) by imf21.hostedemail.com (Postfix) with ESMTP id 9A2671C0026 for ; Thu, 4 Apr 2024 13:37:26 +0000 (UTC) Authentication-Results: imf21.hostedemail.com; dkim=none; spf=pass (imf21.hostedemail.com: domain of "SRS0=Mf8M=LJ=loongson.cn=chenhuacai@kernel.org" designates 145.40.73.55 as permitted sender) smtp.mailfrom="SRS0=Mf8M=LJ=loongson.cn=chenhuacai@kernel.org"; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1712237847; 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=pTgEUmRV29boQvDiaGRCgV4iQjAkeKOWdTafpyI81Kg=; b=Y5AnCsUkfgueJRuRQ1jYIAbXsIODMHGVS/6E8K4fVPFwHObFkzDKCJUGAyTrKNVVocXW/m 1HP+Vxu8q0qckfVygI6BIeuTddA4atH12Rd2vBJfLkaoCdrvkS5BS1YdJJwiskC0itzn5q pacNXuyFMX3KGMXYXDtSDRHboBJxOto= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1712237847; a=rsa-sha256; cv=none; b=e970L2Z/Y5IrS4ooCfIPecF2Wo77vDZKbC+4Wdhwv/aV5e3HLu4J8/gpLIKrYQ8P71JaVN mkZSDFm/vy5TglINeHGA1XYuYcpslxzthWZZikBfcG7EqQlRkXNZZwSGDQEBXyI49p3i97 H99rrkbAFrFSSSEWlmCqRxKlfdsUYLg= ARC-Authentication-Results: i=1; imf21.hostedemail.com; dkim=none; spf=pass (imf21.hostedemail.com: domain of "SRS0=Mf8M=LJ=loongson.cn=chenhuacai@kernel.org" designates 145.40.73.55 as permitted sender) smtp.mailfrom="SRS0=Mf8M=LJ=loongson.cn=chenhuacai@kernel.org"; dmarc=none Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id A8A04CE31B4; Thu, 4 Apr 2024 13:37:23 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1989BC433F1; Thu, 4 Apr 2024 13:37:19 +0000 (UTC) From: Huacai Chen To: Andrew Morton , Huacai Chen Cc: loongarch@lists.linux.dev, linux-mm@kvack.org, Xuefeng Li , Guo Ren , Xuerui Wang , Jiaxun Yang , linux-kernel@vger.kernel.org, loongson-kernel@lists.loongnix.cn, Huacai Chen , Guenter Roeck Subject: [PATCH 3/3] LoongArch: Make virt_addr_valid()/__virt_addr_valid() work with KFENCE Date: Thu, 4 Apr 2024 21:36:36 +0800 Message-ID: <20240404133642.971583-4-chenhuacai@loongson.cn> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240404133642.971583-1-chenhuacai@loongson.cn> References: <20240404133642.971583-1-chenhuacai@loongson.cn> MIME-Version: 1.0 X-Rspamd-Queue-Id: 9A2671C0026 X-Rspam-User: X-Rspamd-Server: rspam11 X-Stat-Signature: 7837y3yu4zrf4gbsfy6h8995ch7q8ii1 X-HE-Tag: 1712237846-302815 X-HE-Meta: U2FsdGVkX19I3J8NqF6b0ta4swsYZPKoteACwM045dkB5+sOe4hFRe2rOY8GHq0WgDd8A96jBW36NgcF9ThQMwzgCZPSwFBDhb9CMiPkz+79YX1Izkp3PmDbjC8G/spOb84NfpM0/BX90KrKYO5FkiGiVll7CDODrivvmZj/WLYHRPpkkzrji91l54WGPaHzyU2L12yHAfF/OO5tCmr+9rdyqj9ufSTIHBHpdpn4ncE06KzZEMOd/PfIIAmpA09CTcsej17RsFWkfh1+0ZHP6cZ4bHrCtQ7DFx0zEfZO/ZmIvXo+YVePYKnYTrz9ddvaVA9BEOxFKj1FCssstv327iqDkjbKyhTC0kV9utcRqrGN17atl9HoIQ9fATipKwZwpt62Dp9S6YW1o9Ya7s/55Yz9sQpw3uGxWlYcAQ4aKJ5VzacYfSZ3KaRDjyTDAR/3BLx/3nXpl6U7dpA5xYUOY8SXsgNT5yeRlLNIKFP8vZTk8WG+V1wmiqM1gk4eI++1swWcfNxdfPPYGYwW0zi9i/NRF+lfXBMZqrnaFVZt5ZtFlMGABLWtoS9UIj1knsLY2tKBODLDxHhAWwvYTjeEGwHkE1iPKHUXdzlMo877Iv5+kx2aR4Ce1wXuDsQ4GOiWc2Z/WybPEdGYUZyM6dM0ucRwG1k+Kn2ZfcDw94+hsi2Xcc8MB5yx821jKSkNK5xuYAG4pf3kxBHl6Tv3VwKWpOGKKA0Z4vOVqLQg/45XC0srJ+IAUCwIeVZsyncV6ZvaZYUL5hHRHB+Zw0zS6Gx+BcxcQyYqUxFwVbHawDO8apoa8PLuuQHHLzC5RyL2LFEqdNDO3YI4ho9Ci50U+dLD5dh+h8ny57m3r92bJQK5IHJuAnvP8erhyeBP0RVhHg+e9/9nKeaLfSck8z+tOyugDcwB/boFpawxMfkEPA8KXVJyipegNCplZ2L5/RnhcSBVh1SodonaEm3rEJ4U068 46tMQHrW MLsuO1Qsm6VC1XIU54QzbckUJA4wbeJ+9Dzbd/lsSF38sZYmfLFLuQxZfddg+LbnawWsO5uD8GIGz5wO0ZRCcQAPWLGQKWw8KIidZIrvJtuOwx6VAKTFVRi1YwA== 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: When enabling both CONFIG_KFENCE and CONFIG_DEBUG_SG, I get the following backtraces when running LongArch kernels. [ 2.496257] kernel BUG at include/linux/scatterlist.h:187! ... [ 2.501925] Call Trace: [ 2.501950] [<9000000004ad59c4>] sg_init_one+0xac/0xc0 [ 2.502204] [<9000000004a438f8>] do_test_kpp+0x278/0x6e4 [ 2.502353] [<9000000004a43dd4>] alg_test_kpp+0x70/0xf4 [ 2.502494] [<9000000004a41b48>] alg_test+0x128/0x690 [ 2.502631] [<9000000004a3d898>] cryptomgr_test+0x20/0x40 [ 2.502775] [<90000000041b4508>] kthread+0x138/0x158 [ 2.502912] [<9000000004161c48>] ret_from_kernel_thread+0xc/0xa4 The backtrace is always similar but not exactly the same. It is always triggered from cryptomgr_test, but not always from the same test. Analysis shows that with CONFIG_KFENCE active, the address returned from kmalloc() and friends is not always below vm_map_base. It is allocated by kfence_alloc() which at least sometimes seems to get its memory from an address space above vm_map_base. This causes __virt_addr_valid() to return false for the affected objects. Let __virt_addr_valid() return 1 for kfence pool addresses, this make virt_addr_valid()/__virt_addr_valid() work with KFENCE. Reported-by: Guenter Roeck Suggested-by: Guenter Roeck Signed-off-by: Huacai Chen --- arch/loongarch/mm/mmap.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/arch/loongarch/mm/mmap.c b/arch/loongarch/mm/mmap.c index a9630a81b38a..89af7c12e8c0 100644 --- a/arch/loongarch/mm/mmap.c +++ b/arch/loongarch/mm/mmap.c @@ -4,6 +4,7 @@ */ #include #include +#include #include #include #include @@ -111,6 +112,9 @@ int __virt_addr_valid(volatile void *kaddr) { unsigned long vaddr = (unsigned long)kaddr; + if (is_kfence_address((void *)kaddr)) + return 1; + if ((vaddr < PAGE_OFFSET) || (vaddr >= vm_map_base)) return 0;