From nobody Thu Apr 2 18:59:17 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 C38D03BFE21 for ; Thu, 26 Mar 2026 23:37:01 +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=1774568223; cv=none; b=iPsijaQAWdJTHLSE+81cmHMHxHTtHl3b039EpZ4xK0D3NxvmbmMIXU3MCWancad8ZB0J/rW+WJAx04KQKpCgdkfUeph9SGjDaV1oqsTNzYbx0cNA1QgVLIjtRaBpzSBMMjgyMO6MWxvHxPJLj1zy+D+YZW870Oew+EC7mwsHSUU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774568223; c=relaxed/simple; bh=ROguWgeRYmW2NGhxshL1J1m27mkAuyVZqWW+Rnqw28E=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=bQMx+RyrmRdTFi80Q4A09IrmF8zE+oyptee9D2Fp69eMz/dfoy61+U98Zn3WJeIKnpoolD0OjWj1GRTwMXVpbN7i1lorkYVTce6ABnZ8cUjmCHC8oXjOBds/Rku6r8PgaMNS+pJELzkz/iKVOkpQmPxR7NUnE8vtUxbACKzRvSo= 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=vZgrgyId; 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="vZgrgyId" Received: by mail-pf1-f201.google.com with SMTP id d2e1a72fcca58-82c73627355so971793b3a.2 for ; Thu, 26 Mar 2026 16:37:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1774568221; x=1775173021; 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=aDbojp2aZv00FIsDRORjdXTSkhyjR06hadNHaz3T5HI=; b=vZgrgyIdruznXS3apR6PkaMLFIwfMMJ3+VFF7qXbh95cEVD90txuA+wi5KhKmSTnyP lVUloHXpPI9Gubiy5AyoAN+hrCy6wL0cDeWuPVaV2t0OtKj+cS6At14SxUFDIJ2c4Z7G 2G+zmhLn5unIjEQZjfPWXqKU5F3C5OaKBvIc9PCA8pYW71dblj5yyHSYSpL5HdENT4mu J4P8lZkJY1zXjjJG03+olBXKSgu1kjg86FqKXokkdXo/raJ6L0x1ruuK5o6awquFgJZ8 EaJQHd9/oG2VKbPvlL/xx8ZUE/FVSNli6gNcP3AEfhasIFCo11g3BxAWaBoXGqBK2rQ+ NESA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774568221; x=1775173021; 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=aDbojp2aZv00FIsDRORjdXTSkhyjR06hadNHaz3T5HI=; b=IfoJbkmQxLW+cfSIfnyg4MkzxUVOjacP7sUuLKse7hXgUaa9W7lqOV8S2VDAjeVzix THdY4WqpUSpN6Mq71x7tHEfWJqh37AxE/lD5V177H9ceYFWHrTPE3EbSfwyZQbNuRuJm ND7bVKlgNCwcnz8XQkN+bQGGol15oIrpE5hyOCfgFCKhc9c4khGQSI/KDQFNWGVybtwa BST3tM8HOpTwHQ8dnhg1jmC4FjanDP4x4iDv4p8P8ky0l2oR+ngYmkRxaivbzU5GHp5T kX6FHUppiJEUgI1bAjxfidyHgJ7ofaHa6R3RvoRa33Hxg9jIj2uIOBf8C4xplFVTRBwl 71cg== X-Forwarded-Encrypted: i=1; AJvYcCWu9jzfoYtPCKAdFPzdeBbfPjvj3r0CHSGAT7UzT1ITdR48z5y54MShUShnbY34D3dN6KaYJVAc2n/1GTU=@vger.kernel.org X-Gm-Message-State: AOJu0Yw/cfWpnExPc7UoiYiu6PtMmRreidNjIW227lcZaIreBWsGltiq 2ZT4cqdsq8v+4we7ph81lqvUR7XCakyMmw57ExhbpCPplB21YZEVXapelJXyebXCrPO0nBWIVeJ xglIx+Tn814tJMoEcG5C3fPJgOQ== X-Received: from pfnj5.prod.google.com ([2002:aa7:83c5:0:b0:82c:649d:baf4]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:9090:b0:82c:6cbe:7935 with SMTP id d2e1a72fcca58-82c95ee4b93mr291131b3a.28.1774568220675; Thu, 26 Mar 2026 16:37:00 -0700 (PDT) Date: Thu, 26 Mar 2026 16:36:39 -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: <20260326-gmem-inplace-conversion-v4-0-e202fe950ffd@google.com> X-Mailer: git-send-email 2.53.0.1018.g2bb0e51243-goog Message-ID: <5f3dc762b9f08c1c398027e2ff4863ab46c3c04d.1774568083.git.ackerleytng@google.com> Subject: [POC PATCH 1/6] KVM: selftests: Initialize guest_memfd with INIT_SHARED From: Ackerley Tng To: ackerleytng@google.com Cc: 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, jroedel@suse.de, jthoughton@google.com, kasong@tencent.com, kvm@vger.kernel.org, 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, qperret@google.com, rick.p.edgecombe@intel.com, rientjes@google.com, rostedt@goodmis.org, seanjc@google.com, 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, 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 eaa5a1afa1d9b..68241e458807a 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, uint= 32_t nr_runnable_vcpus, { uint64_t 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, uint= 32_t 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.53.0.1018.g2bb0e51243-goog From nobody Thu Apr 2 18:59:17 2026 Received: from mail-pf1-f202.google.com (mail-pf1-f202.google.com [209.85.210.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 5DFDC3C1412 for ; Thu, 26 Mar 2026 23:37:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774568224; cv=none; b=kWN5KKWHAI0KjUkQ7VCqsix6VRufaIJWxB66NeQeFdnUAXwDryrZLGRD9JfuxY6K2Ae4/GA7x4c8KEgBG2M+rJlDX1NavbiuZfK/80Ym1S/DUbKVwxS8FgXrQ14JfewyPXrf04u/j7Qq1bCGlEg29mEbzgpW+1kV13gr+pM97Ps= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774568224; c=relaxed/simple; bh=67PPqaBy//OQSBGV93iqgx/DKTPKDwts6fJzTCKk2zc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=b+ssDDNtD1cbjo5YY0jubjW5K7HXR//p1amrj/XjsAS2+ixEwcR+ZbfyG1SJtIz+PXOGHMu8W8dr470NmaN5/95WszpOVWWCJSoxtOTFlj2kqZdkTsU7cC/iyp1TS4vF/UqacK53yUDev1uUAFap6f11MJv/pDeY3qwpjBTQQ3E= 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=jQIvjIcx; arc=none smtp.client-ip=209.85.210.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="jQIvjIcx" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-82c675116f1so2998809b3a.2 for ; Thu, 26 Mar 2026 16:37:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1774568223; x=1775173023; 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=anFkcCozf8v6Cel8diSJv50ROa2IxgRDEcI6Q1pEpvA=; b=jQIvjIcx/3DSg5jootqahZIkhPsYoTiOzhhypNFZDQopjCoakStTsfXjmF6BGrMkNh BYGXD3N3EEI0EwaWNa437DGPFhZG/XLiBFR4ZqFGDp3FF4YnvK7LGVSG96U+0cgsRB+d w1A6En2q1IHf1yIqrUYvVOIwJ11OE//VI14UogN6CihCw0iilkr77EAXQsCRglvsVYkP vVk1PcbvL6ImfxMc9uvuVIMvyKXGlJfeEy3OeWoLRc4sl3aEkxfvzLgJjbqpTZ5ekURh 1lTJ07JiAfI9aF8kuGZXekjD92CJ+x7R9z7kAF18MG+z2byw9nGYiu+EjU7bXnzceXzU Or/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774568223; x=1775173023; 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=anFkcCozf8v6Cel8diSJv50ROa2IxgRDEcI6Q1pEpvA=; b=iiYGn40fRrfIFlYczpUoN8AmmQIKHlby/Gtadl269myl6jCHwanozXBEyGc3reSzni C3IscMh8VAqT0suCbIa07ozbUgNS9pGHl8OuspbKTcqrsE1CYjEv47VFpI+KaSgQGMBO RGBASqkUv/nhOLNBYSlcqQy+n5T4oj2Q8vTCk1x+/g1BfpsRnmXV92hC3wMvBuDJov7R fNLaWQuyNMVFHzFsI07rptVlBBalyo8gLXOxRafkd/zYKBjvKb2T/TpfnWa8IZu/lbSa hrHctTAus0rSJOq33Ks4U84s1W2t3lnuSzuPTanEg21L1XA5YvsDwlwV5WhddsA9JkWg p5SA== X-Forwarded-Encrypted: i=1; AJvYcCV5m5G9puVkrD/DufuSaCmKsq21FtRkDGtjKiRkj9jvVy0uDbWalK9FFAQqDBF0QDF0zqiHizmM0Nrrygg=@vger.kernel.org X-Gm-Message-State: AOJu0YxFDmh4x+cQ1ZUaVQDvtdd64lEMlZ4505xg7u9E87Kt+WruZlZX /QOxRrNWDE9nk8cyVf0LNwIjqXlnw8wlgNx60GyUR+7sjHmqtRUyD6gXAz4rZDVcF/tqH5Jjj0A H1nHrPAleAgOcQFWXCddka78H4Q== X-Received: from pfbbe3.prod.google.com ([2002:a05:6a00:1f03:b0:82c:70d1:f303]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:2d86:b0:823:1212:8e87 with SMTP id d2e1a72fcca58-82c95ebf212mr318666b3a.32.1774568222396; Thu, 26 Mar 2026 16:37:02 -0700 (PDT) Date: Thu, 26 Mar 2026 16:36:40 -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: <20260326-gmem-inplace-conversion-v4-0-e202fe950ffd@google.com> X-Mailer: git-send-email 2.53.0.1018.g2bb0e51243-goog Message-ID: Subject: [POC PATCH 2/6] KVM: selftests: Call snp_launch_update_data() providing copy of memory From: Ackerley Tng To: ackerleytng@google.com Cc: 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, jroedel@suse.de, jthoughton@google.com, kasong@tencent.com, kvm@vger.kernel.org, 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, qperret@google.com, rick.p.edgecombe@intel.com, rientjes@google.com, rostedt@goodmis.org, seanjc@google.com, 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, yuanchu@google.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Call snp_launch_update_data() providing a copy of the memory to be loaded. KVM_SEV_SNP_LAUNCH_UPDATE populates memory into private memory by first GUP-ing the source memory, then encrypting it into private memory. The hva that was specified as the source is in this case also the destination where the private memory will be placed after encryption. KVM_SEV_SNP_LAUNCH_UPDATE requires the destination to be private memory, but private memory cannot be accessed by the host and hence cannot be GUP-ed. Hence, make a copy of the memory to be loaded, and use that as the source, so that the source can be GUP-ed, and the destination is still private. Signed-off-by: Ackerley Tng --- tools/testing/selftests/kvm/lib/x86/sev.c | 35 +++++++++++++++++++---- 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/tools/testing/selftests/kvm/lib/x86/sev.c b/tools/testing/self= tests/kvm/lib/x86/sev.c index d3a7241e5fc13..1b937034a5c11 100644 --- a/tools/testing/selftests/kvm/lib/x86/sev.c +++ b/tools/testing/selftests/kvm/lib/x86/sev.c @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-only #include #include +#include =20 #include "sev.h" =20 @@ -31,17 +32,39 @@ static void encrypt_region(struct kvm_vm *vm, struct us= erspace_mem_region *regio sparsebit_for_each_set_range(protected_phy_pages, i, j) { const uint64_t size =3D (j - i + 1) * vm->page_size; const uint64_t offset =3D (i - lowest_page_in_region) * vm->page_size; + void *source; + + /* + * Is SNP the only place where private=3Dtrue? If yes, + * then we don't need the private parameter, we can + * just check if the vm is SNP. Or maybe it depends on + * whether TDX, etc use the private parameter. + */ + if (private) { + const void *hva =3D addr_gpa2hva(vm, gpa_base + offset); + + source =3D kvm_mmap(size, PROT_READ | PROT_WRITE, + MAP_ANONYMOUS | MAP_PRIVATE, -1); + /* + * Make a copy before setting private, because + * snp_launch_update_data() needs to GUP the + * source, and private memory cannot be + * GUP-ed. + */ + memcpy(source, hva, size); =20 - if (private) vm_mem_set_private(vm, gpa_base + offset, size, 0); + } =20 - if (is_sev_snp_vm(vm)) + if (is_sev_snp_vm(vm)) { snp_launch_update_data(vm, gpa_base + offset, - (uint64_t)addr_gpa2hva(vm, gpa_base + offset), - size, page_type); - else - sev_launch_update_data(vm, gpa_base + offset, size); + (uint64_t)source, size, + page_type); =20 + kvm_munmap(source, size); + } else { + sev_launch_update_data(vm, gpa_base + offset, size); + } } } =20 --=20 2.53.0.1018.g2bb0e51243-goog From nobody Thu Apr 2 18:59:17 2026 Received: from mail-pf1-f202.google.com (mail-pf1-f202.google.com [209.85.210.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 F08A73C343F for ; Thu, 26 Mar 2026 23:37:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774568227; cv=none; b=M23AbnH6FF3f/T9nC8RDyDoxuHTNZQcaD58j/V40IFKrQ9EMMBbGBEpUeFnxky7cVKyvxooOT8lR25nWetjXGQ55juv3IQ2bYo0D4Y7zUn7H3XxwgynaGq4QaLDVFbNk1FPXNPo99MVPoZi6lcimdWSpMhdbYwvHOATDtPhhX6c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774568227; c=relaxed/simple; bh=4kN6A4roXpuUCdc9Yp+JZTflHlL0xWy1WzOJQpEHZbI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=mL0dfTJII5R7qKjYbWVMUIRLAWQpQ3S4kMfjz625fvlxXZF2rAW0QtL+NO7kaYdbW82lgowTKHyqjiwsu4oG9f50S/fHTQTMCyeVhbeSrWGc8MgOOruCQsp6e3e/F6F1JGWyAW/YG6AzExyVQRO2kRg0JWF61eqcFZTUwCR0VG0= 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=QwdX9l6A; arc=none smtp.client-ip=209.85.210.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="QwdX9l6A" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-82c613194caso1215704b3a.1 for ; Thu, 26 Mar 2026 16:37:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1774568224; x=1775173024; 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=SLjwHN4/NEPHQ5GPdLGfuv8Jy0iItB0IfnGqB+YcFdI=; b=QwdX9l6A2nZ1rjHtjmIM/rxj6SBc4nWuP8xQcaV2ip76VDKgJe5aHucqUMmEx048pf Km3PjU8yvfGVNZx25+PEUf4g8cG9/btfEt5CBI4J1WvJRyQtX0SIPY4JUZmHwidJwErT Tyh7sAO+odP9iVvkBhF71G8/Mf/JDcx0ILlp5IyCc4eD+Et6lwwuLjFTwy4wb3smqhGx 5oiQGqnePMkREj4GaNcWERADYx5qp2YLnJC3UYRjG9rMAnU1X1KLzBvu7pSMLufhI0NY s4H9u0g7xdIDC5Y+b45UZAY1gDLPeSfuoIsbTqVgmqXLg/5G7k2mzx1aG9BQtCWx+n0o /FHQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774568224; x=1775173024; 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=SLjwHN4/NEPHQ5GPdLGfuv8Jy0iItB0IfnGqB+YcFdI=; b=fbPqeO5PvuwbjHS3TSvdNK1kiNALYjiDHRbiCPxdOj4Dn+zbOu0ALCe9uXFWP0aYNF f7J6Q0JC9fzRFe5Wv8we8JEC9dhNrgvbYg7wqyByYNEedzCsw+mBk+CIcOocx0mMXI3i AZ3rRAWz6Cc+XMMADoTBLv7NIaoK6Wng3JD+6yqDNVqRbnIQefDgByZCJrNxKwFMbRtU 2wmn6ZeKJxSZafSn670n7DYzyB4kNPewh3n+9+dthaq2gBg032quvSU6fCRbWrduHean LzNirJtFtnq8eIpGDsk7yFwHSMlMvUv4alo0+AMZz6zg4gGisxcRT29e5qx7sLQjy1Cr q7jg== X-Forwarded-Encrypted: i=1; AJvYcCUI6k2KIg70bYDjUQmLgGieQd5PoHTkA8cD3ffe4wCUfpRfjSVf0Q686OZ99ltS9JFAuB4BeeBtJeRLyMw=@vger.kernel.org X-Gm-Message-State: AOJu0YyTRr/QQp//+oWwRz4791/13GfaNQTrM9chqIiXhdttv6zuyUWY jPtZtlt8XaqBpn8p1odFjv8xRfRD0o3eFluhaebdbR6Bu6IxRgsoL29clxjbEjkhLipO6P2xrKF hSb3n2H9eP+PJcO+fPri0su4SUA== X-Received: from pfblm12.prod.google.com ([2002:a05:6a00:3c8c:b0:829:7245:b797]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:aa04:b0:824:a8f2:7de7 with SMTP id d2e1a72fcca58-82c960a6bcdmr260470b3a.60.1774568224072; Thu, 26 Mar 2026 16:37:04 -0700 (PDT) Date: Thu, 26 Mar 2026 16:36:41 -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: <20260326-gmem-inplace-conversion-v4-0-e202fe950ffd@google.com> X-Mailer: git-send-email 2.53.0.1018.g2bb0e51243-goog Message-ID: Subject: [POC PATCH 3/6] KVM: selftests: Make guest_code_xsave more friendly From: Ackerley Tng To: ackerleytng@google.com Cc: 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, jroedel@suse.de, jthoughton@google.com, kasong@tencent.com, kvm@vger.kernel.org, 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, qperret@google.com, rick.p.edgecombe@intel.com, rientjes@google.com, rostedt@goodmis.org, seanjc@google.com, 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, 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 8bd37a476f159..7e69da01cecf4 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.53.0.1018.g2bb0e51243-goog From nobody Thu Apr 2 18:59:17 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 C69AB3C555C for ; Thu, 26 Mar 2026 23:37:06 +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=1774568228; cv=none; b=Df9iahSY2sS8B6XbOB77iqNSROHDLn/U+HSDcFtvKxdA4RwXCGNoddcB7gtb5bB24b+UMvQdJVU0hWQ4YX01TZhLglsIlQQmgNbZux58shdSCYFF7+r2Whp8FY7q5HxUYhAqbVdNLuKlJUF1A8oE34b7Wm7bhJ1RdUBl1/91MDo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774568228; c=relaxed/simple; bh=OAGK8d2apSftt05QmnnszQRJgC1kXAx/T7wydwlu+UE=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=qmjdV+1QXVJRvYpY8Lhgu2COgQdSsIa8iPQbmIcgu5s4WDJubozYfh81nnbkABnplV500mAG/QI/j46RmAG1nrQTzJCynx87qfpn7XLJRGRgWqgBsDA5eJteG6S+vtrkRNA0cIcRDrOs0duduB8+NIf/xDbiwNDs4cljjxwC6Lk= 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=ha5zpS1y; 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="ha5zpS1y" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b6097ca315bso3764940a12.3 for ; Thu, 26 Mar 2026 16:37:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1774568226; x=1775173026; 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=CNb2uR0lRZazBe4OJVZFjtnQRAuzu3Ihzf0aacyDPTQ=; b=ha5zpS1yHh2vIpo8F0w4K/+cQCQENDDLWL4kR8AsbM/2KYRs8eVuScadjbZEoLeJmY dfJRScZXdlgnCMiXq6amZZfh2T1P5YRAtj4ki+EL6ddK1CArdKq9kFTzg6T13WPk3Fim VxCUAean5ca6vunMXM2Yi648Pgj/k2upiyq8Acx2otf3uIoq2Yo6/W+0InUufMQkaByC PYrPVukdjpKm7ucFakLU0NVTPop9yjuZnrUU3S7xcpQWoOdHJp4OB16KdIEua57WIu56 Y9I03bXvdkhOkhaYfRSJvaExva2zaIhrxD/v/alnVnkz+miG/GQwR2IqJe05Rv5Xxpy5 bLhw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774568226; x=1775173026; 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=CNb2uR0lRZazBe4OJVZFjtnQRAuzu3Ihzf0aacyDPTQ=; b=OCSsdXn/j85XRaV8kxhkKy6FFJNFYeUYdbZyGUlP7eU3teML+T9mfB5Q1Ypu/94/NP 2xPcbLcfRFtPF/sTdIZ/bOIkgoRil9k8ZhKCVY1/79EZ6QquUl7nCEz1T3tog7sP3tAo 3k3huYA+vy1JjWZa6sxQ+L5jAmAE9lKNAfAYqNrEREVcHfXM0lV68cHzHaqt1mI1OvSj JrIvQZwVaZ7QIZKPbw/8PSa9dP1Grm4obyALjq4oFmwn9LPd+OKttqRh0jOt7i92OgFZ XJUI/sCQHVUv5ehfWIKonOrJV//TWTubGYw3EyOI2KysviZhoZNgo0PXoHn4o6BHkN0u NkTQ== X-Forwarded-Encrypted: i=1; AJvYcCVkT/K7hiKLaVh3LyKm3WR6wj3tCmxb9DXWdiwL6vvGQ7Zb9l8VgP+OeFWlzyWxIWhWr4za1xar9VARVZ4=@vger.kernel.org X-Gm-Message-State: AOJu0YxzeKH6cOH1p9ql9u4AHpXZO9SmmVPzaFFB8P1t5jNC2qqALjT0 7MT66sjBPf6jbFm6fkPKrE8eGecelrB0QxZxzrvcj4ScyMRQtShQ/P07shaia0WHvzMWXVXsdrJ 1h7Nd02UowQKzQCj2sizNA0Omug== X-Received: from pfbmy7-n2.prod.google.com ([2002:a05:6a00:6d47:20b0:822:4e8c:2c9e]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:430c:b0:82a:1044:3563 with SMTP id d2e1a72fcca58-82c95d32c02mr282953b3a.23.1774568225809; Thu, 26 Mar 2026 16:37:05 -0700 (PDT) Date: Thu, 26 Mar 2026 16:36:42 -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: <20260326-gmem-inplace-conversion-v4-0-e202fe950ffd@google.com> X-Mailer: git-send-email 2.53.0.1018.g2bb0e51243-goog Message-ID: Subject: [POC PATCH 4/6] KVM: selftests: Allow specifying CoCo-privateness while mapping a page From: Ackerley Tng To: ackerleytng@google.com Cc: 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, jroedel@suse.de, jthoughton@google.com, kasong@tencent.com, kvm@vger.kernel.org, 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, qperret@google.com, rick.p.edgecombe@intel.com, rientjes@google.com, rostedt@goodmis.org, seanjc@google.com, 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, 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 469a221221575..64870968ee47a 100644 --- a/tools/testing/selftests/kvm/include/x86/processor.h +++ b/tools/testing/selftests/kvm/include/x86/processor.h @@ -1499,6 +1499,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, uint64_t vaddr, + uint64_t paddr, int level, bool private); void __virt_pg_map(struct kvm_vm *vm, struct kvm_mmu *mmu, uint64_t vaddr, uint64_t paddr, int level); void virt_map_level(struct kvm_vm *vm, uint64_t vaddr, uint64_t paddr, diff --git a/tools/testing/selftests/kvm/lib/x86/processor.c b/tools/testin= g/selftests/kvm/lib/x86/processor.c index 23a44941e2837..fcdc4ae40b167 100644 --- a/tools/testing/selftests/kvm/lib/x86/processor.c +++ b/tools/testing/selftests/kvm/lib/x86/processor.c @@ -254,8 +254,8 @@ static uint64_t *virt_create_upper_pte(struct kvm_vm *v= m, return pte; } =20 -void __virt_pg_map(struct kvm_vm *vm, struct kvm_mmu *mmu, uint64_t vaddr, - uint64_t paddr, int level) +void ___virt_pg_map(struct kvm_vm *vm, struct kvm_mmu *mmu, uint64_t vaddr, + uint64_t paddr, int level, bool private) { const uint64_t pg_size =3D PG_LEVEL_SIZE(level); uint64_t *pte =3D &mmu->pgd; @@ -307,12 +307,19 @@ void __virt_pg_map(struct kvm_vm *vm, struct kvm_mmu = *mmu, uint64_t vaddr, * 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, paddr)) + 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, uint64_t vaddr, + uint64_t paddr, int level) +{ + ___virt_pg_map(vm, mmu, vaddr, paddr, level, + vm_is_gpa_protected(vm, paddr)); +} + void virt_arch_pg_map(struct kvm_vm *vm, uint64_t vaddr, uint64_t paddr) { __virt_pg_map(vm, &vm->mmu, vaddr, paddr, PG_LEVEL_4K); --=20 2.53.0.1018.g2bb0e51243-goog From nobody Thu Apr 2 18:59:17 2026 Received: from mail-pj1-f74.google.com (mail-pj1-f74.google.com [209.85.216.74]) (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 771983C7DE4 for ; Thu, 26 Mar 2026 23:37:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774568230; cv=none; b=kknSy21gvCeBeUs0JnCtekRgZ7Lo8SyzlQA1SPA2fKHFoEnUC+kapBOzG7PaQ702KZ0xIDS9GK7XpEiatxxQfnaXu7A3t6BUFrxRUJ9YHoh7ItjLd4Wgz5alsVzobU9qKIri7DOgQvcmxwMb0P+ICplLC3v/NgNx9MIn8AVXWs0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774568230; c=relaxed/simple; bh=ckWOv2jECsTvQD3jGhrybEN0Juu1Qi+nbw4vd9uJBEA=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=QbTGMmqWNpw9Gvdb5DXs9INYxOxMJ8B04N3XM+399Oj7wXnmm25waOUC4GZy64ikFKIJBIjctv0cMoXrHuiMCm8jGMTW9APOjLQuUokx0dCBGAteTcdr6TSD4eBhKk78YfRvdGM7rCfzBsrtJZDplfOnR3CeLN1q+MK2ixB5zw8= 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=VUnopvBm; arc=none smtp.client-ip=209.85.216.74 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="VUnopvBm" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-358df8fbd1cso1916183a91.0 for ; Thu, 26 Mar 2026 16:37:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1774568228; x=1775173028; 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=+iqU+PNO7bQVZ4XweKo6JOzshp2g+Q7QVegeGT2TX4U=; b=VUnopvBmrwSeZJmuO9aCnbRQxIcsVrTdh4AMojtkfcD7947A5ktY83wjx9T9rGoPlr BXel8V1UlBsKXjjOkGwPoxNktkREKpck5FHk+EjJBmlGQv8jmpyGKtBLdvrTpHZ0rj5a q+YWy4uGXdvYS+TfHezzgCKdFNEsiX9jKFpqDZo/IyzIS4hgtOZ9ZBjCUEHGS3rOALcc g72J9ccRVz/dSFx8jim1sqjYva17uS/7I4RXdLLRlyROmNO9l45GQMtBJDRiq9Xf8AiF bpVgOuxyfWokMgKp3VyytfA6UzdjMvjbnPx8DcgSs9w5PzsJis/6/1s0prOeqdpnupYw aDZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774568228; x=1775173028; 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=+iqU+PNO7bQVZ4XweKo6JOzshp2g+Q7QVegeGT2TX4U=; b=SLOQKbUK+y6VOqm1RhdcLz0Nb143Ux23w4PdmTnLEP5w6E83jowXeHHM2fZgR1TqN2 nySWmhj8Cb6yEHb4Mzl9ImEze/vM69H7EdI2KxBv8OjUbtsEyX0fdf1C5e+YeJCIKTPr 6Nt37P2SgSSC+1xBFc1uSU4mBFHgXirwFw5/NACVBhA+fIoUJW2pE270Ct9k2XcV9hEe QqYd3VmWJs6geHEiKUMD5FjNsUQoAFzaqwJ9tM/kmJwfP94ukligUe5ga/6a7on6rJdV fNK5AHr/WdMxH6wBu8X0GSooCjjNucU5BDinrubAqA/J31vdXM8LIlEbwN0c65KfDgLA xtyA== X-Forwarded-Encrypted: i=1; AJvYcCXD3qXsjpdgdSP0X6m7aBbMytu3E25EdNkFWuXubCLqsA2rRRgIxjRlNyOB2WvDfXLHcaARZX/OV066i0E=@vger.kernel.org X-Gm-Message-State: AOJu0YxwwqYn+vCI5tZQTdGFwR+K7Ig769PG/8wOCrGMrzb/SBCDov0R 5QGUoDs7YjBOpFNANj4l2z03bUrcr+8rTqz7IfjvVDGkeE1hsX0wpF2OBGYwmSLqXx1zFbcUd03 Subn5U3rp1ehXVaBxo7CV+pRk6w== X-Received: from pglu12.prod.google.com ([2002:a63:140c:0:b0:c76:3cb2:929c]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:1642:b0:35c:17ae:4e2f with SMTP id 98e67ed59e1d1-35c30155f02mr371172a91.33.1774568227491; Thu, 26 Mar 2026 16:37:07 -0700 (PDT) Date: Thu, 26 Mar 2026 16:36:43 -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: <20260326-gmem-inplace-conversion-v4-0-e202fe950ffd@google.com> X-Mailer: git-send-email 2.53.0.1018.g2bb0e51243-goog Message-ID: <92f152f8df72bbfabf69ecfa55ee65287a018cb3.1774568083.git.ackerleytng@google.com> Subject: [POC PATCH 5/6] KVM: selftests: Test conversions for SNP From: Ackerley Tng To: ackerleytng@google.com Cc: 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, jroedel@suse.de, jthoughton@google.com, kasong@tencent.com, kvm@vger.kernel.org, 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, qperret@google.com, rick.p.edgecombe@intel.com, rientjes@google.com, rostedt@goodmis.org, seanjc@google.com, 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, 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 7e69da01cecf4..c40c359f78901 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, uint32_t typ= e, uint64_t 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(uint64_t policy) +{ + vm_vaddr_t test_private_gva; + vm_vaddr_t test_shared_gva; + struct kvm_vcpu *vcpu; + vm_vaddr_t ghcb_gva; + vm_paddr_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_vaddr_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_vaddr_alloc_shared(vm, PAGE_SIZE, KVM_UTIL_MIN_VAD= DR, + 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_vaddr_unused_gap(vm, PAGE_SIZE, KVM_UTIL_MIN_VADD= R); + ___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.53.0.1018.g2bb0e51243-goog From nobody Thu Apr 2 18:59:17 2026 Received: from mail-pf1-f202.google.com (mail-pf1-f202.google.com [209.85.210.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 284993CA488 for ; Thu, 26 Mar 2026 23:37:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774568231; cv=none; b=HEoVbl7D06K42wM4I/wzb0djXjxx/Xmpy2mMR3HuS8pvAMU+m+m0UvR/LrCieMaNKLc1zjgpk0HUaCQpNu2wUPPY+OhdtGbei0jhgS8mvhy0+gf6kuflw3kwNZRKZNz1FabcQBUPmisXQHZswjY3FO0HxtIai/3mHbq3/1t2OmU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774568231; c=relaxed/simple; bh=lIGMTC/UU+uXAbXuWzKQ+RB//i4ISUTF/7wnJ89FeSg=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=X+VzvqvUnCrL+PszHSiipx7p5tyK7zGRUHtkK1A14TYuEZ9NVMq2uEaZ6F7aoZJv5noHlIOlQiFI/MRCY2tgaFRLiZuVEFCOPX7ALX8O3WGFQfFH7J0/aweEfykVbSI0ezvy5MD9gtsTZeSuyKnTZs3zXpyMmjV3jYB/ena8/NE= 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=VlwcVAdU; arc=none smtp.client-ip=209.85.210.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="VlwcVAdU" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-82c675116f1so2998996b3a.2 for ; Thu, 26 Mar 2026 16:37:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1774568229; x=1775173029; 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=qGHA+MoXXkOWLz+GDyK6vuU1BU5bAOng9gVTAO3EQWk=; b=VlwcVAdUt/436ouTuQUFd8v4TjBPa73KUxpx9aqSRK6dpc30IfMKzykbZ0PbeZOAM9 vHUbnZDmC7Qksng/SJWxLBPVqlfX9w+MGkdoc9Gu9meQTIl3iRwg3jlqZCPv9BGD0WGj vG9x0abwtdXQnV50delK9ltQ3GxV1SensV6iv0jRQHTLqSr/aJrUFQ+agfuiZvJXnsf+ m21VLVts3j9hMw2lhjYkbbhzUvLsVwaJ8QNI3qOY3koHvPPecfqALdlIgIBLwLfZYOrE XIRf700/vnVUKIzX5Bss4+JyVgUEoVwX56VXukcTclgzf7sI322ds7R/fS/rG5hDlf17 s4Aw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774568229; x=1775173029; 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=qGHA+MoXXkOWLz+GDyK6vuU1BU5bAOng9gVTAO3EQWk=; b=Ro+6D8l6W6mQr4psgMobbuLqj4FbYGiLVKU2/KOmaigq4enkXL44Junv8OgMp8KDme kzTC0HYdq9IgAltA0112y+rifDOeVw0+dtwwyFP8uQGbYai0gqoaXCq+BNFIOF3oycWL SB3b/wjQPC/hPFLPHlYTjJR/8FI9aVhfc9KNC5ndpQ6oX5m/Hk0KNjiW9GcNp1Mc3fP0 HtDNNlXrcaA1Lm+FejyFxF7uN3OUsRsaI/Ie5KShMCIBhWAHC8e1jyLdHSAvEm0Ta3pK ZrDKiq4d0lJYqZun+zfa1JoTqloj0rmXi/4VtZrY7ptnq6vHIwedr/PXQrPyTxkX0KAn 9M4Q== X-Forwarded-Encrypted: i=1; AJvYcCVn+fbLq4x9gw6Xr0dvck3ZhVVXjPuPVUPFqMeuqQ7O4st19tOsvV98KZIZyAFd42Nl+CdmhM+rY2xzhOk=@vger.kernel.org X-Gm-Message-State: AOJu0YyCHtGinYLbeDKMuH4DrP4lDQ3qQ9tBjuQk1CbwvXudfiZkw/3r o1M9burD6i5KS9IEzTOP1N69XmI4/RiW6oORvTUPiXDMi549PW0p1yUfvQvqGdnj7HoF2Jb9gE3 JgEUg2Ji4Z4ciLWt5o98GRpwXeQ== X-Received: from pfbih20.prod.google.com ([2002:a05:6a00:8c14:b0:829:f706:70e4]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:4146:b0:82c:20be:57e6 with SMTP id d2e1a72fcca58-82c959d4d68mr331958b3a.11.1774568229229; Thu, 26 Mar 2026 16:37:09 -0700 (PDT) Date: Thu, 26 Mar 2026 16:36:44 -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: <20260326-gmem-inplace-conversion-v4-0-e202fe950ffd@google.com> X-Mailer: git-send-email 2.53.0.1018.g2bb0e51243-goog Message-ID: Subject: [POC PATCH 6/6] KVM: selftests: Test content modes ZERO and PRESERVE for SNP From: Ackerley Tng To: ackerleytng@google.com Cc: 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, jroedel@suse.de, jthoughton@google.com, kasong@tencent.com, kvm@vger.kernel.org, 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, qperret@google.com, rick.p.edgecombe@intel.com, rientjes@google.com, rostedt@goodmis.org, seanjc@google.com, 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, 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 c40c359f78901..b076e0afc3077 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(uint64_t 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(uint64_t policy, u64 content_mode) { vm_vaddr_t test_private_gva; vm_vaddr_t test_shared_gva; @@ -409,6 +428,21 @@ static void test_conversion(uint64_t 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(uint64_t 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.53.0.1018.g2bb0e51243-goog