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 BA242C36018 for ; Wed, 2 Apr 2025 22:47:32 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id BEDB8280003; Wed, 2 Apr 2025 18:47:30 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id B7598280001; Wed, 2 Apr 2025 18:47:30 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 9EE31280003; Wed, 2 Apr 2025 18:47:30 -0400 (EDT) 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 7BBD6280001 for ; Wed, 2 Apr 2025 18:47:30 -0400 (EDT) Received: from smtpin05.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 798871A08EB for ; Wed, 2 Apr 2025 22:47:31 +0000 (UTC) X-FDA: 83290591902.05.8D90924 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) by imf21.hostedemail.com (Postfix) with ESMTP id A6BBC1C000C for ; Wed, 2 Apr 2025 22:47:29 +0000 (UTC) Authentication-Results: imf21.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=PZd4Vmhd; spf=pass (imf21.hostedemail.com: domain of 3gL7tZwsKCPkbdlfsmfzuohhpphmf.dpnmjovy-nnlwbdl.psh@flex--ackerleytng.bounces.google.com designates 209.85.216.73 as permitted sender) smtp.mailfrom=3gL7tZwsKCPkbdlfsmfzuohhpphmf.dpnmjovy-nnlwbdl.psh@flex--ackerleytng.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=1743634049; 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:dkim-signature; bh=ObAJzB7g55gBf+CLcD7oa8KI2t1g7ZS4FYBSRbK85tw=; b=LixRvFXzSlZ8lFUPfnXAFhvIa0/eOPn0Y8xy1JmAUWVlhDeGrSZ3L31caFAwxaycZ3drxx Zxhrd+pSuCRVpfEoD0sf/Gz3BKWmAYQWXwXSjcIZiuqXg+LeygERGvLid3XKWMX0q2y22o ehiPV8SGK2ikW9i9rtcfDOBtspKNIqI= ARC-Authentication-Results: i=1; imf21.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=PZd4Vmhd; spf=pass (imf21.hostedemail.com: domain of 3gL7tZwsKCPkbdlfsmfzuohhpphmf.dpnmjovy-nnlwbdl.psh@flex--ackerleytng.bounces.google.com designates 209.85.216.73 as permitted sender) smtp.mailfrom=3gL7tZwsKCPkbdlfsmfzuohhpphmf.dpnmjovy-nnlwbdl.psh@flex--ackerleytng.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1743634049; a=rsa-sha256; cv=none; b=zzWiKpnbrRqpwhHu2BF6YqI0IKbrzSVN8+0ZCLZ5/plFwAOsyEche5BBI93YZyLkiqtY5U fmHRs6Vc7XDcoduN5D6LC+sTAC6Mnv+4GS57HgBfJ5HlhgN7wdtNpbzNgRztZMgv7u3mCu eA0uK1BAcur4JxVSfdjgEw3hD8QXRQg= Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-2ff68033070so247538a91.2 for ; Wed, 02 Apr 2025 15:47:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1743634048; x=1744238848; darn=kvack.org; h=cc:to:from:subject:message-id:mime-version:in-reply-to:date:from:to :cc:subject:date:message-id:reply-to; bh=ObAJzB7g55gBf+CLcD7oa8KI2t1g7ZS4FYBSRbK85tw=; b=PZd4VmhdeQ3pqO/9XRvAGuvIwnDyGl7Dy9V1/nYItezwqi2GLsyvfZcemeA+iUDA8S smo9MwI1gTgKeiZelZt8dfHrTn7YVo/In8PgXejLPGDhfoiyHhMIPOBSkloO8gdvyFfr wgbl+Wz8tXAkOhdCwB4qvty7z1UG+TTnGVQUwATTM33QI+bEuAkvvDRg6ztclZ+xOTZ/ aR7lvJnPjKuJL/Tcr2969FaW/5C19Yu51V94WUgp2wtWSRsPnLSwDD7vT46m0ENKGLAA yLmWDtSPzBbjltVy/tKcH/kK/zJOyitEJ9/MaFZALCMKWqHTqiEz1Mq4g5Eps4e9LkqY cTqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1743634048; x=1744238848; h=cc:to:from:subject:message-id:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=ObAJzB7g55gBf+CLcD7oa8KI2t1g7ZS4FYBSRbK85tw=; b=kMpQeGOUqbRs6VF/LYUaJqPmc7N8CCU/v68Gex4n3v/vwbHMU3fn/JV8sJcPKEGrcF 531mnvWj99468F7mMpO3vYckjhc0GAP3wDQN3VLhPOsZaSVcBxJnJv4P32JD3RawhYBg Su/3+ZgwmE7hOOKhcydAtAI7TQU4pfF0ehsgWqWPva1p5Hy3FGLUZ0nfhF2ffMX/5a7X YF26pgaZ+p2Ze3BaKVvGzWkatj1iS92X5LD8uRtsMUCLuP3h86iwglQ6HqJj19Q5OUTp Pblpf2IStyQpR4bNlnYFyO6FG19FZ7GSR8TgXEsqYOWjCzlpo2+MmX6wLBjmvO39nXRi rTJw== X-Forwarded-Encrypted: i=1; AJvYcCX9DDKm3inIZtaI5cmL6V8lSKRWGuFGD681iLCmHYGv/SPTOU2wE6XgJ/my6WFEZSCORWqg234y3g==@kvack.org X-Gm-Message-State: AOJu0Yx3TUM8obthJyGY1ecupgd7KZvdl19Ia5EQJksuaR2+RC1YIUHb MLvSvkhWSzsd0MLdIxFtR6xpChLjMsjwvTyg9U13gUPpZre1QlOxh6k8ImFazzSbuM3d3e9n6HC xTWBpm8eE66OR54H4ZKu37g== X-Google-Smtp-Source: AGHT+IECpxYjzNO2H7vuV41cvniiuOYlb3wjYhLlVNYIV5Lj37fPJupYViCXCDaAjwRJoswPZh+5gMJ/YtBuQaMoJA== X-Received: from pjyr13.prod.google.com ([2002:a17:90a:e18d:b0:2fc:1158:9fe5]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:2b8b:b0:2fe:955d:cdb1 with SMTP id 98e67ed59e1d1-3057de29f2fmr48457a91.23.1743634048484; Wed, 02 Apr 2025 15:47:28 -0700 (PDT) Date: Wed, 02 Apr 2025 15:47:27 -0700 In-Reply-To: <20250328153133.3504118-8-tabba@google.com> (message from Fuad Tabba on Fri, 28 Mar 2025 15:31:33 +0000) Mime-Version: 1.0 Message-ID: Subject: Re: [PATCH v7 7/7] KVM: guest_memfd: Add a guest_memfd() flag to initialize it as shared From: Ackerley Tng To: Fuad Tabba Cc: kvm@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-mm@kvack.org, 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, isaku.yamahata@intel.com, mic@digikod.net, vbabka@suse.cz, vannapurve@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, peterx@redhat.com, pankaj.gupta@amd.com, tabba@google.com Content-Type: text/plain; charset="UTF-8" X-Rspamd-Queue-Id: A6BBC1C000C X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: etyf6wctyds1twzcwthgaobt337byrqc X-HE-Tag: 1743634049-720613 X-HE-Meta: U2FsdGVkX19hT62tubpJlsrSyYBHIbHWPaimG4j/KC8K2/p8OLi1dgVjtw9xJ4Xf9+itOPT1iLDBG/LEWF2SUi05I1On53vCwnOd77IxwR4ZrqvmVPxLZ3mSKpKGUc4/aco/9OymrtcdU4I7l0sRq0f2RlNA/3ykV/1rs45EecxKr3rDzufdeTtqguV6Dk0PoRiM7NVOkRChBK91941qxqomdCwQ5syK6iwIY4QNFZQPATjUZE5cqNji5jrgDrmN885dRHUGRqXNHVW55Yshcpv5OELU9yS0rlaZAsI1mMrRDn7W640DvzO2RF7XgXX+40Tgg5qzmUO2whlLxn8XqZ+PvLDDDaWLbjZU2JSRhGW7rtOGo3MJQiz7QxMSkWWe3K3PKRPua6ByXe86gctc36tNi5TURky4PJOSxAek52jt226r9NfhjV5RSLQ0zuprINntPUSe6pdDoLkSchsa6iRp0GBQmR0IMRRpiIEBiGz6epuV4ljMJo/2hX8yNrahT1ZLqn+aD567jgQ0rSwWl5qypAX4YeGJy736V7dyGCQekQvvxSeOqjsMfLlQql5YwkYZS3JPnaPfnL56MNZdJJFXBcszGCss989hH2NVRybZquLLVjbmERRPvVNA5kDNNIf7pkOy5SKJ2oICRHSN0+EjeVeXyOqc9vJAlzMTkCjwe2cPc6+fFYfbjzL+OjGXf4Y42XCnOxquaF8qVHfQSEcAYLZFe//K5NmD7iCA646RFgOvPQW+jiT+yOv3GHHzOax65TJeEukjGQhmNrvsJCozOHYUQk/IF/+Nv+uBEWkjLRG99edBpk0wClrJf0hBOcfG1aB+2Q4wqrN7AN9uO7pa940MfzqPLPLOgRjtT20+bmSQrE3bnY4m5Z6ZUXpXAuen2oYxEv3h/kedO60kYjH2/KBYrlpSehqhNtaRcd0hdqL8IGmryTMQZgxeAbXQIzqQl9tynTYREjFdIrZ a1fJTwjF mILWf2M6+xZZV3Ej+eAWnxwKseBxAyI5hboFM9H29y75JFJiqHheMWNy+FfJg8pDDm9OFlPdVf2eaNZgwaBR9UXjhx0kaN7scGeaZP2eNXp5GzSegRBhl/oIw99DwFEXhGix9UsJPD5oCgcpR/38p/CEKHhxrO5MeqAsHSKwqbt/dmFpZppQrsDRAqxexfmVPwgwfI9eGnKG2zioF2uGb6Wn+pRUFnMJlCe8960GIlRkfdP1kVdA7dlqpqvqjh0LNlq0y3/nW3MeE1adtn0myJWW3BW+mq/TzngP0x4/mkW9xw9CRnYcz6kkpLcnK/pTog+sh+dlbl+s3m9b0JKgmpYJ6ufs4I25lH9WgZ742YWesHemVz8rK2QL3pETeuwpHMvb2lFClSALRh5F/Qt9xlCbYAq9jvD5VipLNwGRu4QHI5FOuHFCoEJZPLCRVO8Tgsg0w5DeQagGBeoQL2VNF0CXilxSuNww5yiNAgtVJNRHSatWKBn4sXA0+8ccYKM4ErCbev4hw87CJ3r3dhvmkWGVr+SBZnfLI7rmxwx7y40qWn2R2fpK4aUtXKQMeFgrgRkUw06fYZAQL1UV5YXVcMENoplWpYIE532CVLsz/lADIMGV1Ijz2+UEQZYsJNd7onUgjHkmtSw0eSL940BO4ebizQOvHg+OTZZ/iPnG0qayopMm+gyemp/Vf4ERN8S7PEcPQl60TOHStkRLduy1lsYE9FA== 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: Fuad Tabba writes: > Not all use cases require guest_memfd() to be shared with the host when > first created. Add a new flag, GUEST_MEMFD_FLAG_INIT_SHARED, which when > set on KVM_CREATE_GUEST_MEMFD initializes the memory as shared with the > host, and therefore mappable by it. Otherwise, memory is private until > explicitly shared by the guest with the host. > > Signed-off-by: Fuad Tabba > --- > Documentation/virt/kvm/api.rst | 4 ++++ > include/uapi/linux/kvm.h | 1 + > tools/testing/selftests/kvm/guest_memfd_test.c | 7 +++++-- > virt/kvm/guest_memfd.c | 12 ++++++++++++ > 4 files changed, 22 insertions(+), 2 deletions(-) > > diff --git a/Documentation/virt/kvm/api.rst b/Documentation/virt/kvm/api.rst > index 2b52eb77e29c..a5496d7d323b 100644 > --- a/Documentation/virt/kvm/api.rst > +++ b/Documentation/virt/kvm/api.rst > @@ -6386,6 +6386,10 @@ most one mapping per page, i.e. binding multiple memory regions to a single > guest_memfd range is not allowed (any number of memory regions can be bound to > a single guest_memfd file, but the bound ranges must not overlap). > > +If the capability KVM_CAP_GMEM_SHARED_MEM is supported, then the flags field > +supports GUEST_MEMFD_FLAG_INIT_SHARED, which initializes the memory as shared > +with the host, and thereby, mappable by it. > + > See KVM_SET_USER_MEMORY_REGION2 for additional details. > > 4.143 KVM_PRE_FAULT_MEMORY > diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h > index 117937a895da..22d7e33bf09c 100644 > --- a/include/uapi/linux/kvm.h > +++ b/include/uapi/linux/kvm.h > @@ -1566,6 +1566,7 @@ struct kvm_memory_attributes { > #define KVM_MEMORY_ATTRIBUTE_PRIVATE (1ULL << 3) > > #define KVM_CREATE_GUEST_MEMFD _IOWR(KVMIO, 0xd4, struct kvm_create_guest_memfd) > +#define GUEST_MEMFD_FLAG_INIT_SHARED (1UL << 0) > > struct kvm_create_guest_memfd { > __u64 size; > diff --git a/tools/testing/selftests/kvm/guest_memfd_test.c b/tools/testing/selftests/kvm/guest_memfd_test.c > index 38c501e49e0e..4a7fcd6aa372 100644 > --- a/tools/testing/selftests/kvm/guest_memfd_test.c > +++ b/tools/testing/selftests/kvm/guest_memfd_test.c > @@ -159,7 +159,7 @@ static void test_invalid_punch_hole(int fd, size_t page_size, size_t total_size) > static void test_create_guest_memfd_invalid(struct kvm_vm *vm) > { > size_t page_size = getpagesize(); > - uint64_t flag; > + uint64_t flag = BIT(0); > size_t size; > int fd; > > @@ -170,7 +170,10 @@ static void test_create_guest_memfd_invalid(struct kvm_vm *vm) > size); > } > > - for (flag = BIT(0); flag; flag <<= 1) { > + if (kvm_has_cap(KVM_CAP_GMEM_SHARED_MEM)) > + flag = GUEST_MEMFD_FLAG_INIT_SHARED << 1; > + > + for (; flag; flag <<= 1) { This would end up shifting the GUEST_MEMFD_FLAG_INIT_SHARED flag for each loop. > fd = __vm_create_guest_memfd(vm, page_size, flag); > TEST_ASSERT(fd == -1 && errno == EINVAL, > "guest_memfd() with flag '0x%lx' should fail with EINVAL", > diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c > index eec9d5e09f09..32e149478b04 100644 > --- a/virt/kvm/guest_memfd.c > +++ b/virt/kvm/guest_memfd.c > @@ -1069,6 +1069,15 @@ static int __kvm_gmem_create(struct kvm *kvm, loff_t size, u64 flags) > goto err_gmem; > } > > + if (IS_ENABLED(CONFIG_KVM_GMEM_SHARED_MEM) && > + (flags & GUEST_MEMFD_FLAG_INIT_SHARED)) { > + err = kvm_gmem_offset_range_set_shared(file_inode(file), 0, size >> PAGE_SHIFT); > + if (err) { > + fput(file); > + goto err_gmem; > + } > + } > + > kvm_get_kvm(kvm); > gmem->kvm = kvm; > xa_init(&gmem->bindings); > @@ -1090,6 +1099,9 @@ int kvm_gmem_create(struct kvm *kvm, struct kvm_create_guest_memfd *args) > u64 flags = args->flags; > u64 valid_flags = 0; > > + if (IS_ENABLED(CONFIG_KVM_GMEM_SHARED_MEM)) > + valid_flags |= GUEST_MEMFD_FLAG_INIT_SHARED; > + > if (flags & ~valid_flags) > return -EINVAL;