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 X-Spam-Level: X-Spam-Status: No, score=-24.8 required=3.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, USER_AGENT_SANE_1,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 859F8C433E0 for ; Tue, 2 Feb 2021 21:03:50 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 0176F64F3F for ; Tue, 2 Feb 2021 21:03:49 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0176F64F3F Authentication-Results: mail.kernel.org; dmarc=fail (p=reject dis=none) header.from=google.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 6DD596B0005; Tue, 2 Feb 2021 16:03:49 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 6671F6B0006; Tue, 2 Feb 2021 16:03:49 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 52F7B6B006C; Tue, 2 Feb 2021 16:03:49 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0149.hostedemail.com [216.40.44.149]) by kanga.kvack.org (Postfix) with ESMTP id 397CE6B0005 for ; Tue, 2 Feb 2021 16:03:49 -0500 (EST) Received: from smtpin09.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay03.hostedemail.com (Postfix) with ESMTP id ED77C8249980 for ; Tue, 2 Feb 2021 21:03:48 +0000 (UTC) X-FDA: 77774554536.09.band51_0003eb2275cd Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin09.hostedemail.com (Postfix) with ESMTP id CF057180AD801 for ; Tue, 2 Feb 2021 21:03:48 +0000 (UTC) X-HE-Tag: band51_0003eb2275cd X-Filterd-Recvd-Size: 6836 Received: from mail-ot1-f53.google.com (mail-ot1-f53.google.com [209.85.210.53]) by imf05.hostedemail.com (Postfix) with ESMTP for ; Tue, 2 Feb 2021 21:03:48 +0000 (UTC) Received: by mail-ot1-f53.google.com with SMTP id 63so21299024oty.0 for ; Tue, 02 Feb 2021 13:03:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:from:to:cc:subject:in-reply-to:message-id:references :user-agent:mime-version; bh=ZsKito0PPC3VESrZMizMHi4i2e28LHAJItDb4eofiAk=; b=sEAVITEt74b7QqIvte43l5CEvMAF+x6tSbFyFV50suk0ZhA+IEhPQy1Tw8QKilsnmU 2C2KMTwEGB25YMrnrQ9hSKnEEc0iEwMBckvAZ5171uIU57PGjkKa5zN1o2xaBlUMVH7f By4ciUSd5J+f59n9Bdw/TYdOOx7l3G2HJSkwE3U7sm8LI4+xpzx6T9G2Sqw4Ug5N37Zj MUOraGZXOkPb6HNpIbI21257dbzdyFw3Ir3eQpi8t5qQQ5RzMtW6eE+7dJO/FS2MKQ7q YaRQQ/nNBesqSM6n+f/wsq/uF+Uhii4FX70RJYF7usJO3kFK6H1vfvRlaO3TxZ8Ssq3p lQXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:in-reply-to:message-id :references:user-agent:mime-version; bh=ZsKito0PPC3VESrZMizMHi4i2e28LHAJItDb4eofiAk=; b=TxTfuGZGRYf+mNs4aDT8MJg+cVx6NZ1p/WVrQejq4m4Df3jwqf8xO5+ovjb982Fb+T TUyDIO3IdVsf00hueCcCQszSBNWmLINEhCtwMSk5GXJicCfa5HuYUAIG/4Y5CFOk8bGG hSi4wGai+pYZQ3kftkeT00WbPZyeZZdIVN46RGFFghEy/FlQglIDjG6M5T/Uh37HDk6a yrSYUmDr9NeTipdzD8lZOt7Xn0x8evfG/xO0dncgUtGR8I6HF/AQ/yuws1oeinSEUk9z npI0IlutQftggU/2ohj88C0KvcYGfMTGwOOvcB7trICHqRC3scwjKtHYaHd+4Z1v1d6M 8NrA== X-Gm-Message-State: AOAM5323/w9KwfNRpeEMHwtCKcYr2rwBCRtq7zGr7/2HSW2W8/pTKscT 2IeB61dIBpsIZW9yZZxyrrhobg== X-Google-Smtp-Source: ABdhPJwMlUnj4fH+ki4NPgTAsKN3RYV0SL53cm6thygtY83oEPOWIUOK1QSTyB0WML9AXqvSdSkx+g== X-Received: by 2002:a9d:4c83:: with SMTP id m3mr17446829otf.353.1612299824553; Tue, 02 Feb 2021 13:03:44 -0800 (PST) Received: from eggly.attlocal.net (172-10-233-147.lightspeed.sntcca.sbcglobal.net. [172.10.233.147]) by smtp.gmail.com with ESMTPSA id u81sm14056oia.49.2021.02.02.13.03.43 (version=TLS1 cipher=ECDHE-ECDSA-AES128-SHA bits=128/128); Tue, 02 Feb 2021 13:03:43 -0800 (PST) Date: Tue, 2 Feb 2021 13:03:32 -0800 (PST) From: Hugh Dickins X-X-Sender: hugh@eggly.anvils To: Axel Rasmussen cc: Andrea Arcangeli , Andrew Morton , Mike Kravetz , Peter Xu , linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] userfaultfd: hugetlbfs: only compile UFFD helpers if config enabled In-Reply-To: <20210202203127.3596707-1-axelrasmussen@google.com> Message-ID: References: <20210202203127.3596707-1-axelrasmussen@google.com> User-Agent: Alpine 2.11 (LSU 23 2013-08-11) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII 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: On Tue, 2 Feb 2021, Axel Rasmussen wrote: > For background, mm/userfaultfd.c provides a general mcopy_atomic > implementation. But some types of memory (e.g., hugetlb and shmem) need > a slightly different implementation, so they provide their own helpers > for this. In other words, userfaultfd is the only caller of this > function. > > This patch achieves two things: > > 1. Don't spend time compiling code which will end up never being > referenced anyway (a small build time optimization). > > 2. In future patches (e.g. [1]), we plan to extend the signature of > these helpers with UFFD-specific state (e.g., enums or structs defined > conditionally in userfaultfd_k.h). Once this happens, this patch will be > needed to avoid build errors (or, we'd need to define more UFFD-only > stuff unconditionally, which seems messier to me). > > Peter Xu suggested this be sent as a standalone patch, in the mailing > list discussion for [1]. > > [1] https://patchwork.kernel.org/project/linux-mm/list/?series=424091 > > Signed-off-by: Axel Rasmussen > --- > include/linux/hugetlb.h | 4 ++++ > mm/hugetlb.c | 2 ++ > 2 files changed, 6 insertions(+) Hi Axel, please also do the same to mm/shmem.c (perhaps you missed it because I did that long ago to our internal copy of mm/shmem.c). But please also comment the endifs #endif /* CONFIG_USERFAULTFD */ to help find one's way around them. I see you've done include/linux/hugetlb.h: okay, that's not necessary, but a matter of taste; up to you whether to do include/linux/shmem_fs.h. Thanks, Hugh > > diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h > index ebca2ef02212..749701b5c153 100644 > --- a/include/linux/hugetlb.h > +++ b/include/linux/hugetlb.h > @@ -134,11 +134,13 @@ void hugetlb_show_meminfo(void); > unsigned long hugetlb_total_pages(void); > vm_fault_t hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma, > unsigned long address, unsigned int flags); > +#ifdef CONFIG_USERFAULTFD > int hugetlb_mcopy_atomic_pte(struct mm_struct *dst_mm, pte_t *dst_pte, > struct vm_area_struct *dst_vma, > unsigned long dst_addr, > unsigned long src_addr, > struct page **pagep); > +#endif > int hugetlb_reserve_pages(struct inode *inode, long from, long to, > struct vm_area_struct *vma, > vm_flags_t vm_flags); > @@ -308,6 +310,7 @@ static inline void hugetlb_free_pgd_range(struct mmu_gather *tlb, > BUG(); > } > > +#ifdef CONFIG_USERFAULTFD > static inline int hugetlb_mcopy_atomic_pte(struct mm_struct *dst_mm, > pte_t *dst_pte, > struct vm_area_struct *dst_vma, > @@ -318,6 +321,7 @@ static inline int hugetlb_mcopy_atomic_pte(struct mm_struct *dst_mm, > BUG(); > return 0; > } > +#endif > > static inline pte_t *huge_pte_offset(struct mm_struct *mm, unsigned long addr, > unsigned long sz) > diff --git a/mm/hugetlb.c b/mm/hugetlb.c > index 18f6ee317900..821bfa9c0c80 100644 > --- a/mm/hugetlb.c > +++ b/mm/hugetlb.c > @@ -4615,6 +4615,7 @@ vm_fault_t hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma, > return ret; > } > > +#ifdef CONFIG_USERFAULTFD > /* > * Used by userfaultfd UFFDIO_COPY. Based on mcopy_atomic_pte with > * modifications for huge pages. > @@ -4745,6 +4746,7 @@ int hugetlb_mcopy_atomic_pte(struct mm_struct *dst_mm, > put_page(page); > goto out; > } > +#endif > > long follow_hugetlb_page(struct mm_struct *mm, struct vm_area_struct *vma, > struct page **pages, struct vm_area_struct **vmas, > -- > 2.30.0.365.g02bc693789-goog