Received: by 2002:a6b:500f:0:0:0:0:0 with SMTP id e15csp355561iob; Thu, 28 Apr 2022 04:08:24 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz7Tm3MVO7ErLsMZhRJCMzpJXt+ZfZX1iOheZbNPT+Yjmb7sE50xvSRl/pM82acF3nG5CeJ X-Received: by 2002:a05:6402:254e:b0:424:244:faf with SMTP id l14-20020a056402254e00b0042402440fafmr35277340edb.260.1651144104283; Thu, 28 Apr 2022 04:08:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1651144104; cv=none; d=google.com; s=arc-20160816; b=CHgmzOxYKBKyXQPQD/h4VzqgDXeKf/paukJp5Cp5RqfeLPWBz69AnuFOV/wC7g6dxS mvh+KirlVfX9Ws72tLIl3wrxQYPC5zI0D9MVuRy6+ZsuaEcxEZUYqwVzb84x2Bv2xF+t ICaPmrwB+VfxKH/sff/arZcQ40PlpevJ79qydlg7pc3HoVkOEzve7L+zr+aT1qCi6Af+ Rin9fsCNg6rr8X73nQpQUHwdnLMx5CwCYj8bXeOeXJd96jIH2lOdCxGNhcn9GzHcmfik UPZFBdTAyFwPA9Wtc62n7/sSTpGnbciiKI9yqK+F1mDMZABd0YBxdB6MiH/D+wC2DaTc u8wQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=dxx3jFBSLFnCrEGpOOmiPDuDEqHNXvjhwsh9uR9b4hQ=; b=XMT+ohdCvdzjauO7eSv+KO+Nyb4nKBbWiG85LcDfCew0Q8I+pIofO8+tj+KmnHsmMy afIItx0cypAAdX5fnhW+yjWJUhp2ToSNP+EyHbjzz23f0+tLk3VjFP09o5wypcpEDxJ3 k749rfLgAnqa8wU4BShsTagVu/StbfCD8f1c/O16VCRm+LRkFuXivkbh/GLEwMUGL1Nn VM8nvnw4+IKGi+zuGmPSn0TQBtfgVcizlUAHBAIY1afheoskjyaLvk5E4hVyDgtfxXDn QTD4cUSWQ7wZgHHpxPlA0DMxXbAJ5j3Ule/7+I4R0fxKGYW5me//jgV1CZ4R+vktyiZ2 Bgdw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=U3tWelU+; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id f12-20020a056402160c00b00418c2b5bdf2si3378183edv.212.2022.04.28.04.08.00; Thu, 28 Apr 2022 04:08:24 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=U3tWelU+; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344321AbiD1Ilt (ORCPT + 99 others); Thu, 28 Apr 2022 04:41:49 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39346 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1344201AbiD1IlM (ORCPT ); Thu, 28 Apr 2022 04:41:12 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 27F346385 for ; Thu, 28 Apr 2022 01:35:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1651134920; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=dxx3jFBSLFnCrEGpOOmiPDuDEqHNXvjhwsh9uR9b4hQ=; b=U3tWelU+gHe6yKfYU+6p7mpRdFraFy6JDF/8NlRCZBRbs2Rm8pKgmmQ6YJPqbrwfEdZEbU pN0Sa0dClh0gxJj45JdXEAGrv3Ei3yUXjlwFUzdS8K7I4ENI4EUDW7Z3pB/VoDjfdiPM+5 P8BCfy8X92Na1MqtmImVoT/vEM98yI8= Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-519-nW4Nb22tNrWMowJuKFxHHw-1; Thu, 28 Apr 2022 04:35:18 -0400 X-MC-Unique: nW4Nb22tNrWMowJuKFxHHw-1 Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.rdu2.redhat.com [10.11.54.9]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 2F7681E17FF5; Thu, 28 Apr 2022 08:35:17 +0000 (UTC) Received: from t480s.redhat.com (unknown [10.39.194.113]) by smtp.corp.redhat.com (Postfix) with ESMTP id AFA4E566A27; Thu, 28 Apr 2022 08:35:11 +0000 (UTC) From: David Hildenbrand To: linux-kernel@vger.kernel.org Cc: Andrew Morton , Hugh Dickins , Linus Torvalds , David Rientjes , Shakeel Butt , John Hubbard , Jason Gunthorpe , Mike Kravetz , Mike Rapoport , Yang Shi , "Kirill A . Shutemov" , Matthew Wilcox , Vlastimil Babka , Jann Horn , Michal Hocko , Nadav Amit , Rik van Riel , Roman Gushchin , Andrea Arcangeli , Peter Xu , Donald Dutile , Christoph Hellwig , Oleg Nesterov , Jan Kara , Liang Zhang , Pedro Gomes , Oded Gabbay , linux-mm@kvack.org, David Hildenbrand Subject: [PATCH v4 05/17] mm/rmap: convert RMAP flags to a proper distinct rmap_t type Date: Thu, 28 Apr 2022 10:34:29 +0200 Message-Id: <20220428083441.37290-6-david@redhat.com> In-Reply-To: <20220428083441.37290-1-david@redhat.com> References: <20220428083441.37290-1-david@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.85 on 10.11.54.9 X-Spam-Status: No, score=-3.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_LOW, SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org We want to pass the flags to more than one anon rmap function, getting rid of special "do_page_add_anon_rmap()". So let's pass around a distinct __bitwise type and refine documentation. Acked-by: Vlastimil Babka Signed-off-by: David Hildenbrand --- include/linux/rmap.h | 22 ++++++++++++++++++---- mm/memory.c | 6 +++--- mm/rmap.c | 7 ++++--- 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/include/linux/rmap.h b/include/linux/rmap.h index 9d602fc34063..2d0f12119a13 100644 --- a/include/linux/rmap.h +++ b/include/linux/rmap.h @@ -160,9 +160,23 @@ static inline void anon_vma_merge(struct vm_area_struct *vma, struct anon_vma *page_get_anon_vma(struct page *page); -/* bitflags for do_page_add_anon_rmap() */ -#define RMAP_EXCLUSIVE 0x01 -#define RMAP_COMPOUND 0x02 +/* RMAP flags, currently only relevant for some anon rmap operations. */ +typedef int __bitwise rmap_t; + +/* + * No special request: if the page is a subpage of a compound page, it is + * mapped via a PTE. The mapped (sub)page is possibly shared between processes. + */ +#define RMAP_NONE ((__force rmap_t)0) + +/* The (sub)page is exclusive to a single process. */ +#define RMAP_EXCLUSIVE ((__force rmap_t)BIT(0)) + +/* + * The compound page is not mapped via PTEs, but instead via a single PMD and + * should be accounted accordingly. + */ +#define RMAP_COMPOUND ((__force rmap_t)BIT(1)) /* * rmap interfaces called when adding or removing pte of page @@ -171,7 +185,7 @@ void page_move_anon_rmap(struct page *, struct vm_area_struct *); void page_add_anon_rmap(struct page *, struct vm_area_struct *, unsigned long address, bool compound); void do_page_add_anon_rmap(struct page *, struct vm_area_struct *, - unsigned long address, int flags); + unsigned long address, rmap_t flags); void page_add_new_anon_rmap(struct page *, struct vm_area_struct *, unsigned long address, bool compound); void page_add_file_rmap(struct page *, struct vm_area_struct *, diff --git a/mm/memory.c b/mm/memory.c index 2112484682a9..414f4cf4fcf1 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -3507,10 +3507,10 @@ vm_fault_t do_swap_page(struct vm_fault *vmf) struct vm_area_struct *vma = vmf->vma; struct page *page = NULL, *swapcache; struct swap_info_struct *si = NULL; + rmap_t rmap_flags = RMAP_NONE; swp_entry_t entry; pte_t pte; int locked; - int exclusive = 0; vm_fault_t ret = 0; void *shadow = NULL; @@ -3685,7 +3685,7 @@ vm_fault_t do_swap_page(struct vm_fault *vmf) pte = maybe_mkwrite(pte_mkdirty(pte), vma); vmf->flags &= ~FAULT_FLAG_WRITE; ret |= VM_FAULT_WRITE; - exclusive = RMAP_EXCLUSIVE; + rmap_flags |= RMAP_EXCLUSIVE; } flush_icache_page(vma, page); if (pte_swp_soft_dirty(vmf->orig_pte)) @@ -3701,7 +3701,7 @@ vm_fault_t do_swap_page(struct vm_fault *vmf) page_add_new_anon_rmap(page, vma, vmf->address, false); lru_cache_add_inactive_or_unevictable(page, vma); } else { - do_page_add_anon_rmap(page, vma, vmf->address, exclusive); + do_page_add_anon_rmap(page, vma, vmf->address, rmap_flags); } set_pte_at(vma->vm_mm, vmf->address, vmf->pte, pte); diff --git a/mm/rmap.c b/mm/rmap.c index eb246fc8b089..8359aed9255e 100644 --- a/mm/rmap.c +++ b/mm/rmap.c @@ -1137,7 +1137,8 @@ static void __page_check_anon_rmap(struct page *page, void page_add_anon_rmap(struct page *page, struct vm_area_struct *vma, unsigned long address, bool compound) { - do_page_add_anon_rmap(page, vma, address, compound ? RMAP_COMPOUND : 0); + do_page_add_anon_rmap(page, vma, address, + compound ? RMAP_COMPOUND : RMAP_NONE); } /* @@ -1146,7 +1147,7 @@ void page_add_anon_rmap(struct page *page, * Everybody else should continue to use page_add_anon_rmap above. */ void do_page_add_anon_rmap(struct page *page, - struct vm_area_struct *vma, unsigned long address, int flags) + struct vm_area_struct *vma, unsigned long address, rmap_t flags) { bool compound = flags & RMAP_COMPOUND; bool first; @@ -1185,7 +1186,7 @@ void do_page_add_anon_rmap(struct page *page, /* address might be in next vma when migration races vma_adjust */ else if (first) __page_set_anon_rmap(page, vma, address, - flags & RMAP_EXCLUSIVE); + !!(flags & RMAP_EXCLUSIVE)); else __page_check_anon_rmap(page, vma, address); -- 2.35.1