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 C3E37C433DB for ; Wed, 17 Mar 2021 19:50:15 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 351AE64EEC for ; Wed, 17 Mar 2021 19:50:15 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 351AE64EEC 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 9EB106B006E; Wed, 17 Mar 2021 15:50:14 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9C2566B0070; Wed, 17 Mar 2021 15:50:14 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 862EB6B0071; Wed, 17 Mar 2021 15:50:14 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0111.hostedemail.com [216.40.44.111]) by kanga.kvack.org (Postfix) with ESMTP id 6BC016B006E for ; Wed, 17 Mar 2021 15:50:14 -0400 (EDT) Received: from smtpin12.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay04.hostedemail.com (Postfix) with ESMTP id 0E32A2491 for ; Wed, 17 Mar 2021 19:50:14 +0000 (UTC) X-FDA: 77930407548.12.C5B5C9A Received: from mail-yb1-f201.google.com (mail-yb1-f201.google.com [209.85.219.201]) by imf23.hostedemail.com (Postfix) with ESMTP id B8828A11390D for ; Wed, 17 Mar 2021 19:13:38 +0000 (UTC) Received: by mail-yb1-f201.google.com with SMTP id u17so46278365ybi.10 for ; Wed, 17 Mar 2021 12:13:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=PMNTWEhfV6poxu3dvNBZ0UMNzT+uf6rEFOoHyvBSs4w=; b=NBYx9GkOp4RmsEoqQW1OUbK6Af2HZ+LSsowzg92soxTJILyt1ru0deBVCL4L1rv72R wNa5pP6KVc+qd2CwbKXOZPKQEI5zMGrWD+mA1YusfzJytS77RqUnsDx9WMaXglXnSDsx xcd2uhqLhA6g2U3Be8s572z9gjYEj4t6QyB64QOJBwwaAxcaOlwmWCgcmFXeyWI7RdPI Q+No5H0JfUdzubH73uOJNzHeifUE3NpHJ30yDQGj5uju9XNlysiYgOqPdje5/Cm3hLdd rEpgaya2cvWiZjPyi8MhqBCZ/UYMItUgSfbsDoIIhwe8WCOjDXAiGWa76x4x5bG8dZCo vLLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=PMNTWEhfV6poxu3dvNBZ0UMNzT+uf6rEFOoHyvBSs4w=; b=sZQZgbqEecio5VXAf+yyKsrKeBa8wM59+5rS3u/sEq/fjLs5I+9/kGtVlyS6C3Sm6K skIrPIpPA7gQ5B224dZ2Ep08JpMTtHXgZLK7hgjOwJCRIEiyXysFSbufJL7WjMfDBmCv Y3jbhlrgoRS9+B9fJgxoUdSdiPDBm3Hjz6L+htTNNjPfGEHC/RdN+z/OR1SQVc1zsXnC AkD1MtUCeSyyllgsJMTMrw0PZHtPKj7YSykN1JuWoLkBs+vG3bUik53eWYJf78sEENhS 8FMvoYpVXtyGzPW11IUwmhdV5vVA7cfovYzRvWI89YpBqcIRRxg9qSBaQH05jS7m3PIy +U2Q== X-Gm-Message-State: AOAM531YTatAbL/y4lerS2toS6DoF55dUYFoIeLLmusG2oN5eTMJtxp9 BCG/n4xPp+M5IozGA5hHflEnZpEzs4l5 X-Google-Smtp-Source: ABdhPJxEU/NDufnze3h7G0LVZg2aYOx4qJg+j9BSn1s+iC2EzMHJDDyEnwUZx76eo1cN/PimKfC47lJ2IHEe X-Received: from bg.sfo.corp.google.com ([2620:15c:8:10:8c6a:2e6f:ed81:d930]) (user=bgeffon job=sendgmr) by 2002:a25:d155:: with SMTP id i82mr6299882ybg.404.1616008417952; Wed, 17 Mar 2021 12:13:37 -0700 (PDT) Date: Wed, 17 Mar 2021 12:13:33 -0700 In-Reply-To: <20210303175235.3308220-1-bgeffon@google.com> Message-Id: <20210317191334.564944-1-bgeffon@google.com> Mime-Version: 1.0 References: <20210303175235.3308220-1-bgeffon@google.com> X-Mailer: git-send-email 2.31.0.rc2.261.g7f71774620-goog Subject: [PATCH v2 1/2] mm: Allow non-VM_DONTEXPAND and VM_PFNMAP mappings with MREMAP_DONTUNMAP From: Brian Geffon To: Andrew Morton Cc: Axel Rasmussen , Lokesh Gidra , Mike Rapoport , Peter Xu , Hugh Dickins , "Michael S . Tsirkin" , Brian Geffon , linux-kernel@vger.kernel.org, linux-mm@kvack.org, Andy Lutomirski , Vlastimil Babka , Andrea Arcangeli , Sonny Rao , Minchan Kim , "Kirill A . Shutemov" , Dmitry Safonov Content-Type: text/plain; charset="UTF-8" X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: B8828A11390D X-Stat-Signature: i7jkmxhu4zyxdbgb78hb3d8n9wojq9jz Received-SPF: none (flex--bgeffon.bounces.google.com>: No applicable sender policy available) receiver=imf23; identity=mailfrom; envelope-from="<34VRSYAcKCNw9ECDDMLEMMEJC.AMKJGLSV-KKIT8AI.MPE@flex--bgeffon.bounces.google.com>"; helo=mail-yb1-f201.google.com; client-ip=209.85.219.201 X-HE-DKIM-Result: pass/pass X-HE-Tag: 1616008418-541005 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: Currently MREMAP_DONTUNMAP only accepts private anonymous mappings. This change will widen the support to include any mappings which are not VM_DONTEXPAND or VM_PFNMAP. The primary use case is to support MREMAP_DONTUNMAP on mappings which may have been created from a memfd. This change which takes advantage of the existing check in vma_to_resize for non-VM_DONTEXPAND and non-VM_PFNMAP mappings will cause MREMAP_DONTUNMAP to return -EFAULT if such mappings are remapped. This behavior is consistent with existing behavior when using mremap with such mappings. Lokesh Gidra who works on the Android JVM, provided an explanation of how such a feature will improve Android JVM garbage collection: "Android is developing a new garbage collector (GC), based on userfaultfd. The garbage collector will use userfaultfd (uffd) on the java heap during compaction. On accessing any uncompacted page, the application threads will find it missing, at which point the thread will create the compacted page and then use UFFDIO_COPY ioctl to get it mapped and then resume execution. Before starting this compaction, in a stop-the-world pause the heap will be mremap(MREMAP_DONTUNMAP) so that the java heap is ready to receive UFFD_EVENT_PAGEFAULT events after resuming execution. To speedup mremap operations, pagetable movement was optimized by moving PUD entries instead of PTE entries [1]. It was necessary as mremap of even modest sized memory ranges also took several milliseconds, and stopping the application for that long isn't acceptable in response-time sensitive cases. With UFFDIO_CONTINUE feature [2], it will be even more efficient to implement this GC, particularly the 'non-moveable' portions of the heap. It will also help in reducing the need to copy (UFFDIO_COPY) the pages. However, for this to work, the java heap has to be on a 'shared' vma. Currently MREMAP_DONTUNMAP only supports private anonymous mappings, this patch will enable using UFFDIO_CONTINUE for the new userfaultfd-based heap compaction." [1] https://lore.kernel.org/linux-mm/20201215030730.NC3CU98e4%25akpm@linux-foundation.org/ [2] https://lore.kernel.org/linux-mm/20210302000133.272579-1-axelrasmussen@google.com/ Signed-off-by: Brian Geffon --- mm/mremap.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/mm/mremap.c b/mm/mremap.c index ec8f840399ed..2c57dc4bc8b6 100644 --- a/mm/mremap.c +++ b/mm/mremap.c @@ -653,10 +653,6 @@ static struct vm_area_struct *vma_to_resize(unsigned long addr, return ERR_PTR(-EINVAL); } - if (flags & MREMAP_DONTUNMAP && (!vma_is_anonymous(vma) || - vma->vm_flags & VM_SHARED)) - return ERR_PTR(-EINVAL); - if (is_vm_hugetlb_page(vma)) return ERR_PTR(-EINVAL); -- 2.31.0.rc2.261.g7f71774620-goog