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 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id C9285C001B3 for ; Thu, 29 Jun 2023 20:50:56 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5351D8D0005; Thu, 29 Jun 2023 16:50:55 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 46F278D0001; Thu, 29 Jun 2023 16:50:55 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 18BC28D0005; Thu, 29 Jun 2023 16:50:55 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 033AF8D0001 for ; Thu, 29 Jun 2023 16:50:55 -0400 (EDT) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id CA3A91A0C6F for ; Thu, 29 Jun 2023 20:50:54 +0000 (UTC) X-FDA: 80956979628.19.AC43F99 Received: from mail-yb1-f202.google.com (mail-yb1-f202.google.com [209.85.219.202]) by imf02.hostedemail.com (Postfix) with ESMTP id E6BC08000F for ; Thu, 29 Jun 2023 20:50:52 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=pass header.d=google.com header.s=20221208 header.b=dv8waobW; spf=pass (imf02.hostedemail.com: domain of 3rO6dZA0KCC0JgNUaJbVdbbNWPXXPUN.LXVURWdg-VVTeJLT.XaP@flex--axelrasmussen.bounces.google.com designates 209.85.219.202 as permitted sender) smtp.mailfrom=3rO6dZA0KCC0JgNUaJbVdbbNWPXXPUN.LXVURWdg-VVTeJLT.XaP@flex--axelrasmussen.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1688071852; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=oot+BFijmfKZ0KO/nJIrIU5HcDe1IwfMU2NYWHhWcUA=; b=1WEucTaxYzs15T4r8FFmDu4z9ytESswBmGz7R3V31Qf1Tl0awBOk5p8D3FaoSEjajaP5Hd zPQLBbmoM/bkW5feP9L7L2ip3RVKj5iI9mYTCJzuMrj4ypyyckYH5AW7MKPHDQ6Y9SZOD2 j5/uBae5i2lOdNif6hXVIboQMkLjuAk= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1688071853; a=rsa-sha256; cv=none; b=iR9dCgN6O1p2tPk3ZDkbGETS6w3m3/urw/+XBwxx+PywjKDvTkbDh6qKMuDhaZ7BCwi3aq zexVXCkVlM713ip6ABTYLwSWEbeYeLZIMKyMP8BlVlBTBfgdQp5/IzI15Cwc69DfWNkiSa 7fohqnWKt8H0QalJ/uG39wabs8LSlo0= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=pass header.d=google.com header.s=20221208 header.b=dv8waobW; spf=pass (imf02.hostedemail.com: domain of 3rO6dZA0KCC0JgNUaJbVdbbNWPXXPUN.LXVURWdg-VVTeJLT.XaP@flex--axelrasmussen.bounces.google.com designates 209.85.219.202 as permitted sender) smtp.mailfrom=3rO6dZA0KCC0JgNUaJbVdbbNWPXXPUN.LXVURWdg-VVTeJLT.XaP@flex--axelrasmussen.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com Received: by mail-yb1-f202.google.com with SMTP id 3f1490d57ef6-bd69ee0edacso874389276.3 for ; Thu, 29 Jun 2023 13:50:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1688071852; x=1690663852; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=oot+BFijmfKZ0KO/nJIrIU5HcDe1IwfMU2NYWHhWcUA=; b=dv8waobWVaNSUsOT47GOsDx8vV/iRkGODf8zThZKK4JKq0ZSnTrMWy7R3IAiX1fM4t tegdL5nlYEw74WxJbU4ciZTSnZwOVQYCywDP/6JAHDEF3YVNRNQoSLNsxO+X0jE8+WLZ 4ib0DDeM9eP9xJoybwRbj9HMMqb5rE/qTj6br4mOJWTUvJsbEgikpTHZ4BkIpODJP7uS FeOaZbb/LsG8QdVorLcYBayDjEa0cgjzLqqSuGqP5etuMwIPhztE5czIvy2CmabhCZfJ vnsHoy7ITFctcEgQKTEC1tg/xVWWYMTZvhXULy5xYz0ZzCxTiOdKZ00s3BGxSv+HUqqN HmAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1688071852; x=1690663852; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=oot+BFijmfKZ0KO/nJIrIU5HcDe1IwfMU2NYWHhWcUA=; b=X7mLpVXGoxxOyZTSVWE1S7v+HOyiltDl0CRtbZ8aRRNL+a53L6u7dGcOwAHtA0k+sv 9aWhrIoP/4EzqVADOAxJ4RB+v5OnprVBxjAwDSxwTNcIS3EK+c+tml3W0sIPWJKqo9lA f1zV+ixuXiD/BymUnjabSxood3iFkGU3SsllRpuPb0iY0TG9FyH/ONQwgwcbumRcZqrD 6ECQRjhG58mst9hExZqM4Xek3Ro8RKY4Xwyp7NpnTyQVzBwNuToxZzxIo9KFBiu4BGhm zZwQOZZw+HJADcFJpSdHGULzgpE/Vpa86/Lyd7waC1zn0sPxg3TK6yk+2vptUFdTnjyD d3/Q== X-Gm-Message-State: ABy/qLZKiNFRB3ZFKCBhH/H1+kixCjUT5wfSjcujftkK3ikjXpb2jrZg vcz8IKHiFGQPlt7elRyWsqNcHVN0uxtPBtvCdgF3 X-Google-Smtp-Source: APBJJlG01gugR5pBeLSzgr9QaRAnN1lelWD28Wisa41iTTVqrwvQyIgcQU0WMKN/qYg/ivXFlgsOpx2irKkAZegi36c2 X-Received: from axel.svl.corp.google.com ([2620:15c:2a3:200:e20f:5917:3efa:d4bb]) (user=axelrasmussen job=sendgmr) by 2002:a25:f621:0:b0:bc7:f6af:8cff with SMTP id t33-20020a25f621000000b00bc7f6af8cffmr5650ybd.2.1688071852014; Thu, 29 Jun 2023 13:50:52 -0700 (PDT) Date: Thu, 29 Jun 2023 13:50:37 -0700 In-Reply-To: <20230629205040.665834-1-axelrasmussen@google.com> Mime-Version: 1.0 References: <20230629205040.665834-1-axelrasmussen@google.com> X-Mailer: git-send-email 2.41.0.255.g8b1d071c50-goog Message-ID: <20230629205040.665834-3-axelrasmussen@google.com> Subject: [PATCH v2 3/6] mm: userfaultfd: support UFFDIO_POISON for hugetlbfs From: Axel Rasmussen To: Alexander Viro , Andrew Morton , Christian Brauner , David Hildenbrand , Huang Ying , Hugh Dickins , James Houghton , Jiaqi Yan , Jonathan Corbet , "Liam R. Howlett" , Miaohe Lin , Mike Kravetz , "Mike Rapoport (IBM)" , Muchun Song , Nadav Amit , Naoya Horiguchi , Peter Xu , Shuah Khan , ZhangPeng Cc: linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org, Axel Rasmussen Content-Type: text/plain; charset="UTF-8" X-Rspamd-Queue-Id: E6BC08000F X-Rspam-User: X-Rspamd-Server: rspam11 X-Stat-Signature: a78ccbg9gxxo9zkcxzfeujzmfefqhgsz X-HE-Tag: 1688071852-586269 X-HE-Meta: U2FsdGVkX1982lA5m5e/qE4Iy82j92pnOIZ5z7ZkO/HUblB2Q1eR0cE2RHlJV1FIiF+5dMlufr5kcpATsLLhArU8uMgXsFU+SKfIUc+rdk+Ays+FEb51gJiWVJBMFIlzXbBPHW/DieJMAgsgrbUAyP8W18ntewR0OuTXPMqhCmhuSXIY/jFeZ/LNEk816h8A1uHvKNXrvLQTzcNXH/H+JLF1O7clA1a4+4JI2o3RwEkjV+fzHRKIWYe81tisS/reu+P4GWY9XVdw5Oxa8v+7kSSOutLZ9uv0ZnhasFopIObiT0NLuZ1mWkeJLQbThXEJTPTpn5hpArZGGawHHZncYo1CsIVb1+x48hzGEhdSpwhqhKNzhMWgZdxupyhzjuYloZfi3TWdL3RxgRuFe+0nFp07ilwYWrbtmCrEuY16CGwJpVi2+UnxY336pkXDnVNLjniri0RaPEXz9g0SI47VwqTrPxp6OFjffs1BZKqM0uR4wKdq3OSzmlvGIbnItDEG/Lub9G3nrpP8Oyt8erRDSuSlMWalphIhSglaOcAFBkNY6Y0XPuCNXQk+G7+zovvdHCCXCR18zsMpQPf8h5g9Gt/x6ppjKNfTVyizFAPpPLn1eKbzvEyw9srPe4uO7Kla+jRlCuYxax4XlgCWiEPm5KEOrVgvEK3c0r5SfOPq9yKCvkTqiyNzFbrSP+WX2HzrnrfB1FEpTjtJcjzoqepbNCBcy8QRF8Cy50cgrCE/WDvC6KS0KZ135V3lK46gmF95obeD+bn2RMZ6W8ghSCOzZoKNaqpJetkkfOX7CAG1oBmwkbkxsb25J19XlACRCHHTHGFxRAG6cR3+etQv+ENLxnYepMtbvu1vC6VscEnRhzKV2sgp5K+5iLcxnP/0zJDetzybsjqGzvb6z8Ap9mZ6yulrbplyi/k5V1AER7y3SRCU+kK95YYqYZG0SE/OCLJ65/cGvN1P4NRzBqQHgwS gPByb06W H2zyKqjZWbS+e0yP85NKXInyTSTGSqXbIbv6p1GAVIVLtmKtDJcwCTmQKpOwoKXJwsJb/BCgizSZeSh0qCd7OvMzCM5x/J8PABmY0vzUjYRVxki2suXq/KKfGtM10erQquMaQdhM79HT9LvJDrusuc5Il2Ur0JZKZwb0cgBtkYM3n+H0E3a6uuADhWQYGublNQgB8RPBoasqHAiedQo2Y6e4iPgQJwhI7C9fYKcjWChXt/VFflDInwlvrSq+wlBtcCXPl858qZ/rtvZMkwEQ6KPbU0XrnOgG1S1CfiMFy+//pt5DE39qWw2lQ98+kb9F4b3M8h5B+B5eGX6bBlVvZTiauemncD+JtkVer4JeSw6IugN7TkLp/0CG6aM+AOjQK6bLjYMynco6I/HdneWupvGff+ILIWymvY/kNJAAuf5qarc+g8liDK9tLEz5meIq9XS+NOBPYilnrclZ2qiW6Gu8HC2X7ACc3o6zsZAtMIdBfRuFeK50/Fu2LHPs3RdRmmqzvrF8cJokqveBuDinUUSrNT9tuines7O9c3/wfpr+LmkEGz7jmrFMMcxBWJGyDwtpB/bIksdEXEkfc5IZSBJx8Dy5apFrC1IlzN+wx2Bi27Mk2kJ3PKBhqSQqW4GfXKL3VwWTkZpPiw4G4/Ar5E9dwi0Rv6h57CkhOgQVr9iwM+2opD4dwzZwGH9qVI/1QK5ITZ3D0fQMG/XM= 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: The behavior here is the same as it is for anon/shmem. This is done separately because hugetlb pte marker handling is a bit different. Signed-off-by: Axel Rasmussen --- mm/hugetlb.c | 33 +++++++++++++++++++++++++++++++-- mm/userfaultfd.c | 6 +----- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/mm/hugetlb.c b/mm/hugetlb.c index 38711d49e4db..05abe88986b6 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -6090,14 +6090,24 @@ vm_fault_t hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma, } entry = huge_ptep_get(ptep); - /* PTE markers should be handled the same way as none pte */ - if (huge_pte_none_mostly(entry)) + if (huge_pte_none_mostly(entry)) { + if (is_pte_marker(entry)) { + unsigned long marker = pte_marker_get(pte_to_swp_entry(entry)); + + if (marker & PTE_MARKER_UFFD_POISON) { + ret = VM_FAULT_HWPOISON_LARGE; + goto out_mutex; + } + } /* + * Other PTE markers should be handled the same way as none PTE. + * * hugetlb_no_page will drop vma lock and hugetlb fault * mutex internally, which make us return immediately. */ return hugetlb_no_page(mm, vma, mapping, idx, address, ptep, entry, flags); + } ret = 0; @@ -6253,6 +6263,25 @@ int hugetlb_mfill_atomic_pte(pte_t *dst_pte, int writable; bool folio_in_pagecache = false; + if (uffd_flags_mode_is(flags, MFILL_ATOMIC_POISON)) { + ptl = huge_pte_lock(h, dst_mm, dst_pte); + + /* Don't overwrite any existing PTEs (even markers) */ + if (!huge_pte_none(huge_ptep_get(dst_pte))) { + spin_unlock(ptl); + return -EEXIST; + } + + _dst_pte = make_pte_marker(PTE_MARKER_UFFD_POISON); + set_huge_pte_at(dst_mm, dst_addr, dst_pte, _dst_pte); + + /* No need to invalidate - it was non-present before */ + update_mmu_cache(dst_vma, dst_addr, dst_pte); + + spin_unlock(ptl); + return 0; + } + if (is_continue) { ret = -EFAULT; folio = filemap_lock_folio(mapping, idx); diff --git a/mm/userfaultfd.c b/mm/userfaultfd.c index 87b62ca1e09e..4436cae1c7a8 100644 --- a/mm/userfaultfd.c +++ b/mm/userfaultfd.c @@ -381,12 +381,8 @@ static __always_inline ssize_t mfill_atomic_hugetlb( * supported by hugetlb. A PMD_SIZE huge pages may exist as used * by THP. Since we can not reliably insert a zero page, this * feature is not supported. - * - * PTE marker handling for hugetlb is a bit special, so for now - * UFFDIO_POISON is not supported. */ - if (uffd_flags_mode_is(flags, MFILL_ATOMIC_ZEROPAGE) || - uffd_flags_mode_is(flags, MFILL_ATOMIC_POISON)) { + if (uffd_flags_mode_is(flags, MFILL_ATOMIC_ZEROPAGE)) { mmap_read_unlock(dst_mm); return -EINVAL; } -- 2.41.0.255.g8b1d071c50-goog