From patchwork Mon Jul 10 20:43:06 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matthew Wilcox X-Patchwork-Id: 13307634 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 8EB73EB64DC for ; Mon, 10 Jul 2023 20:44:53 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 50F458E0024; Mon, 10 Jul 2023 16:44:09 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 496168E001B; Mon, 10 Jul 2023 16:44:09 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 336A48E0024; Mon, 10 Jul 2023 16:44:09 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 24B038E001B for ; Mon, 10 Jul 2023 16:44:09 -0400 (EDT) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id F38F51C7CEC for ; Mon, 10 Jul 2023 20:44:08 +0000 (UTC) X-FDA: 80996879376.24.F0D4D1B Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf14.hostedemail.com (Postfix) with ESMTP id D789D10000F for ; Mon, 10 Jul 2023 20:44:06 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=ppPLHwkc; dmarc=none; spf=none (imf14.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1689021847; a=rsa-sha256; cv=none; b=nQVqaJnm0sQIQQI3kWX40d7gIAaFBknQJuNlMXAkz53XU85uuJ6YwPmB92fI3LJcSkeqYT eSEJORGMoRZzu+8BOpvfZG+rT4u8rCRJB60ZFcjrJD1A79hDwNql1xprPLpEBE+3XxbFF1 fnUEeVRdKvcX95C7WUU3kajdrxepsL8= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=ppPLHwkc; dmarc=none; spf=none (imf14.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1689021847; 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=ynZRvvhfxJbLcCtmfVp5saL88qGUbGsuSyWQAo7RARA=; b=uchZBLAzCrAugf/4bKWACLi+Tszvfbkg/WZ8dHbLKNFgttah/qC5x2zhL+o8r3Z/LU/aqB M2Utcv4YdK3dpDn+v1SDy1Fv6LmFJoCwEGXiaamI9baDYih8/Tqkn5j76f5gkUh8Gt7bpS 9p98OG0IEgDHZpJeWJsTR/lSXwscjW0= 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=ynZRvvhfxJbLcCtmfVp5saL88qGUbGsuSyWQAo7RARA=; b=ppPLHwkc8PkE5KTNl7AKQdgBW4 c4iELF8cC+JKAEjLxJ+VvwuPt8I1Bkn/wUOZt/lGDQP7PmZZnQhjzSldS6l+jFtPadqFz6Fvj/yYo CA0CNCuv0zIxgNykGwxtwMyEh08s8iMfnFLwJTefF5Ke2lQ7ewfGPUSt5V0bbquZ7bvpaM6DXkjBd hBCicFnOyUrKcbJBMtKHYfXsI3f6jNl9lSF7XUDik389BDsG8ZBHYld/8T3ZmWJI+PMvsxUTZLRB3 1MOctuRbVKfNuo9Jtc964irIvPwm5z5eL5eBbWoSRYGK3ADd8udnc98e94on+6qKF02DI0aV3K4yr mB2ZZIxA==; Received: from willy by casper.infradead.org with local (Exim 4.94.2 #2 (Red Hat Linux)) id 1qIxjR-00EuoN-Hy; Mon, 10 Jul 2023 20:43:41 +0000 From: "Matthew Wilcox (Oracle)" To: Andrew Morton Cc: "Matthew Wilcox (Oracle)" , linux-arch@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Mike Rapoport , Anshuman Khandual Subject: [PATCH v5 05/38] mm: Remove ARCH_IMPLEMENTS_FLUSH_DCACHE_FOLIO Date: Mon, 10 Jul 2023 21:43:06 +0100 Message-Id: <20230710204339.3554919-6-willy@infradead.org> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20230710204339.3554919-1-willy@infradead.org> References: <20230710204339.3554919-1-willy@infradead.org> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: D789D10000F X-Stat-Signature: n5grqrhwywagebttfewr1wthpyzsphq1 X-HE-Tag: 1689021846-643138 X-HE-Meta: U2FsdGVkX1+rMaFcm5Ddie5W9fMzYY1CJ7kSqPobP8GVC0Ylm9fEjl4mmPxjHI93jea+Gmhu9N5qA3pSfiISWKM1D9A0Vvx2B3tkC97qBqQPeaj4Hzli0wQN8suUq7Rp5uhBrn9xS0JKOG5lhXTU+qDxE/qzEpQ6J/YVg35hCqlx0JsDUF6xNwLuh4/jhZQGz0fIEjstOTwW9iM5ZnDgURpezZSREHMSjr/4PwX2BLTRw5mYGzN8strug/pbxczmJr4vDg7Yb2rTqHVFFkvVvhHqE83C7PI9riUZHHCNIROnbJTWiLwwOmEK230jLTZcoxmJ/f+T3lqhTld7GnwdStIIKLauBAvp6X9rXPQDThMO+KdfA6FS+Gju/wDaA+QY4F3KCrC4y8Hxkx0DA+fmG2nIxR20b2ElbWlX/zGwJq3SGfHriMxDhDCLVjn2Jfp0UFxWPWI0uj+dWfmo+6xUbXWmDEyuoqZKe5G2jXJZGxTqdQu1aQ83gsuKO4w6Px7F4G5ogiqHoQD8C+26Z9fvB1MfNO8p+6K/9Ngcw6wM8zNEZrSWSXzrZASk6GLv8MqE0AStWyRRVAXBYv3rhJfALMEvfWPAggqdfIf3K8G7f598LsItq8ctxM3paUuWbSw73MkfV+sDo6w+s7BhPtWz+ZMQgJvg0cszYG72kYgAJEwYOWaId5SAnQQJ02aMp0FUeA50OLGYmnpZjTH+lxjotGLdfxLkRKQgAuvMv3ARdGdTMnY8K4jTL/fLKgVUt4QVf72m5Qbb8NR0bg2kMDeLnJJmLJ66qHtOsjt5bfCNMzwoKgpuEgTTSzJjg4nQiCLcBd8oYrIBhlkHC4IqBcvMY9GudNV29LHwv2ks4inxJh17iBFp63RLAPQaA1WfKmOzkevNVpXXHtNMZBmwupjVTThRJzMQcTyzcFgt5EF4Kav1mabv8k3mjF455cER9Wxh9NFISXEtiDnPAG2Nmge VB5ks3Sd A9jpt3IeZlneIrkKV99qr+GckvPD0F87DKA0O6muQhtGpjfzpCPxFtzLwDKxxahTknGAqcZ9X+Kv1rrQeNzOZnThImKNBau/m8DkwYodxKNUmGsP8aFpHbdRQqekn/xdvOaEYyoWtauXANKw7xxA8JAt6BdjO2i7Fx4Jng6RQqUaLWNsApMYcEmsJnnSbJ5lDyg+1DHQm2qGYAkH34kF04Wy+tBhhVdnNZKlj8zRpe6tPlIIOroDGaVe1SGfOt2E2Aa1pIbZ/n3FygDdkvq5GttcgkKOuKapecRzWzyYe9+v+3HKDn8nqq02lDDFIu/+35WevBnj9gSCAnjavq6j7vtQUwxXH4ujtE897 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: Current best practice is to reuse the name of the function as a define to indicate that the function is implemented by the architecture. Signed-off-by: Matthew Wilcox (Oracle) Acked-by: Mike Rapoport (IBM) Reviewed-by: Anshuman Khandual --- Documentation/core-api/cachetlb.rst | 24 +++++++++--------------- include/linux/cacheflush.h | 4 ++-- mm/util.c | 2 +- 3 files changed, 12 insertions(+), 18 deletions(-) diff --git a/Documentation/core-api/cachetlb.rst b/Documentation/core-api/cachetlb.rst index b645947954fb..889fc84ccd1b 100644 --- a/Documentation/core-api/cachetlb.rst +++ b/Documentation/core-api/cachetlb.rst @@ -273,7 +273,7 @@ maps this page at its virtual address. If D-cache aliasing is not an issue, these two routines may simply call memcpy/memset directly and do nothing more. - ``void flush_dcache_page(struct page *page)`` + ``void flush_dcache_folio(struct folio *folio)`` This routines must be called when: @@ -281,7 +281,7 @@ maps this page at its virtual address. and / or in high memory b) the kernel is about to read from a page cache page and user space shared/writable mappings of this page potentially exist. Note - that {get,pin}_user_pages{_fast} already call flush_dcache_page + that {get,pin}_user_pages{_fast} already call flush_dcache_folio on any page found in the user address space and thus driver code rarely needs to take this into account. @@ -295,7 +295,7 @@ maps this page at its virtual address. The phrase "kernel writes to a page cache page" means, specifically, that the kernel executes store instructions that dirty data in that - page at the page->virtual mapping of that page. It is important to + page at the kernel virtual mapping of that page. It is important to flush here to handle D-cache aliasing, to make sure these kernel stores are visible to user space mappings of that page. @@ -306,18 +306,18 @@ maps this page at its virtual address. If D-cache aliasing is not an issue, this routine may simply be defined as a nop on that architecture. - There is a bit set aside in page->flags (PG_arch_1) as "architecture + There is a bit set aside in folio->flags (PG_arch_1) as "architecture private". The kernel guarantees that, for pagecache pages, it will clear this bit when such a page first enters the pagecache. This allows these interfaces to be implemented much more efficiently. It allows one to "defer" (perhaps indefinitely) the actual flush if there are currently no user processes mapping this - page. See sparc64's flush_dcache_page and update_mmu_cache_range + page. See sparc64's flush_dcache_folio and update_mmu_cache_range implementations for an example of how to go about doing this. - The idea is, first at flush_dcache_page() time, if - page_file_mapping() returns a mapping, and mapping_mapped on that + The idea is, first at flush_dcache_folio() time, if + folio_flush_mapping() returns a mapping, and mapping_mapped() on that mapping returns %false, just mark the architecture private page flag bit. Later, in update_mmu_cache_range(), a check is made of this flag bit, and if set the flush is done and the flag bit @@ -331,12 +331,6 @@ maps this page at its virtual address. dirty. Again, see sparc64 for examples of how to deal with this. - ``void flush_dcache_folio(struct folio *folio)`` - This function is called under the same circumstances as - flush_dcache_page(). It allows the architecture to - optimise for flushing the entire folio of pages instead - of flushing one page at a time. - ``void copy_to_user_page(struct vm_area_struct *vma, struct page *page, unsigned long user_vaddr, void *dst, void *src, int len)`` ``void copy_from_user_page(struct vm_area_struct *vma, struct page *page, @@ -357,7 +351,7 @@ maps this page at its virtual address. When the kernel needs to access the contents of an anonymous page, it calls this function (currently only - get_user_pages()). Note: flush_dcache_page() deliberately + get_user_pages()). Note: flush_dcache_folio() deliberately doesn't work for an anonymous page. The default implementation is a nop (and should remain so for all coherent architectures). For incoherent architectures, it should flush @@ -374,7 +368,7 @@ maps this page at its virtual address. ``void flush_icache_page(struct vm_area_struct *vma, struct page *page)`` All the functionality of flush_icache_page can be implemented in - flush_dcache_page and update_mmu_cache_range. In the future, the hope + flush_dcache_folio and update_mmu_cache_range. In the future, the hope is to remove this interface completely. The final category of APIs is for I/O to deliberately aliased address diff --git a/include/linux/cacheflush.h b/include/linux/cacheflush.h index a6189d21f2ba..82136f3fcf54 100644 --- a/include/linux/cacheflush.h +++ b/include/linux/cacheflush.h @@ -7,14 +7,14 @@ struct folio; #if ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE -#ifndef ARCH_IMPLEMENTS_FLUSH_DCACHE_FOLIO +#ifndef flush_dcache_folio void flush_dcache_folio(struct folio *folio); #endif #else static inline void flush_dcache_folio(struct folio *folio) { } -#define ARCH_IMPLEMENTS_FLUSH_DCACHE_FOLIO 0 +#define flush_dcache_folio flush_dcache_folio #endif /* ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE */ #endif /* _LINUX_CACHEFLUSH_H */ diff --git a/mm/util.c b/mm/util.c index 5e9305189c3f..cde229b05eb3 100644 --- a/mm/util.c +++ b/mm/util.c @@ -1119,7 +1119,7 @@ void page_offline_end(void) } EXPORT_SYMBOL(page_offline_end); -#ifndef ARCH_IMPLEMENTS_FLUSH_DCACHE_FOLIO +#ifndef flush_dcache_folio void flush_dcache_folio(struct folio *folio) { long i, nr = folio_nr_pages(folio);