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 5B641C4167B for ; Fri, 10 Nov 2023 18:23:04 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id EB0638D00F5; Fri, 10 Nov 2023 13:23:03 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id E5F9D8D0005; Fri, 10 Nov 2023 13:23:03 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D01108D00F5; Fri, 10 Nov 2023 13:23:03 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id BC89D8D0005 for ; Fri, 10 Nov 2023 13:23:03 -0500 (EST) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 9BCE8160335 for ; Fri, 10 Nov 2023 18:23:03 +0000 (UTC) X-FDA: 81442866246.25.E725D3C Received: from mail-yw1-f201.google.com (mail-yw1-f201.google.com [209.85.128.201]) by imf27.hostedemail.com (Postfix) with ESMTP id C20354001F for ; Fri, 10 Nov 2023 18:23:01 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=XmqW8pcp; spf=pass (imf27.hostedemail.com: domain of 3BHVOZQYKCFkJ51EA37FF7C5.3FDC9ELO-DDBM13B.FI7@flex--seanjc.bounces.google.com designates 209.85.128.201 as permitted sender) smtp.mailfrom=3BHVOZQYKCFkJ51EA37FF7C5.3FDC9ELO-DDBM13B.FI7@flex--seanjc.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1699640581; a=rsa-sha256; cv=none; b=j62CMJ2aZW6eG2e2YzMafhcDjCr1slL5oXiiAZQtSXFCXaIupD4f+E6oQB58Cckam33/1F GBW3DolGxTvJZXjIoAwZiW+rnV+XTveQw6wh5quoFwkrZZsG4tXE143fFgYbPfk7dh+YLV 52Bdc9eiWh3lR5Qar6SipZo9k+SimAY= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=XmqW8pcp; spf=pass (imf27.hostedemail.com: domain of 3BHVOZQYKCFkJ51EA37FF7C5.3FDC9ELO-DDBM13B.FI7@flex--seanjc.bounces.google.com designates 209.85.128.201 as permitted sender) smtp.mailfrom=3BHVOZQYKCFkJ51EA37FF7C5.3FDC9ELO-DDBM13B.FI7@flex--seanjc.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=1699640581; 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=/u2JG0fndtvz5StB0AokXkOquj7NpP7M8gj3x0QBG2E=; b=m4KAhe+Q2FihRunMuHnPOUjZrCagNviYNF/5uFwyII60kI7pXculctRdF0qeLUzKNVIt9M bJF8acqKwRHErFrejB8GuCbmIYH2HP1CNdfTcpzH2Tzj/jRC2KBOWXo8zUOlawnZHojEZ2 NYeLCL+zoJvSnvI/LOWM1GxDG3QW9rY= Received: by mail-yw1-f201.google.com with SMTP id 00721157ae682-5b1ff96d5b9so31778447b3.1 for ; Fri, 10 Nov 2023 10:23:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1699640581; x=1700245381; darn=kvack.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=/u2JG0fndtvz5StB0AokXkOquj7NpP7M8gj3x0QBG2E=; b=XmqW8pcpv3CcsvuhsgaCGXOdOrsWjcpgUoCmFNwrsbHVkgpzsodPhK6ub8t2DoerqT dBklXsy1rVbqaMcplC9+tY+C1ma16TSW0tzaTny97ekYkkZerJ+P51Ff6yu1xaeaa9vZ 1NvkrwgV81ZiI1g24LuifiAR9H/Ild2yq/yarmjODTY2VAyTHOVKd9mniIpxZWzDABWT IPffzHGkIWpbBP8bJOtw3uDM5/srUxH+TmF4Q6emNBYHHjkM9kz4LTxbVHEQb97tqElE 7iPZbvFhdyXPb7CF6o211lFggjCjXPRWgk6t9bpCCe0TyDfYwAggTf9Yl3e8EnkHFbEP M2Cw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699640581; x=1700245381; 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=/u2JG0fndtvz5StB0AokXkOquj7NpP7M8gj3x0QBG2E=; b=Ux9yy6v7ZWrmbOLXtxBVe+Y6d0IAg/7Ej5D7BvLMyo31mCKcAMof+0PW9XgzoVldu1 oeYnOkTTjD7XoEiF5XS0xVAfyNWAoEZP17370s8BXcTHaD3IciSm0tccxbuqjZlzs/YV 47rRgvd/6pKlUMPDlEJbY03Qrl2wT59Hc+1+Gw/561WOcz8kxc2+dl+y8kLdIONJBk2a QiYLw6HINUcDBV92wljm0MorbsRch7vJM35sbyIRijuCUEDDBJmyHmy5bvvsIWLoReAP SojzwRletgBQ3SLbxh+oFoL3+5mn+795K7SUO33UMALxaizOcb3y/8bag9P3iyYp5kvB fHeg== X-Gm-Message-State: AOJu0YzK5qwIQ9IlQ6+XkMts1eT/oat4BNFBKpfLSwfnhrOg+O9d2DHG 5O/35+GIMCaUlbvBNRdxYQY16PJwHVQ= X-Google-Smtp-Source: AGHT+IFilgu1/Q1EZiEoL3sTFYKCQfnhtgAeMBBAfAGcs6DHfZF6Y3nZ5EepLJy80XYZ0ZRT2keQkzxRdJY= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a81:ef0c:0:b0:5be:ae71:d70a with SMTP id o12-20020a81ef0c000000b005beae71d70amr242444ywm.4.1699640580898; Fri, 10 Nov 2023 10:23:00 -0800 (PST) Date: Fri, 10 Nov 2023 10:22:59 -0800 In-Reply-To: <956d8ee3-8b63-4a2d-b0c4-c0d3d74a0f6f@intel.com> Mime-Version: 1.0 References: <20231105163040.14904-1-pbonzini@redhat.com> <20231105163040.14904-16-pbonzini@redhat.com> <956d8ee3-8b63-4a2d-b0c4-c0d3d74a0f6f@intel.com> Message-ID: Subject: Re: [PATCH 15/34] KVM: Add KVM_CREATE_GUEST_MEMFD ioctl() for guest-specific backing memory From: Sean Christopherson To: Xiaoyao Li Cc: Paolo Bonzini , Marc Zyngier , Oliver Upton , Huacai Chen , Michael Ellerman , Anup Patel , Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexander Viro , Christian Brauner , "Matthew Wilcox (Oracle)" , Andrew Morton , kvm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, linux-mips@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, kvm-riscv@lists.infradead.org, linux-riscv@lists.infradead.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Xu Yilun , Chao Peng , Fuad Tabba , Jarkko Sakkinen , Anish Moorthy , David Matlack , Yu Zhang , Isaku Yamahata , "=?utf-8?Q?Micka=C3=ABl_Sala=C3=BCn?=" , Vlastimil Babka , Vishal Annapurve , Ackerley Tng , Maciej Szmigiero , David Hildenbrand , Quentin Perret , Michael Roth , Wang , Liam Merwick , Isaku Yamahata , "Kirill A. Shutemov" Content-Type: text/plain; charset="us-ascii" X-Rspamd-Server: rspam08 X-Rspamd-Queue-Id: C20354001F X-Stat-Signature: xfkmrdmtg5to3w9b4nwcifad98ih6xud X-Rspam-User: X-HE-Tag: 1699640581-391487 X-HE-Meta: U2FsdGVkX1+CX2W/9+5wEplpjMwdeWZKa3PAhGpjhYwZJUHEyozy+GmK4GE86hZsZUNfpq1+xrhfEg/I7Imf0zuBKIATrfsBe7gPSoq/ylQAtvYs0v7xFsTYooSPM0rUR/TXu2SsM6kJgsh012JEqH8yuulOvYf+YAg9ctJRw3NyVJF5X/KQowc52RxdMphrU9jMwn5VhDrhjuS5oZCDCeXgR7hVEw7tfZq7i7bJ7M94ZBTqVpiCi9t4yvEgEh8JuPkXaDxusATZaaPklLi5wCADFL0af3GO82IJ+IODqV8TbdB550HqrOTuWWGGB2VoNxubwjRs324Yr7Yh8EyeQJaUAvjbDRjLPHeq5W1uGSRqFSmyh9tIL+KoryyxygCqe84NINGAw2AumMJoVX2runYm3qr2VpBAwRruyiO0XZ0mT3mCrT+J2rBxMd0uLBJj7H8qPRRwHnqKR9gWebl7WIKkO73ja9LygNW1ODKMucNC3KSOqzvx527frFILngpYFFIfTs6D1tEw7Fm2IpcBFxnKMdANpjmw6tGziUtieOuDVMsIehJPTCyOq1323pWSR2461GTMEAJN220JLkWr/gmVh5dMLDnVCnJuyCCJeurmdC9B+rzBgWftyZWUXqWbRsN+vz/v++IdO9VZP86dpTtjG3DNivQSjI3nApFVeoHb3F8r5bifpz8uaEqzkOPnQZmPg1k3AX8jKfoDctF6VdC/ex2a8hasVur9xbdf1/c9Uoay+6JrKy8r/ow3wVONNb5sqmPNytiem41RlTiSUkENqoH2bVFlms8sPFZMbwtADigsT5UnTm9APcxpQ/1t5SmSeOKqrun7Ybiek6am/1QiKOjvTy0S7I/05oxNxKJyaMx/9dvqTacqdF4lh1087URsnP/vQ/zYO6sCXhZDlBRmcb5/T8FyfgxbANvKbhKWgUVoSak5U1agtI43z5SML3XnXCTYbUBm6wz0Xfe 9wUIZYvb Ou/dvyHtvBq/QiR7XMuN8HzVIJdm72Lz/DvvBYwiGdDJPrZVZmYls0ELrnFs+f0F+qANGqFSzev+KzcYgq5lRaOFi3ASsOWX56fAP+F2fhqA1kNVrqKlQ84OhUvmHbKzj2Mmpgx9m2BGnuojuc8DUr0N7W69GdawLsi5yGQfYFaROaU+8um3EzPDOwiMeiP6JCGsrL/Ouaeuy2y/uOEvupsxMmRqgdILIb59ZljhsnvD5BWnQFs5QHPyX89oBw4qSQm6l72HgC0oAZkq9/4ZTB5Z9YvfQi1ivinarc+LLysaVyWjJRP5EmhK6Yz37cyXvpuXcVguyDibglUKmNvCACSvK2LhyMhgKUMdsSsYSt/vHU2/7oZKnoAvqbzIvzyYFFB/aaNC2v0NNBNqZYUjt0r9Rz4OYZxsOP6LQP2dXVLXB6AhASFITNHg61CBYI3p/DEUqwW4M8qgMnVziLFCarYZroGHVbxRrdR5ZND8t43Tx6kBWqDgthVlGdgd7bdHWynTmeQnP08WnbsZDDN4RdGzGy9GPvO/o3x6bk7iqqcLYEnDARuyKZX1wnhhjgQW+p6y/bJTdSUg5gHy+7Hep8Zv+mrRJbjx9oaE0XXiJBq9E9kXEj2JE9vA+6XrH3pw/XtRYk4rbP+TS4Ea1oqi0PQTBa4IiyikysKLoSJ2WF2f9UgpvCP0zxO8tdR1V5PX6IUD29ZiVHYmoPqc= 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 Fri, Nov 10, 2023, Xiaoyao Li wrote: > On 11/6/2023 12:30 AM, Paolo Bonzini wrote: > > diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h > > index 68a144cb7dbc..a6de526c0426 100644 > > --- a/include/linux/kvm_host.h > > +++ b/include/linux/kvm_host.h > > @@ -589,8 +589,20 @@ struct kvm_memory_slot { > > u32 flags; > > short id; > > u16 as_id; > > + > > +#ifdef CONFIG_KVM_PRIVATE_MEM > > + struct { > > + struct file __rcu *file; > > + pgoff_t pgoff; > > + } gmem; > > +#endif > > }; > > +static inline bool kvm_slot_can_be_private(const struct kvm_memory_slot *slot) > > +{ > > + return slot && (slot->flags & KVM_MEM_GUEST_MEMFD); > > +} > > + > > maybe we can move this block and ... > > > > > @@ -2355,6 +2379,30 @@ bool kvm_arch_pre_set_memory_attributes(struct kvm *kvm, > > struct kvm_gfn_range *range); > > bool kvm_arch_post_set_memory_attributes(struct kvm *kvm, > > struct kvm_gfn_range *range); > > + > > +static inline bool kvm_mem_is_private(struct kvm *kvm, gfn_t gfn) > > +{ > > + return IS_ENABLED(CONFIG_KVM_PRIVATE_MEM) && > > + kvm_get_memory_attributes(kvm, gfn) & KVM_MEMORY_ATTRIBUTE_PRIVATE; > > +} > > +#else > > +static inline bool kvm_mem_is_private(struct kvm *kvm, gfn_t gfn) > > +{ > > + return false; > > +} > > #endif /* CONFIG_KVM_GENERIC_MEMORY_ATTRIBUTES */ > > this block to Patch 18? It would work, but my vote is to keep them here to minimize the changes to common KVM code in the x86 enabling. It's not a strong preference though. Of course, at this point, fiddling with this sort of thing is probably a bad idea in terms of landing guest_memfd. > > @@ -4844,6 +4875,10 @@ static int kvm_vm_ioctl_check_extension_generic(struct kvm *kvm, long arg) > > #ifdef CONFIG_KVM_GENERIC_MEMORY_ATTRIBUTES > > case KVM_CAP_MEMORY_ATTRIBUTES: > > return kvm_supported_mem_attributes(kvm); > > +#endif > > +#ifdef CONFIG_KVM_PRIVATE_MEM > > + case KVM_CAP_GUEST_MEMFD: > > + return !kvm || kvm_arch_has_private_mem(kvm); > > #endif > > default: > > break; > > @@ -5277,6 +5312,18 @@ static long kvm_vm_ioctl(struct file *filp, > > case KVM_GET_STATS_FD: > > r = kvm_vm_ioctl_get_stats_fd(kvm); > > break; > > +#ifdef CONFIG_KVM_PRIVATE_MEM > > + case KVM_CREATE_GUEST_MEMFD: { > > + struct kvm_create_guest_memfd guest_memfd; > > Do we need a guard of below? > > r = -EINVAL; > if (!kvm_arch_has_private_mem(kvm)) > goto out; Argh, yeah, that's weird since KVM_CAP_GUEST_MEMFD says "not supported" if the VM doesn't support private memory. Enforcing that would break guest_memfd_test.c though. And having to create a "special" VM just to test basic guest_memfd functionality would be quite annoying. So my vote is to do: case KVM_CAP_GUEST_MEMFD: return IS_ENABLED(CONFIG_KVM_PRIVATE_MEM); There's no harm to KVM if userspace creates a file it can't use, and at some point KVM will hopefully support guest_memfd irrespective of private memory.