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 E5DC4C61DA4 for ; Wed, 15 Feb 2023 00:05:18 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B49596B0074; Tue, 14 Feb 2023 19:05:15 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id AF92A6B0075; Tue, 14 Feb 2023 19:05:15 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 974076B0078; Tue, 14 Feb 2023 19:05:15 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 77CC56B0075 for ; Tue, 14 Feb 2023 19:05:15 -0500 (EST) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 3481BA1054 for ; Wed, 15 Feb 2023 00:05:15 +0000 (UTC) X-FDA: 80467581390.10.F11402C Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf01.hostedemail.com (Postfix) with ESMTP id 96BCC40007 for ; Wed, 15 Feb 2023 00:05:13 +0000 (UTC) Authentication-Results: imf01.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=VMhl2Mxg; spf=none (imf01.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1676419513; a=rsa-sha256; cv=none; b=KTzfNrTYk8jGw0cTyZiiR3L/3VelDYIGUnW5gGESZZDIxRN+QIdzXLvbqnbbfWnERn+Atm LF1nLAbgfUI+3xZX4YNm78icpupkPlZuUnJedlhazgSo9Jyv1IQ2ImEnv9rLtYtaBcvVQP YWV4WgVS78fWNP1kOlGJvUe0nTVSHJc= ARC-Authentication-Results: i=1; imf01.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=VMhl2Mxg; spf=none (imf01.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1676419513; 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:dkim-signature; bh=14nHaJTTJLogPcUZuCEw0mL+Iya7jGOiXqjT0WfuZdM=; b=PwiDZ4bRuXbVWxNSTbBq5B6duaSwd7vSCpooZFjeKeBsMN43Ptmflp/PLoVSXPU18T/lOk xLzy1Md1o7kAj0nnIBL/aOz1jJrBhfN2CGdQR+DCon2peUGegpbCyoXpUVP2gUr+DyCznV 8imZHmdjj1r0swV+ATmewwwryPvDybk= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=14nHaJTTJLogPcUZuCEw0mL+Iya7jGOiXqjT0WfuZdM=; b=VMhl2MxgG1aA2Z9hNjtO5b58Vy nv826ZYIllfa1zt9yg7SEuriSrs0ex4xZ6nV9Jc3kXc3hXJxnlAHpijGVB1kXI8TakpR1A2AedpKY 3cM+LeFUIKKLJ+8AF3Sapzini1bb49OfSQ8M1yW9pTqmgBmSnDQnbyiCa2Yl9Foc9H849xveo3KYS dorlO+z+W5o9flgAIiPb662GdmEks3ScivOF35YJf2vehTnUhKZJeKCSXBx3Vd0m8pCj/oEbCe2A5 bf543Z+nuQbLbk6t+hlrliycPMkSFVoRDLia01T6ilwUZ+ki/WOy/2fh94XThA/g6n1oxY7fOiBuO xawIPtMw==; Received: from willy by casper.infradead.org with local (Exim 4.94.2 #2 (Red Hat Linux)) id 1pS5IN-006wkr-1k; Wed, 15 Feb 2023 00:05:11 +0000 From: "Matthew Wilcox (Oracle)" To: linux-mm@kvack.org, Huacai Chen , WANG Xuerui , loongarch@lists.linux.dev, linux-arch@vger.kernel.org Cc: "Matthew Wilcox (Oracle)" Subject: [PATCH 13/7] loongson: Implement the new page table range API Date: Wed, 15 Feb 2023 00:04:46 +0000 Message-Id: <20230215000446.1655635-5-willy@infradead.org> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20230215000446.1655635-1-willy@infradead.org> References: <20230211033948.891959-1-willy@infradead.org> <20230215000446.1655635-1-willy@infradead.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspam-User: X-Rspamd-Queue-Id: 96BCC40007 X-Rspamd-Server: rspam01 X-Stat-Signature: xt1ppg59tnapf1gu7ukburtfqnhca1ck X-HE-Tag: 1676419513-742157 X-HE-Meta: U2FsdGVkX1+mpgWuzzh5cXQ/kdbppdNiDeat0qLxFM1KPso8eS9MKXrXSPVHF8tC1rc9Rfg64Tr+OMQSK8u8InEsqqgLHTwrjvuRi9KeTthHwlNKzF2OoQ3dzNxC6oiEhOcAi4d3KajF9W7ZLNRJyhtiHf23l7P0gPDGHRPegHMzq8e35lidjfr0EYtQkgZRZZkIzbuak2jNMQwbempHqMZdWi3B5YvssHkO8FbmRrBHvikENPW0vopgMwt/4QBXkOc58cuCkqa77zcvQN1v/j5C8LIoKQbhk9ExzB9GbAK0izxkRsd95OQNfzfonW9/KJ12+7jh2BZppIu9M6ECtNO3Ng9Fiv352YwZC1U6ZiffIt7xPTau7Qgw2+3Jaqcbn9bKvL8dbd22R/cu/MSoRXdf5iuXNjzI3xFpC1U+XFemwGSjPNcqe19Ix62UINYkg0YhjRAMAWIPBKPtaiU/7nEQmVzQK64Fh+KyPjhy79B4RXFbMKYCW7pQez7Kmpo1GF9mLSIT0Tvc88kgCqEWTX+b+HknJ+iAZW3BeC+p2viLPfGdteIYFwh87Hhfux12qqXlBY9hF4X4rLGYJJokqpujt/lyP7jDGF6MYAvkKJ8H5qH024QkMLyrpb6d7p408mhPDESUUh5UoU/PdzSfZba5xvSboXgbIzw6FOvBnbIrtFfAukSZg/+3PWViXm8q2ILkYoyMB/qn3VXnsLxOGJFOCSxdtN1o3Q4fTzZxgGUZ+o0q+YCXZgHj+WExmiExgYmqdjKUUYTs5HWXHT2hSlt3Cs/dVJ8dvvXMCn9l5H1gWvtPK4HYlqoyp5ghy+0qcogPMiUTc+dMJZWWTTMtINpN4YAKxtuRAp73jq3rbQTc99Ga5cF5PDeXx8D5TWE3mXjvGuzD6948gHr8qXRHpVFMoUnvnLRPCIZDk5cvJ39ds2jMB11F+IlbTkFsG75hdjA6F19LMYJHvD0C1PX 0vR7xDGx EpAjqdW1wBrFcXfMyRW9IXxKDRQzLFC6BcMmXUlilB39BskDTngCqzzKssMa5KC3CK23fKde6YjjfBVquaObeSh48bcEsIPlIhE08JrSSFc9fAB+3IQRdTUrJ9VrdGjmKvyRQJPXpa897xg+o2CkpSQMdOdVAXSdvc/P1EaUsrZBvEwrwoiLOtRx3LR8cIdjMpcsG 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: Add set_ptes() and update_mmu_cache_range(). THIS PATCH IS INCOMPLETE. I DO NOT KNOW WHAT TO DO IN __update_tlb() 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 write_csr_pagesize(PS_DEFAULT_SIZE); write_csr_entrylo0(pte_val(*ptep++)); write_csr_entrylo1(pte_val(*ptep)); -- 2.39.1