From nobody Sat Jun 13 06:00:19 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 763F23161BE for ; Thu, 7 May 2026 20:34:36 +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=1778186078; cv=none; b=AK6X0FYngiqQJqnHmeUI4Mb/wEQcefmE/drmMgGXn3QlrdrCQwOC+QkEVX+jB6MoL/ljvfyiNByYcYS9ywg+tq7wPk00c1OARYd3Ul6l45+7essfSU4dN+w9MFI6J+20VzhJR0tk/zCXPx329oU78kspFsVl8Sq+n2QRaXE0TPc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778186078; c=relaxed/simple; bh=XICUZV4Q3vo1bwz1aYHmgOLx20RYd7LOuzutPezZwNU=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=oDKr970rSHXYoAaxxZO0DvXdU9mY5OuwZ4yxTisRkKkhOAy+gQeJNCcxPV/mDh3X//PLgoaFdxZk0ZFRPWAo63mO81us9QirjsoKe8ejQo7leQiw5Zzi/fMp2Irq/XOtF6Sd7wn/SEZDDcrA6N9sEe5M4a8VQLxIqSupLh1d3rg= 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=smH7WZWt; 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="smH7WZWt" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-c8230dd941eso617331a12.1 for ; Thu, 07 May 2026 13:34:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1778186076; x=1778790876; 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=3rSsfG+RQhLqlg/UzpmHhS2dOMMTtnfzAhKgDM/p2is=; b=smH7WZWtygoLpgQlrcAiof8k5ONzz3OURLH0ACDzOIh3kzUtpYgw916DeNUQKqEyFx U9UiRr4bH5XT0D0KMk/FYz7O2AM6wrj77ycRM9MFVih3q1c23gR+Iifl4mwiRSj5L4VA CVdBSrqJ8ZVmcJYvtynPBjpmtEgDQ9bROQ/mMXkSiOBREqkGfFMPW0s6l2LcKvJqOdtC EGxyH6xqQX0SlUNE4WCIDc0V8whpd/REVFzyV+ech8FkECmdkfQ6YBS5WomK9Y9HmubI A9s43B9k5oE+KoOsGCMh3vY/cB1CBOXE0ZGWrlm2x1Mkyuk6EXW2jyF3H6WfKJxdqI7W M2zA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778186076; x=1778790876; 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=3rSsfG+RQhLqlg/UzpmHhS2dOMMTtnfzAhKgDM/p2is=; b=PakXA3uUdI/xuwSyU+bRivpmyQHevPULgOHdiPQ4Yxe5SIpcXegEt2VAR1TlvHGbec oHCn5sPgKSAw5VG18k5whaEX+ertGxeeuWaMhslyMGu1WPMTVxE0aTy7KusrtYk6zf1J GY6uEWuS1ZmnurjL2/MbCLOeUr+sS4wJaD42avjficY5z3s9DuPXYXpkTTrX3VCwkJvq QrPCx1iffK15iyw0U8beEgzPLfbqrf+Tp2sl+jkr4rDXKz3USmDN3/GA6xPcW5obBjxp 8xCHuBqHae2lKlsJgbwwpqp72HnaWTaBk1hagauGyjRPkLoeHTzj5sJr60Tf5qM5oBzD 5W9Q== X-Forwarded-Encrypted: i=1; AFNElJ/pJ2BsrTJF7vGkM3MgD+iiEPoYS8chVoj50oBrWV57/h5ywA0bEJOq5SEQ0Kr8yIhuDvr4Sjh7Q3H/Dus=@vger.kernel.org X-Gm-Message-State: AOJu0Yw1MsBS+4i2hGJM5PkB2rxyUcMEEML4hOFMahVjv2/p2RiycJzC qrgjzf++YcCSmMKcOVTMDn/P0JG4qfOoK/ErS0G+tLgfPWXyJPtVsbqAIzTlouF0fvZ8ivUryZJ xOKYVdWHh1WmT6ZHrgtVnHZgX7w== X-Received: from pgbdp8.prod.google.com ([2002:a05:6a02:f08:b0:c76:8ec1:5090]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:a108:b0:3a2:f05a:795e with SMTP id adf61e73a8af0-3aa8be52328mr4117250637.3.1778186075304; Thu, 07 May 2026 13:34:35 -0700 (PDT) Date: Thu, 7 May 2026 13:34: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: <20260507-gmem-inplace-conversion-v6-0-91ab5a8b19a4@google.com> X-Mailer: git-send-email 2.54.0.563.g4f69b47b94-goog Message-ID: <47758a2b79c4bc570a17c9216929693953bdf5a0.1778185936.git.ackerleytng@google.com> Subject: [POC PATCH 1/5] 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, liam@infradead.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 d1befa3f4b305..a377e5f333116 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.563.g4f69b47b94-goog From nobody Sat Jun 13 06:00:19 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 69A82313E30 for ; Thu, 7 May 2026 20:34:37 +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=1778186079; cv=none; b=e7u7ZLa/tG71d+QjfX9HHFCV7/OycjawEpWNFaFCnl6AEGMaibnYbTsF1PuLyxpwJDS8Ddh3ftP4akzFajCJ1uReWTN3B+gZd7/+mjP/Xjob4MlC12AIjSVhdrbhqv2h9Vya/ZcSZI2C/wAv1tt3XyXfvqW6UaqXFIDRqhgbh7M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778186079; c=relaxed/simple; bh=sd9AdOZfu3se/q1JFWRQ37VtXfr2DAtfN5f52D8iXUA=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=lt0ME846rW72XgT2GePe/sPnPO8NnR5TiDAgN9O4V2ejgF0/6IIICcQ8ToyGcSXfWoG9z1+QMy+hwx/0AliCeTkf4rVX79CzM+d3DUEAjpFIbwVacI61mWWo0rxkXs05Eewn+Kzn17+ROJDNm8u3Iieo//PVIjAIoSva7pew+9k= 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=k7/kFWIr; 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="k7/kFWIr" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-c70f19f0f37so764687a12.0 for ; Thu, 07 May 2026 13:34:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1778186077; x=1778790877; 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=3Yn9j42pFWCYKkGf1K9Y/HlYS2+Vlbg3y86z46RrWQ8=; b=k7/kFWIrrlXq5vWTsV0s1YFLoTlDi3ruPLxZhUZD4Lr89rG2kFcBjn9qKf1Gi53m2u k6CZnennwq9GHnLQWHK8/9/Y686UVHb5FFbCmQ0oLVs8hOepscK0cY/7OMXi6l986pYw K/LOjfhWzk9RFEp6zHV1S+V1F8O4LuuW4MkHw6TkzNDKfCpgoTKtcto1xlXl6wfcN5a/ rNsV8+kA5GSxBWZmFg01s7BoI6u4JaYjJOF7zRMeHMyOOOmFmqQIuV1PXcFylJOIiqxX hpsG/mLFRlMrUjFp5YwqmwQiCoCfiNXgEk5fPFQtjYlN4HmXRhIHrgN6xsZLKpyZEwyf MH6Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778186077; x=1778790877; 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=3Yn9j42pFWCYKkGf1K9Y/HlYS2+Vlbg3y86z46RrWQ8=; b=Kwp8tzCqS8tI9Gq6KKr2i5fKRETv6OwjVagqYQzgX0dwuWRWA5yF1dtctap7FrhBzt vHxJ/zGkAbhZOlHjt0/O2xHcb0tbWm1njMFHQAFhZF9KzSOM5sqPtCxmJZYETLqr3S7M VjS8U0GD+jgx/LiBEWynjW39X3NRKwqPn4g/vTdBxGeWMemPc7CRmUf3INv1kkPlkFI/ RBF2NVmOzls4E3urYFelTaCCywiEnACQ91BRSUFy7FylUQS3bC1iCdAmn8VN17qLWUCK dxIRIQlAyilbVF8uiHNHt6sGR/oW3RWDERLoKrSth/bJD2e1o0kwW4LA17l0N7wj2r+q gkBA== X-Forwarded-Encrypted: i=1; AFNElJ8cgatZ0TBKZrm5rsYyZa/u0Fez4E0dBDFqpqtOCSBJn1JlTXuLO2tpupg+iAD8Tpa3ivRzWASgieify4c=@vger.kernel.org X-Gm-Message-State: AOJu0Yy9NmzkqzgsbyKh/msy/dDdp+hQfeJTIAhKNBi8Er0SktH8tLxD 7duTSBnDPfEqjsMtAwCfJeFgKF9GJPq1aL5YmiPDzqn9wm8RSzrj9VGImc/EFptOh2R8GtsGKkA aj9AqBmz9tei3UAsKhXwlcQnIwA== X-Received: from pgbfy18.prod.google.com ([2002:a05:6a02:2a92:b0:c79:26bb:5541]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:6a08:b0:3a0:9052:c005 with SMTP id adf61e73a8af0-3aa8be1f13cmr3709118637.3.1778186076252; Thu, 07 May 2026 13:34:36 -0700 (PDT) Date: Thu, 7 May 2026 13:34: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: <20260507-gmem-inplace-conversion-v6-0-91ab5a8b19a4@google.com> X-Mailer: git-send-email 2.54.0.563.g4f69b47b94-goog Message-ID: Subject: [POC PATCH 2/5] 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, liam@infradead.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 | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tools/testing/selftests/kvm/lib/x86/sev.c b/tools/testing/self= tests/kvm/lib/x86/sev.c index 93f9169034617..074ab0eff1e27 100644 --- a/tools/testing/selftests/kvm/lib/x86/sev.c +++ b/tools/testing/selftests/kvm/lib/x86/sev.c @@ -37,8 +37,7 @@ static void encrypt_region(struct kvm_vm *vm, struct user= space_mem_region *regio =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.563.g4f69b47b94-goog From nobody Sat Jun 13 06:00:19 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 7A20B323417 for ; Thu, 7 May 2026 20:34:38 +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=1778186080; cv=none; b=tS4LemnplGTM+ufCnGTPVCxpqJCrtCdBZ0tCvZsdZwvYqJiagSat492JAA4kynHGbvN++/crXWqQCrQywUa3LWnMswFzACGrqmibIHa6h8bF76ci+UFyOCt7I+UbzLFmrcGWys4gwQ4oIxGW5gsZn7VqCm0OdxYAhOsOedZU7yQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778186080; c=relaxed/simple; bh=GOjFoV94awk7GYninYEq+I3DCtzIDlhYvlgo8SkP+9g=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=N787zwr/yEhGSKMtxxHXsl8q+xk4aFKXTYVjQoKhPccfDOl/MKUav6wmVSfX2FRAEMGBDCGJHn1N5x187ycRhQwbCUQeszVEtjPpjy/GSpN2fK/qwsV6cYK99/aJBuYGvNUgvCGxR1XN1ro9WSUZBBpZgbC9TItlyaHUX6oTFbs= 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=tajob9xV; 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="tajob9xV" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-365e70c39d0so1621074a91.0 for ; Thu, 07 May 2026 13:34:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1778186078; x=1778790878; 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=FwdqijLGyLJ4WnaXvFgo9eGiQSeu4QsrqPYNc8/yMrg=; b=tajob9xVfPFL86EwxlEO750zGY7hMqGTd/afqrE8mEFrX5t36IYKECis3SyRIiYVav QviJZw19i5rLVA/fIRA4ID0cUz0IEbcD01GNLfrUN+BZ0Jeh+Gwld2B/KQIux+cf3o6L PETZ2OO6/QzSW8DMNtSx+v9xmSFf6Q7wavQUU2jxO7bZF2Kaw5qUivcXshkRNb3VmDb4 rB5g1yCwBX0JVDPMpXVQ4Sxlsu9jDh7nGby2GZfjPnESmRF30Hs0Kya0teaLCo880J5x 9a9Rbtz/I3/AufpCw7CcC8jAWmo8jHSo9Np5XpU/djGXzleBj8knrnY5No1BeHdCO1do Qc9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778186078; x=1778790878; 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=FwdqijLGyLJ4WnaXvFgo9eGiQSeu4QsrqPYNc8/yMrg=; b=l0CCyy8MhSGhxVG6hGOiG1HGPThtMtx7no74mP0FbG1VBY4SrS6+dyEo6lKJWQTWiJ BxkxRmQHdMLpQorJ4mWmNUeIz9Oh3kD+w+/GsVqfhVVq3JUJM/8nXTXe/klwfcJUJwbr EJ89lCzHeBat6/wFhFfW4XLfM+qeMFlVWIgAUnOvR/BORwVbcYq3opZcxpUCoUaPX2tw AUsrX3f0uMitv5crdnwTYLa8jSPAM9vw0O+xGvJnsOP+Ca3r04zqFLPZKIwBXkH/pD9n ovXdc9ggnotIh1yLOkuafJKL7KIrJGg/qUH9NBeYSQFrkAmJzXMnywkuxOsXxSyOKMLu ChBQ== X-Forwarded-Encrypted: i=1; AFNElJ9ENOVxFuT2nxZ0dksZwc7ygArlm0AGivcSnSF3x2VCft19QzAeijJ5PRtjbaGtQlmFrbhl4JixGA16kxw=@vger.kernel.org X-Gm-Message-State: AOJu0YxKBhkflKFxq21XrsWYHPJ6oIPwFmItasgBHKu4sFQV/hy7zcPj DcizZSybe2ATVBN2RIN7dn7joqvHfSRPCN4Eq22xnZh5jRJ8XZh7DeJMArLCcp3H/pph5B2vw90 TKU/0u0Iv9O9SI3oO3T7n1vnQ9Q== X-Received: from pgac15.prod.google.com ([2002:a05:6a02:294f:b0:c79:5ec2:4a68]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:431e:b0:39f:54fb:e465 with SMTP id adf61e73a8af0-3aa5acd7603mr9313570637.50.1778186077180; Thu, 07 May 2026 13:34:37 -0700 (PDT) Date: Thu, 7 May 2026 13:34: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: <20260507-gmem-inplace-conversion-v6-0-91ab5a8b19a4@google.com> X-Mailer: git-send-email 2.54.0.563.g4f69b47b94-goog Message-ID: Subject: [POC PATCH 3/5] 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, liam@infradead.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.563.g4f69b47b94-goog From nobody Sat Jun 13 06:00:19 2026 Received: from mail-pg1-f201.google.com (mail-pg1-f201.google.com [209.85.215.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 58D6D3264F5 for ; Thu, 7 May 2026 20:34:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778186083; cv=none; b=nplMUrF48PwWdBvqjrie36l/nufXE8VQzEpeoCf3XMjOdwpgCaH3/uYX18LiiVsJPKjYCo+tPyQWKMu7BUQPORuVHUfYDyGEnMU/G9e4gi1AYO8mfM+xVW2urLUDecg7/iM0wcnkeNaYPWFxrx8fIMO86UAFR5ASGkZ6b+456bg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778186083; c=relaxed/simple; bh=+qaEdBH+gYOBdsyFKxFWIyCyUru/7xriN85itsOx9b8=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=PyQD2p062hcP3Dm8zb0aWiEVhN6aQX+rZYuhU2UomxsWZx6KY+iDoz5NLjYC8ziknyfx6QKpwNQ9edKuJrVFEta3kfHJK8AC9phJ79KYV5LCDg87+FT7N/tdnC2juKCCvjBPy6eSB2rW7VKS1F7l92AjZ6TODam9yu6Sqm4cp4A= 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=Dj0ZnzDw; arc=none smtp.client-ip=209.85.215.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="Dj0ZnzDw" Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-c822fba6b4cso692175a12.0 for ; Thu, 07 May 2026 13:34:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1778186078; x=1778790878; 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=TDRRc0jg/jx53tsGeC8eacCCEXJljCHGPEHlQkr/vH8=; b=Dj0ZnzDw/bbTL2VHDZAXOtB9eurfTlRGHacCDeiAWpps1yLja8efV4NLuNAv1i8TPu UmC3LHQvY0ScfrViX7BevVOpzzjmYs8xLxj/VxsH8R9LbEKrTX1ebhShl/ejmPwNHrJt uA57WzslZZux8Jv6vaVusLkhgvyIytUR0P/jly9qeOEslbexlZQuzp9yz/XhnOEpXCUY OPMx4FvC6GO+gQO9pFt4Rov7fg64FA1in1bnUe2Ozrhf6WEy4CMRvx6An4osQSOMgCN8 NYgL5tAUN3NYwzcEc/mKFRzmyMN7LjsMnnvSxbBk+//hkBwgWqob7oXoDivxfOxAXUtL t13Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778186078; x=1778790878; 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=TDRRc0jg/jx53tsGeC8eacCCEXJljCHGPEHlQkr/vH8=; b=K2rPXK8O6aqhcVqgLhOqC9xuIj0rh48XAtlpGtz8s+97ZxLmNbOV/IVNY/YxRn2wrF 7D7PGSGKbSUncFhWPsAcXOFMFDdx8hDGPTIF1fKJTJEe16KMAy6uITZJvsAjMbMTz7qW ely4CCS0O2H+FpbuJv1rCcawFkFdXrObf1TcfyK9FXlCyWllUR6+bBwrSYK79inN2xtU uZbg2dcN+qJQ2Reh1eaJpGQBx+g3ldcgOKz71Qo2LjMX8fJyR0PpDNeI9BElfoD8h/XA zVife2yXvK8QBFjGKAzSPBctM65RN3jYX0ig8gwDDmQVNt+FrjuwdEffBgzyOY/gvCke zWsw== X-Forwarded-Encrypted: i=1; AFNElJ/FwUCebd0H1APuRIb56oOejQHadzudWBuPlFHSFN3beX6LdWqtyJzoHkCeIKjiCIbomdMLTdB9fXrLj2Q=@vger.kernel.org X-Gm-Message-State: AOJu0Yz4vgA2T85wOx+O9vZ3bBySNOKnylAYWHHBS4k2aOgBksdy5R1a Q0M4WkiXBzpgMNpL/fK9fLI4AjR2T1/Oxy7ep7E2jdLbyTfg+YhBbg562J0B9j6Q8/GHusJARnG bwxEwTY0E+G202pyhF4IGqIxFTg== X-Received: from pfje17.prod.google.com ([2002:a05:6a00:d1:b0:83a:d498:99fb]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:3944:b0:398:962e:83d7 with SMTP id adf61e73a8af0-3aa5a9df237mr10814249637.43.1778186078034; Thu, 07 May 2026 13:34:38 -0700 (PDT) Date: Thu, 7 May 2026 13:34: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: <20260507-gmem-inplace-conversion-v6-0-91ab5a8b19a4@google.com> X-Mailer: git-send-email 2.54.0.563.g4f69b47b94-goog Message-ID: <252ec123d00e4b60e1adb9ac5c84e0e4349fc488.1778185936.git.ackerleytng@google.com> Subject: [POC PATCH 4/5] 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, liam@infradead.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.563.g4f69b47b94-goog From nobody Sat Jun 13 06:00:19 2026 Received: from mail-pg1-f201.google.com (mail-pg1-f201.google.com [209.85.215.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 8BB6D32BF44 for ; Thu, 7 May 2026 20:34:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778186083; cv=none; b=bVegwQ5Cwh3/8bRD5dcSs9ovHCH63GeaFF9Ee/RGKy8jhzn/7gSXTsJ7mURIKM3F/yHYP7N9L8BkzWzB62LkZoJMFKUaLDHWXKGRv/HVINBAeszLSlwV3w4QSMzhfS7dONqRHxeGQQYVvNDQDgg8nn/ASw0KkxmODDYk+DNGpSY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778186083; c=relaxed/simple; bh=jZG/0FBlpQu4GQm6uEGJ6DPNXY8HyxzLrxN+MqpPshU=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=L+bMmYCLs5tdQoL9NWwJr0EsmqxVXLDuLyr4IQlrmj98fX3uw+93/9mWXrAM6NfL1G5Z1kLGir2tBTpOK1kkfMCX9yAeq3B/U8rYeNoyZ30i2tJv6z8HQMdf/gl5GfPiDNu1edWnLmblJK7jpzveFFmubyrAYjuUPlfInnJIhvQ= 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=RP/U1/aZ; arc=none smtp.client-ip=209.85.215.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="RP/U1/aZ" Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-c81086bf930so1416578a12.1 for ; Thu, 07 May 2026 13:34:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1778186079; x=1778790879; 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=Dvz8VPqH3W+uwpeYUY0LX4HhcQuQ485hz2JT5vwb8Uc=; b=RP/U1/aZgZqAZr3iZ5DelPqmQJzg00jPp/XwbUtf9828azrupB7L4mkd1WLN+SIlXP hg6LBv8155KzfgbngD9+bFcQ3xilo7Go4nHSQJg/a70wGQMFwRrqxs+JhKXonqUsMtx0 sJYlHy8L9HclYbU6T58UPqcOHCaZkwNAJI8rqFyYaebhi+k6G7lghFlrip29hhhnbHm8 BAliWv1mL2jihqvE8EU8CbTeFhdTcHCM3dLvre1LVGieFEWjonFj4JqGs5MUBTZ9Y7ZD BtgK1aK2Izj/A7xI4n6Y7DvNJA/jcgO4Pd8Kde5HhgCIhxsweUWzo+ZEvkNs4SnjuI9U QHOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778186079; x=1778790879; 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=Dvz8VPqH3W+uwpeYUY0LX4HhcQuQ485hz2JT5vwb8Uc=; b=qGFjljAYG78hIPAguh8uFEJI8CCnUNnqqBAeTBUTeEbQXWhOIAQB8sdNM2DNSRg5P9 Dz9C0GEqLef+DFGL1ImKNUlKEU6i/yuHiFxqO0gxRjvKTztssgTHyKHk5RhNmVILqHGf KL9xfkuH+tkCkQ5y1eQSyXB3hbCpgHkwa5OMVID0nP0QXAoeXMW9eVeSPSOra4dLR+iI UrJEFV3hLBrpsgpdJzSSkd2QjQJQ28njbLPWQ8Pwby0HqZQVAf6BL7ekKznS7SnAQXAj uIZ+XQXn9KgUjih3kTDrqYWhc2y/dv94XR3PtHKUh9Hq/6JEjkXBdtM0n0FZQvyQWo3/ 5tdw== X-Forwarded-Encrypted: i=1; AFNElJ9PO30oCFXBEN5YEXWSGTH28VgoR+YOjfZPIfQDalFoXciKaC3O4VJKeke4Q7POKuw2BRK337HYyguX7WU=@vger.kernel.org X-Gm-Message-State: AOJu0Ywhy5ZlWxkKAM6jxV07PNAwVswoyJzPsFkfwEMnuEE1KQEHh+dy WleajZnUCn9Vsj/TaoygSLZTdU7fvTP6l4oxNdngv8AhlmMnamgtOduooHVuIjRjec/040jHkst 0TsMnm3j1+bgdQUpvVskbanTcaA== X-Received: from pgam24.prod.google.com ([2002:a05:6a02:2b58:b0:c74:42:8984]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:6a08:b0:3a0:9052:c005 with SMTP id adf61e73a8af0-3aa8be1f13cmr3709197637.3.1778186078908; Thu, 07 May 2026 13:34:38 -0700 (PDT) Date: Thu, 7 May 2026 13:34: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: <20260507-gmem-inplace-conversion-v6-0-91ab5a8b19a4@google.com> X-Mailer: git-send-email 2.54.0.563.g4f69b47b94-goog Message-ID: <1edc2c94bf776c8ceee3b92208e6280ef5a50a23.1778185936.git.ackerleytng@google.com> Subject: [POC PATCH 5/5] 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, liam@infradead.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 | 198 +++++++++++++++++- 1 file changed, 193 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..8869cca748879 100644 --- a/tools/testing/selftests/kvm/x86/sev_smoke_test.c +++ b/tools/testing/selftests/kvm/x86/sev_smoke_test.c @@ -253,17 +253,205 @@ 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 +#define CONVERSION_TEST_VALUE_SHARED_4 0xde +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); + + GUEST_ASSERT_EQ(READ_ONCE(*test_shared_gva), CONVERSION_TEST_VALUE_SHARED= _3); + WRITE_ONCE(*test_shared_gva, CONVERSION_TEST_VALUE_SHARED_4); + + 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); + + 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); + + fprintf(stderr, "test_hva contents =3D %x\n", READ_ONCE(*(u8 *)test_hva)); + + WRITE_ONCE(*(u8 *)test_hva, CONVERSION_TEST_VALUE_SHARED_3); + TEST_ASSERT_EQ(*(u8 *)test_hva, CONVERSION_TEST_VALUE_SHARED_3); + + 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_4); +} + 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); + + // 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_ES)) - test_sev_smoke(guest_sev_es_code, KVM_X86_SEV_ES_VM, SEV_POLICY_ES); + if (kvm_cpu_has(X86_FEATURE_SEV_SNP)) { + test_conversion(snp_default_policy()); =20 - if (kvm_cpu_has(X86_FEATURE_SEV_SNP)) - test_sev_smoke(guest_snp_code, KVM_X86_SNP_VM, snp_default_policy()); + // test_sev_smoke(guest_snp_code, KVM_X86_SNP_VM, snp_default_policy()); + } =20 return 0; } --=20 2.54.0.563.g4f69b47b94-goog