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=-14.6 required=3.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=no 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 64E1AC433E1 for ; Thu, 13 Aug 2020 22:21:13 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 12537205CB for ; Thu, 13 Aug 2020 22:21:12 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="OH126qBj" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 12537205CB 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 8FBE46B0023; Thu, 13 Aug 2020 18:21:12 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 8AC4C6B0024; Thu, 13 Aug 2020 18:21:12 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7C2406B0026; Thu, 13 Aug 2020 18:21:12 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0135.hostedemail.com [216.40.44.135]) by kanga.kvack.org (Postfix) with ESMTP id 641BE6B0023 for ; Thu, 13 Aug 2020 18:21:12 -0400 (EDT) Received: from smtpin01.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay04.hostedemail.com (Postfix) with ESMTP id 2A8AE2481 for ; Thu, 13 Aug 2020 22:21:12 +0000 (UTC) X-FDA: 77146967184.01.nut63_550bb7426ff7 Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin01.hostedemail.com (Postfix) with ESMTP id 0164F10051135 for ; Thu, 13 Aug 2020 22:21:11 +0000 (UTC) X-HE-Tag: nut63_550bb7426ff7 X-Filterd-Recvd-Size: 4797 Received: from mail-ua1-f68.google.com (mail-ua1-f68.google.com [209.85.222.68]) by imf04.hostedemail.com (Postfix) with ESMTP for ; Thu, 13 Aug 2020 22:21:11 +0000 (UTC) Received: by mail-ua1-f68.google.com with SMTP id v20so2117612ual.4 for ; Thu, 13 Aug 2020 15:21:11 -0700 (PDT) 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=o9kWqTJcUVulD+ysH9xdAYrav8DpXFihAHMY/cVtmSM=; b=OH126qBj0zO1xFAlColDERlRqIWU6lcjCz8k7avtDNlydUD4ry0e0loZ8/MK99ri92 zo7v06ewz40HGSDV20UvqoZsRD2IMrSQCXZqwe1uEIRz2t8KJ027s9B2Yyzy70d6c0x0 zjUVGDtTVNzfP0NFV8WFE3NW4Rk+GzvWo7vy1dJ+sqhW92WS32ulj+3cRaOVrLrqopst p66gubasrUl9vU9DUjlXnAV+gHDAwrMGiWNJi1lkzevHXPBxwjWcwGJRm72wUXgbHelL J03vxDIRsuk/QOimy1ZQUII+QCix/Vupqwt0PkXllc+zYtyp1+jh8z2VU5z2bzusBCq/ u7aQ== 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=o9kWqTJcUVulD+ysH9xdAYrav8DpXFihAHMY/cVtmSM=; b=ZZrhRtYntmj0Vtt+T6L3lVd6sWvSJYet25gZYL5xlUhjixLi85RFrX7Zp1B5wue5DM 13MWvw31R/vVfDp4RU/WhsakwnoxXbgO7XnKb9YwJQjRgg19Mq2f4ZiiLrg/6w9LT/1G 42S3nYgvJWNGJF+nuIr02fDxbHJn+MBq0RiSRQe5djEgzCAXLhk6wCPq0KzAHos01pEJ Al1uoqw2wUx8o4qSG6yigCwzYzk4oLREEtZYPRUbmpa4EVS6USKpivbnVz9r2NK9b6Gq bywbFjdQ65RsM7l7wa6GEMIKTgPkrTQXRm4YJ3xj1eZgLwavq/Kn4trCVxV0cRaSBEkX YpEw== X-Gm-Message-State: AOAM533N7Gq7A3U14/6YM/5XEMMQ4WqSNLmFWuelt8T4KOSp4sHY5Sxp W3zyHxD43QfxN6IOIjt5mkyUnvYKZ5hXbEH5lC5Sv7/fNRQ= X-Google-Smtp-Source: ABdhPJwl8ln6cxsHMmJggPa2l3pLt/T2iYUjQEgg9MxbdHxCKBQk/QCrHFa2PXJoBagcMiHVsRXX3pxnkeCYdmefsQI= X-Received: by 2002:ab0:1892:: with SMTP id t18mr5316185uag.108.1597357270631; Thu, 13 Aug 2020 15:21:10 -0700 (PDT) MIME-Version: 1.0 References: <20200813220937.40973-1-pcc@google.com> In-Reply-To: <20200813220937.40973-1-pcc@google.com> From: Peter Collingbourne Date: Thu, 13 Aug 2020 15:20:59 -0700 Message-ID: Subject: Re: [PATCH v2] mm: introduce reference pages To: John Hubbard , Matthew Wilcox , "Kirill A . Shutemov" , Andrew Morton , Catalin Marinas , Evgenii Stepanov Cc: Linux ARM , linux-mm@kvack.org Content-Type: text/plain; charset="UTF-8" X-Rspamd-Queue-Id: 0164F10051135 X-Spamd-Result: default: False [0.00 / 100.00] X-Rspamd-Server: rspam04 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 Thu, Aug 13, 2020 at 3:09 PM Peter Collingbourne wrote: > > Introduce a new syscall, refpage_create, which returns a file > descriptor which may be mapped using mmap. Such a mapping is similar > to an anonymous mapping, but instead of clean pages being backed by the > zero page, they are instead backed by a so-called reference page, whose > contents are specified using an argument to refpage_create. Loads from > the mapping will load directly from the reference page, and initial > stores to the mapping will copy-on-write from the reference page. Catalin, I needed this diff on top of my patch and your latest MTE series in order for reference pages to cooperate with MTE. The first hunk is probably fine but without the second one, the tags in the reference page would not be set correctly in the case where the mapping used to create the reference page was not mapped with PROT_MTE. I'm not sure if it's appropriate to have MTE-specific stuff directly in mm/refpage.c so it probably needs something like a new architecture interface or a change to an existing one. Do you have any ideas? diff --git a/mm/refpage.c b/mm/refpage.c index c2f62a4f0dc0..7e4e4b2aabe2 100644 --- a/mm/refpage.c +++ b/mm/refpage.c @@ -7,6 +7,7 @@ static int refpage_mmap(struct file *file, struct vm_area_struct *vma) { vma_set_anonymous(vma); vma->vm_private_data = vma->vm_file->private_data; + vma->vm_flags |= VM_MTE_ALLOWED; return 0; } @@ -44,6 +45,14 @@ SYSCALL_DEFINE2(refpage_create, const void *__user, content, unsigned long, } copy_highpage(refpage, userpage); + +#ifdef CONFIG_ARM64_MTE + if (system_supports_mte() && !test_bit(PG_mte_tagged, &userpage->flags)) { + set_bit(PG_mte_tagged, &refpage->flags); + mte_clear_page_tags(page_address(refpage)); + } +#endif + put_page(userpage); fd = anon_inode_getfd("[refpage]", &refpage_file_operations, refpage, Peter