From nobody Wed Jun 17 01:32:43 2026 Received: from mail-pl1-f202.google.com (mail-pl1-f202.google.com [209.85.214.202]) (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 9ADDF390221 for ; Tue, 28 Apr 2026 23:33:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777419213; cv=none; b=I+bFclSl7yG9ufLluezjDvjiOLct0YPFKQO+r+SORCbkCPlNbh2+r4uF1hVDDd+AZIwhMl0QdEb9AvnGZFbj/2wg7VuPiZOmxsGj4UTFW6eLEWU89tm9fMSpIl+cnTtQtVRICCjwErFN7+u/x5dZpWxR3RsWfO+77zcoPWA1BbI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777419213; c=relaxed/simple; bh=w9utNXxCCC62f2kYxm5u5Pd5S1Lxi8j2YN3oYBMKdM0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=E4aFdtJgzKCvgf4vLtNdUwdGG90SdfXJiDLVUL0MUAGtGwPVWpyoOFXeGfYjK2pr7mUZGc0Ffc/10G0Ha38u58vaCdusmG0NlYB3iCtJNKwIcrRR7/+a50QFYGKHGQ5Lmc8/cIEkEZqWWblWb7ipZWvoiE7bX+MRwxXJ8erGaHw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=LwkGlO3G; arc=none smtp.client-ip=209.85.214.202 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=flex--ackerleytng.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="LwkGlO3G" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2b2ecc96a9aso105461035ad.1 for ; Tue, 28 Apr 2026 16:33:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1777419211; x=1778024011; darn=vger.kernel.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=clSh7OBsCI0JhKUCKzkprD+sDtva2OSfrDX8pAze+SM=; b=LwkGlO3GGoU0U9Eq3kERzXqRqw777yR2A8NQRDVWb2ME+VDXMc3wFpq4OYsfzcEV+R a1/pJNEjqsuGAxFzhxX+SNIlgfvyOZR3bqRmKkwHQxvYcuSFWOnR3im+rxlCx8jYEyPF VfvpmKke+C4ih1/4wwv988fY1jmXELofGxoaN8dDLuuVl8J3iMgiRL914FkC9KS0dWl/ tk1dS+i9IEIYTHu/uNiu0GlMksRXO4zwKm2q6HeTnpW/KTv2BUTIKu4Ejb624L8TTYzA v4Dc/tmlohyyDg82naAUSGZDZfc53V23DEPuhQrunL54/upsWCJETPXuVWilUd2pjBiv m4bg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777419211; x=1778024011; 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=clSh7OBsCI0JhKUCKzkprD+sDtva2OSfrDX8pAze+SM=; b=gq3cosLYy2+Ie3f69CouBYOHndaGpgVckAUdbrTuMeTVgks4oSroPO/wsatU8F5dmx xtBfkRZy5IFbunVzGis85MA7GF/i1Zl17EHoEc/eHzj/KZlXtv/TcKkuJ2YQp30OOQfa Hb7Of7GxLuVKjtvvObYLjY/Ec+1go6Pu3xiJSUkM5I+iGwyisOSX46QClSfVRm4uk9C8 l/LKshPPvgikY2Tkfg25It4LffblEe6NJ71Dx7+6irDvz6XxYLhPRbn8d/A37jzxDXD+ xERddj4u2m5vjf+z+dMEhxV21MV+o0dHfD3YO3ZBSRIXbiVMeX1GWHX4sBhixfGV8Np2 BIbA== X-Forwarded-Encrypted: i=1; AFNElJ9wbMxjPN0Hd4yNg5qJoPwWJUXhPEXPxedsaBRjj3YJVZHKUZPZVcRvRlWjD60flzbJtoj71OBhhsvJ9hw=@vger.kernel.org X-Gm-Message-State: AOJu0YyDp/NKgZiZezC536xvZjeHJypIPHcTxpkEqSNbBliss2shUtZZ O64qfY4Dab9a7VUqWtFRnM+1L3YdxhxTwbi3Ztr3FWOYzF/lueJMLO3ReqRMBAOaPHJJjWCvGAe 2OEEHeyftCcJyUNOjO6Rri2TGrg== X-Received: from plpn20.prod.google.com ([2002:a17:902:9694:b0:2b2:ec1e:c943]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:3c2f:b0:2b9:6453:389a with SMTP id d9443c01a7336-2b97c3cc0b3mr49885595ad.8.1777419210821; Tue, 28 Apr 2026 16:33:30 -0700 (PDT) Date: Tue, 28 Apr 2026 16:33:21 -0700 In-Reply-To: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260428-gmem-inplace-conversion-v5-0-d8608ccfca22@google.com> X-Mailer: git-send-email 2.54.0.545.g6539524ca2-goog Message-ID: <94c9e342215e6c88988d7aa62f3ba627eda34e94.1777418884.git.ackerleytng@google.com> Subject: [POC PATCH 1/6] KVM: selftests: Initialize guest_memfd with INIT_SHARED From: Ackerley Tng To: devnull+ackerleytng.google.com@kernel.org Cc: ackerleytng@google.com, aik@amd.com, akpm@linux-foundation.org, andrew.jones@linux.dev, aneesh.kumar@kernel.org, axelrasmussen@google.com, baohua@kernel.org, bhe@redhat.com, binbin.wu@linux.intel.com, bp@alien8.de, brauner@kernel.org, chao.p.peng@linux.intel.com, chrisl@kernel.org, corbet@lwn.net, dave.hansen@linux.intel.com, david@kernel.org, forkloop@google.com, hpa@zytor.com, ira.weiny@intel.com, jgg@ziepe.ca, jmattson@google.com, jthoughton@google.com, kas@kernel.org, kasong@tencent.com, kvm@vger.kernel.org, linux-coco@lists.linux.dev, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org, linux-trace-kernel@vger.kernel.org, mathieu.desnoyers@efficios.com, mhiramat@kernel.org, michael.roth@amd.com, mingo@redhat.com, nphamcs@gmail.com, oupton@kernel.org, pankaj.gupta@amd.com, pbonzini@redhat.com, pratyush@kernel.org, qi.zheng@linux.dev, qperret@google.com, rick.p.edgecombe@intel.com, rientjes@google.com, rostedt@goodmis.org, seanjc@google.com, shakeel.butt@linux.dev, shikemeng@huaweicloud.com, shivankg@amd.com, shuah@kernel.org, skhan@linuxfoundation.org, steven.price@arm.com, suzuki.poulose@arm.com, tabba@google.com, tglx@kernel.org, vannapurve@google.com, vbabka@kernel.org, weixugc@google.com, willy@infradead.org, wyihan@google.com, x86@kernel.org, yan.y.zhao@intel.com, youngjun.park@lge.com, yuanchu@google.com, Sagi Shahar Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Initialize guest_memfd with INIT_SHARED for VM types that require guest_memfd. Memory in the first memslot is used by the selftest framework to load code, page tables, interrupt descriptor tables, and basically everything the selftest needs to run. The selftest framework sets all of these up assuming that the memory in the memslot can be written to from the host. Align with that behavior by initializing guest_memfd as shared so that all the writes from the host are permitted. guest_memfd memory can later be marked private if necessary by CoCo platform-specific initialization functions. Suggested-by: Sagi Shahar Signed-off-by: Ackerley Tng --- tools/testing/selftests/kvm/lib/kvm_util.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index 216d6e037153c..3811aef8c98cd 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -483,8 +483,10 @@ struct kvm_vm *__vm_create(struct vm_shape shape, u32 = nr_runnable_vcpus, { u64 nr_pages =3D vm_nr_pages_required(shape.mode, nr_runnable_vcpus, nr_extra_pages); + enum vm_mem_backing_src_type src_type; struct userspace_mem_region *slot0; struct kvm_vm *vm; + u64 gmem_flags; int i, flags; =20 kvm_set_files_rlimit(nr_runnable_vcpus); @@ -502,7 +504,15 @@ struct kvm_vm *__vm_create(struct vm_shape shape, u32 = nr_runnable_vcpus, if (is_guest_memfd_required(shape)) flags |=3D KVM_MEM_GUEST_MEMFD; =20 - vm_userspace_mem_region_add(vm, VM_MEM_SRC_ANONYMOUS, 0, 0, nr_pages, fla= gs); + gmem_flags =3D 0; + src_type =3D VM_MEM_SRC_ANONYMOUS; + if (is_guest_memfd_required(shape) && kvm_has_gmem_attributes) { + src_type =3D VM_MEM_SRC_SHMEM; + gmem_flags =3D GUEST_MEMFD_FLAG_MMAP | GUEST_MEMFD_FLAG_INIT_SHARED; + } + + vm_mem_add(vm, src_type, 0, 0, nr_pages, flags, -1, 0, gmem_flags); + for (i =3D 0; i < NR_MEM_REGIONS; i++) vm->memslots[i] =3D 0; =20 --=20 2.54.0.545.g6539524ca2-goog From nobody Wed Jun 17 01:32:43 2026 Received: from mail-pg1-f202.google.com (mail-pg1-f202.google.com [209.85.215.202]) (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 99AFF392C31 for ; Tue, 28 Apr 2026 23:33:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777419214; cv=none; b=aDjkQ0axZ/XBGx5vVKIV1Wqg/TLTF27zifD+B3loMntk5FSNPcf9dK5NPWjJnHhp74n2gzSUZQzUmSWBoSajDrXiDogPo7BqKArvASKcbpQDziMamKRzgpSPDP/zF+Xp4aIHjqyCZMkJIr58zrfynVZOOLVL66pNsRXrE+bLn34= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777419214; c=relaxed/simple; bh=Nfygr8MpIrK7JcE/WoxSsKJQvLtZfLIiToBsPwm9bVk=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=aTb3P8DTPc9UP21GKwDS+rWNZwsGRmOgbah+LhQPftx1GXE1J4Rf1NX0974P68B+CC6bkThKI9SWuEPXUoL1vxntWRQFGOcM2vM6LTHxzYZE3B2eStsAswB3f3PfjkchvuM7dzQcZIl2CwuW95kdbYHjwWGM1zvCd++cRTCOO8M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=Yezx7Zy9; arc=none smtp.client-ip=209.85.215.202 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=flex--ackerleytng.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="Yezx7Zy9" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-c7ba03ecdc6so7259286a12.2 for ; Tue, 28 Apr 2026 16:33:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1777419212; x=1778024012; darn=vger.kernel.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=OKlqfvGeioYCy/1YHyXYlqGH92j3/mbwl8rUOBF5k84=; b=Yezx7Zy9h7hGs644cRx0X6c+NhGlr9Bu0VvzOc7Ns60GN2ug3/SGuvKwqxJT/dxB0+ bmUPGgXL/15wOKW1VeSyotgUg/YVR29L8yVniMX6xpNYSC8FvGha5J2dElqlVU0LwoZc TLN624tqkph+9UzEeB6EYfS9ghg7UrxUWMnKTb7GZmcN2Jn0YHveCpbP7/85yxRuetTa beYI2ZiKh1b6x8o5Un7E8OnhNJ6tInjQvvyLQyLC5IWDhjlYrJ+EV3AkImGHlg4Hk6o+ fnI02T8xyM5+4mWRhlQSdLkEYQgyz0iDyRKGXuIZu5P9/zMIP/mjG9P85fbwFEqHTSET P0xg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777419212; x=1778024012; 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=OKlqfvGeioYCy/1YHyXYlqGH92j3/mbwl8rUOBF5k84=; b=MXYOkyG2gQXcxhJh1HzhEoohWmy5IY1ajyGqtEAogIXoedx8wQ0W0xKbMXetZotH5C eC66xBc4WPEmHki5sOZikesPGI/6eay5ryP7iBd9QAWpnNS8Zyu3J+NXIt+JaCZgtb/6 vxQ1QCfMvDkott5d8zIdvViTbmBz/IIwmCC7ZVRL6/f78vqS5I01XoIEHGINfqyqBzme BHOlygI7vSWhbdmO4Il5Ovrj/rnB+Xbv71XhNmxVgl9HPazNIXRBXcA8Hwiq9ylurWyz UEr1jESac8BcsGxvMaTM+oSD8Eod4ODDS1gDg/tboLavZ6QHDFVJXd3z8FlpJUCxfY77 MCoQ== X-Forwarded-Encrypted: i=1; AFNElJ+/DUVUu06LwCFxu7aN0irMWp2bplc1nXDesuUBIsQGVwvVMh0HmC2B8sVh60GgRLGvQUAG0r1GQ75E8Rg=@vger.kernel.org X-Gm-Message-State: AOJu0YzwOJzzkPRnGq7JTniMUpdyU5MJUyZNoXsUIvuCJ/uF37TepcS1 Nt0NLHcITL86tALaCTzQp/rLWWdlgFJoyYCMXuPampBcetGhhB/0NdhTq0cyL8r9evDb9NcGYma qu86XTvXqyOBSV7jcnsb4PPUyrw== X-Received: from pfwp18.prod.google.com ([2002:a05:6a00:26d2:b0:82f:61ed:8b2]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:4487:b0:82f:77c9:a89f with SMTP id d2e1a72fcca58-834ddc57adfmr5463785b3a.37.1777419211701; Tue, 28 Apr 2026 16:33:31 -0700 (PDT) Date: Tue, 28 Apr 2026 16:33:22 -0700 In-Reply-To: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260428-gmem-inplace-conversion-v5-0-d8608ccfca22@google.com> X-Mailer: git-send-email 2.54.0.545.g6539524ca2-goog Message-ID: Subject: [POC PATCH 2/6] KVM: selftests: Use guest_memfd memory contents in-place for SNP launch update From: Ackerley Tng To: devnull+ackerleytng.google.com@kernel.org Cc: ackerleytng@google.com, aik@amd.com, akpm@linux-foundation.org, andrew.jones@linux.dev, aneesh.kumar@kernel.org, axelrasmussen@google.com, baohua@kernel.org, bhe@redhat.com, binbin.wu@linux.intel.com, bp@alien8.de, brauner@kernel.org, chao.p.peng@linux.intel.com, chrisl@kernel.org, corbet@lwn.net, dave.hansen@linux.intel.com, david@kernel.org, forkloop@google.com, hpa@zytor.com, ira.weiny@intel.com, jgg@ziepe.ca, jmattson@google.com, jthoughton@google.com, kas@kernel.org, kasong@tencent.com, kvm@vger.kernel.org, linux-coco@lists.linux.dev, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org, linux-trace-kernel@vger.kernel.org, mathieu.desnoyers@efficios.com, mhiramat@kernel.org, michael.roth@amd.com, mingo@redhat.com, nphamcs@gmail.com, oupton@kernel.org, pankaj.gupta@amd.com, pbonzini@redhat.com, pratyush@kernel.org, qi.zheng@linux.dev, qperret@google.com, rick.p.edgecombe@intel.com, rientjes@google.com, rostedt@goodmis.org, seanjc@google.com, shakeel.butt@linux.dev, shikemeng@huaweicloud.com, shivankg@amd.com, shuah@kernel.org, skhan@linuxfoundation.org, steven.price@arm.com, suzuki.poulose@arm.com, tabba@google.com, tglx@kernel.org, vannapurve@google.com, vbabka@kernel.org, weixugc@google.com, willy@infradead.org, wyihan@google.com, x86@kernel.org, yan.y.zhao@intel.com, youngjun.park@lge.com, yuanchu@google.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Update the SEV-SNP launch update flow to utilize guest_memfd in-place conversion. Include the KVM_SET_MEMORY_ATTRIBUTES2_PRESERVE flag when setting memory attributes to private. This is permitted before the SNP VM is finalized. In snp_launch_update_data, pass 0 as the host virtual address. This instructs the kernel to perform the launch update using the guest_memfd backing the guest physical address rather than a userspace-provided buffer. Signed-off-by: Ackerley Tng --- tools/testing/selftests/kvm/lib/x86/sev.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/tools/testing/selftests/kvm/lib/x86/sev.c b/tools/testing/self= tests/kvm/lib/x86/sev.c index d0205b3299e0b..72b2935871fe4 100644 --- a/tools/testing/selftests/kvm/lib/x86/sev.c +++ b/tools/testing/selftests/kvm/lib/x86/sev.c @@ -32,13 +32,14 @@ static void encrypt_region(struct kvm_vm *vm, struct us= erspace_mem_region *regio const u64 size =3D (j - i + 1) * vm->page_size; const u64 offset =3D (i - lowest_page_in_region) * vm->page_size; =20 - if (private) - vm_mem_set_private(vm, gpa_base + offset, size, 0); + if (private) { + vm_mem_set_private(vm, gpa_base + offset, size, + KVM_SET_MEMORY_ATTRIBUTES2_PRESERVE); + } =20 if (is_sev_snp_vm(vm)) snp_launch_update_data(vm, gpa_base + offset, - (u64)addr_gpa2hva(vm, gpa_base + offset), - size, page_type); + 0, size, page_type); else sev_launch_update_data(vm, gpa_base + offset, size); =20 --=20 2.54.0.545.g6539524ca2-goog From nobody Wed Jun 17 01:32:43 2026 Received: from mail-pf1-f201.google.com (mail-pf1-f201.google.com [209.85.210.201]) (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 7D6E63A759A for ; Tue, 28 Apr 2026 23:33:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777419215; cv=none; b=rLYVbjcMTb6+TECp7fF99bZiYqufaApl1UYYGOwQGoLUv73fHVg338M/Fsl3uMqMevcqu2vV3rXT/yYwLF0z262XjquSAORj7IDuNOQIF3OQ6hhlaeTZiXJe+Mov6Km3/DZuz/BvBCmoT7VyWcLWQ6x+0IjqflFm3jKjcsHmrNM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777419215; c=relaxed/simple; bh=bSl0Ml6IHrW3qDTTj/PbwouszbUAxe7p9oC9LS2cUxY=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=gJ1uHViPengwb8TfthcIBe9Qanoq8UnfmC1AYOOTOignYWYvhOtBNgSO+z759sknmxx8WzKFnKRVHeGVXKWoOE20jxi/UoKq/TncKOtDEE/CITxQ7kp8gPlF1W/h3h97j3yaqW+F1JsztwcbhDUbwFB8PlmScRQLoLqWYPN7eiA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=sXRzH1+O; arc=none smtp.client-ip=209.85.210.201 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=flex--ackerleytng.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="sXRzH1+O" Received: by mail-pf1-f201.google.com with SMTP id d2e1a72fcca58-82fbceb0181so7064505b3a.3 for ; Tue, 28 Apr 2026 16:33:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1777419213; x=1778024013; darn=vger.kernel.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=MEO36girPr+drwE77RQ8xryHhyT8L0VbpSDbMsS1X7s=; b=sXRzH1+OczfbNcKFVhNcp6upBhWHCvRIareDLQHL8T56l/pOUKYeOlFKfF56KkPtf/ ZbvS7+2b8mhGRFZHHFTz5ALKnsh+Mt8aNu7uG1va55ieUscJXqU8ibpkjgX2l0E8sEL1 yV254JpSqWrx8l6fMqeFuh8zsJV/PwqRM/3xMYnpi3YAk61sLh8IOXilG81WBy4IYSXo 1XRzGwbIp+yZpzS/YFzYJgkRoHLQ70aOmGDwUYYLKEE1FUA++QwFjW1a7LW5wgzPtk9J ZcYkdu3+WKOVjXv0UEa8E6GVBbCEYoITbiZXcJwt/z8vRyDBnxqBlqon1AN7JYZfAfvQ FFFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777419213; x=1778024013; 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=MEO36girPr+drwE77RQ8xryHhyT8L0VbpSDbMsS1X7s=; b=fguw9BSJgCSb+FxZRbVA0I9mjThgAa4tRp/IRqh3NoP6LgW/nPhNTzbuucJTAnFZJ4 6FpaMqDK1/n4Hj1VAotsOWf6uttKeehmBtX60QxQd2TmprUUN9KdjOvFrt7XM/Jmf/Q+ DqdkfgniIHltmUip3vNS+fZsCz42HT6TVHUnc2lTnM0JZcshLGFkUx8jyao07zHNxLGs 3UYXr1sRbytx7LXkonXBD9BRvurZvoapyIJ6JPyxqZVDC811EMnB9LEX1mtFOCAVPwdi OlCCJ5a8u/uKN1qGjy5JPnY2p+NW2xwTjqsLWo/ysuFbkxnqChQq43BuTM39Us+afeRU 3oRA== X-Forwarded-Encrypted: i=1; AFNElJ+xgobLDw4K1s224w86BpuA8Y0JmsBNRcUU1VCV/v65Fj9V9aO5D3kb7pOXxFzOM5wGlKh3hl+YBUhX/KA=@vger.kernel.org X-Gm-Message-State: AOJu0Yzyl9aP8AevgvSkiEUhtgtlmt0Pj642jC1p+FDdJgD0WKmfqMaj 0gKvcs5rExwN0zlnkkfFM0XpvQjWYSh3+jhc7qoXclEa4prPmu6AVhnO9woD41M7xJdSn/f0qmk nQlIQrMIaFgzOoG/4wCA2XWywUg== X-Received: from pfoo12.prod.google.com ([2002:a05:6a00:1a0c:b0:82f:bc93:4ae2]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:1993:b0:82f:120:fd6f with SMTP id d2e1a72fcca58-834dd919817mr4905304b3a.0.1777419212551; Tue, 28 Apr 2026 16:33:32 -0700 (PDT) Date: Tue, 28 Apr 2026 16:33:23 -0700 In-Reply-To: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260428-gmem-inplace-conversion-v5-0-d8608ccfca22@google.com> X-Mailer: git-send-email 2.54.0.545.g6539524ca2-goog Message-ID: <8c0dc96e0776bdcffc4d2e1a9d7336f106289a48.1777418884.git.ackerleytng@google.com> Subject: [POC PATCH 3/6] KVM: selftests: Make guest_code_xsave more friendly From: Ackerley Tng To: devnull+ackerleytng.google.com@kernel.org Cc: ackerleytng@google.com, aik@amd.com, akpm@linux-foundation.org, andrew.jones@linux.dev, aneesh.kumar@kernel.org, axelrasmussen@google.com, baohua@kernel.org, bhe@redhat.com, binbin.wu@linux.intel.com, bp@alien8.de, brauner@kernel.org, chao.p.peng@linux.intel.com, chrisl@kernel.org, corbet@lwn.net, dave.hansen@linux.intel.com, david@kernel.org, forkloop@google.com, hpa@zytor.com, ira.weiny@intel.com, jgg@ziepe.ca, jmattson@google.com, jthoughton@google.com, kas@kernel.org, kasong@tencent.com, kvm@vger.kernel.org, linux-coco@lists.linux.dev, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org, linux-trace-kernel@vger.kernel.org, mathieu.desnoyers@efficios.com, mhiramat@kernel.org, michael.roth@amd.com, mingo@redhat.com, nphamcs@gmail.com, oupton@kernel.org, pankaj.gupta@amd.com, pbonzini@redhat.com, pratyush@kernel.org, qi.zheng@linux.dev, qperret@google.com, rick.p.edgecombe@intel.com, rientjes@google.com, rostedt@goodmis.org, seanjc@google.com, shakeel.butt@linux.dev, shikemeng@huaweicloud.com, shivankg@amd.com, shuah@kernel.org, skhan@linuxfoundation.org, steven.price@arm.com, suzuki.poulose@arm.com, tabba@google.com, tglx@kernel.org, vannapurve@google.com, vbabka@kernel.org, weixugc@google.com, willy@infradead.org, wyihan@google.com, x86@kernel.org, yan.y.zhao@intel.com, youngjun.park@lge.com, yuanchu@google.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The original implementation of guest_code_xsave makes a jmp to guest_sev_es_code in inline assembly. When code that uses guest_sev_es_code is removed, guest_sev_es_code will be optimized out, leading to a linking error since guest_code_xsave still tries to jmp to guest_sev_es_code. Rewrite guest_code_xsave() to instead make a call, in C, to guest_sev_es_code(), so that usage of guest_sev_es_code() is made known to the compiler. This rewriting also gives a name to the xsave inline assembly, improving readability. Signed-off-by: Ackerley Tng --- .../selftests/kvm/x86/sev_smoke_test.c | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/tools/testing/selftests/kvm/x86/sev_smoke_test.c b/tools/testi= ng/selftests/kvm/x86/sev_smoke_test.c index 1a49ee3915864..8b859adf4cf6f 100644 --- a/tools/testing/selftests/kvm/x86/sev_smoke_test.c +++ b/tools/testing/selftests/kvm/x86/sev_smoke_test.c @@ -80,13 +80,23 @@ static void guest_sev_code(void) GUEST_DONE(); } =20 -/* Stash state passed via VMSA before any compiled code runs. */ -extern void guest_code_xsave(void); -asm("guest_code_xsave:\n" - "mov $" __stringify(XFEATURE_MASK_X87_AVX) ", %eax\n" - "xor %edx, %edx\n" - "xsave (%rdi)\n" - "jmp guest_sev_es_code"); +static void xsave_all_registers(void *addr) +{ + __asm__ __volatile__( + "mov $" __stringify(XFEATURE_MASK_X87_AVX) ", %eax\n" + "xor %edx, %edx\n" + "xsave (%0)" + : + : "r"(addr) + : "eax", "edx", "memory" + ); +} + +static void guest_code_xsave(void *vmsa_gva) +{ + xsave_all_registers(vmsa_gva); + guest_sev_es_code(); +} =20 static void compare_xsave(u8 *from_host, u8 *from_guest) { --=20 2.54.0.545.g6539524ca2-goog From nobody Wed Jun 17 01:32:43 2026 Received: from mail-pf1-f201.google.com (mail-pf1-f201.google.com [209.85.210.201]) (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 63D0C3C3C07 for ; Tue, 28 Apr 2026 23:33:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777419216; cv=none; b=sMdH72NZ7dtT3x4HhLiogYXSaPwTY40PZB7V69Fbc5UwsMtfY6FzXdjTd/fBBfx0sOatBhNFBrIt5rMROP6eJ22WFuJ1xVWqUYm8QSHgzCp9R9pUIP3JCct6B7gZ8srgWaXFzbgNVAqGR8EZA2fLe9vTTSQsempMZmzr/RXDtOg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777419216; c=relaxed/simple; bh=pxP9/9LLgcfS3FwRY48zWn6LZ8mBkoCeEKDgjkyGm4Y=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=UchivTjQmKc7via6KASw6ExExjGGK+eTekJfcQFcmqAKknab4xOSda+1EqEOoCynHzhJ6uaS7WJ0ByuZ1v61R9e3kHGHcqnLSr7CM5HlLzuOPKlK4NrHHGjUPVzdRjYAlKd3AkT3Ouwuul1+47mDjjhDC/r5C3m4sdv9z2Lj9pM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=nw7VdXOb; arc=none smtp.client-ip=209.85.210.201 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=flex--ackerleytng.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="nw7VdXOb" Received: by mail-pf1-f201.google.com with SMTP id d2e1a72fcca58-82f71437218so7922448b3a.2 for ; Tue, 28 Apr 2026 16:33:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1777419214; x=1778024014; darn=vger.kernel.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=3JdDnj6qR6N2qFPR2vghpCWrCloc8FcwG1Yf0aZJlDY=; b=nw7VdXObGlaGP24FZxG6eFR+yNlTiR2tkBjZENsTd683sMUOyJYLwv+2zRyXehfSrU 1jnZpLgkJ+docIdb8GpNjq6+ppkgFThyeBOI0eC4y70ij8TmuW4y9b65+CCwf24fWFJp 7KM9XJE6MP0JRReruIHJqcwAZJvX72sEFARtI5zWQnl/eQSTybMLveKP/8kuQpQ3Ed7f RqNpPOOQg01/drc6FC/PxbHk/Mevg6e5onxypWMrSNtyzo3xbBDd1jjx4j9DESidCQRQ v5QUZLP5cTHeP68TV43X65OElAwIsCvqYPeWELxCYOi23rjqW3VnU8jPGdqrkif1cWuO CjDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777419214; x=1778024014; 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=3JdDnj6qR6N2qFPR2vghpCWrCloc8FcwG1Yf0aZJlDY=; b=opvlfefw/mtLWIMGGcg6Xf+tH50+J85+GVcvQKBXU6dLZ9sc5wMHecTtWuI4AL4Xkr Xq/dId8vv6yczNyMqhxd6eKETs2P6V2G2o6aY17K0+Sm4jG2QJKFgfCM3VAZXrqioYTo eA3g1xycNz1KdFDLd/WgM7Oyzyh0OtreXXOUUmkJh2nleD3688vd3UakpcN5ba1aihpa LPgaLGGnkrDxxzMdMQMJ0GJBj+ansKw2OsPWQpLd392HPvddT6pf6A1NHAom+1wfpZX7 szwSamUuYncmwgGCazbQD1RKCAySPYVuzH9g6wwo4hsyrU73s6+xznGcSqBy2q0aTXjq 4ZSA== X-Forwarded-Encrypted: i=1; AFNElJ/e6JbXSAy7UeiZrmpxPDJw4+rd0CEPwNLS4OwuhkXSA5k7jjvC+cq/pRpriFheUDqvsbTDHqCpbA5XNA8=@vger.kernel.org X-Gm-Message-State: AOJu0Yzud2bsq6kGCo/Ndcf9Vp6cVb7aKwYoNgiIcu8YBvYt0Zy6rSJw VjmmA+90C9La2LMqinCZx/YDAdfWqwkzEkqDXjL25DSe3CqTw+SbR4K26OqOjjrxmyAlkYbnrSv s2+pFDqTJKkpU+sfVf0VX//bHCw== X-Received: from pfbkh40.prod.google.com ([2002:a05:6a00:9468:b0:82f:ac74:4db5]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:84b:b0:82a:5ef0:210b with SMTP id d2e1a72fcca58-834ddaec17emr5534199b3a.15.1777419213403; Tue, 28 Apr 2026 16:33:33 -0700 (PDT) Date: Tue, 28 Apr 2026 16:33:24 -0700 In-Reply-To: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260428-gmem-inplace-conversion-v5-0-d8608ccfca22@google.com> X-Mailer: git-send-email 2.54.0.545.g6539524ca2-goog Message-ID: Subject: [POC PATCH 4/6] KVM: selftests: Allow specifying CoCo-privateness while mapping a page From: Ackerley Tng To: devnull+ackerleytng.google.com@kernel.org Cc: ackerleytng@google.com, aik@amd.com, akpm@linux-foundation.org, andrew.jones@linux.dev, aneesh.kumar@kernel.org, axelrasmussen@google.com, baohua@kernel.org, bhe@redhat.com, binbin.wu@linux.intel.com, bp@alien8.de, brauner@kernel.org, chao.p.peng@linux.intel.com, chrisl@kernel.org, corbet@lwn.net, dave.hansen@linux.intel.com, david@kernel.org, forkloop@google.com, hpa@zytor.com, ira.weiny@intel.com, jgg@ziepe.ca, jmattson@google.com, jthoughton@google.com, kas@kernel.org, kasong@tencent.com, kvm@vger.kernel.org, linux-coco@lists.linux.dev, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org, linux-trace-kernel@vger.kernel.org, mathieu.desnoyers@efficios.com, mhiramat@kernel.org, michael.roth@amd.com, mingo@redhat.com, nphamcs@gmail.com, oupton@kernel.org, pankaj.gupta@amd.com, pbonzini@redhat.com, pratyush@kernel.org, qi.zheng@linux.dev, qperret@google.com, rick.p.edgecombe@intel.com, rientjes@google.com, rostedt@goodmis.org, seanjc@google.com, shakeel.butt@linux.dev, shikemeng@huaweicloud.com, shivankg@amd.com, shuah@kernel.org, skhan@linuxfoundation.org, steven.price@arm.com, suzuki.poulose@arm.com, tabba@google.com, tglx@kernel.org, vannapurve@google.com, vbabka@kernel.org, weixugc@google.com, willy@infradead.org, wyihan@google.com, x86@kernel.org, yan.y.zhao@intel.com, youngjun.park@lge.com, yuanchu@google.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Signed-off-by: Ackerley Tng --- tools/testing/selftests/kvm/include/x86/processor.h | 2 ++ tools/testing/selftests/kvm/lib/x86/processor.c | 13 ++++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/tools/testing/selftests/kvm/include/x86/processor.h b/tools/te= sting/selftests/kvm/include/x86/processor.h index 77f576ee7789d..683f21452db58 100644 --- a/tools/testing/selftests/kvm/include/x86/processor.h +++ b/tools/testing/selftests/kvm/include/x86/processor.h @@ -1507,6 +1507,8 @@ enum pg_level { void tdp_mmu_init(struct kvm_vm *vm, int pgtable_levels, struct pte_masks *pte_masks); =20 +void ___virt_pg_map(struct kvm_vm *vm, struct kvm_mmu *mmu, gva_t gva, + gpa_t gpa, int level, bool private); void __virt_pg_map(struct kvm_vm *vm, struct kvm_mmu *mmu, gva_t gva, gpa_t gpa, int level); void virt_map_level(struct kvm_vm *vm, gva_t gva, gpa_t gpa, diff --git a/tools/testing/selftests/kvm/lib/x86/processor.c b/tools/testin= g/selftests/kvm/lib/x86/processor.c index b51467d70f6e7..02781194f51a2 100644 --- a/tools/testing/selftests/kvm/lib/x86/processor.c +++ b/tools/testing/selftests/kvm/lib/x86/processor.c @@ -256,8 +256,8 @@ static u64 *virt_create_upper_pte(struct kvm_vm *vm, return pte; } =20 -void __virt_pg_map(struct kvm_vm *vm, struct kvm_mmu *mmu, gva_t gva, - gpa_t gpa, int level) +void ___virt_pg_map(struct kvm_vm *vm, struct kvm_mmu *mmu, gva_t gva, + gpa_t gpa, int level, bool private) { const u64 pg_size =3D PG_LEVEL_SIZE(level); u64 *pte =3D &mmu->pgd; @@ -309,12 +309,19 @@ void __virt_pg_map(struct kvm_vm *vm, struct kvm_mmu = *mmu, gva_t gva, * Neither SEV nor TDX supports shared page tables, so only the final * leaf PTE needs manually set the C/S-bit. */ - if (vm_is_gpa_protected(vm, gpa)) + if (private) *pte |=3D PTE_C_BIT_MASK(mmu); else *pte |=3D PTE_S_BIT_MASK(mmu); } =20 +void __virt_pg_map(struct kvm_vm *vm, struct kvm_mmu *mmu, gva_t gva, + gpa_t gpa, int level) +{ + ___virt_pg_map(vm, mmu, gva, gpa, level, + vm_is_gpa_protected(vm, gpa)); +} + void virt_arch_pg_map(struct kvm_vm *vm, gva_t gva, gpa_t gpa) { __virt_pg_map(vm, &vm->mmu, gva, gpa, PG_LEVEL_4K); --=20 2.54.0.545.g6539524ca2-goog From nobody Wed Jun 17 01:32:43 2026 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) (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 CF7963CE4A5 for ; Tue, 28 Apr 2026 23:33:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777419218; cv=none; b=t//sJzRXeeFLmOP1APfEHR+Ukj14QWfYt2RbDzIBAZkpYztvW+IMkCPbJYR71OVgZ5gD719VvaQkIgqsbPeWR0sb9EqTewrdWAmRBrbf1Tyo52flXWMbD8ylLeWPtNBkdcvbZaZnTd6Ba+n7dIdrEdVlCrmeYa5njvR0wATyvJA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777419218; c=relaxed/simple; bh=7UHYRpw7yO05KvlcB/cjpEvd2t/jycN0nMqBTEpDnEg=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=qc8z4bVuhUgKLT7ewJcajSadLxWfUS4Xe0OcbwfIGkG4O3A7N36DHT78KBk7iq1MoGhLyIDlh1aHD2g+Y+NasJdWLSj2mFpNWA5kk3HyOTxHPFaWkhhvHvFWM6u+gUNnynESHaImpIPVPY405ybolXSq6VuMS5SfgWEaq0m7AFQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=GveJKM51; arc=none smtp.client-ip=209.85.216.73 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=flex--ackerleytng.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="GveJKM51" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-35dacc40f92so12247996a91.2 for ; Tue, 28 Apr 2026 16:33:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1777419215; x=1778024015; darn=vger.kernel.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=k0syyhb9YeGFgBqpqjZEPjnNFKpLHyAFVq8K7QF7sEE=; b=GveJKM51mywkYxww3r210uU5EOTnYmVkT+Hml7923h2VWL4K07oSGl7fzfzpxbQMKE X6aDNiFxypjuF6bMeUjgFmBnM3tNKLFhm0aVveI4A3ANH0Yp4tQiQOsZ1akQN3BiaJ3W cqUGNeexAq9W4R/fBYZGp5Uf/kGGwWLKIHnK/mcBQV6J3VZ9dQ26h38InX9lCCq1YcPv qi4T8+MZPnjxAe4HbBwT81sgXFpf+iDmD5lcjM0MpFf13IjrLIJ1bjaYno8Sof95mPPW dU8QfDCEqwCykWpllq0aQITljqZ7z3FCLkFfziX6J9U5zw/Yn+LIIZONyCIX+EjIObW3 mSqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777419215; x=1778024015; 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=k0syyhb9YeGFgBqpqjZEPjnNFKpLHyAFVq8K7QF7sEE=; b=VEgXZCjZS0lUf/NuDHgPGOLT7pWRaNKA+5wf6MWFMIRfU9faV3FTynIyYxgzri2zyX F68GgLWGGclNCS6upZPvzwRMXEA3aSKIkUYPJ8CQwx5qEYwkmFPSfur56NSAkWENu3KQ Fik6nODMjM8NAKVqmE5x6hICUpZ6iNW/43XKAaiZoFdzh2y+wa1MHjtmm47NLgunBejH q4skStTeVhbsocm3Wur8aNkKPnAWXzJl13Rlhg/Dl23qSU5wD1Nc7wlta38f5F/OihXd GEDh3jK0gWBhLGM5KOwQWWe7HrOPAW3xsViENBcfOsc61rpImf3mITM+vETuyBI8OLe4 kl+g== X-Forwarded-Encrypted: i=1; AFNElJ87agzZSRLDCKGiQrBn1FzEZ2SCWkUgsj/OdpoVeqJqgQjtiNbJ6uhGdSM1Hqj3MgdCcOl9bJ/p+924qTM=@vger.kernel.org X-Gm-Message-State: AOJu0Yx5O6tpaw0W5GN7enG/nBLKlym0V8r3yKORHpi+qphowhtP+KP4 +/PEESu1dycivJcFjaDyvWSwQTNLrgNO8aEadhVHcnMMXE/ud3K8R0tQrIc1vz6r1gUUzjiASXP jivY/Y1Obbb+Jcj0xufL9P5EHrQ== X-Received: from plxd18.prod.google.com ([2002:a17:902:ef12:b0:2ae:c8e0:1f12]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:189:b0:2b7:8a56:7cda with SMTP id d9443c01a7336-2b97c3cb634mr50128145ad.4.1777419214303; Tue, 28 Apr 2026 16:33:34 -0700 (PDT) Date: Tue, 28 Apr 2026 16:33:25 -0700 In-Reply-To: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260428-gmem-inplace-conversion-v5-0-d8608ccfca22@google.com> X-Mailer: git-send-email 2.54.0.545.g6539524ca2-goog Message-ID: Subject: [POC PATCH 5/6] KVM: selftests: Test conversions for SNP From: Ackerley Tng To: devnull+ackerleytng.google.com@kernel.org Cc: ackerleytng@google.com, aik@amd.com, akpm@linux-foundation.org, andrew.jones@linux.dev, aneesh.kumar@kernel.org, axelrasmussen@google.com, baohua@kernel.org, bhe@redhat.com, binbin.wu@linux.intel.com, bp@alien8.de, brauner@kernel.org, chao.p.peng@linux.intel.com, chrisl@kernel.org, corbet@lwn.net, dave.hansen@linux.intel.com, david@kernel.org, forkloop@google.com, hpa@zytor.com, ira.weiny@intel.com, jgg@ziepe.ca, jmattson@google.com, jthoughton@google.com, kas@kernel.org, kasong@tencent.com, kvm@vger.kernel.org, linux-coco@lists.linux.dev, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org, linux-trace-kernel@vger.kernel.org, mathieu.desnoyers@efficios.com, mhiramat@kernel.org, michael.roth@amd.com, mingo@redhat.com, nphamcs@gmail.com, oupton@kernel.org, pankaj.gupta@amd.com, pbonzini@redhat.com, pratyush@kernel.org, qi.zheng@linux.dev, qperret@google.com, rick.p.edgecombe@intel.com, rientjes@google.com, rostedt@goodmis.org, seanjc@google.com, shakeel.butt@linux.dev, shikemeng@huaweicloud.com, shivankg@amd.com, shuah@kernel.org, skhan@linuxfoundation.org, steven.price@arm.com, suzuki.poulose@arm.com, tabba@google.com, tglx@kernel.org, vannapurve@google.com, vbabka@kernel.org, weixugc@google.com, willy@infradead.org, wyihan@google.com, x86@kernel.org, yan.y.zhao@intel.com, youngjun.park@lge.com, yuanchu@google.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Signed-off-by: Ackerley Tng --- .../selftests/kvm/x86/sev_smoke_test.c | 190 +++++++++++++++++- 1 file changed, 185 insertions(+), 5 deletions(-) diff --git a/tools/testing/selftests/kvm/x86/sev_smoke_test.c b/tools/testi= ng/selftests/kvm/x86/sev_smoke_test.c index 8b859adf4cf6f..86f17e59e9392 100644 --- a/tools/testing/selftests/kvm/x86/sev_smoke_test.c +++ b/tools/testing/selftests/kvm/x86/sev_smoke_test.c @@ -253,17 +253,197 @@ static void test_sev_smoke(void *guest, u32 type, u6= 4 policy) } } =20 +#define GHCB_MSR_REG_GPA_REQ 0x012 +#define GHCB_MSR_REG_GPA_REQ_VAL(v) \ + /* GHCBData[63:12] */ \ + (((u64)((v) & GENMASK_ULL(51, 0)) << 12) | \ + /* GHCBData[11:0] */ \ + GHCB_MSR_REG_GPA_REQ) + +#define GHCB_MSR_REG_GPA_RESP 0x013 +#define GHCB_MSR_REG_GPA_RESP_VAL(v) \ + /* GHCBData[63:12] */ \ + (((u64)(v) & GENMASK_ULL(63, 12)) >> 12) + +#define GHCB_DATA_LOW 12 +#define GHCB_MSR_INFO_MASK (BIT_ULL(GHCB_DATA_LOW) - 1) +#define GHCB_RESP_CODE(v) ((v) & GHCB_MSR_INFO_MASK) + +/* + * SNP Page State Change Operation + * + * GHCBData[55:52] - Page operation: + * 0x0001 Page assignment, Private + * 0x0002 Page assignment, Shared + */ +enum psc_op { + SNP_PAGE_STATE_PRIVATE =3D 1, + SNP_PAGE_STATE_SHARED, +}; + +#define GHCB_MSR_PSC_REQ 0x014 +#define GHCB_MSR_PSC_REQ_GFN(gfn, op) \ + /* GHCBData[55:52] */ \ + (((u64)((op) & 0xf) << 52) | \ + /* GHCBData[51:12] */ \ + ((u64)((gfn) & GENMASK_ULL(39, 0)) << 12) | \ + /* GHCBData[11:0] */ \ + GHCB_MSR_PSC_REQ) + +#define GHCB_MSR_PSC_RESP 0x015 +#define GHCB_MSR_PSC_RESP_VAL(val) \ + /* GHCBData[63:32] */ \ + (((u64)(val) & GENMASK_ULL(63, 32)) >> 32) + +static u64 ghcb_gpa; +static void snp_register_ghcb(void) +{ + u64 ghcb_pfn =3D ghcb_gpa >> PAGE_SHIFT; + u64 val; + + GUEST_ASSERT(ghcb_gpa); + + wrmsr(MSR_AMD64_SEV_ES_GHCB, GHCB_MSR_REG_GPA_REQ_VAL(ghcb_gpa >> PAGE_SH= IFT)); + vmgexit(); + + val =3D rdmsr(MSR_AMD64_SEV_ES_GHCB); + GUEST_ASSERT_EQ(GHCB_RESP_CODE(val), GHCB_MSR_REG_GPA_RESP); + GUEST_ASSERT_EQ(GHCB_MSR_REG_GPA_RESP_VAL(val), ghcb_pfn); +} + +static void snp_page_state_change(u64 gpa, enum psc_op op) +{ + u64 val; + + wrmsr(MSR_AMD64_SEV_ES_GHCB, GHCB_MSR_PSC_REQ_GFN(gpa >> PAGE_SHIFT, op)); + vmgexit(); + + val =3D rdmsr(MSR_AMD64_SEV_ES_GHCB); + GUEST_ASSERT_EQ(GHCB_RESP_CODE(val), GHCB_MSR_PSC_RESP); + GUEST_ASSERT_EQ(GHCB_MSR_PSC_RESP_VAL(val), 0); +} + +#define RMP_PG_SIZE_4K 0 +static inline void pvalidate(void *vaddr, bool validate) +{ + bool no_rmpupdate; + int rc; + + /* "pvalidate" mnemonic support in binutils 2.36 and newer */ + asm volatile(".byte 0xF2, 0x0F, 0x01, 0xFF\n\t" + : "=3D@ccc"(no_rmpupdate), "=3Da"(rc) + : "a"(vaddr), "c"(RMP_PG_SIZE_4K), "d"(validate) + : "memory", "cc"); + + GUEST_ASSERT(!no_rmpupdate); + GUEST_ASSERT_EQ(rc, 0); +} + +#define CONVERSION_TEST_VALUE_SHARED_1 0xab +#define CONVERSION_TEST_VALUE_SHARED_2 0xcd +#define CONVERSION_TEST_VALUE_PRIVATE 0xef +#define CONVERSION_TEST_VALUE_SHARED_3 0xbc +static void guest_code_conversion(u8 *test_shared_gva, u8 *test_private_gv= a, u64 test_gpa) +{ + snp_register_ghcb(); + + GUEST_ASSERT_EQ(READ_ONCE(*test_shared_gva), CONVERSION_TEST_VALUE_SHARED= _1); + WRITE_ONCE(*test_shared_gva, CONVERSION_TEST_VALUE_SHARED_2); + + snp_page_state_change(test_gpa, SNP_PAGE_STATE_PRIVATE); + pvalidate(test_private_gva, true); + + WRITE_ONCE(*test_private_gva, CONVERSION_TEST_VALUE_PRIVATE); + GUEST_ASSERT_EQ(READ_ONCE(*test_private_gva), CONVERSION_TEST_VALUE_PRIVA= TE); + + pvalidate(test_private_gva, false); + snp_page_state_change(test_gpa, SNP_PAGE_STATE_SHARED); + + WRITE_ONCE(*test_shared_gva, CONVERSION_TEST_VALUE_SHARED_3); + + wrmsr(MSR_AMD64_SEV_ES_GHCB, GHCB_MSR_TERM_REQ); + vmgexit(); +} + +static void test_conversion(u64 policy) +{ + gva_t test_private_gva; + gva_t test_shared_gva; + struct kvm_vcpu *vcpu; + gva_t ghcb_gva; + gpa_t test_gpa; + struct kvm_vm *vm; + void *ghcb_hva; + void *test_hva; + + vm =3D vm_sev_create_with_one_vcpu(KVM_X86_SNP_VM, guest_code_conversion,= &vcpu); + + ghcb_gva =3D vm_alloc_shared(vm, PAGE_SIZE, KVM_UTIL_MIN_VADDR, + MEM_REGION_TEST_DATA); + ghcb_hva =3D addr_gva2hva(vm, ghcb_gva); + ghcb_gpa =3D addr_gva2gpa(vm, ghcb_gva); + sync_global_to_guest(vm, ghcb_gpa); + + test_shared_gva =3D vm_alloc_shared(vm, PAGE_SIZE, KVM_UTIL_MIN_VADDR, + MEM_REGION_TEST_DATA); + test_hva =3D addr_gva2hva(vm, test_shared_gva); + test_gpa =3D addr_gva2gpa(vm, test_shared_gva); + + test_private_gva =3D vm_unused_gva_gap(vm, PAGE_SIZE, KVM_UTIL_MIN_VADDR); + ___virt_pg_map(vm, &vm->mmu, test_private_gva, test_gpa, PG_SIZE_4K, true= ); + + vcpu_args_set(vcpu, 3, test_shared_gva, test_private_gva, test_gpa); + + vm_sev_launch(vm, policy, NULL); + + WRITE_ONCE(*(u8 *)test_hva, CONVERSION_TEST_VALUE_SHARED_1); + + fprintf(stderr, "ghcb_hva=3D%p ghcb_gpa=3D%lx ghcb_gva=3D%lx\n", ghcb_hva= , ghcb_gpa, ghcb_gva); + fprintf(stderr, "test_hva=3D%p test_gpa=3D%lx test_private_gva=3D%lx test= _shared_gva=3D%lx\n", test_hva, test_gpa, test_private_gva, test_shared_gva= ); + + vcpu_run(vcpu); + + TEST_ASSERT_KVM_EXIT_REASON(vcpu, KVM_EXIT_HYPERCALL); + TEST_ASSERT_EQ(vcpu->run->hypercall.nr, KVM_HC_MAP_GPA_RANGE); + TEST_ASSERT_EQ(vcpu->run->hypercall.args[0], test_gpa); + TEST_ASSERT_EQ(vcpu->run->hypercall.args[1], 1); + TEST_ASSERT_EQ(vcpu->run->hypercall.args[2], KVM_MAP_GPA_RANGE_ENCRYPTED = | KVM_MAP_GPA_RANGE_PAGE_SZ_4K); + + vm_mem_set_private(vm, test_gpa, PAGE_SIZE, KVM_SET_MEMORY_ATTRIBUTES2_MO= DE_UNSPECIFIED); + + vcpu_run(vcpu); + + TEST_ASSERT_KVM_EXIT_REASON(vcpu, KVM_EXIT_HYPERCALL); + TEST_ASSERT_EQ(vcpu->run->hypercall.nr, KVM_HC_MAP_GPA_RANGE); + TEST_ASSERT_EQ(vcpu->run->hypercall.args[0], test_gpa); + TEST_ASSERT_EQ(vcpu->run->hypercall.args[1], 1); + TEST_ASSERT_EQ(vcpu->run->hypercall.args[2], KVM_MAP_GPA_RANGE_DECRYPTED = | KVM_MAP_GPA_RANGE_PAGE_SZ_4K); + + vm_mem_set_shared(vm, test_gpa, PAGE_SIZE, KVM_SET_MEMORY_ATTRIBUTES2_MOD= E_UNSPECIFIED); + + vcpu_run(vcpu); + + TEST_ASSERT_KVM_EXIT_REASON(vcpu, KVM_EXIT_SYSTEM_EVENT); + TEST_ASSERT_EQ(vcpu->run->system_event.type, KVM_SYSTEM_EVENT_SEV_TERM); + TEST_ASSERT_EQ(vcpu->run->system_event.ndata, 1); + TEST_ASSERT_EQ(vcpu->run->system_event.data[0], GHCB_MSR_TERM_REQ); + + TEST_ASSERT_EQ(*(u8 *)test_hva, CONVERSION_TEST_VALUE_SHARED_3); +} + int main(int argc, char *argv[]) { TEST_REQUIRE(kvm_cpu_has(X86_FEATURE_SEV)); =20 - test_sev_smoke(guest_sev_code, KVM_X86_SEV_VM, 0); + // test_sev_smoke(guest_sev_code, KVM_X86_SEV_VM, 0); =20 - if (kvm_cpu_has(X86_FEATURE_SEV_ES)) - test_sev_smoke(guest_sev_es_code, KVM_X86_SEV_ES_VM, SEV_POLICY_ES); + // if (kvm_cpu_has(X86_FEATURE_SEV_ES)) + // test_sev_smoke(guest_sev_es_code, KVM_X86_SEV_ES_VM, SEV_POLICY_ES); =20 - if (kvm_cpu_has(X86_FEATURE_SEV_SNP)) - test_sev_smoke(guest_snp_code, KVM_X86_SNP_VM, snp_default_policy()); + if (kvm_cpu_has(X86_FEATURE_SEV_SNP)) { + test_conversion(snp_default_policy()); + // test_sev_smoke(guest_snp_code, KVM_X86_SNP_VM, snp_default_policy()); + } =20 return 0; } --=20 2.54.0.545.g6539524ca2-goog From nobody Wed Jun 17 01:32:43 2026 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) (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 202E83E0C7A for ; Tue, 28 Apr 2026 23:33:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777419221; cv=none; b=eGjmatJRC38XWt1iy0Bt2flSjDrSppR33k74h5a40lrFx1uplygDLauCeEGnkSRp6/vLEdmfw1YSBgmd0JL5kODH7psuUsThw3hiB/xqSp3xb5N/+tDygEnyyZnIW/yYoZKT3uzo+G7cnZg5eSBHwMMnoXtoWuLgiYTygJ11RTE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777419221; c=relaxed/simple; bh=hGDZPIbsrD5lLb5dYXlyY3ktqiFSkkP6mLXsuKfVtQk=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=YXNgBHuZZfkCZJ0JeNGClGRNkMKYwB2Tu3KBFj/IoDaKmkAcNYKl4ByUQoLRGnb8AsJWa2S7gnUwZXNETw19p1oc91oWeMpsne5ds5h2eSBsIbRVtWJ8NeIXXDVeuX/upomviBstNyoLSiTPK7IYVOcYbOpMi71GaPeJo31oh8g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=lfI5wDZI; arc=none smtp.client-ip=209.85.216.73 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=flex--ackerleytng.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="lfI5wDZI" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-358df8fbd1cso15231889a91.0 for ; Tue, 28 Apr 2026 16:33:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1777419219; x=1778024019; darn=vger.kernel.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=/ZczNi69+WMKOJksOctcu51kanJpEjkfDW1oXPOUGF4=; b=lfI5wDZIP6IWMBvuM1ZzfVeB+tg+YQXPHRqBsuLYy5WZtdKI/YLTuU+l3EILj8Izoo SI3SedFymzciTKwAdFMG6msVnBcD+qP67ei9JPRfPWQdzrkXciRbSS1dZjMeDnPjmc5P UlRXlTnepJZZIHhImRQIGRdecF3M0zI28XDtyh79h9MaTNBY0my3UWpdv6XZcEuHPOnQ 00MFPFWJu8fD4stiqD8ztL2Kd7fIwZRNhKv3FBD2vNGoQ7xzqHj1ggu4hLUCn9PLcWYv BusbSCxQxNUqE074jX/Bz/gvbTgqFlTNjhCxOAq94bvhQiwfwDsxqT0fxjCUHbSjS8V7 hp5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777419219; x=1778024019; 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=/ZczNi69+WMKOJksOctcu51kanJpEjkfDW1oXPOUGF4=; b=hLZiW9Zs3LNHeDpidQYxus8xvB6XxSTF2MDkJprpqcaXmHvnd/ZyTYfHQNCp3mEamI +8cXsr8cL7GVzZeUGFbLu7bT/kRWyYqN8qlBrwZvRPcLPID24qRJvKLP+X1EB+Zk0TE9 KKZwTBWTjy7+V86bSxafumWOBhBkS6lE08P2+LVmUzNZ0mVs74nyX9xwj+W5Gs6ASO1y zs5e6Kmta6hsFF88j4YojIiTVBJPInSRP/vg6Xsbs6SsttO2R1knL4xGHoZ3t1Hij1eH n4PvaluZav0OtX1pVlHjoLRVRZV2YNB8u7PvAbRWuaquxFP6aCCdgy+s+FLRT5zRfvXD RaJA== X-Forwarded-Encrypted: i=1; AFNElJ+fquRBRZSxXhtt0XfN1UeZ/pJNUadp7uyaC8ABuQ+bODOhVh1bF9ICnKu8D29bbXJnwIGqmGDDngXBpRo=@vger.kernel.org X-Gm-Message-State: AOJu0YxjdlJTKiZwfcE9QSnXZKVXOOZJUMqVZmenuJSFwGAo71zGibuR yjBavTq9wlE/ugsoRIebX6G0/AmHqPj1uyx3vXKu4HLYGDl3dduyVp/wZWwos9r888v52+nfX5S NHtNDmOTVj56eLupCKnPPlvKCNw== X-Received: from pglr36.prod.google.com ([2002:a63:5164:0:b0:c76:a2d8:308a]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:3d20:b0:398:9820:f6cc with SMTP id adf61e73a8af0-3a3af654fdemr1435167637.55.1777419219029; Tue, 28 Apr 2026 16:33:39 -0700 (PDT) Date: Tue, 28 Apr 2026 16:33:26 -0700 In-Reply-To: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260428-gmem-inplace-conversion-v5-0-d8608ccfca22@google.com> X-Mailer: git-send-email 2.54.0.545.g6539524ca2-goog Message-ID: <8ab73dc90c83af8dd30af3fe531fa68ee1cb4b96.1777418884.git.ackerleytng@google.com> Subject: [POC PATCH 6/6] KVM: selftests: Test content modes ZERO and PRESERVE for SNP From: Ackerley Tng To: devnull+ackerleytng.google.com@kernel.org Cc: ackerleytng@google.com, aik@amd.com, akpm@linux-foundation.org, andrew.jones@linux.dev, aneesh.kumar@kernel.org, axelrasmussen@google.com, baohua@kernel.org, bhe@redhat.com, binbin.wu@linux.intel.com, bp@alien8.de, brauner@kernel.org, chao.p.peng@linux.intel.com, chrisl@kernel.org, corbet@lwn.net, dave.hansen@linux.intel.com, david@kernel.org, forkloop@google.com, hpa@zytor.com, ira.weiny@intel.com, jgg@ziepe.ca, jmattson@google.com, jthoughton@google.com, kas@kernel.org, kasong@tencent.com, kvm@vger.kernel.org, linux-coco@lists.linux.dev, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org, linux-trace-kernel@vger.kernel.org, mathieu.desnoyers@efficios.com, mhiramat@kernel.org, michael.roth@amd.com, mingo@redhat.com, nphamcs@gmail.com, oupton@kernel.org, pankaj.gupta@amd.com, pbonzini@redhat.com, pratyush@kernel.org, qi.zheng@linux.dev, qperret@google.com, rick.p.edgecombe@intel.com, rientjes@google.com, rostedt@goodmis.org, seanjc@google.com, shakeel.butt@linux.dev, shikemeng@huaweicloud.com, shivankg@amd.com, shuah@kernel.org, skhan@linuxfoundation.org, steven.price@arm.com, suzuki.poulose@arm.com, tabba@google.com, tglx@kernel.org, vannapurve@google.com, vbabka@kernel.org, weixugc@google.com, willy@infradead.org, wyihan@google.com, x86@kernel.org, yan.y.zhao@intel.com, youngjun.park@lge.com, yuanchu@google.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Signed-off-by: Ackerley Tng --- .../selftests/kvm/x86/sev_smoke_test.c | 47 +++++++++++++++++-- 1 file changed, 44 insertions(+), 3 deletions(-) diff --git a/tools/testing/selftests/kvm/x86/sev_smoke_test.c b/tools/testi= ng/selftests/kvm/x86/sev_smoke_test.c index 86f17e59e9392..7a91a113c4fb7 100644 --- a/tools/testing/selftests/kvm/x86/sev_smoke_test.c +++ b/tools/testing/selftests/kvm/x86/sev_smoke_test.c @@ -365,7 +365,26 @@ static void guest_code_conversion(u8 *test_shared_gva,= u8 *test_private_gva, u64 vmgexit(); } =20 -static void test_conversion(u64 policy) +static void vm_set_memory_attributes_expect_error(struct kvm_vm *vm, u64 g= pa, + size_t size, u64 attributes, + u64 flags, int expected_errno) +{ + loff_t error_offset =3D -1; + size_t len_ignored; + loff_t offset; + int gmem_fd; + int ret; + + gmem_fd =3D kvm_gpa_to_guest_memfd(vm, gpa, &offset, &len_ignored); + ret =3D __gmem_set_memory_attributes(gmem_fd, offset, size, attributes, + &error_offset, flags); + + TEST_ASSERT_EQ(ret, -1); + TEST_ASSERT_EQ(offset, error_offset); + TEST_ASSERT_EQ(errno, expected_errno); +} + +static void test_conversion(u64 policy, u64 content_mode) { gva_t test_private_gva; gva_t test_shared_gva; @@ -409,6 +428,21 @@ static void test_conversion(u64 policy) TEST_ASSERT_EQ(vcpu->run->hypercall.args[1], 1); TEST_ASSERT_EQ(vcpu->run->hypercall.args[2], KVM_MAP_GPA_RANGE_ENCRYPTED = | KVM_MAP_GPA_RANGE_PAGE_SZ_4K); =20 + /* ZERO when setting memory attributes to private is always not supported= . */ + vm_set_memory_attributes_expect_error(vm, test_gpa, PAGE_SIZE, + KVM_MEMORY_ATTRIBUTE_PRIVATE, + KVM_SET_MEMORY_ATTRIBUTES2_ZERO, + EOPNOTSUPP); + + /* PRESERVE is not supported for SNP. */ + vm_set_memory_attributes_expect_error(vm, test_gpa, PAGE_SIZE, 0, + KVM_SET_MEMORY_ATTRIBUTES2_PRESERVE, + EOPNOTSUPP); + vm_set_memory_attributes_expect_error(vm, test_gpa, PAGE_SIZE, + KVM_MEMORY_ATTRIBUTE_PRIVATE, + KVM_SET_MEMORY_ATTRIBUTES2_PRESERVE, + EOPNOTSUPP); + vm_mem_set_private(vm, test_gpa, PAGE_SIZE, KVM_SET_MEMORY_ATTRIBUTES2_MO= DE_UNSPECIFIED); =20 vcpu_run(vcpu); @@ -419,7 +453,12 @@ static void test_conversion(u64 policy) TEST_ASSERT_EQ(vcpu->run->hypercall.args[1], 1); TEST_ASSERT_EQ(vcpu->run->hypercall.args[2], KVM_MAP_GPA_RANGE_DECRYPTED = | KVM_MAP_GPA_RANGE_PAGE_SZ_4K); =20 - vm_mem_set_shared(vm, test_gpa, PAGE_SIZE, KVM_SET_MEMORY_ATTRIBUTES2_MOD= E_UNSPECIFIED); + vm_mem_set_shared(vm, test_gpa, PAGE_SIZE, content_mode); + + if (content_mode =3D=3D KVM_SET_MEMORY_ATTRIBUTES2_ZERO) + TEST_ASSERT_EQ(READ_ONCE(*(u8 *)test_hva), 0); + else + fprintf(stderr, "test_hva contents =3D %x\n", READ_ONCE(*(u8 *)test_hva)= ); =20 vcpu_run(vcpu); =20 @@ -441,7 +480,9 @@ int main(int argc, char *argv[]) // test_sev_smoke(guest_sev_es_code, KVM_X86_SEV_ES_VM, SEV_POLICY_ES); =20 if (kvm_cpu_has(X86_FEATURE_SEV_SNP)) { - test_conversion(snp_default_policy()); + test_conversion(snp_default_policy(), KVM_SET_MEMORY_ATTRIBUTES2_MODE_UN= SPECIFIED); + test_conversion(snp_default_policy(), KVM_SET_MEMORY_ATTRIBUTES2_ZERO); + // test_sev_smoke(guest_snp_code, KVM_X86_SNP_VM, snp_default_policy()); } =20 --=20 2.54.0.545.g6539524ca2-goog