From patchwork Fri Jul 7 21:55:38 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Axel Rasmussen X-Patchwork-Id: 13305363 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 69CEEEB64DA for ; Fri, 7 Jul 2023 21:55:59 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 94BA68D0006; Fri, 7 Jul 2023 17:55:57 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 8FA2A8D0005; Fri, 7 Jul 2023 17:55:57 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 79E338D0006; Fri, 7 Jul 2023 17:55:57 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 658208D0005 for ; Fri, 7 Jul 2023 17:55:57 -0400 (EDT) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 3A52514014D for ; Fri, 7 Jul 2023 21:55:57 +0000 (UTC) X-FDA: 80986173954.03.C1AA935 Received: from mail-yw1-f201.google.com (mail-yw1-f201.google.com [209.85.128.201]) by imf09.hostedemail.com (Postfix) with ESMTP id 6698F14000D for ; Fri, 7 Jul 2023 21:55:55 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=google.com header.s=20221208 header.b=WinlA4xj; spf=pass (imf09.hostedemail.com: domain of 36omoZA0KCMsrEv28r93B99v4x55x2v.t532z4BE-331Crt1.58x@flex--axelrasmussen.bounces.google.com designates 209.85.128.201 as permitted sender) smtp.mailfrom=36omoZA0KCMsrEv28r93B99v4x55x2v.t532z4BE-331Crt1.58x@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=1688766955; 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=7OMVl3YxFVN2A+Ry/UxbO1YmCHHRZcxw7VDxaJg9ek4=; b=xcCYhQy61ku0UYmAAjp4K4DdZOfad7GIS6ekAuhyWdRIjrRZycN+gl+6ft6QP4pU/hZ2oi E1nTG/bf9m/S4DRDzxArijmbXRSW0dZFAVe5Q9V/tdmnbymebIUZU+v0wD7AGqX5e5Bnt5 x6rNLLsJ5h6wQadK1XBVWIat1UQ8XRA= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1688766955; a=rsa-sha256; cv=none; b=PRucCZFuqG7u3/vf1x/p2d5cPazHSPEvutKTWu/jMweQRW0iygZW/itKON2vHOo0F3Wbkb UKF79UV4QJ+xHQqOLLopOFJBk8q9ODdjCjrJ5oCiqwGRO44Zc6PstF67islu3DEk0T5YT9 xWxlhhBtK4YS793K2ZjOJ86huFsJVYg= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=google.com header.s=20221208 header.b=WinlA4xj; spf=pass (imf09.hostedemail.com: domain of 36omoZA0KCMsrEv28r93B99v4x55x2v.t532z4BE-331Crt1.58x@flex--axelrasmussen.bounces.google.com designates 209.85.128.201 as permitted sender) smtp.mailfrom=36omoZA0KCMsrEv28r93B99v4x55x2v.t532z4BE-331Crt1.58x@flex--axelrasmussen.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com Received: by mail-yw1-f201.google.com with SMTP id 00721157ae682-569e7aec37bso27544547b3.2 for ; Fri, 07 Jul 2023 14:55:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1688766954; x=1691358954; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=7OMVl3YxFVN2A+Ry/UxbO1YmCHHRZcxw7VDxaJg9ek4=; b=WinlA4xjLrm42Y0LrkLO833bYnLkHqw90W20NHsoyLZQtg1RvWlssOMFOMjd6VvSn3 iYv6kZ6oeM6LcpvIDaTEPpfcc8gSW/pj+FpAaO2nVo/YQ4FKqs5+alRw0RQFBHZ5C9Li WwXNwLXfn0bdHjwb+FCiBwlKRuhOJzkac2hZ6zvt9v8rdPkWboNk13P08v0VELKTQZoF 0QcDn0IuZNiLfUlhg+XzK/7q28VwlIE5Lf3mwk8//FBbyC0xrc3lW7P3+clz4gUrnpYh S59eoTTQlzeW4FwWK37lEymavNQ2LCOR9UtKZW+BbCcuM6gOcPJpGzfDLhFZE3wyjxHA uahQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1688766954; x=1691358954; 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=7OMVl3YxFVN2A+Ry/UxbO1YmCHHRZcxw7VDxaJg9ek4=; b=f9v+UezewYT3YBjFrjPtBwmdaZtx6C4sQCZqt5DK84oGz08Ifq5ZNjlUj54bmgiizW 6X6xBESURlip5gqnyd2FKjgeKpnxXpaJJcKUolNtsve4dyB3XtE7b0/RWZ8Vf4MD5cPE yzybVYdhSPO3Thzv4YoEtxOeeUnDiWQEuJD9iz5t7YxATYNkl4TER7Nw4yunSXZv/oRl OP8JHkXeIrzLIdHT1b7vhz5dx3TFq4oTGX2HVU1XxUfs1Zx6IZ0jHAXtfhX61HVOQi71 4g+xGtavseDkh5TVAsuz2iBxdGf//mDcADinoE8tuHVAxX71PmlaDYBdgsBfA/M4iMNd dWMw== X-Gm-Message-State: ABy/qLZKlTyR5E9mSduOst14g0km7MeNUFJcRMeH0RzumXwNrjSa3t23 ByegB4U08mJF9t/jfT+HbP4mNnt+MhyYUIEnjBqk X-Google-Smtp-Source: APBJJlEb1nGvsIgNN71uOPifboK21axP2OJKOqwVdFOinGjePMT+S3RRgV5WMxsRC8ogPCTBFhgiiAFAPJrAtTi306IK X-Received: from axel.svl.corp.google.com ([2620:15c:2a3:200:c201:5125:39d1:ef3f]) (user=axelrasmussen job=sendgmr) by 2002:a81:af1b:0:b0:573:6b9c:6fa1 with SMTP id n27-20020a81af1b000000b005736b9c6fa1mr41633ywh.1.1688766954512; Fri, 07 Jul 2023 14:55:54 -0700 (PDT) Date: Fri, 7 Jul 2023 14:55:38 -0700 In-Reply-To: <20230707215540.2324998-1-axelrasmussen@google.com> Mime-Version: 1.0 References: <20230707215540.2324998-1-axelrasmussen@google.com> X-Mailer: git-send-email 2.41.0.255.g8b1d071c50-goog Message-ID: <20230707215540.2324998-7-axelrasmussen@google.com> Subject: [PATCH v4 6/8] mm: userfaultfd: document and enable new UFFDIO_POISON feature From: Axel Rasmussen To: Alexander Viro , Andrew Morton , Brian Geffon , Christian Brauner , David Hildenbrand , Gaosheng Cui , Huang Ying , Hugh Dickins , James Houghton , "Jan Alexander Steffens (heftig)" , Jiaqi Yan , Jonathan Corbet , Kefeng Wang , "Liam R. Howlett" , Miaohe Lin , Mike Kravetz , "Mike Rapoport (IBM)" , Muchun Song , Nadav Amit , Naoya Horiguchi , Peter Xu , Ryan Roberts , Shuah Khan , Suleiman Souhlal , Suren Baghdasaryan , "T.J. Alumbaugh" , Yu Zhao , 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 X-Rspamd-Queue-Id: 6698F14000D X-Rspam-User: X-Stat-Signature: e43bgqos8a9uogagzx5emyra87rs6m5w X-Rspamd-Server: rspam03 X-HE-Tag: 1688766955-931884 X-HE-Meta: U2FsdGVkX18eD+sJ1oUp7QoC1xsAs0Q3jnXLwAl40bkMy717IfPEL5aN3WevqgT9EGh9inCXsn6H4I21rdknUcH6v3fLE9G7U5O7NNf0ZIv9MLhS5CKWa9K3n6i8XORxVsM4VwTqO8CDBW5FBK57B/zlxlxNwkLgCpJwtWM3Sd8nH786usHB6liWSgUnoZS34FW8X3X+1PGBisoA+dQCISqhiImu2z8LstzYuhm30w+fGwa2e4jSIbsttI6LK67upDWYohDWfmEMCT5Nhufw9KvqGiXrWOTpGxuUkcDQ8bCkaghc7nq2Q9LHx1xz/5uqVBJIuFVHx1XKYTi7Fs4DBTXXjY1ukzZxdQWHCgnkbUIPIMnuMTQ3gy6xyLLJrm4Hbmct2OGEXwBqv+sOWNc3/LLx8W0C5TKDJIW5I59+ATSEpDsEAVPjc0SQKZYFafMmTouWHNaCce9C/QQdDqjtsDpax3bzcTSHm2ImVAvA11MZQj6z3BuXebE7wLv51oD2OcSYTfwnC9mQ9V1ETanKiCiVq0p5cGRtkPtcvqvgYlCCeoBf49L0DCzCMlaqubzz1STw1Emtf7N58k2fyE1tuSWd9cEPCYqDi72CBeKCvGiJttvKmPGsPlsVlpBWjFH00bVQl24TpQ81T6d9gCloXxjhYrkvjb2hKLFOtdqBpA3c9LQEH7pS0lhf97bU7xaGm3102f3bGBKk5LS3dIFhr+tTF0LN9VqoK9Zcdz3B/ICywJYmh/httPL4cj8Lja0JzDSL+e1I86mwutF+ZtdH1Q3P6/uHUBOkT7NAKmEwVQimkNaoGRMRBMdoy+Is0RjRmRDeSwQRiSbsziqDPV0hcwZGqOIjGB6wMxjeganeQDz4Y5EtRR3zSFXJ8eBQsC/TYSEFvQhBfTKJQdytXJU0KYEEDtywh3ebQ0HdBDAj6i5Te5FdsEhoCnUXNCMa/viEDgizNYoOB3JCZWSYRIC GKnM0Rdy qRMYS1LUnBWB6iNRlmNx48nI7dGOazOVuRU7kzYx7BXIrWzdt5gsSYMN0Cxq2cJFoJsPSRxszU2PTBufUl8KDfqpoRgmRAlj1UjQsKZHecWtvh28x/cQR1iRMpPJ6p4bngasb41CZg7/05HcfkPkiMttSdW8K8PMkMnrAL1dRIjbhIenwCPQZaPIWkaa8/OeP0tkwrBZiHN1yYFYBf2ELFCdR1gZ5VaGiUmSNA5BLvGTmIrzrlIN2e7U60r139gAUswbFvDC0YSrZWcHA1aC3RL5S+jeodtDxkFZ1fpqNcEzL0wPOW5k5k4H9qGf1lEU0+2SRQXqGRxxS9fHgEhwA9buMIzFb367pjridyz0rUItUqcrOp8spWqfIgxevrCB8Rq9asY6PVlXpBlcCkDbafoh0U447YXjaj1YDkRU9jA4TDpMS9liWxfwl89L0bPxOcSPQzSGKjhxXCf5Suc9vItX6IOTxWYwm7MUVyLKikRCVYkIYdKAW9CabnJ3/0KzbbSFY3lzDTC3idzHZBIxD9VMHZcsP1e1rX49m66issUqXXjAOvkZppjLCElnlkwCjRlW14aKVUKO8FzKZtRwulf5ocs0jJU/pmnLbXombWNlA2WttreAl372u7qDtyfyxjhxGQLI072cU6o5UJAWzQT+TlNvTSwZtOyHK9ouEN34oFBYwL4HM36GCJp8RsNChbRApDxSIS3v/iZFHvs1qEVWXXR2rVrbTPu+Z57fLDfHIvJM= 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: Update the userfaultfd API to advertise this feature as part of feature flags and supported ioctls (returned upon registration). Add basic documentation describing the new feature. Acked-by: Peter Xu Signed-off-by: Axel Rasmussen --- Documentation/admin-guide/mm/userfaultfd.rst | 15 +++++++++++++++ include/uapi/linux/userfaultfd.h | 9 ++++++--- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/Documentation/admin-guide/mm/userfaultfd.rst b/Documentation/admin-guide/mm/userfaultfd.rst index 7c304e432205..4349a8c2b978 100644 --- a/Documentation/admin-guide/mm/userfaultfd.rst +++ b/Documentation/admin-guide/mm/userfaultfd.rst @@ -244,6 +244,21 @@ write-protected (so future writes will also result in a WP fault). These ioctls support a mode flag (``UFFDIO_COPY_MODE_WP`` or ``UFFDIO_CONTINUE_MODE_WP`` respectively) to configure the mapping this way. +Memory Poisioning Emulation +--------------------------- + +In response to a fault (either missing or minor), an action userspace can +take to "resolve" it is to issue a ``UFFDIO_POISON``. This will cause any +future faulters to either get a SIGBUS, or in KVM's case the guest will +receive an MCE as if there were hardware memory poisoning. + +This is used to emulate hardware memory poisoning. Imagine a VM running on a +machine which experiences a real hardware memory error. Later, we live migrate +the VM to another physical machine. Since we want the migration to be +transparent to the guest, we want that same address range to act as if it was +still poisoned, even though it's on a new physical host which ostensibly +doesn't have a memory error in the exact same spot. + QEMU/KVM ======== diff --git a/include/uapi/linux/userfaultfd.h b/include/uapi/linux/userfaultfd.h index b5f07eacc697..62151706c5a3 100644 --- a/include/uapi/linux/userfaultfd.h +++ b/include/uapi/linux/userfaultfd.h @@ -39,7 +39,8 @@ UFFD_FEATURE_MINOR_SHMEM | \ UFFD_FEATURE_EXACT_ADDRESS | \ UFFD_FEATURE_WP_HUGETLBFS_SHMEM | \ - UFFD_FEATURE_WP_UNPOPULATED) + UFFD_FEATURE_WP_UNPOPULATED | \ + UFFD_FEATURE_POISON) #define UFFD_API_IOCTLS \ ((__u64)1 << _UFFDIO_REGISTER | \ (__u64)1 << _UFFDIO_UNREGISTER | \ @@ -49,12 +50,14 @@ (__u64)1 << _UFFDIO_COPY | \ (__u64)1 << _UFFDIO_ZEROPAGE | \ (__u64)1 << _UFFDIO_WRITEPROTECT | \ - (__u64)1 << _UFFDIO_CONTINUE) + (__u64)1 << _UFFDIO_CONTINUE | \ + (__u64)1 << _UFFDIO_POISON) #define UFFD_API_RANGE_IOCTLS_BASIC \ ((__u64)1 << _UFFDIO_WAKE | \ (__u64)1 << _UFFDIO_COPY | \ + (__u64)1 << _UFFDIO_WRITEPROTECT | \ (__u64)1 << _UFFDIO_CONTINUE | \ - (__u64)1 << _UFFDIO_WRITEPROTECT) + (__u64)1 << _UFFDIO_POISON) /* * Valid ioctl command number range with this API is from 0x00 to