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=-23.3 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_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 20098C433DB for ; Tue, 2 Feb 2021 21:23:56 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 860FA64F8D for ; Tue, 2 Feb 2021 21:23:55 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 860FA64F8D 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 DD5476B0005; Tue, 2 Feb 2021 16:23:54 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id D84816B0006; Tue, 2 Feb 2021 16:23:54 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C74C36B006C; Tue, 2 Feb 2021 16:23:54 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0145.hostedemail.com [216.40.44.145]) by kanga.kvack.org (Postfix) with ESMTP id AF0F96B0005 for ; Tue, 2 Feb 2021 16:23:54 -0500 (EST) Received: from smtpin02.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay03.hostedemail.com (Postfix) with ESMTP id 7B3978249980 for ; Tue, 2 Feb 2021 21:23:54 +0000 (UTC) X-FDA: 77774605188.02.able81_3205cdc275ce Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin02.hostedemail.com (Postfix) with ESMTP id 4DF7510097AA1 for ; Tue, 2 Feb 2021 21:23:54 +0000 (UTC) X-HE-Tag: able81_3205cdc275ce X-Filterd-Recvd-Size: 8051 Received: from mail-io1-f49.google.com (mail-io1-f49.google.com [209.85.166.49]) by imf25.hostedemail.com (Postfix) with ESMTP for ; Tue, 2 Feb 2021 21:23:53 +0000 (UTC) Received: by mail-io1-f49.google.com with SMTP id n14so9138731iog.3 for ; Tue, 02 Feb 2021 13:23:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=lzMAl5+qLTmBp1f6Ub1UuM/DYWx8qizOQNUGBPnqABs=; b=NuGsVyz611xeol+A8+9BulKrYLJDBMW83OE+4b9CUq4ElLv8ajZdYYNjozFIMqArfo nzx4qTgvJkwU/4LlyjRjmt3uuIIMFqhbDx32+VZo4i7kLn+q5aZIv/EqkMOBBXv+tas9 k1B0puJKMOsvOTpv5Z9JlGtgLVx6ojdkpu0lLY0d0ZP6WuufatqN5nBPrL4drrpTJg2A rs2pZPTvxZIu1aA366Ap3g8D87QiI0fzIBRVeiXHY6glYTD2SHzjbu9RryfF3rCGxF3z oihoe12lKw39qeGlUOE3N6AGZTKG+qZbjbgzd6t+RD0pJ/sERNk5Ra17wDkWZF90UK2L /Zgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=lzMAl5+qLTmBp1f6Ub1UuM/DYWx8qizOQNUGBPnqABs=; b=NM5fGLjSGoxSCyw/CDsm9N3gtvouJ/BuP1LUzALVYdGpBxvBXxtcf9l5Z4ONr33ywJ 4mWVuvF+6wTBZqxzwSJr9kUTD2GljWOv9qcStQLDVw6BJLtVxJD/5dfpwop9cwGQHdFZ 09DxvXTUXll/efZTDErE5bAJVgb0uIoJw0cfxyNbaiQmQnI5vNLOPQF3A0+622CGkTN8 h2Beq6vBOUFBrn0Lcls2As3qAJBAcpLbPaOtrqDgy1xehxJ2nAtUNPE/+PeeFIVMVaNE lkILTO49DRLwrtEbCb+TsmalFUypG/GbBwsIp0QViraixjrUZGoTdKIOXyuFbyl2LOv+ KtVA== X-Gm-Message-State: AOAM531WTMXYWBnzs4iVYtXIV9SD0H1WGPXT+PHQ/PjGFTt6naWvoMCt TpTPEfjig4IEtVXqtCCOIszZE0tquB0BRgoQZOjH+Q== X-Google-Smtp-Source: ABdhPJwUpfcPHVhyluje7+uuiNZeFYJFpItaxp753gw9mG5YZIj1FbNN8jnSPX6oCtSwTHjJasdjoSqz3b4+9HRhUv0= X-Received: by 2002:a02:3844:: with SMTP id v4mr151276jae.1.1612301032996; Tue, 02 Feb 2021 13:23:52 -0800 (PST) MIME-Version: 1.0 References: <20210202203127.3596707-1-axelrasmussen@google.com> In-Reply-To: From: Axel Rasmussen Date: Tue, 2 Feb 2021 13:23:16 -0800 Message-ID: Subject: Re: [PATCH] userfaultfd: hugetlbfs: only compile UFFD helpers if config enabled To: Hugh Dickins Cc: Andrea Arcangeli , Andrew Morton , Mike Kravetz , Peter Xu , Linux MM , LKML Content-Type: text/plain; charset="UTF-8" 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, Feb 2, 2021 at 1:03 PM Hugh Dickins wrote: > > 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). I had been largely ignoring shmem up to this point because my minor fault handling series doesn't (yet) deal with it. But, I'll need to do this later when I support shmem anyway, so happy to add it here. > But please also comment the endifs > #endif /* CONFIG_USERFAULTFD */ > to help find one's way around them. Done. :) > > 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. Ah, so it is not strictly needed in the current world, but later when the signature contains UFFD-specific things like the mode enumeration I'm proposing, it becomes necessary, or else we get many build warnings about implicitly declaring the argument's type. Sorry for misunderstanding Peter's recommendation; this would be more apparent if this patch was part of the larger series. Perhaps the right thing to do is just abandon this separate patch and move it back into the larger series (keeping your suggestions, of course). I suppose I'll do that - you'll see this in v4 of https://patchwork.kernel.org/project/linux-mm/list/?series=424091 unless someone tells me to do otherwise. :P Thanks for reviewing, all. > > 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