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 DD43DC636D4 for ; Thu, 16 Feb 2023 00:59:53 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 64C4E6B007D; Wed, 15 Feb 2023 19:59:53 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 5FC996B007E; Wed, 15 Feb 2023 19:59:53 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 4C3EB6B0080; Wed, 15 Feb 2023 19:59:53 -0500 (EST) 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 39DC76B007D for ; Wed, 15 Feb 2023 19:59:53 -0500 (EST) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 0E1D2120564 for ; Thu, 16 Feb 2023 00:59:53 +0000 (UTC) X-FDA: 80471347866.11.EF6EBBE Received: from mail-pl1-f178.google.com (mail-pl1-f178.google.com [209.85.214.178]) by imf14.hostedemail.com (Postfix) with ESMTP id 30926100002 for ; Thu, 16 Feb 2023 00:59:51 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b="BQTA+Db/"; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf14.hostedemail.com: domain of schmitzmic@gmail.com designates 209.85.214.178 as permitted sender) smtp.mailfrom=schmitzmic@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1676509191; 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=mpHQhzeyzL5wD6cZybCHw0C081RE1xl3jXGOGKhpSHc=; b=14biQYilnLRdSSNlk23nNnkFrqYAgNMGnQKE42+u2O+/CJsqwvdGDDtymMYXyGeFZfDO14 jOsgHUHbWg7R1D6XA+eHOduLHqcS51VtcrQNdIDCPg194WMMyOwNRTQ/yjZDwO+rkj2/xM xlN4ZiJ4P2JckH+JLHg0Uo5+fD7D/bI= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b="BQTA+Db/"; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf14.hostedemail.com: domain of schmitzmic@gmail.com designates 209.85.214.178 as permitted sender) smtp.mailfrom=schmitzmic@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1676509191; a=rsa-sha256; cv=none; b=hNQxwMNcgn4o/OQEzZQ8eOMo529SbBRv9SFslGkigsAib59G9Xo8KqqkuJNcHQOzt1zVUP JfMrlNRVB7FhyHytCPVZB+qHyd8jy3WjmoiMOAB+iFoG8XbhOFZPBrjgDPnpm/XfEcfGOu NXOfn7Xulx5S0vxOhs/V6MYYO8wZYM8= Received: by mail-pl1-f178.google.com with SMTP id i18so483135pli.3 for ; Wed, 15 Feb 2023 16:59:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:to :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=mpHQhzeyzL5wD6cZybCHw0C081RE1xl3jXGOGKhpSHc=; b=BQTA+Db/5dUfeEZto6bJS/MbnGO3ZD5hXIRPrej7JH5TEgw7bl03VPxjQEv0GiZ6FO DHHRPc7s2ay4VWWigo8PljTia413U8vrJrVfuRBnttCQzcKPG3UH7PLxxrsiGjApRQIQ 22y0byBAuVO08L8BAfmMPewvYtQTEF8AqOJjmaspZF799pi/rQ1JjmKMjdNjJWpV5t1D AameQMn+kU8kJdBAFO114OFMf1+HukRDrhcGnw4mbMOREhcM0l6uYcKm/M9zau/wjUFL LW7EBP4u0wPXTAOsmqjIMFBbN40bpkwVQnj01jdTGxfx9SUPfzK1VAK+Apmf23B9RlvQ PAmg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=mpHQhzeyzL5wD6cZybCHw0C081RE1xl3jXGOGKhpSHc=; b=mUW1h3voCc+OdZyXXdAdNfnu3Sg+ZxzCn5eAxHGYzJKE7tLDkPQo1RnNuynHfgsP19 KIuBvyhpNxcaDK/UoJQTKpzkDXRoq6Pu5reCCR9UKzWtGXnHNKN3qki3Q8ybs3U4E+ff nV9FVukNoQMpon4H/AzFM9Sjn6C+EQCSAyPr0/8YWw+VxwTbtk4DYJEObNy3GoY1uC3o 04u05O8dbqj5bFJbKom5DqEx0KA8uFJaAGShZ9zrK1ZEf9ymeHJ2b58/uJbZAvI0NgyO f97vi6J6IeekCmeVhL56va7F6mHdCT7mF+6YQ7VWpYRaA0IRnqJxRawzaEhh/ihbuiMH Fs7w== X-Gm-Message-State: AO0yUKVlhFy01wLhmHZLkerI7Fcob6t9Pv111pDFtqLMb+btwUUVH2c5 2mj8//7p0t9XVMWgjNH5qMw= X-Google-Smtp-Source: AK7set9luO9T3j6foSqzsOaMOecYdtmK+BrOQ5wXWoT7IBdAJRugwBFrd2VAWQLwjg6ebn3RF6BNDg== X-Received: by 2002:a17:90b:380e:b0:22b:f622:56ae with SMTP id mq14-20020a17090b380e00b0022bf62256aemr4926750pjb.23.1676509190042; Wed, 15 Feb 2023 16:59:50 -0800 (PST) Received: from ?IPV6:2001:df0:0:200c:cd94:f395:2261:621f? ([2001:df0:0:200c:cd94:f395:2261:621f]) by smtp.gmail.com with ESMTPSA id m6-20020a17090a858600b00233e8a83853sm207269pjn.34.2023.02.15.16.59.46 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 15 Feb 2023 16:59:49 -0800 (PST) Message-ID: <84c923f7-c60b-068d-bb06-48aea1412f53@gmail.com> Date: Thu, 16 Feb 2023 13:59:44 +1300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.7.1 Subject: Re: [PATCH 15/17] m68k: Implement the new page table range API Content-Language: en-US To: "Matthew Wilcox (Oracle)" , linux-mm@kvack.org, linux-m68k@lists.linux-m68k.org, Geert Uytterhoeven , linux-arch@vger.kernel.org References: <20230215000446.1655635-1-willy@infradead.org> <20230215200920.1849567-1-willy@infradead.org> <20230215200920.1849567-2-willy@infradead.org> From: Michael Schmitz In-Reply-To: <20230215200920.1849567-2-willy@infradead.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 30926100002 X-Rspamd-Server: rspam09 X-Rspam-User: X-Stat-Signature: tc61k9s1ihy7oq7s7wryjxpgycr4ycmj X-HE-Tag: 1676509191-266110 X-HE-Meta: U2FsdGVkX19KMPpIMDaLI0wj2b0u6ihxCLQPeq3IdG/WcPbhk0ZFNbeBYJ8TxWG7CCQBNDyBNkJpcq//Hw0La0SZoWxuBIKte/Nm4d6brizmZZ2GvQ9GtNfs1iRlo05eFgKVn42AA5emZGVnDGilUZ1Cg5KB54ojRS5WSk0Msb8L36famQtTIXIjqwGNCEXtsw0hu2/uo3hhID+DMZ1QTpo7xdsOTZgpewX+0RKAVOuuy0UBNQY94R/YMIGjGZaRd8Fv5qeHKfVn5C3V+rAiw5jv/FbO2Vo+E19qIC2yj6jHJ9Jbr8oOUzNj6SnTkLYOjUovxysC4ypAr4MTEtUoFslAqg5Nh6DuJ1vRRHXRNBLPc2TRLMJ3ajNBVEYBhp9zV1rVA+oELNOBp2nKxBsWlEJBTA2XHAveyinLZvVOYjQn6ByomF+WC6aV73QxekGef4Y9EGuLDV26+0+eoVzjhoO4ePHrFLzz6yfwJlArf7yaalCI6v5lv6GY8f/GBQ3iD9XhW9TzWQjDopDcUdqaD2F2xvqmzqYJp7e/0fsBX++aJV1W8Wyvn5jiVxOJWRKm4CUC2hTMR8gSaDed7OFv8Z1xi+oorY8S6tr6TA23N5aG8bmFFm3nmh5akjinqNdTW3wkKC2QA+1Oks3joJAaAb17GzskTEc0rUby809TqupD9+8ZuIRBfANaI87YTOzP8nyVb9yf2A88cEQNaLg4NAyyd6RO6Ah5R/rapnUoNAo5JRop2d+8qxHIuaWWlrcsSfdLujWmkxghm+rbfOhwHua5cQ4ITg7v0yAJ0cVDLOUZTmWcVTAR/yrjKjTcIxwYd38+ZBbDmxluUl2KcO9a1tg+GlMURwRP7PvKacb5BS5+UWHYSTwI/trgnTNo6tFp6m7veHyHMPlS9UApI/z+YjU2OwgxPhbjtg6jA4Ej9Gz8k6+HNylDbHUvKpVr6LEedoBnFcTBlbehKZ6U5z2 DVeJakxq eZ/PdVqdmLivycznLSYxEwHUGi29BUpEVeMqh9WuVy5aKNQ+PnXeM/zyU6YflGKnzYRynX/iiAqjFfKWUBpd5mXKm81capH58IPI3KgxpGHbl5rtInaFfraJxqWqX2kvXgGkNxM/EO6ojmjle67Np+lxcJi6clO895/5bE5j2yU5XO7V1OnZAGCshaSd93YjS5iimwIMk/ADoaKAhACxlGImK4YLa+zP4Kb48ozrX43fEgtac5LtVKRTexo1sUdB8rF1aUPJuzqlJ5mPJCtmqqykqT1KP9vUBaaGPc7pL/XRc6df91HmOVLHo+UaRZcj4GgXXA30114PbuQdUUOPxBTwRz0gim6MYj8eHicCXVfB2oYvN7etPpv5ENxeCY3YWjlgVjrafb6Vd/7btHtnToXuKCJ2Ayowc41NM7tnM58lnAjQajfui1sDnkLgOo+oeisTdZftmd0i56MJgTg+qHtS3oSe0Hkrw9S9Z9Ii2HRNVlYM= 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: Matthew, On 16/02/23 09:09, Matthew Wilcox (Oracle) wrote: > Add set_ptes(), update_mmu_cache_range(), flush_icache_pages() and > flush_dcache_folio(). I'm not entirely certain that the 040/060 case > in __flush_pages_to_ram() is correct. I'm pretty sure you need to iterate to hit each of the pages - the code as is will only push cache entries for the first page. Quoting the 040 UM: "Both instructions [cinv, cpush] allow operation on a single cache line, all cache lines in a specific page, or an entire cache, and can select one or both caches for the operation. For line and page operations, a physical address in an address register specifies the memory address." Cheers,     Michael > Signed-off-by: Matthew Wilcox (Oracle) > --- > arch/m68k/include/asm/cacheflush_mm.h | 12 ++++++++---- > arch/m68k/include/asm/pgtable_mm.h | 21 ++++++++++++++++++--- > arch/m68k/mm/motorola.c | 2 +- > 3 files changed, 27 insertions(+), 8 deletions(-) > > diff --git a/arch/m68k/include/asm/cacheflush_mm.h b/arch/m68k/include/asm/cacheflush_mm.h > index 1ac55e7b47f0..2244c35178d0 100644 > --- a/arch/m68k/include/asm/cacheflush_mm.h > +++ b/arch/m68k/include/asm/cacheflush_mm.h > @@ -220,13 +220,13 @@ static inline void flush_cache_page(struct vm_area_struct *vma, unsigned long vm > > /* Push the page at kernel virtual address and clear the icache */ > /* RZ: use cpush %bc instead of cpush %dc, cinv %ic */ > -static inline void __flush_page_to_ram(void *vaddr) > +static inline void __flush_pages_to_ram(void *vaddr, unsigned int nr) > { > if (CPU_IS_COLDFIRE) { > unsigned long addr, start, end; > addr = ((unsigned long) vaddr) & ~(PAGE_SIZE - 1); > start = addr & ICACHE_SET_MASK; > - end = (addr + PAGE_SIZE - 1) & ICACHE_SET_MASK; > + end = (addr + nr * PAGE_SIZE - 1) & ICACHE_SET_MASK; > if (start > end) { > flush_cf_bcache(0, end); > end = ICACHE_MAX_ADDR; > @@ -249,10 +249,14 @@ static inline void __flush_page_to_ram(void *vaddr) > } > > #define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 1 > -#define flush_dcache_page(page) __flush_page_to_ram(page_address(page)) > +#define flush_dcache_page(page) __flush_pages_to_ram(page_address(page), 1) > +#define flush_dcache_folio(folio) \ > + __flush_pages_to_ram(folio_address(folio), folio_nr_pages(folio)) > #define flush_dcache_mmap_lock(mapping) do { } while (0) > #define flush_dcache_mmap_unlock(mapping) do { } while (0) > -#define flush_icache_page(vma, page) __flush_page_to_ram(page_address(page)) > +#define flush_icache_pages(vma, page, nr) \ > + __flush_pages_to_ram(page_address(page), nr) > +#define flush_icache_page(vma, page) flush_icache_pages(vma, page, 1) > > extern void flush_icache_user_page(struct vm_area_struct *vma, struct page *page, > unsigned long addr, int len); > diff --git a/arch/m68k/include/asm/pgtable_mm.h b/arch/m68k/include/asm/pgtable_mm.h > index b93c41fe2067..400206c17c97 100644 > --- a/arch/m68k/include/asm/pgtable_mm.h > +++ b/arch/m68k/include/asm/pgtable_mm.h > @@ -31,8 +31,20 @@ > do{ \ > *(pteptr) = (pteval); \ > } while(0) > -#define set_pte_at(mm,addr,ptep,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) += PAGE_SIZE; > + } > +} > + > +#define set_pte_at(mm, addr, ptep, pte) set_ptes(mm, addr, ptep, pte, 1) > > /* PMD_SHIFT determines the size of the area a second-level page table can map */ > #if CONFIG_PGTABLE_LEVELS == 3 > @@ -138,11 +150,14 @@ extern void kernel_set_cachemode(void *addr, unsigned long size, int cmode); > * tables contain all the necessary information. The Sun3 does, but > * they are updated on demand. > */ > -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) > { > } > > +#define update_mmu_cache(vma, addr, ptep) \ > + update_mmu_cache_range(vma, addr, ptep, 1) > + > #endif /* !__ASSEMBLY__ */ > > /* MMU-specific headers */ > diff --git a/arch/m68k/mm/motorola.c b/arch/m68k/mm/motorola.c > index 2a375637e007..7784d0fcdf6e 100644 > --- a/arch/m68k/mm/motorola.c > +++ b/arch/m68k/mm/motorola.c > @@ -81,7 +81,7 @@ static inline void cache_page(void *vaddr) > > void mmu_page_ctor(void *page) > { > - __flush_page_to_ram(page); > + __flush_pages_to_ram(page, 1); > flush_tlb_kernel_page(page); > nocache_page(page); > }