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 2BED0C61CE7 for ; Wed, 11 Jun 2025 12:09:47 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 232186B00A3; Wed, 11 Jun 2025 08:09:46 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 1BAF16B00A4; Wed, 11 Jun 2025 08:09:46 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 082EB6B00A5; Wed, 11 Jun 2025 08:09:46 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id DAE5B6B00A3 for ; Wed, 11 Jun 2025 08:09:45 -0400 (EDT) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 96231BD3F1 for ; Wed, 11 Jun 2025 12:09:45 +0000 (UTC) X-FDA: 83543000730.09.8153691 Received: from smtp-fw-80009.amazon.com (smtp-fw-80009.amazon.com [99.78.197.220]) by imf30.hostedemail.com (Postfix) with ESMTP id 3FB448000B for ; Wed, 11 Jun 2025 12:09:43 +0000 (UTC) Authentication-Results: imf30.hostedemail.com; dkim=pass header.d=amazon.com header.s=amazoncorp2 header.b=QtQ2HtFd; dmarc=pass (policy=quarantine) header.from=amazon.com; spf=pass (imf30.hostedemail.com: domain of "prvs=25040907c=kalyazin@amazon.co.uk" designates 99.78.197.220 as permitted sender) smtp.mailfrom="prvs=25040907c=kalyazin@amazon.co.uk" ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1749643783; h=from:from:sender:reply-to: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:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=8uWizOJisq3qvf+JalT9q9Tn4t52oR3ukVog/80wa+A=; b=BkbLMAZCgzFJuABJL4r7NXRY03UfUyzDi44HF0Cop9/3aw4AQlaWAyEf1VlTsV69jvhb6l HZ6ymEVv6mZbrN1JlBDccChGqrIcU2Cr6+6TQqi3SFhdDO4mjoWyWUyCC8GXCQ8t6RujS1 OLGC1LJVgDtOB1ungACnT82XCRzbiTM= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1749643783; a=rsa-sha256; cv=none; b=KT++1Qo0pCgWALMfurTk6wrkiyPgrgvmbgNCyFnETOIg43i+i4SU88C5AVsImE8tlr9rcj 4sd8NP2g84jfPLWxme1dNC+3cm6NYTi663+sUVZdzCRLGAv8ZSF0P/xrKIK3VOjgp8g3Hv x5tdUbFsPekCgmj6WMfM62w9EBd2OcI= ARC-Authentication-Results: i=1; imf30.hostedemail.com; dkim=pass header.d=amazon.com header.s=amazoncorp2 header.b=QtQ2HtFd; dmarc=pass (policy=quarantine) header.from=amazon.com; spf=pass (imf30.hostedemail.com: domain of "prvs=25040907c=kalyazin@amazon.co.uk" designates 99.78.197.220 as permitted sender) smtp.mailfrom="prvs=25040907c=kalyazin@amazon.co.uk" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazoncorp2; t=1749643783; x=1781179783; h=message-id:date:mime-version:reply-to:subject:to:cc: references:from:in-reply-to:content-transfer-encoding; bh=8uWizOJisq3qvf+JalT9q9Tn4t52oR3ukVog/80wa+A=; b=QtQ2HtFdk6diaeizKVjaPF1yEAd4RS3SOqar07lyzOc3meTez7Pv3I4L u+pzO2yJp1q6upBwD0IqtEc9fJFaNd50KHPQQ4Ze1ViIfv6EQ9k6zrNSR ZPiw+OHZPXvHKoqiNB26Ofi2F7YisOnq/x9AFCn5uAroA4nX/YKrtvrzL fRgGtT7/xZfkyK9yAQqausCsfuhBfIfO0V/MaJ8Gt+/rZoJ3vsEuFkRZl 5Qsyo5kT+pgRUdtAE66qCF7JyUfxnTsfUH9aG3+LCUWik6wustHeR0QzC c+jKoxhihPXv/ct8XQ3vNB5qEg3Jk/8YWC6rBRxwwUN+U8vyLZ0L/BxDb g==; X-IronPort-AV: E=Sophos;i="6.16,227,1744070400"; d="scan'208";a="210305053" Received: from pdx4-co-svc-p1-lb2-vlan2.amazon.com (HELO smtpout.prod.us-east-1.prod.farcaster.email.amazon.dev) ([10.25.36.210]) by smtp-border-fw-80009.pdx80.corp.amazon.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Jun 2025 12:09:39 +0000 Received: from EX19MTAEUB002.ant.amazon.com [10.0.43.254:27053] by smtpin.naws.eu-west-1.prod.farcaster.email.amazon.dev [10.0.27.130:2525] with esmtp (Farcaster) id 7a036aa7-dc10-479b-80c2-2a7384eb7725; Wed, 11 Jun 2025 12:09:38 +0000 (UTC) X-Farcaster-Flow-ID: 7a036aa7-dc10-479b-80c2-2a7384eb7725 Received: from EX19D022EUC002.ant.amazon.com (10.252.51.137) by EX19MTAEUB002.ant.amazon.com (10.252.51.59) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA) id 15.2.1544.14; Wed, 11 Jun 2025 12:09:38 +0000 Received: from [192.168.1.170] (10.106.82.32) by EX19D022EUC002.ant.amazon.com (10.252.51.137) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA) id 15.2.1544.14; Wed, 11 Jun 2025 12:09:36 +0000 Message-ID: Date: Wed, 11 Jun 2025 13:09:36 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Reply-To: Subject: Re: [PATCH v3 4/6] KVM: guest_memfd: add support for userfaultfd minor To: Peter Xu CC: , , , , , , , , , , , , , , , , , , , , , , , , References: <20250404154352.23078-1-kalyazin@amazon.com> <20250404154352.23078-5-kalyazin@amazon.com> Content-Language: en-US From: Nikita Kalyazin Autocrypt: addr=kalyazin@amazon.com; keydata= xjMEY+ZIvRYJKwYBBAHaRw8BAQdA9FwYskD/5BFmiiTgktstviS9svHeszG2JfIkUqjxf+/N JU5pa2l0YSBLYWx5YXppbiA8a2FseWF6aW5AYW1hem9uLmNvbT7CjwQTFggANxYhBGhhGDEy BjLQwD9FsK+SyiCpmmTzBQJnrNfABQkFps9DAhsDBAsJCAcFFQgJCgsFFgIDAQAACgkQr5LK IKmaZPOpfgD/exazh4C2Z8fNEz54YLJ6tuFEgQrVQPX6nQ/PfQi2+dwBAMGTpZcj9Z9NvSe1 CmmKYnYjhzGxzjBs8itSUvWIcMsFzjgEY+ZIvRIKKwYBBAGXVQEFAQEHQCqd7/nb2tb36vZt ubg1iBLCSDctMlKHsQTp7wCnEc4RAwEIB8J+BBgWCAAmFiEEaGEYMTIGMtDAP0Wwr5LKIKma ZPMFAmes18AFCQWmz0MCGwwACgkQr5LKIKmaZPNTlQEA+q+rGFn7273rOAg+rxPty0M8lJbT i2kGo8RmPPLu650A/1kWgz1AnenQUYzTAFnZrKSsXAw5WoHaDLBz9kiO5pAK In-Reply-To: Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [10.106.82.32] X-ClientProxiedBy: EX19D001EUA002.ant.amazon.com (10.252.50.215) To EX19D022EUC002.ant.amazon.com (10.252.51.137) X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: 3FB448000B X-Stat-Signature: mb3w95zbr4cga5rk7neduir4bar3hy5o X-Rspam-User: X-HE-Tag: 1749643783-468287 X-HE-Meta: U2FsdGVkX1/iGTZhKmf4RCIMVT3dqH7x/lsBBvxHJ42cZD/zY+3Tg4c4yqYEENRzDfXG9WVxIkkMcwPCuiV862/kO93xM2zSARPQjTWKSNWHnH3IGoT85bQaZNU7MQDFCXtfSH6IhaP/9OghpvaKPkMpwvItgCzwk7PUTr+t1+O4JFAl3dIVUPzBRCWgUqqUpSfurLr8G7D39u7my9oYpBIlXq7BTncaCSWJQrbxlt0BSM6ssocQ8MlfHRlbd3LyTIUdFisBZCtK4/X5glHrWrkx6Sd+cn5vh3fMJ+pFNT2vi3DwJSF96DmYe95m3PD3ih+kZdtM5LrklZvEAamyHOpiD3Lee/HGVeAETMHXY4Z4ZaTHpW8LqWUVM3ZEKbjVa1ut9PA/1O8kl+MZ7Fvue5C3tJ2QPhvvKBMxuerBE7YGmc0F9GEChtqdUtbGy2azJuYmq6YZU6WIzv5KwVw6luLdO4+ZF75ropkhU0J6KK1WKu4WBKJs03EGkntVWKGYlOvR0Pf3LYxzp47GawwE3M02RALlOgVaIx8LKdvQ1+E3UNmnhJiK5OPBrkEFcnX7nEvpFdn+VrTIYkmVeKLysHqUUUE7w4yHuwUYVP0UzB7/S8uw0+tqZQw0UMNVqkevWY4Xs+z+z4FnGgBOVUs2NwKbRwa7qHxyFMh3P3tTPacIGgdZs31HoXfEFjgXCOwsFes8WxD/9da+IOIlwWIiuv5SEbrSDXcF3uGebRA9l6biUEnOlrCNBHH4T4V8IwmOLSm7z95vQmnsatojrJ2FaZS1+pKLSYi7pJHAwt0EwEsvjkN9PCMD324UQzeH2reYLEhBviGEdo1FpcaRdeZARTYnCqKOhi9z6wwK0s2TFAWxTFeATGtLAJEulEnA1MzF0x9AAgEhLyhxGHZ2nxBs+UKD+LJ/JLJsIjuUphozRJaniUSD386NasrAQg+OVcrwojvOKrmpEYbHYZ5Tq+2 rdgfnXuo TacPFtCUOxxU4W0iy3ffrQe7GZCm5bIJLE6I0NWlkuQzS7QG5ykEJ5tn84pi3JwUJ6zpWfr8Gad7pZkS1ebB1UzlwM7j+1/72Fc57BVeU65+qcfOqIhqqVBRnLTdvugK6yk13KD9dJXbvbfpPj5hLfEgLfBCe2r1fDB6Hbo2P01OsJhiGdfaXsBtDW0sUqbGmVhT3O/AZez93n0QNnOUrVQc5+eZLtaa5phX0UBy9Rodil+vdNyb03JjWniOOIxALxH0XBSHtRqVmBRP+iJ8wgQ/XTMt2UT7RtxFQeYk0AQxVILp1AV59D7fiWaIORP+NK7dyeZ3KjpqgVjoVY2D7Yg6cqINWH+1TKk7WvUHm1pINkRrvHOO2fZLniWohixQV6BItMWUKzLUKkXORZzDvBmLrtYcExLsjnUzzP8uq8uRffKkmk2PCCp7NYEW87sqK2Y9Yf520I73NRHPwoyOkS6lZ7dfxOgo1LjLdwYUSSRaj/Wf11HyziWBfS4iMX0gnev8PRwQaTSU++DpcWzCXzHr236adGQDxjdKw0C8JYEmOWQRPNIdu21RSwy8GSnjuEqhb9kR+ra6UPYKEO+R/IjVTKvi58cs5Ku2CmO2kockPae0jwtPBztkoHtgS56TN4IUMIG3vBwKWG65SNUehcSZEju6at7W9vxv/H3h4ahXjVqAZKTDwFeRiDk6pcqxHh81SMGMeeuD1CAWRkx2n9GFgBB7UsaV7hBNnqFkxIksy8o6rHQTbXCDzqNACXBOfYzv4zKi/CMp4BDeQq/9I7je8vKN9VPiKuKR1be0Q8rksuYxxmVrt8iaxkKtKhdLXV6L3qDzFoF5n+JkO+9dQC2VTYNpbcvbArwCfgYmHtj/rhAN/8ByZSi7sJnXz5kh77ANwodYyjmhKvM/xzuE66HZJAplWLke792K2L9qyPajBn9j0ZNmoGSsTQEqmltgiUAZEEc5uTEJSRYo= 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: List-Subscribe: List-Unsubscribe: On 10/06/2025 23:25, Peter Xu wrote: > On Fri, Apr 04, 2025 at 03:43:50PM +0000, Nikita Kalyazin wrote: >> Add support for sending a pagefault event if userfaultfd is registered. >> Only page minor event is currently supported. >> >> Signed-off-by: Nikita Kalyazin >> --- >> virt/kvm/guest_memfd.c | 10 ++++++++++ >> 1 file changed, 10 insertions(+) >> >> diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c >> index fbf89e643add..096d89e7282d 100644 >> --- a/virt/kvm/guest_memfd.c >> +++ b/virt/kvm/guest_memfd.c >> @@ -4,6 +4,9 @@ >> #include >> #include >> #include >> +#ifdef CONFIG_KVM_PRIVATE_MEM >> +#include >> +#endif /* CONFIG_KVM_PRIVATE_MEM */ >> >> #include "kvm_mm.h" >> >> @@ -380,6 +383,13 @@ static vm_fault_t kvm_gmem_fault(struct vm_fault *vmf) >> kvm_gmem_mark_prepared(folio); >> } >> >> + if (userfaultfd_minor(vmf->vma) && >> + !(vmf->flags & FAULT_FLAG_USERFAULT_CONTINUE)) { >> + folio_unlock(folio); >> + filemap_invalidate_unlock_shared(inode->i_mapping); >> + return handle_userfault(vmf, VM_UFFD_MINOR); >> + } >> + > > Hmm, does guest-memfd (when with your current approach) at least needs to > define the new can_userfault() hook? > > Meanwhile, we have some hard-coded lines so far, like: > > mfill_atomic(): > if (!vma_is_shmem(dst_vma) && > uffd_flags_mode_is(flags, MFILL_ATOMIC_CONTINUE)) > goto out_unlock; > > I thought it would fail guest-memfd already on a CONTINUE request, and it > doesn't seem to be touched yet in this series. > > I'm not yet sure how the test worked out without hitting things like it. > Highly likely I missed something. Some explanations would be welcomed.. Yes, I realised that I'd failed to post this part soon after I sent the series, but I refrained from sending a new version because the upstream consensus was to review/merge the mmap support in guest_memfd [1] before continuing to build on top of it. This is the missed part I planned to include in the next version. Sorry for the confusion. diff --git a/include/linux/userfaultfd_k.h b/include/linux/userfaultfd_k.h index 64551e8a55fb..080437fa7eab 100644 --- a/include/linux/userfaultfd_k.h +++ b/include/linux/userfaultfd_k.h @@ -221,8 +221,10 @@ static inline bool vma_can_userfault(struct vm_area_struct *vma, if (vm_flags & VM_DROPPABLE) return false; - if (!vma->vm_ops->can_userfault || - !vma->vm_ops->can_userfault(vma, VM_UFFD_MINOR)) + if ((vm_flags & VM_UFFD_MINOR) && + (!vma->vm_ops || + !vma->vm_ops->can_userfault || + !vma->vm_ops->can_userfault(vma, VM_UFFD_MINOR))) return false; /* diff --git a/mm/userfaultfd.c b/mm/userfaultfd.c index 0aa82c968e16..638360a78561 100644 --- a/mm/userfaultfd.c +++ b/mm/userfaultfd.c @@ -788,7 +788,9 @@ static __always_inline ssize_t mfill_atomic(struct userfaultfd_ctx *ctx, return mfill_atomic_hugetlb(ctx, dst_vma, dst_start, src_start, len, flags); - can_userfault = dst_vma->vm_ops->can_userfault && + can_userfault = + dst_vma->vm_ops && + dst_vma->vm_ops->can_userfault && dst_vma->vm_ops->can_userfault(dst_vma, __VM_UFFD_FLAGS); if (!vma_is_anonymous(dst_vma) && !can_userfault) diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c index 91ee5dd91c31..202b12dc4b6f 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -420,8 +420,15 @@ static vm_fault_t kvm_gmem_fault(struct vm_fault *vmf) return ret; } +static bool kvm_gmem_can_userfault(struct vm_area_struct *vma, + unsigned long vm_flags) +{ + return vm_flags & VM_UFFD_MINOR; +} + static const struct vm_operations_struct kvm_gmem_vm_ops = { - .fault = kvm_gmem_fault, + .fault = kvm_gmem_fault, + .can_userfault = kvm_gmem_can_userfault, }; static int kvm_gmem_mmap(struct file *file, struct vm_area_struct *vma) [1] https://lore.kernel.org/kvm/20250605153800.557144-1-tabba@google.com/ > > Thanks, > >> vmf->page = folio_file_page(folio, vmf->pgoff); >> >> out_folio: >> -- >> 2.47.1 >> > > -- > Peter Xu >