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=-26.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_AGENT_GIT,USER_IN_DEF_DKIM_WL autolearn=unavailable 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 0305EC433E0 for ; Thu, 4 Feb 2021 19:15:56 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id B76ED64F6B for ; Thu, 4 Feb 2021 19:15:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239677AbhBDTPo (ORCPT ); Thu, 4 Feb 2021 14:15:44 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50910 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238870AbhBDSg2 (ORCPT ); Thu, 4 Feb 2021 13:36:28 -0500 Received: from mail-qt1-x84a.google.com (mail-qt1-x84a.google.com [IPv6:2607:f8b0:4864:20::84a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 262C8C06121D for ; Thu, 4 Feb 2021 10:34:56 -0800 (PST) Received: by mail-qt1-x84a.google.com with SMTP id o20so3259962qtx.22 for ; Thu, 04 Feb 2021 10:34:56 -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=dnNo0P9pQk4mCWpPk9SkHpqnJh6eIBtgx02Oeb/UXjo=; b=Al/UauZV1DDE1GQ/B3cVQR4rotIVxh2DLihJOd/5CWM7XthzAeW499I1SxHk1BPVLl dEowBo6pNqZumu/JZm1jSFVw8i1MjyIgVLbAi90z4s0xRZzHVnnToEs7fW+HS9kf00lk 4oAQmnRtfTxMbdZjOrBsGE/MZfMsT25k5kWdEbxtyY9wMtiqQtxHtx5uhlPsRx/VHdLG sJ/ahIQhrG/y3oGYrRQvsUscM6Yru+JLmb67PlIw4/1jSXn+PrZ7i7EzVDQgg/tdricm UC9q2irp8osM7qLusXPZ7c9F8DyZjphS272uL5NoPER97hCV15fQvLGUwQktxrXH2CMl J3+w== 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=dnNo0P9pQk4mCWpPk9SkHpqnJh6eIBtgx02Oeb/UXjo=; b=P9N31v7uV7cuNSPJk67TAQvPguEQjmBudG+XyW5VjhTQGzlmRrvhLPbqtlkkOe9QRR GMFowBnL+nZD8S1YKlAzwDilhBBsEdXNW8bsLUBCyt9HdQB4MlRpkm0MkJJSpUbmwzVq pdhJ/ULWIIH+u0p0K8AV15YIOARFHIBWew65pzVY+ENuOQv5llmAYf5YdTC7i6+qAgAh sBGkCb7p37eF/tgYNTDQBDgZm90a/CN49g/hTkd+QX4R5FLciAbdV48da8VahNrux7Od RfbO/GY6ANgNXH/6mZcpdmmemPda3cc7qA1OfGFP9REDDbStTDTHHFHqBdB+FGTgqZjW 0GFA== X-Gm-Message-State: AOAM531S+LKkwtvm1cjkABDBpewELRAR0a+dHBvgEn/+16v0TzaWOkq3 9l0T/+aybkujHFL+GXH4pWIj0QT7k+dZXwm4xZ7f X-Google-Smtp-Source: ABdhPJwzY/m5iDRQzjnkOcfC3idOuJxllyLq6tjUscyKEYj5/eihbt8Wssn5DtrwP7t8RsmeAVnnF7FClkXApTydM2XJ Sender: "axelrasmussen via sendgmr" X-Received: from ajr0.svl.corp.google.com ([2620:15c:2cd:203:b001:12c1:dc19:2089]) (user=axelrasmussen job=sendgmr) by 2002:a0c:e652:: with SMTP id c18mr505898qvn.59.1612463695305; Thu, 04 Feb 2021 10:34:55 -0800 (PST) Date: Thu, 4 Feb 2021 10:34:29 -0800 In-Reply-To: <20210204183433.1431202-1-axelrasmussen@google.com> Message-Id: <20210204183433.1431202-7-axelrasmussen@google.com> Mime-Version: 1.0 References: <20210204183433.1431202-1-axelrasmussen@google.com> X-Mailer: git-send-email 2.30.0.365.g02bc693789-goog Subject: [PATCH v4 06/10] 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=20Koutn=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 , Mina Almasry , Oliver Upton Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 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. Reviewed-by: Peter Xu Signed-off-by: Axel Rasmussen --- include/linux/userfaultfd_k.h | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/include/linux/userfaultfd_k.h b/include/linux/userfaultfd_k.h index 0390e5ac63b3..e060d5f77cc5 100644 --- a/include/linux/userfaultfd_k.h +++ b/include/linux/userfaultfd_k.h @@ -56,12 +56,19 @@ 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 otherwise we would never get minor faults for + * VMAs which share huge pmds. (If you have two mappings to the same + * underlying pages, and fault in the non-UFFD-registered one with a write, + * with huge pmd sharing this would *also* setup the second UFFD-registered + * mapping, and we'd not get minor faults.) */ 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) -- 2.30.0.365.g02bc693789-goog 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=-16.5 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 30D0DC433E0 for ; Thu, 4 Feb 2021 18:34:59 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id B6F5064E06 for ; Thu, 4 Feb 2021 18:34:58 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B6F5064E06 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 2D1C26B0072; Thu, 4 Feb 2021 13:34:57 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 285F86B0073; Thu, 4 Feb 2021 13:34:57 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0FEE56B0074; Thu, 4 Feb 2021 13:34:57 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0235.hostedemail.com [216.40.44.235]) by kanga.kvack.org (Postfix) with ESMTP id ED7496B0072 for ; Thu, 4 Feb 2021 13:34:56 -0500 (EST) Received: from smtpin26.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay03.hostedemail.com (Postfix) with ESMTP id B55FA8249980 for ; Thu, 4 Feb 2021 18:34:56 +0000 (UTC) X-FDA: 77781436992.26.fear07_0715edc275de Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin26.hostedemail.com (Postfix) with ESMTP id 8C4291804B669 for ; Thu, 4 Feb 2021 18:34:56 +0000 (UTC) X-HE-Tag: fear07_0715edc275de X-Filterd-Recvd-Size: 5991 Received: from mail-qt1-f202.google.com (mail-qt1-f202.google.com [209.85.160.202]) by imf06.hostedemail.com (Postfix) with ESMTP for ; Thu, 4 Feb 2021 18:34:55 +0000 (UTC) Received: by mail-qt1-f202.google.com with SMTP id j14so3313172qtv.3 for ; Thu, 04 Feb 2021 10:34:55 -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=dnNo0P9pQk4mCWpPk9SkHpqnJh6eIBtgx02Oeb/UXjo=; b=Al/UauZV1DDE1GQ/B3cVQR4rotIVxh2DLihJOd/5CWM7XthzAeW499I1SxHk1BPVLl dEowBo6pNqZumu/JZm1jSFVw8i1MjyIgVLbAi90z4s0xRZzHVnnToEs7fW+HS9kf00lk 4oAQmnRtfTxMbdZjOrBsGE/MZfMsT25k5kWdEbxtyY9wMtiqQtxHtx5uhlPsRx/VHdLG sJ/ahIQhrG/y3oGYrRQvsUscM6Yru+JLmb67PlIw4/1jSXn+PrZ7i7EzVDQgg/tdricm UC9q2irp8osM7qLusXPZ7c9F8DyZjphS272uL5NoPER97hCV15fQvLGUwQktxrXH2CMl J3+w== 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=dnNo0P9pQk4mCWpPk9SkHpqnJh6eIBtgx02Oeb/UXjo=; b=l2OvYXcI6GdlnJmtxMmL3WFxEFxilZJhOGtB1lddQ2YQseMaWZEGJ9dK0m6eY2S6bn /i4j0GhycxUcwQ0Q2u5lQi0TGaNkSbc04sz+F+XdmeeyV1WCnszBzn4PfrBAlR/hnEmY 0fHwWNmvosi9V8cQfgmHQ1NIy9vqVQJQGZ67S89CZBuiOY9lxdksHY24Iw5DGeZwPytm NgeONos29u6q/tPzcB0ramLr0SNXdgbHX/wltjAF9um09Y10P/n8AeoY2HQXzyzz8Wtl gcDNNW3uO3BaNBHiTZk4omhxvkuVv3dpVcYu0HzCUtpsVmQfOfYX0qDEzCohnj9K/xK5 Zkmg== X-Gm-Message-State: AOAM533Y33IMLZ1X5xbo2LoYm5EKJlonyoxdC+fISd2xfBOqvOioOyY0 N5zRSGlzhi7C9ucYIUzI79M70ZLzP+5RE9SKp4Hg X-Google-Smtp-Source: ABdhPJwzY/m5iDRQzjnkOcfC3idOuJxllyLq6tjUscyKEYj5/eihbt8Wssn5DtrwP7t8RsmeAVnnF7FClkXApTydM2XJ X-Received: from ajr0.svl.corp.google.com ([2620:15c:2cd:203:b001:12c1:dc19:2089]) (user=axelrasmussen job=sendgmr) by 2002:a0c:e652:: with SMTP id c18mr505898qvn.59.1612463695305; Thu, 04 Feb 2021 10:34:55 -0800 (PST) Date: Thu, 4 Feb 2021 10:34:29 -0800 In-Reply-To: <20210204183433.1431202-1-axelrasmussen@google.com> Message-Id: <20210204183433.1431202-7-axelrasmussen@google.com> Mime-Version: 1.0 References: <20210204183433.1431202-1-axelrasmussen@google.com> X-Mailer: git-send-email 2.30.0.365.g02bc693789-goog Subject: [PATCH v4 06/10] 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=20Koutn=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 , Mina Almasry , Oliver Upton 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: 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 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. Reviewed-by: Peter Xu Signed-off-by: Axel Rasmussen --- include/linux/userfaultfd_k.h | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/include/linux/userfaultfd_k.h b/include/linux/userfaultfd_k.h index 0390e5ac63b3..e060d5f77cc5 100644 --- a/include/linux/userfaultfd_k.h +++ b/include/linux/userfaultfd_k.h @@ -56,12 +56,19 @@ 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 otherwise we would never get minor faults for + * VMAs which share huge pmds. (If you have two mappings to the same + * underlying pages, and fault in the non-UFFD-registered one with a write, + * with huge pmd sharing this would *also* setup the second UFFD-registered + * mapping, and we'd not get minor faults.) */ 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) -- 2.30.0.365.g02bc693789-goog