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 CA960C7EE2E for ; Sun, 26 Feb 2023 06:56:28 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0EB4C6B0072; Sun, 26 Feb 2023 01:56:28 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 099276B0073; Sun, 26 Feb 2023 01:56:28 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id EA29A6B0074; Sun, 26 Feb 2023 01:56:27 -0500 (EST) 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 DB0DE6B0072 for ; Sun, 26 Feb 2023 01:56:27 -0500 (EST) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 9E189A088B for ; Sun, 26 Feb 2023 06:56:27 +0000 (UTC) X-FDA: 80508534414.23.4F49BF7 Received: from mailbox.box.xen0n.name (mail.xen0n.name [115.28.160.31]) by imf05.hostedemail.com (Postfix) with ESMTP id 90147100008 for ; Sun, 26 Feb 2023 06:56:22 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=xen0n.name header.s=mail header.b=Zj3wRTDV; spf=pass (imf05.hostedemail.com: domain of kernel@xen0n.name designates 115.28.160.31 as permitted sender) smtp.mailfrom=kernel@xen0n.name; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1677394584; a=rsa-sha256; cv=none; b=s+osgflJXKgSH4BxJ9fkEZYZ4ltcCxC0gafTbZmUNiBFFp5RvHacOJcJP1O5EO22X8YybR Gy3c4CIheQjiVqR9utkKeV6/b7lSXD8uB5aZ+vtG+/8Pa/qYUT1wcXZlg3nIdIOKdkcrMC y/Xqn6JcjwUb502TGubaHaK7wPwfiEk= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=xen0n.name header.s=mail header.b=Zj3wRTDV; spf=pass (imf05.hostedemail.com: domain of kernel@xen0n.name designates 115.28.160.31 as permitted sender) smtp.mailfrom=kernel@xen0n.name; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1677394584; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to: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=Fo+esKacPxrwO5nK/FG7FasrWRF+Ind6FWJjJmIY3Ko=; b=7eb52USaIgJqS38sqOTUeX71uswRUgcAFEriVDdODWubcR/mdfR4jhUHS1C2qOuU/Xbaqx GTOhvx6CHonLn5hg+PzINZb1HYRoZYasCMtvzHY5e4MDkXaoUM60JCLAZKxFwDq3Pmph6A zcOCf2CBWsjzPvK7jTlbgq5xFECRH+8= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=xen0n.name; s=mail; t=1677394574; bh=mjBqnKny5y+K14d75FPmhA0VKZQ24cxqzaPncsJ7CN8=; h=Date:Subject:To:References:From:In-Reply-To:From; b=Zj3wRTDVHGPVu9U6XGgcQs1WkvGuB+QxVtS0QGVQVPJaKyjtjelSVA+VumM++KMos T8n2j0JtPPFPJJ0IltVscr2jMLnw9SWfCbEZRSPVTTyX/nu1MHZDi2BqwbjVOr2KAi 1C6Qdare3nTQqTU2XInBPHyubkvaZtjGJXgP+x3M= Received: from [192.168.9.172] (unknown [114.93.192.93]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mailbox.box.xen0n.name (Postfix) with ESMTPSA id 43C08600BD; Sun, 26 Feb 2023 14:56:14 +0800 (CST) Message-ID: <7b984c57-c45d-4d73-e21f-3e80a4651ddc@xen0n.name> Date: Sun, 26 Feb 2023 14:56:13 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: Re: [PATCH 13/7] loongson: Implement the new page table range API To: Matthew Wilcox , linux-mm@kvack.org, Huacai Chen , loongarch@lists.linux.dev, linux-arch@vger.kernel.org References: <20230211033948.891959-1-willy@infradead.org> <20230215000446.1655635-1-willy@infradead.org> <20230215000446.1655635-5-willy@infradead.org> Content-Language: en-US From: WANG Xuerui In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Rspam-User: X-Rspamd-Queue-Id: 90147100008 X-Rspamd-Server: rspam01 X-Stat-Signature: o7czpnh3whjtajhffqxcrwbgk5tc4jmp X-HE-Tag: 1677394582-99595 X-HE-Meta: U2FsdGVkX18U6dtP89xFuorxYxL+aTC5SzXhxnlhSNBjfsM3ALJhWA6jqSVEGs57aoNsmduLGhNwu27xmWPWlvcdSxa4pf5iXCpVI8WluQaFDpR/vL7yk9lgvR5TYPY1mwrrUNrzIXQklLNTEXh6PNwhmsz9wWgSMXYXoBDtbx7yRTEgBzt/4QI4/7QxdifNsAnCtKq2cgAhgjLxxl1WroA3KqJriDF0N4Eew4G0rm7aRnjcsr2nKQnJEZWcRkDyjDfxSYlH9LhIO7Msh83sYNVN8jYsmPCm+8Nk46aYgE8bJFlLqjObGDAQM0LGsVw2a8FQds5qIQIKlKWl/qWR47cVdfhzRux8brsGBOwAOuW5EJNxY6vNo62LtudwVEK3hHjwV+TJE6ddU2oCSg//9WDWvb1X16iwY6cqTC+hAreh5ggGZCay5HM7VCbBEMCCNPMJElaLnf5L3+UWL2YyFaiPdXYq9H3NQIiJNc9crwp4etW/yVSNFdLvN/WThV3WptbO40UztKIzkjLbahzbp+eS/F5pnOvVCD9A3zwXQFk5R7yVF+EO4ib1+WFMcWbw6d/QBh0w/d5EnCc1zCHlAOL9yNrAkt/MuoXAOUjq9tgtfx4BzCeT2vpQ9sON3ENpRUsTOS7viKU67cuo4+ozXE4btZb6n1F4aL6ikmBaYS5nbO3OvKyiJBPyLl9OCO5LZDR1+Yu1UlUxkKKYvfpXIOcj3wPuW1L65KX78x53gMuPiBWWWqoMjoc80uBaavGJssomm2n0Kc1T3atoAo94ORSpOh8fPkvJdiQ9sJafnNu7sqitTtXmxe6B6b3bA7uvTVUeByc5BBEMW4uo6DBZoALoLkRJ9mtXgINUmQBr0QI4Zh9ZjZ8sMufr9GdHWqKCDjWPy8KMxK9pSnqdsoMQkllrF6b60wnPEbmHF3oPNXRrV1J157/YEgBhbEI8ifSv/h2VH46k2T1ritudel4 fqS5bEiu vVJb/BmPvxcBY5gI5ZYwILDubaA5cMuWWOHnlVBJGLGQCL1NU5PYIko/CKuvfF2G81E11hdpAl62WRXMQF3oUF4DJwv7zXK0za2AdXNdrLPavLfIkvKKch0pw/SZOqtuo/5rkZ/xLvw02yjR4J2WnysMFL3ohfsIWEEZhF8SsrSUy8LoNeqp80PF7J+9kw+RhWYRzN/oGEsxz7X98xhTx+VGKd960qvhP0eafo8xg1NDVuP8aSUA4F25AOe5SHB8q3h0YWOkbICK1D3eIEGV81q0JPG2QKYoKJG+kU3KLlBa8kQ/Gli1vxfbD0FN8P47ZqTnfu8iWGaK1YfJWMRhoG2aaI3iEQe7ir2pG9JJwOnVCDalRaKcf1GFN1mINFkLpSGTSEIw7Xc98mG/n9YL6ZHbjEtoUnUaK0GsHrr3gmMRxu3ANh5/BmSOS5yKXHNC847dNluGACy+ETnw= 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, On 2/26/23 12:34, Matthew Wilcox wrote: > On Wed, Feb 15, 2023 at 12:04:46AM +0000, Matthew Wilcox (Oracle) wrote: >> Add set_ptes() and update_mmu_cache_range(). >> >> THIS PATCH IS INCOMPLETE. I DO NOT KNOW WHAT TO DO IN __update_tlb() > Help? This is the only remaining architecture to fix; I have all the > others converted now. Sorry for the late reply, it seems Huacai is busy with other things on hand, and I've been busy in my daily job recently. > >> Signed-off-by: Matthew Wilcox (Oracle) >> --- >> arch/loongarch/include/asm/cacheflush.h | 2 ++ >> arch/loongarch/include/asm/pgtable.h | 30 ++++++++++++++++--------- >> arch/loongarch/mm/tlb.c | 4 +++- >> 3 files changed, 25 insertions(+), 11 deletions(-) >> >> diff --git a/arch/loongarch/include/asm/cacheflush.h b/arch/loongarch/include/asm/cacheflush.h >> index 0681788eb474..7907eb42bfbd 100644 >> --- a/arch/loongarch/include/asm/cacheflush.h >> +++ b/arch/loongarch/include/asm/cacheflush.h >> @@ -47,8 +47,10 @@ void local_flush_icache_range(unsigned long start, unsigned long end); >> #define flush_cache_vmap(start, end) do { } while (0) >> #define flush_cache_vunmap(start, end) do { } while (0) >> #define flush_icache_page(vma, page) do { } while (0) >> +#define flush_icache_pages(vma, page) do { } while (0) >> #define flush_icache_user_page(vma, page, addr, len) do { } while (0) >> #define flush_dcache_page(page) do { } while (0) >> +#define flush_dcache_folio(folio) do { } while (0) >> #define flush_dcache_mmap_lock(mapping) do { } while (0) >> #define flush_dcache_mmap_unlock(mapping) do { } while (0) >> >> diff --git a/arch/loongarch/include/asm/pgtable.h b/arch/loongarch/include/asm/pgtable.h >> index d28fb9dbec59..0f5fa7c40c52 100644 >> --- a/arch/loongarch/include/asm/pgtable.h >> +++ b/arch/loongarch/include/asm/pgtable.h >> @@ -334,12 +334,20 @@ static inline void set_pte(pte_t *ptep, pte_t pteval) >> } >> } >> >> -static inline void set_pte_at(struct mm_struct *mm, unsigned long addr, >> - pte_t *ptep, pte_t pteval) >> -{ >> - set_pte(ptep, pteval); >> +static inline void set_ptes(struct mm_struct *mm, unsigned long addr, >> + pte_t *ptep, pte_t pte, unsigned int nr) >> +{ >> + for (;;) { >> + set_pte(ptep, pte); >> + if (--nr == 0) >> + break; >> + ptep++; >> + pte_val(pte) += 1 << _PFN_SHIFT; >> + } >> } >> >> +#define set_pte_at(mm, addr, ptep, pte) set_ptes(mm, addr, ptep, pte, 1) >> + >> static inline void pte_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep) >> { >> /* Preserve global status for the pair */ >> @@ -442,14 +450,16 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) >> (pgprot_val(newprot) & ~_PAGE_CHG_MASK)); >> } >> >> -extern void __update_tlb(struct vm_area_struct *vma, >> - unsigned long address, pte_t *ptep); >> +extern void __update_tlb(struct vm_area_struct *vma, unsigned long address, >> + pte_t *ptep, unsigned int nr); >> >> -static inline void update_mmu_cache(struct vm_area_struct *vma, >> - unsigned long address, pte_t *ptep) >> +static inline void update_mmu_cache_range(struct vm_area_struct *vma, >> + unsigned long address, pte_t *ptep, unsigned int nr) >> { >> - __update_tlb(vma, address, ptep); >> + __update_tlb(vma, address, ptep, nr); >> } >> +#define update_mmu_cache(vma, addr, ptep) \ >> + update_mmu_cache_range(vma, addr, ptep, 1) >> >> #define __HAVE_ARCH_UPDATE_MMU_TLB >> #define update_mmu_tlb update_mmu_cache >> @@ -457,7 +467,7 @@ static inline void update_mmu_cache(struct vm_area_struct *vma, >> static inline void update_mmu_cache_pmd(struct vm_area_struct *vma, >> unsigned long address, pmd_t *pmdp) >> { >> - __update_tlb(vma, address, (pte_t *)pmdp); >> + __update_tlb(vma, address, (pte_t *)pmdp, 1); >> } >> >> static inline unsigned long pmd_pfn(pmd_t pmd) >> diff --git a/arch/loongarch/mm/tlb.c b/arch/loongarch/mm/tlb.c >> index 8bad6b0cff59..ac0b19dbd1dc 100644 >> --- a/arch/loongarch/mm/tlb.c >> +++ b/arch/loongarch/mm/tlb.c >> @@ -162,7 +162,8 @@ static void __update_hugetlb(struct vm_area_struct *vma, unsigned long address, >> #endif >> } >> >> -void __update_tlb(struct vm_area_struct *vma, unsigned long address, pte_t *ptep) >> +void __update_tlb(struct vm_area_struct *vma, unsigned long address, >> + pte_t *ptep, unsigned int nr) >> { >> int idx; >> unsigned long flags; >> @@ -187,6 +188,7 @@ void __update_tlb(struct vm_area_struct *vma, unsigned long address, pte_t *ptep >> write_csr_entryhi(address); >> tlb_probe(); >> idx = read_csr_tlbidx(); >> +// I have no idea what to do here AFAIK you probably can't make __update_tlb do this, at least not directly. The underlying LoongArch instructions __update_tlb wraps (TLBWR or TLBFILL [1]) only update one TLB entry, and one entry consists of just two consecutive pages, like MIPS. The CSRs the hardware's gonna read [2] also don't seem to support expressing the "page number".  IMO you need to wrap this helper in some loop to provide the desired semantics. (The current implementation of LoongArch TLB very much resembles, if not *identical to* MIPS, if that helps. It's said future generations of LoongArch hardware would feature hardware-managed TLBs though, but I'm personally/generally wary of such claims.) Huacai may want to supply more details (or correct me) once he gets to this. [1]: https://loongson.github.io/LoongArch-Documentation/LoongArch-Vol1-EN.html#_tlbwr [2]: https://loongson.github.io/LoongArch-Documentation/LoongArch-Vol1-EN.html#control-and-status-registers-related-to-mapped-address-translation >> write_csr_pagesize(PS_DEFAULT_SIZE); >> write_csr_entrylo0(pte_val(*ptep++)); >> write_csr_entrylo1(pte_val(*ptep)); >> -- >> 2.39.1 >> -- WANG "xen0n" Xuerui Linux/LoongArch mailing list: https://lore.kernel.org/loongarch/