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 092B4E77182 for ; Fri, 13 Dec 2024 16:48:27 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 418C66B00A0; Fri, 13 Dec 2024 11:48:25 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 3CF006B00A1; Fri, 13 Dec 2024 11:48:25 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2185A6B00A2; Fri, 13 Dec 2024 11:48:25 -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 ECAB76B00A0 for ; Fri, 13 Dec 2024 11:48:24 -0500 (EST) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id AD7C51A0FC8 for ; Fri, 13 Dec 2024 16:48:24 +0000 (UTC) X-FDA: 82890517920.06.DBE0E75 Received: from mail-wr1-f74.google.com (mail-wr1-f74.google.com [209.85.221.74]) by imf19.hostedemail.com (Postfix) with ESMTP id 9A1DF1A000E for ; Fri, 13 Dec 2024 16:47:55 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=D22tQ+Q5; spf=pass (imf19.hostedemail.com: domain of 3VWVcZwUKCNIHyzzy4CC492.0CA96BIL-AA8Jy08.CF4@flex--tabba.bounces.google.com designates 209.85.221.74 as permitted sender) smtp.mailfrom=3VWVcZwUKCNIHyzzy4CC492.0CA96BIL-AA8Jy08.CF4@flex--tabba.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=1734108475; 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=aq6uxvVbG5xxzgybZF/l/V4c8HPIK8uPOyna1cvYXWA=; b=ssCkMs7ljXE1OmDua3b8joTRKBh850IoiiOJQrhCG3+qRC8UEFqZJ6WzAuGN0002kUPoWS 7rzgaHX2UFU9PYwdTga6QfVzXXTCi+WFfU/DTKFY7b6+TIiTW3Q+dc88AG7keSzLQqh1xj pzR60LEIwSBwJfJJc6e31bypLOE7Sbo= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1734108475; a=rsa-sha256; cv=none; b=j4om5IYVS4TJVB5LmqHe+aX4C8V6L7I0YGZt0fwbeMc2FX5RTFZbf8+Lo03wpJR8Jk/yrh vbn7b05Z9ij7Jv4sIVCACjNTu8MwELr6+QpT6j8Rc/KsunT7yF3bsLo41GEttxTFrsUPAj pYn2HG/7XoXhfamfD6sx+FJdkTG+2Ps= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=D22tQ+Q5; spf=pass (imf19.hostedemail.com: domain of 3VWVcZwUKCNIHyzzy4CC492.0CA96BIL-AA8Jy08.CF4@flex--tabba.bounces.google.com designates 209.85.221.74 as permitted sender) smtp.mailfrom=3VWVcZwUKCNIHyzzy4CC492.0CA96BIL-AA8Jy08.CF4@flex--tabba.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com Received: by mail-wr1-f74.google.com with SMTP id ffacd0b85a97d-385e1fd40acso1216305f8f.3 for ; Fri, 13 Dec 2024 08:48:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1734108501; x=1734713301; 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=aq6uxvVbG5xxzgybZF/l/V4c8HPIK8uPOyna1cvYXWA=; b=D22tQ+Q5ssJhjtnGOER8DeuON/xZM4ZuurcZ3+CpgS3THt9jdjwZRcsYCqHnE6aZyy Nyx4GMH7fY6fjxW7LZ+r7FUdLflObqiUbWgJR6m9vtQNUbOObRsCBgwrTcUtkpK9ob1D q/g7wrtfhyJZdks1S8Ey9cW1bO3EYls4D6yDPaE1SrGM6aDcPJeOhUC+Pf2cNEV39JE6 KlrVw0twC+OM14QLb8KQcv0GYpnAiBVkuvn5hNK8Vkl3Kx6orKN2/+06UoB4fCQof65v lRiv4ao87T+QR+Etr0irQWyc8N7ouMcNJSyqCgtgFTLP5iIL49NIG/H0RVjrPdTRJOtj rdcw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734108501; x=1734713301; 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=aq6uxvVbG5xxzgybZF/l/V4c8HPIK8uPOyna1cvYXWA=; b=vhT/anu57ChBEN/QbhQZELL9UqkL94zMXymTyVUguZXR/Gd+J8LsGaPtLzrPTXGzcl Y7f88xfVHA2Bw54P1Xj6Xsur1nBMUeZNDYXHw1XONsrFLTOxD/AvseHK5QEbS9+ZO/Bo qij0XCzsRw0Vh35gkMz668ucYFoYCJPC5fLV8tYdtQYfXNTIRuUn+Hpfwykx3lHcLQpR vGi7lTQI/DX184IwnidHr93+cgT3Z64kMpnFMtJPHwjxR/v9vjZuLzTW6MtXnehERMPC RMNDhjXvb1SxkJHIZvSmjc/4gaugSDrrl4NouxaGnR0pgLDNvY/rM93RqT5Ct0ZWSpU+ 3sQQ== X-Forwarded-Encrypted: i=1; AJvYcCUZW3tmME3ZNiN0p+TxU7DtJsDrBn8xCO4FUVbZ3byK6Z4GZFR6nhhFcZvAzkUgEeX0rdmcVa8wuA==@kvack.org X-Gm-Message-State: AOJu0YwhmVvyKj+0XdVKtSPJNGcGYC2Ss2yt98UHYUs9C5EXd+q3CTU7 kO4Y+gE6kr8xsMBL4R3WVBBwxoRZ7rnr//I6sYfkDfiPkK3HWCtKzVAxhKl0RmoESzYHBSV2Gw= = X-Google-Smtp-Source: AGHT+IFSvG/fqSl7ZNJ3qm5zCF5qD4QOJhC1Avgrxg1Y/6IRPNfNklxASuKBBLtf2tg/8VDvraqzyfwYkg== X-Received: from wmbjl5.prod.google.com ([2002:a05:600c:6a85:b0:434:f119:f1a]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6000:4b12:b0:385:fc70:7eb with SMTP id ffacd0b85a97d-38880ac252bmr2943992f8f.12.1734108501569; Fri, 13 Dec 2024 08:48:21 -0800 (PST) Date: Fri, 13 Dec 2024 16:48:00 +0000 In-Reply-To: <20241213164811.2006197-1-tabba@google.com> Mime-Version: 1.0 References: <20241213164811.2006197-1-tabba@google.com> X-Mailer: git-send-email 2.47.1.613.gc27f4b7a9f-goog Message-ID: <20241213164811.2006197-5-tabba@google.com> Subject: [RFC PATCH v4 04/14] KVM: guest_memfd: Track mappability within a struct kvm_gmem_private From: Fuad Tabba To: kvm@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-mm@kvack.org Cc: pbonzini@redhat.com, chenhuacai@kernel.org, mpe@ellerman.id.au, anup@brainfault.org, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, seanjc@google.com, viro@zeniv.linux.org.uk, brauner@kernel.org, willy@infradead.org, akpm@linux-foundation.org, xiaoyao.li@intel.com, yilun.xu@intel.com, chao.p.peng@linux.intel.com, jarkko@kernel.org, amoorthy@google.com, dmatlack@google.com, yu.c.zhang@linux.intel.com, isaku.yamahata@intel.com, mic@digikod.net, vbabka@suse.cz, vannapurve@google.com, ackerleytng@google.com, mail@maciej.szmigiero.name, david@redhat.com, michael.roth@amd.com, wei.w.wang@intel.com, liam.merwick@oracle.com, isaku.yamahata@gmail.com, kirill.shutemov@linux.intel.com, suzuki.poulose@arm.com, steven.price@arm.com, quic_eberman@quicinc.com, quic_mnalajal@quicinc.com, quic_tsoni@quicinc.com, quic_svaddagi@quicinc.com, quic_cvanscha@quicinc.com, quic_pderrin@quicinc.com, quic_pheragu@quicinc.com, catalin.marinas@arm.com, james.morse@arm.com, yuzenghui@huawei.com, oliver.upton@linux.dev, maz@kernel.org, will@kernel.org, qperret@google.com, keirf@google.com, roypat@amazon.co.uk, shuah@kernel.org, hch@infradead.org, jgg@nvidia.com, rientjes@google.com, jhubbard@nvidia.com, fvdl@google.com, hughd@google.com, jthoughton@google.com, tabba@google.com Content-Type: text/plain; charset="UTF-8" X-Rspamd-Queue-Id: 9A1DF1A000E X-Rspam-User: X-Rspamd-Server: rspam07 X-Stat-Signature: q5w89ccz19nsofkyw5zpa7hoicqohqyb X-HE-Tag: 1734108475-477852 X-HE-Meta: U2FsdGVkX19549+q4ogTgpoHa/K9AcEYqHStzWWqeTD6o+eDZjV97twcuUxUPF53zdnFyD7lJFxcQ0TAy1s1z2M/a07V5Ugb0s9oFrDUoh9dWlxkIaHk+IY+dN3oRp3/5n6ScDoF6ZX35aYtBRoyIYujIC3msCtde/Pqkt4TKbkfXz5cEt+NTFb9pqXJfjVzQCw17TPvFBhCg4em6jfz0NxGfZzjT+qau96Ef2Z2lRM1vrsTm91t2kHI99q3tP6HJ7dogZHYDGoGrV887a0iURIE9N50vt31s+NukcZ7uJxhrfsCj9OoaOzdj1TfKv9ELggcvK8R1ulEMeOBVeczO7rqrB5obOXi36CJmCvP5GaTDl4C2pkJ9sJkMzmmHNQLnbCK8bmjrIqwiofXpEIc4ti2V1UsCy1a4viC9buvWBxRTMjZoIfnN7WcQN+cpL3fVcB8X8Uu9/lwoiP2osPP9khCnleYU5HSbXoM46LiriSTBYFRwmOGcIZBC1av0C1b776uh6+pi5s3ilpnWUgcQBXyJYq4657ntauFLd3jGI5iDovoSecQhvNUhrqAhdeEJ4qARm5QFiHOHR2huB8hcTzMETbSpzPy6bNOhOOf9pJ+2VlhjP5TJGgsUrCfTwOGPdvrYYR/FOgBu6hqD3pbsgJ6jGPUm2MtJx3DbzFEfFu45n5UKEriDwibfaSPM2EPskGgSSdIuL0t6yWphm4bftTYXqqejON4KKxVWDji8JbGlRw2YGEnFqg0okwDUN9fdxBYDj96zKIdwO8cJXLbaVg1Y9mVBI5sJN87PFG2p/1dFKEC0OuH1ZPsiWPzAh3oo7F0nm1ID6rIH3LAKO0xYonrnV7oL0E5Cpy0L7uzeZrjFvfB7DW3lzXsWqTJn2AM6ELjf1uAe6MO7QbZ6JoB6lS7QbXJKe4ASRpVMqraUU0zmLtsGdd9lielnqwX3hhggA4MZeR52NoGdMhbbAp 8v2ZiQXZ x1DiBx+R4CoPRnWeAkFkFBiSeHZARFsvvbWg6XQ/A3rXZsMNsD1YX0sKXP/8pGRE+y2li4ltGOW7e5ODdZgyJml2i+FCATVvaD0OUVIH/eRwcvJYDeAr/UHHQUjQorAviHEBMKQzDukRqqvgjWgtVrT086poMIAaIjgFG2he52LM6ZqMWPpddZFyjVQXKWofJ/0a5WuAbJiGzeK6hA/PafEkIE1dQo38gZL2oZUvSyj/KWzsR58UHdeBwewZCiIGjugkd8FCYQIBMPHU/hWFMhtH6vh52Xao1MVyOsnWqo2hP5plXMN6JFyhmSCnah9nvsaJWgqoNcZ+HceT7woO2EDVWDPbvKn+laMftpP2JrYBW8pq4iKtmq82CYX44RjJP2rKr846KsCWk92h/1RJ6rTW2qcH6UA+vvz+vBE/B2xjXb/N2v1dGi8irSsCBaqceHyLI3nPYpk9HH/MAXpWoOrM+/zdCsujV1OP+R+YgRclmG/iYqYPFWMfxxIoCWzocHLYFLItts4MkB6uIqOsQmxaNfRqRUbN2ttce9DYKQzqGwDaGmRrKMYmUNiJCDkyhzoTTqD3oZh1C0AdrnGTvaTIAb7OuE2OHdPnvK+wbVdFndBKcLzoQvuxAIca+LgOFHNTRSLTlPGcimugomEZ56di+8QbIwPxcvgpj5g+g2oPx5noRVeNfOauTyQ== 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: From: Ackerley Tng Track whether guest_memfd memory can be mapped within the inode, since it is property of the guest_memfd's memory contents. The guest_memfd PRIVATE memory attribute is not used for two reasons. First because it reflects the userspace expectation for that memory location, and therefore can be toggled by userspace. The second is, although each guest_memfd file has a 1:1 binding with a KVM instance, the plan is to allow multiple files per inode, e.g. to allow intra-host migration to a new KVM instance, without destroying guest_memfd. Signed-off-by: Ackerley Tng Co-developed-by: Vishal Annapurve Signed-off-by: Vishal Annapurve Co-developed-by: Fuad Tabba Signed-off-by: Fuad Tabba --- virt/kvm/guest_memfd.c | 56 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 51 insertions(+), 5 deletions(-) diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c index 6453658d2650..0a7b6cf8bd8f 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -18,6 +18,17 @@ struct kvm_gmem { struct list_head entry; }; +struct kvm_gmem_inode_private { +#ifdef CONFIG_KVM_GMEM_MAPPABLE + struct xarray mappable_offsets; +#endif +}; + +static struct kvm_gmem_inode_private *kvm_gmem_private(struct inode *inode) +{ + return inode->i_mapping->i_private_data; +} + /** * folio_file_pfn - like folio_file_page, but return a pfn. * @folio: The folio which contains this index. @@ -312,8 +323,28 @@ static pgoff_t kvm_gmem_get_index(struct kvm_memory_slot *slot, gfn_t gfn) return gfn - slot->base_gfn + slot->gmem.pgoff; } +static void kvm_gmem_evict_inode(struct inode *inode) +{ + struct kvm_gmem_inode_private *private = kvm_gmem_private(inode); + +#ifdef CONFIG_KVM_GMEM_MAPPABLE + /* + * .evict_inode can be called before private data is set up if there are + * issues during inode creation. + */ + if (private) + xa_destroy(&private->mappable_offsets); +#endif + + truncate_inode_pages_final(inode->i_mapping); + + kfree(private); + clear_inode(inode); +} + static const struct super_operations kvm_gmem_super_operations = { - .statfs = simple_statfs, + .statfs = simple_statfs, + .evict_inode = kvm_gmem_evict_inode, }; static int kvm_gmem_init_fs_context(struct fs_context *fc) @@ -440,6 +471,7 @@ static struct inode *kvm_gmem_inode_make_secure_inode(const char *name, loff_t size, u64 flags) { const struct qstr qname = QSTR_INIT(name, strlen(name)); + struct kvm_gmem_inode_private *private; struct inode *inode; int err; @@ -448,10 +480,19 @@ static struct inode *kvm_gmem_inode_make_secure_inode(const char *name, return inode; err = security_inode_init_security_anon(inode, &qname, NULL); - if (err) { - iput(inode); - return ERR_PTR(err); - } + if (err) + goto out; + + err = -ENOMEM; + private = kzalloc(sizeof(*private), GFP_KERNEL); + if (!private) + goto out; + +#ifdef CONFIG_KVM_GMEM_MAPPABLE + xa_init(&private->mappable_offsets); +#endif + + inode->i_mapping->i_private_data = private; inode->i_private = (void *)(unsigned long)flags; inode->i_op = &kvm_gmem_iops; @@ -464,6 +505,11 @@ static struct inode *kvm_gmem_inode_make_secure_inode(const char *name, WARN_ON_ONCE(!mapping_unevictable(inode->i_mapping)); return inode; + +out: + iput(inode); + + return ERR_PTR(err); } static struct file *kvm_gmem_inode_create_getfile(void *priv, loff_t size, -- 2.47.1.613.gc27f4b7a9f-goog