From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-qt1-f176.google.com (mail-qt1-f176.google.com [209.85.160.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9EE6535F5E5 for ; Fri, 19 Jun 2026 08:25:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=209.85.160.176 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781857551; cv=pass; b=mco/p9v5EjJehKskMywTRXMA2DzdHqDljfplRtBIVHUCLXVyXQRyD/1aGPyoV4H+R90CG6eC8LPu1cwPwohmIazTkiA7L3+eyceKKdK9Gfl2WW1UDeKEeJG0FC2fWjZpCKEYRXmSlxmgJaZ4GOWhQO/DscmQfKLAcO2ZQRX0NMA= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781857551; c=relaxed/simple; bh=aURqg38Q2gAlcr/J29NBP9ZvAVEI/c5mS9i6CA7HUZU=; h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject: To:Cc:Content-Type; b=H8/rcoowqStxCAetuW6YuycRk7P0Ihz+3moeU09O7q363krF2AaUGGpp5UJNRE1fl/jSFXI6RygdwhWoo4T1zjXNXsTB90wzlB3TxJezZbR3DYa0Zoo+hbRHQJB5sypDJ6s/i+tq0/+qFVikhVyGADIsOleqRqGjEa0vnCzAegg= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=aHDKUn0o; arc=pass smtp.client-ip=209.85.160.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="aHDKUn0o" Received: by mail-qt1-f176.google.com with SMTP id d75a77b69052e-519ed52bcc6so102411cf.0 for ; Fri, 19 Jun 2026 01:25:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1781857547; cv=none; d=google.com; s=arc-20260327; b=arMOj/NgWeKUVqXJOM5nSzwh4WDK4sZxM7EbMXaS+dsbv3sZqqpVBmjOOH4bKaKopX RWAbcKr/L1w6gxECghWUe/xZAjOvDa2+IncZ4FhGbX9/mrqw9eE9OQfAMzmQx1t9EaeM Zfn14N5nTA0pmijMiEzHVLISbvTWMsZvRwMHAQceIMvOV/+kUvLCI+F4+KXW03Y8PVeo A4D/Lob1yuNXuiVHTihtYEWYNIXJV70bZ50BNGHjN8ew7dn1LEXVmHDQBOiMsLq8/unz YeGRTrJqyzKgXOL8ZqKKqE1HWA0U9IKp933X1CWoEl7RujY+3BBp0XIK33x7KAMptsl6 3GkA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=3cFYWLK/FtmAY6SmJ1SGh+iq0DuUVi9vERhh19AGAVg=; fh=OKLoUFNXY9l6oLyHur3DqbYOUMmtGuVbtFAv68oTNAo=; b=V9v4EWczKkx5Glk1YHETXsGCqXFAXp3Oq8dAOYBv/Mo+XWdVLCTnC17Wg8qWg94nAF LlY6QESLzN3+iEnbRI1EQBvWW/DFQHxYMonoeU1DYW07x9AZhWZoYK0TrOvwt5vHEOGQ t06KD+D4dlk7zB8I2kT7rMzXfSvMCNRDhGMHh3iu8bnuh0Brvldm/Ozhfqot9WB/icKB 95wGZMMSmjrj/314bz2to2YTqwoqwYUeHssA8cnxBAuQA76oEcOR5ASzH4G86KrYT5sH UpIBlRbgIUBUaq7cORPvJ1LXm5jHieuLcUIAYCdlEckM9kzFJtVhui3uuEAbldsRNpws ssZA==; darn=vger.kernel.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1781857547; x=1782462347; darn=vger.kernel.org; h=content-type:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:from:to:cc:subject:date:message-id:reply-to :content-type; bh=3cFYWLK/FtmAY6SmJ1SGh+iq0DuUVi9vERhh19AGAVg=; b=aHDKUn0oEsPciDKO1kSZo0NLWv4KKT0Z+YlhPbhSqvJu1CxsZRYy9ugfoIFsNp1LIj yrqIOlaXmWAih8ZPF3Fg2dnH2D4Dtn/nXcsi/q71iCrrrHkvi1J1raYKaOIoihfDsiKg gLiBxgRimBSYWR3a8g1al7a28aj49lDKZLogGTIGRlvhZ8Dre03eKAH8ZH327BjN4fTG Aj11FXph/mPXRURYpRM3zxOArhd7x04zXayFCxi6G7IMg4iIU9v5suZdTmwYsCZ4w3um uIiRw2U4lGX+GHWb9jsEdGpP+VJndkZFN6H/tdl/VOV/tC+SgVwiAnAc2DsBfORpktPa zsrw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781857547; x=1782462347; h=content-type:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to:content-type; bh=3cFYWLK/FtmAY6SmJ1SGh+iq0DuUVi9vERhh19AGAVg=; b=Fd5FZHdtrJWsqbm5+0sc5wbiK63G8/yNoypsnWt4eQXAOn7579qHbjQpaUjr/FOip7 5VT8LVfAIQ8KCtSIGxScurrbrIuuTkGJNBwKYY7aigIZ6TCVLwmYEmxYsQg559q7F7ta fEtFwuZ+vX5YdTAEmn+OVxnFyzn/22+Kb4VbWcsLiD2Eb61SsdTJ2/bd19edn5L3Sc3x 2hx46PnsXspw0wwEnE7jJz0jSrz4kpBTLu8GZm3N9pAED/sfXPKe1IybeL1jpc4Mhqwp wDh/sXbn1GQK7zQpqiTO3xPlKBoPRANCmi1ojnpHGfCDU6kGF0eGzIOx/l9VtqNgcbOi UcwQ== X-Forwarded-Encrypted: i=1; AFNElJ8KBFPQUMbp2/0PNgcihbjeM7XZiPbvyui0ieY1tpDjJjffH+YgF4EcaQn2yRLpc+vY2U/ch2A5NEikB/s=@vger.kernel.org X-Gm-Message-State: AOJu0YzKjbCWZHOYDXnORySTZPeONtiuLnU7wZQ0cKF58iV3hPgmFnI6 J1VQ2gWTIcGfltKYnnwpJSvpx+j8JLD7ZbFBo2uqKTHWEHeazjoMN5T/zlkUP1j/reW42yy27Yc Z0zc7WpOJwa897MvJegb+jkVOeevjmcpnf9w/GRXH X-Gm-Gg: AfdE7cm6sNqScYpyXfrSkGrf9evhe0rTb6/VEghT7u3XW4ABMbvUvwvBOA8UV8XCA13 pW2JHVq8q7WRT6er8atD04AoMbpcGnm9mR82mBVghgKzTXMQGnR3dkkeouJrlikuuRHmldHFeMN qjn4vJDMUYGyzS0gMahor3UT/79mOmOP6DVUrAXccDDkUy2eq4HLMc8zdTBDmVvQrtGLIu4QMPI rB5OCaHXMGd9wac6vhJBBguntv45c8sMX40OM8FzjzWUNLL+9NJKKURGYUq1fGU7hTCUBgDGQ== X-Received: by 2002:a05:622a:1b88:b0:519:b82d:fe62 with SMTP id d75a77b69052e-519e891c801mr4739831cf.7.1781857546581; Fri, 19 Jun 2026 01:25:46 -0700 (PDT) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 References: <20260618-gmem-inplace-conversion-v8-0-9d2959357853@google.com> <20260618-gmem-inplace-conversion-v8-9-9d2959357853@google.com> In-Reply-To: <20260618-gmem-inplace-conversion-v8-9-9d2959357853@google.com> From: Fuad Tabba Date: Fri, 19 Jun 2026 09:25:09 +0100 X-Gm-Features: AVVi8CeyI3PAg86WrGg3AslQ1YuW7acL6Ym-NulDiNjx1M0Fc6iTcS7y2ypGj0E Message-ID: Subject: Re: [PATCH v8 09/46] KVM: guest_memfd: Introduce function to check GFN private/shared status To: ackerleytng@google.com Cc: aik@amd.com, andrew.jones@linux.dev, binbin.wu@linux.intel.com, brauner@kernel.org, chao.p.peng@linux.intel.com, david@kernel.org, jmattson@google.com, jthoughton@google.com, michael.roth@amd.com, oupton@kernel.org, pankaj.gupta@amd.com, qperret@google.com, rick.p.edgecombe@intel.com, rientjes@google.com, shivankg@amd.com, steven.price@arm.com, willy@infradead.org, wyihan@google.com, yan.y.zhao@intel.com, forkloop@google.com, pratyush@kernel.org, suzuki.poulose@arm.com, aneesh.kumar@kernel.org, liam@infradead.org, Paolo Bonzini , Sean Christopherson , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, "H. Peter Anvin" , Steven Rostedt , Masami Hiramatsu , Mathieu Desnoyers , Jonathan Corbet , Shuah Khan , Shuah Khan , Vishal Annapurve , Andrew Morton , Chris Li , Kairui Song , Kemeng Shi , Nhat Pham , Barry Song , Axel Rasmussen , Yuanchu Xie , Wei Xu , Youngjun Park , Qi Zheng , Shakeel Butt , Kiryl Shutsemau , Baoquan He , Jason Gunthorpe , Vlastimil Babka , kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org, linux-doc@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org, linux-coco@lists.linux.dev Content-Type: text/plain; charset="UTF-8" On Fri, 19 Jun 2026 at 01:31, Ackerley Tng via B4 Relay wrote: > > From: Ackerley Tng > > Introduce function for KVM to check the private/shared status of guest > memory at a given GFN. > > This will be used in a later patch. > > Signed-off-by: Ackerley Tng > Co-developed-by: Sean Christopherson > Signed-off-by: Sean Christopherson Reviewed-by: Fuad Tabba Cheers, /fuad > --- > include/linux/kvm_host.h | 2 ++ > virt/kvm/guest_memfd.c | 31 +++++++++++++++++++++++++++++++ > 2 files changed, 33 insertions(+) > > diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h > index 3915da2a61778..27687fb9d5201 100644 > --- a/include/linux/kvm_host.h > +++ b/include/linux/kvm_host.h > @@ -2575,6 +2575,8 @@ static inline bool kvm_mem_is_private(struct kvm *kvm, gfn_t gfn) > #endif /* CONFIG_KVM_VM_MEMORY_ATTRIBUTES */ > > #ifdef CONFIG_KVM_GUEST_MEMFD > +bool kvm_gmem_is_private(struct kvm *kvm, gfn_t gfn); > + > int kvm_gmem_get_pfn(struct kvm *kvm, struct kvm_memory_slot *slot, > gfn_t gfn, kvm_pfn_t *pfn, struct page **page, > int *max_order); > diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c > index 8101f64e0366f..bca912db5be6e 100644 > --- a/virt/kvm/guest_memfd.c > +++ b/virt/kvm/guest_memfd.c > @@ -510,6 +510,37 @@ static int kvm_gmem_mmap(struct file *file, struct vm_area_struct *vma) > return 0; > } > > +bool kvm_gmem_is_private(struct kvm *kvm, gfn_t gfn) > +{ > + struct kvm_memory_slot *slot = gfn_to_memslot(kvm, gfn); > + struct inode *inode; > + > + /* > + * If this gfn has no associated memslot, there's no chance of the gfn > + * being backed by private memory, since guest_memfd must be used for > + * private memory, and guest_memfd must be associated with some memslot. > + */ > + if (!slot) > + return 0; > + > + CLASS(gmem_get_file, file)(slot); > + if (!file) > + return 0; > + > + inode = file_inode(file); > + > + /* > + * Rely on the maple tree's internal RCU lock to ensure a > + * stable result. This result can become stale as soon as the > + * lock is dropped, so the caller _must_ still protect > + * consumption of private vs. shared by checking > + * mmu_invalidate_retry_gfn() under mmu_lock to serialize > + * against ongoing attribute updates. > + */ > + return kvm_gmem_is_private_mem(inode, kvm_gmem_get_index(slot, gfn)); > +} > +EXPORT_SYMBOL_FOR_KVM_INTERNAL(kvm_gmem_is_private); > + > static struct file_operations kvm_gmem_fops = { > .mmap = kvm_gmem_mmap, > .open = generic_file_open, > > -- > 2.55.0.rc0.738.g0c8ab3ebcc-goog > >