From patchwork Fri Jan 15 19:04:48 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Axel Rasmussen X-Patchwork-Id: 12023859 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=-16.6 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,DKIM_INVALID,DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT 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 063AEC433E0 for ; Fri, 15 Jan 2021 19:05:29 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 89EC8221E2 for ; Fri, 15 Jan 2021 19:05:28 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 89EC8221E2 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 B2BC88D01E6; Fri, 15 Jan 2021 14:05:25 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id ADB408D01E2; Fri, 15 Jan 2021 14:05:25 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 9A0DB8D01E6; Fri, 15 Jan 2021 14:05:25 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0210.hostedemail.com [216.40.44.210]) by kanga.kvack.org (Postfix) with ESMTP id 8067B8D01E2 for ; Fri, 15 Jan 2021 14:05:25 -0500 (EST) Received: from smtpin14.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay01.hostedemail.com (Postfix) with ESMTP id 449961844AD29 for ; Fri, 15 Jan 2021 19:05:25 +0000 (UTC) X-FDA: 77708937810.14.rake75_5a0baa227531 Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin14.hostedemail.com (Postfix) with ESMTP id 209A6181AAC40 for ; Fri, 15 Jan 2021 19:05:25 +0000 (UTC) X-HE-Tag: rake75_5a0baa227531 X-Filterd-Recvd-Size: 9802 Received: from smtprelay.hostedemail.com (smtprelay0133.hostedemail.com [216.40.44.133]) by imf26.hostedemail.com (Postfix) with ESMTP for ; Fri, 15 Jan 2021 19:05:22 +0000 (UTC) Received: from forelay.hostedemail.com (clb03-v110.bra.tucows.net [216.40.38.60]) by smtprelay02.hostedemail.com (Postfix) with ESMTP id F41331C97B for ; Fri, 15 Jan 2021 19:05:21 +0000 (UTC) Received: from smtpin27.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay01.hostedemail.com (Postfix) with ESMTP id CF02918353A72 for ; Fri, 15 Jan 2021 19:05:21 +0000 (UTC) X-FDA: 77708937642.27.crate85_1b0a0d127531 Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin27.hostedemail.com (Postfix) with ESMTP id A9F55668613 for ; Fri, 15 Jan 2021 19:05:21 +0000 (UTC) X-HE-Tag: crate85_1b0a0d127531 X-Filterd-Recvd-Size: 7848 Received: from smtprelay.hostedemail.com (smtprelay0079.hostedemail.com [216.40.44.79]) by imf40.hostedemail.com (Postfix) with ESMTP for ; Fri, 15 Jan 2021 19:05:20 +0000 (UTC) Received: from forelay.hostedemail.com (clb03-v110.bra.tucows.net [216.40.38.60]) by smtprelay06.hostedemail.com (Postfix) with ESMTP id B48C4181AAC52 for ; Fri, 15 Jan 2021 19:05:20 +0000 (UTC) Received: from smtpin22.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay04.hostedemail.com (Postfix) with ESMTP id 96E3C1C9A0 for ; Fri, 15 Jan 2021 19:05:20 +0000 (UTC) X-FDA: 77708937600.22.meat39_34077fb27531 Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin22.hostedemail.com (Postfix) with ESMTP id 50770181ACD2F for ; Fri, 15 Jan 2021 19:05:20 +0000 (UTC) X-HE-Tag: meat39_34077fb27531 X-Filterd-Recvd-Size: 5895 Received: from mail-pf1-f202.google.com (mail-pf1-f202.google.com [209.85.210.202]) by imf38.hostedemail.com (Postfix) with ESMTP for ; Fri, 15 Jan 2021 19:05:19 +0000 (UTC) Received: by mail-pf1-f202.google.com with SMTP id e28so6571728pfl.19 for ; Fri, 15 Jan 2021 11:05:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=sender:date:in-reply-to:message-id:mime-version:references:subject :from:to:cc; bh=OiHmip5pShZEM0ZBAU71H+KEdKKSM8se2w8Pb4UEVUI=; b=TUlkIxxVvg+NbLyEdgqkaAFxnAFs01VNlKWsfh3GhNA8NsXjhKrFaUkXvV4Zr9JlPu z+UEL/4/8qbJIkIOvrHuW8ajVDx5H7EsPfrkYlJqFzph7GP8yf1Ex9J37PQBXLPFXPtu vEP4CaUe76NUa5oIaelgWSDdl6FVyXtg4S9mzJ4q3uramJL+1v3c5G7VKfkLPurURi+4 MkIWx6zxZFDMqyIMy1Irl7i5Y6DP3eoZWqtJGvTB0p5cT/Ogg4f1uxSoP/Idw+iDZl0f UMDYOs1wOSsY9M/hMYlGZckdMEndJ22m2r/zFVpMH76XXN64MIlxgy1gnV9eSZHz8bKB vtxQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=OiHmip5pShZEM0ZBAU71H+KEdKKSM8se2w8Pb4UEVUI=; b=EggRVoTZuTrJ5TsIo6c65Ib1W0UpGR/QbHdw3LnJzKVV9vO5UF/YCN6JcETjWZpGnZ 6XPPjlzg5FjXIge2Jg3moFSzbo7Un/WMC7h/q4b048UQdI3t96DE0TVh3IqXoCNIDQ6d q3DCtYORGB2o9DbY8pcRT896acMULDwIkXvmkleKAH1fBf83NgDDoZCRLNQfs+Q9TxlL V+I/4rKYt08SMyzoMONC01NfnodF2AuLaJicdRhjBy4yd9GTod2pIsnAdt83eVtfAhMl QrqykluF630yUw7ekfisI5EEsjLkinFprIl6IK//YxDInrJpuE0tY/FyPFlXZpkP0cHI O3Fw== X-Gm-Message-State: AOAM5307r3j3AlaPm3ukb07gVjfhxR/+GkgdbQCigrKtUrRGpCF08ISF YMswdt/mzwCOVUu5u6Mw4a5IR/Fj4pIgg0Tm2OHu X-Google-Smtp-Source: ABdhPJx5ZFf+WD9DcKtl3XLJSR7XOnyXjgx1WlJfvxIQaqqkk6YFhDMOONtuyBr3KQM4NxvYJ8VqPx/7/n9aj6k0d8Qo X-Received: from ajr0.svl.corp.google.com ([2620:15c:2cd:203:f693:9fff:feef:c8f8]) (user=axelrasmussen job=sendgmr) by 2002:a17:902:12c:b029:da:e63c:dc92 with SMTP id 41-20020a170902012cb02900dae63cdc92mr14044589plb.71.1610737518850; Fri, 15 Jan 2021 11:05:18 -0800 (PST) Date: Fri, 15 Jan 2021 11:04:48 -0800 In-Reply-To: <20210115190451.3135416-1-axelrasmussen@google.com> Message-Id: <20210115190451.3135416-7-axelrasmussen@google.com> Mime-Version: 1.0 References: <20210115190451.3135416-1-axelrasmussen@google.com> X-Mailer: git-send-email 2.30.0.284.gd98b1dd5eaa7-goog Subject: [PATCH 6/9] userfaultfd: disable huge PMD sharing for MINOR registered VMAs From: Axel Rasmussen To: Alexander Viro , Alexey Dobriyan , Andrea Arcangeli , Andrew Morton , Anshuman Khandual , Catalin Marinas , Chinwen Chang , Huang Ying , Ingo Molnar , Jann Horn , Jerome Glisse , Lokesh Gidra , "Matthew Wilcox (Oracle)" , Michael Ellerman , " =?utf-8?q?Michal_Koutn=C3=BD?= " , Michel Lespinasse , Mike Kravetz , Mike Rapoport , Nicholas Piggin , Peter Xu , Shaohua Li , Shawn Anastasio , Steven Rostedt , Steven Price , Vlastimil Babka Cc: linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, Adam Ruprecht , Axel Rasmussen , Cannon Matthews , "Dr . David Alan Gilbert" , David Rientjes , Oliver Upton 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: As the comment says: for the MINOR fault use case, although the page might be present and populated in the other (non-UFFD-registered) half of the shared mapping, it may be out of date, and we explicitly want userspace to get a minor fault so it can check and potentially update the page's contents. Huge PMD sharing would prevent these faults from occurring for suitably aligned areas, so disable it upon UFFD registration. Signed-off-by: Axel Rasmussen Reviewed-by: Peter Xu --- include/linux/userfaultfd_k.h | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/include/linux/userfaultfd_k.h b/include/linux/userfaultfd_k.h index 7aa1461e1a8b..ed157804ca02 100644 --- a/include/linux/userfaultfd_k.h +++ b/include/linux/userfaultfd_k.h @@ -53,12 +53,18 @@ static inline bool is_mergeable_vm_userfaultfd_ctx(struct vm_area_struct *vma, } /* - * Never enable huge pmd sharing on uffd-wp registered vmas, because uffd-wp - * protect information is per pgtable entry. + * Never enable huge pmd sharing on some uffd registered vmas: + * + * - VM_UFFD_WP VMAs, because write protect information is per pgtable entry. + * + * - VM_UFFD_MINOR VMAs, because we explicitly want minor faults to occur even + * when the other half of a shared mapping is populated (even though the page + * is there, in our use case it may be out of date, so userspace needs to + * check for this and possibly update it). */ static inline bool uffd_disable_huge_pmd_share(struct vm_area_struct *vma) { - return vma->vm_flags & VM_UFFD_WP; + return vma->vm_flags & (VM_UFFD_WP | VM_UFFD_MINOR); } static inline bool userfaultfd_missing(struct vm_area_struct *vma)