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 09F43D68BCD for ; Fri, 15 Nov 2024 20:14:14 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8ED806B0083; Fri, 15 Nov 2024 15:14:13 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 876786B0088; Fri, 15 Nov 2024 15:14:13 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6F03D6B0089; Fri, 15 Nov 2024 15:14:13 -0500 (EST) 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 4A8496B0083 for ; Fri, 15 Nov 2024 15:14:13 -0500 (EST) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id F0A81A0185 for ; Fri, 15 Nov 2024 20:14:12 +0000 (UTC) X-FDA: 82789430724.29.69C9DD2 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) by imf28.hostedemail.com (Postfix) with ESMTP id 0E508C0008 for ; Fri, 15 Nov 2024 20:13:23 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=quicinc.com header.s=qcppdkim1 header.b=QxGu9sOX; dmarc=pass (policy=none) header.from=quicinc.com; spf=pass (imf28.hostedemail.com: domain of quic_eberman@quicinc.com designates 205.220.168.131 as permitted sender) smtp.mailfrom=quic_eberman@quicinc.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1731701471; 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=1pQWydqckVHECTn8cI0N1o4o6AmIUz9H8m9Aj8yXbao=; b=5MvidZd5YuYxCAho4fuVLcPzz4qcQFmmM8fhJ3Vig8ZD8vq9gyn9HCgO4p4pRXex2Mzyhe SI5RZ+/74odBNuoFymWgyy2yY7nhgKq0o29ZV/vnBqorxvj5lgds/Mbm4IELw8ROgxkNdh KvrniS5mcvppNF+Z8aW0YQAZVCYyx0c= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=quicinc.com header.s=qcppdkim1 header.b=QxGu9sOX; dmarc=pass (policy=none) header.from=quicinc.com; spf=pass (imf28.hostedemail.com: domain of quic_eberman@quicinc.com designates 205.220.168.131 as permitted sender) smtp.mailfrom=quic_eberman@quicinc.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1731701471; a=rsa-sha256; cv=none; b=sAxJ8/DjwH9K2irdFDX0Ex/JfmLVlEXSXqE1xnec4NQXmAkpaV+J/0am4MA0mKrxMxJCsz zxSH63vFMcMpCAtJq3QzSC7kUAyvxK3K+8XNJoMthsyIpf/fMdbYk7jrOtOFM4SoKq26xr MRQKRn+PLN39TGMQ9sIEGNaA6adNZfA= Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 4AFBmldF014249; Fri, 15 Nov 2024 20:14:01 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h= cc:content-type:date:from:in-reply-to:message-id:mime-version :references:subject:to; s=qcppdkim1; bh=1pQWydqckVHECTn8cI0N1o4o 6AmIUz9H8m9Aj8yXbao=; b=QxGu9sOXsn7OBHFwFvgBCXCIuubF+i5UQAzqNgA7 KE069feTbuiGXtcKMyw0FiRpQVyDCCEW7Z+dSmeQwySaOHd6nqFhWR7uaEkXbwtg s7s+P7SsxhDMGC9CA6dZ0tgWej3vg/WDWJyjkBF6J9Vl/h+vt3JMIoO3W8WY3LBp hA26kV9QXMUw+TAx9+NJo/WK7iYQ0JDulyuSakRPXZ8olWrTgmRFf7d1HUEmACTx hLQAWAjXUJO0EJOk/4k7k1UUG9VIYdlLgnyyZ57ZyR0MRiSHcODoDVLoT36CPkwa oWtkiz2tUWDTaNxYQbe+K5PcODGS8LXCYyDVvkbwilcizA== Received: from nasanppmta04.qualcomm.com (i-global254.qualcomm.com [199.106.103.254]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 42wwddapu0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 15 Nov 2024 20:14:01 +0000 (GMT) Received: from nasanex01b.na.qualcomm.com (nasanex01b.na.qualcomm.com [10.46.141.250]) by NASANPPMTA04.qualcomm.com (8.18.1.2/8.18.1.2) with ESMTPS id 4AFKE0gU025430 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 15 Nov 2024 20:14:00 GMT Received: from hu-eberman-lv.qualcomm.com (10.49.16.6) by nasanex01b.na.qualcomm.com (10.46.141.250) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.9; Fri, 15 Nov 2024 12:14:00 -0800 Date: Fri, 15 Nov 2024 12:13:59 -0800 From: Elliot Berman To: David Hildenbrand CC: Paolo Bonzini , Andrew Morton , Sean Christopherson , Fuad Tabba , Ackerley Tng , Mike Rapoport , "H. Peter Anvin" , Matthew Wilcox , James Gowans , , , , , , Subject: Re: [PATCH RFC v3 1/2] KVM: guest_memfd: Convert .free_folio() to .release_folio() Message-ID: <20241115121119110-0800.eberman@hu-eberman-lv.qualcomm.com> References: <20241113-guestmem-library-v3-0-71fdee85676b@quicinc.com> <20241113-guestmem-library-v3-1-71fdee85676b@quicinc.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: X-Originating-IP: [10.49.16.6] X-ClientProxiedBy: nalasex01b.na.qualcomm.com (10.47.209.197) To nasanex01b.na.qualcomm.com (10.46.141.250) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-GUID: hUh8BuC6vM8H3tLNDCLcMKmEjCfP2ZGr X-Proofpoint-ORIG-GUID: hUh8BuC6vM8H3tLNDCLcMKmEjCfP2ZGr X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1039,Hydra:6.0.680,FMLib:17.12.60.29 definitions=2024-09-06_09,2024-09-06_01,2024-09-02_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxlogscore=995 mlxscore=0 malwarescore=0 bulkscore=0 priorityscore=1501 impostorscore=0 lowpriorityscore=0 clxscore=1015 spamscore=0 phishscore=0 suspectscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2409260000 definitions=main-2411150169 X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: 0E508C0008 X-Stat-Signature: jg1gzhozi1hik57ei7bt4s9jy7zarpoi X-Rspam-User: X-HE-Tag: 1731701603-963654 X-HE-Meta: U2FsdGVkX1/f7W0KpWem4Tpl/5UGdUV7DHlgoLqnVHgQbJ98Lio7NDVx1dpqIBqnKfG20TFzoXwU1Zpx/86U/wktxIJgqkOZKXWSBqF625bGjDp4ToK+mM5KBZssI6Smq+WiX9OPYodiczwKLPmIxKVTrGp/JzBaFCTDVv75uaV0tJGOM4xGFV46x4lru87ICWWWUuMi2LORG1FLd3MTOoMpNiaA8UkBLbXwXNgbfF0cOTDpnI2TMKL8BYIox7amaIuOh/hbXH/Cdv0eUqphj2DcfMXjEDrMupfe1APhBWOmblBRmA1iWbr95mO3QjP5RviO+RSXHeTMUWlHSMJxerLK1lWofE3g6qlHywKcQm+u60nnkKFn6ZkERVQ36iTqetDObq6eulwnxdy20pnIS+IQ6P1rQ+5BhOLlwQ8D9oT6SbD3Gxp5jJoPedaqTVDH9jv70etH6seBsf/WNIlIXIvZR/J7cDmI2vbaAsmQj0B6pWBuiFjSZldfDoC1vyeoxErYr0P3BP7tpXzt4dhFwBr5dNugdpB8xURw5lszKOSVsGy3IKI7YREN4P93HPu1NkBmu7GXQjrFBHTkOX42G3v8D2plT01iFtTK2WbxBcAyPNAWnsHw+psKXWMCoGusu1x41J7Z99bCK+9so8OXqDm/7tVxVMsYHjytL/dEmxArMJML5nJNE3olOABo1td4a2d5QIPV7A/0EMHZegIbtYaeZt4Jg/O9jwXdW22nnnPRlRd6V0emXJ8WbfCEbap71OnI9dHg8cwISFoRmY3m4u/zN9PDf75dbC6rqJigRGy2f4b5U5t0nwuM2AcJ0Dk7jakBNOQ/4IGmGKco3akrgNEnJnmUWPLQ2CD/hFYuoURi/5CWc/m6b3m/xfYNG3ku74FfGm/OVOyvvBQ2mKvGCCqByhLaZk1/dNlDi2JFW50K3aO48clhkbU6en39UquZYAwqTn+DaRwWojOMfcJ OVOuX7b+ brLS/9w4GSWQ9Pg0pgE4pDcDnXGoLGdr0sEtc8GpDVeAZh3TtFviy3ljq9QH4qQgPUIoJYdM4zLWzu2GxT5WB1IpCEKfqcb1z699PxxNJqmAZlAZmyyzswU56PwBvYMMuwRxPid+vOj3RDW6ev14LpHmLZLWV3+DZlwVfCVRnaG6Dovz0KDWINCVRrDffy24KsTEsCiya37oDKXFaejZygLKR0WweSlShCR+uEYGKsZzHnZaSGDSSTVE8jHNZqjF+OOFFgAF/eJgZb5Gf40nPIFpKFnhNE47aqEQ+Cu7B/txgYjpvHsspNhGL+gBtTT9FIyR1PL2RB2p4eRp4LTsg+wPkWkFZQVFw1KLyUov49DuKCR9aq7/IUlB7TnSn4Ds3DngT1BP+maRR+gJ1JREZJK8g67Pw+5RNYXxd 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 15, 2024 at 11:58:59AM +0100, David Hildenbrand wrote: > On 15.11.24 11:58, David Hildenbrand wrote: > > On 13.11.24 23:34, Elliot Berman wrote: > > > When guest_memfd becomes a library, a callback will need to be made to > > > the owner (KVM SEV) to transition pages back to hypervisor-owned/shared > > > state. This is currently being done as part of .free_folio() address > > > space op, but this callback shouldn't assume that the mapping still > > > exists. guest_memfd library will need the mapping to still exist to look > > > up its operations table. > > > > I assume you mean, that the mapping is no longer set for the folio (it > > sure still exists, because we are getting a callback from it :) )? > > > > Staring at filemap_remove_folio(), this is exactly what happens: > > > > We remember folio->mapping, call __filemap_remove_folio(), and then call > > filemap_free_folio() where we zap folio->mapping via page_cache_delete(). > > > > Maybe it's easier+cleaner to also forward the mapping to the > > free_folio() callback, just like we do with filemap_free_folio()? Would > > that help? > > > > CCing Willy if that would be reasonable extension of the free_folio > > callback. > > I like this approach too. It would avoid the checks we have to do in the invalidate_folio() callback and is cleaner. - Elliot > > > > > > .release_folio() and .invalidate_folio() address space ops can serve the > > > same purpose here. The key difference between release_folio() and > > > free_folio() is whether the mapping is still valid at time of the > > > callback. This approach was discussed in the link in the footer, but not > > > taken because free_folio() was easier to implement. > > > > > > Link: https://lore.kernel.org/kvm/20231016115028.996656-1-michael.roth@amd.com/ > > > Signed-off-by: Elliot Berman > > > --- > > > virt/kvm/guest_memfd.c | 19 ++++++++++++++++--- > > > 1 file changed, 16 insertions(+), 3 deletions(-) > > > > > > diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c > > > index 47a9f68f7b247f4cba0c958b4c7cd9458e7c46b4..13f83ad8a4c26ba82aca4f2684f22044abb4bc19 100644 > > > --- a/virt/kvm/guest_memfd.c > > > +++ b/virt/kvm/guest_memfd.c > > > @@ -358,22 +358,35 @@ static int kvm_gmem_error_folio(struct address_space *mapping, struct folio *fol > > > } > > > #ifdef CONFIG_HAVE_KVM_ARCH_GMEM_INVALIDATE > > > -static void kvm_gmem_free_folio(struct folio *folio) > > > +static bool kvm_gmem_release_folio(struct folio *folio, gfp_t gfp) > > > { > > > struct page *page = folio_page(folio, 0); > > > kvm_pfn_t pfn = page_to_pfn(page); > > > int order = folio_order(folio); > > > kvm_arch_gmem_invalidate(pfn, pfn + (1ul << order)); > > > + > > > + return true; > > > +} > > > + > > > +static void kvm_gmem_invalidate_folio(struct folio *folio, size_t offset, > > > + size_t len) > > > +{ > > > + WARN_ON_ONCE(offset != 0); > > > + WARN_ON_ONCE(len != folio_size(folio)); > > > + > > > + if (offset == 0 && len == folio_size(folio)) > > > + filemap_release_folio(folio, 0); > > > } > > > #endif > > > static const struct address_space_operations kvm_gmem_aops = { > > > .dirty_folio = noop_dirty_folio, > > > - .migrate_folio = kvm_gmem_migrate_folio, > > > + .migrate_folio = kvm_gmem_migrate_folio, > > > .error_remove_folio = kvm_gmem_error_folio, > > > #ifdef CONFIG_HAVE_KVM_ARCH_GMEM_INVALIDATE > > > - .free_folio = kvm_gmem_free_folio, > > > + .release_folio = kvm_gmem_release_folio, > > > + .invalidate_folio = kvm_gmem_invalidate_folio, > > > #endif > > > }; > > > > > > > > > > -- > Cheers, > > David / dhildenb >