Received: by 2002:a05:6359:322:b0:b3:69d0:12d8 with SMTP id ef34csp296453rwb; Wed, 10 Aug 2022 08:24:28 -0700 (PDT) X-Google-Smtp-Source: AA6agR7JNtETPM9fak/H1evjMTAA21YjCZHshFvb5FD5g9hGvoqRhXYb8G1Wl/gc2vymDYOg28VR X-Received: by 2002:a05:6402:46:b0:43a:f611:5992 with SMTP id f6-20020a056402004600b0043af6115992mr27631146edu.18.1660145068575; Wed, 10 Aug 2022 08:24:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1660145068; cv=none; d=google.com; s=arc-20160816; b=JZmHkd2XnrjuqO86h585mm8hnoUq3GinUf9T0ky+edmdTUvNoCqUO+ja7Q9WGLQwmN nff7wt67nO9PKw3iE0H5c7zmWuVG6veT1//fS7/jkDLDCtenvZ8OAQBv7jfOJPDE0asQ mnZAHVxNECXqLMsajIEvJj8r/GTHr7VrO5Q3pw54Su0dsq9I8vi3cMZDkAf1PcJV/nXy cbebOj8yrxK5jzRGdZ1FMVeTeooadnCl00tuMmlMhr57m5b+MKNpgaxsFGD4HzpSaEA3 zuVEwzBlAh227AEPrr672HzE+ntPUjyZOoj1ITWi49KQy0llrPK6c+7sJj63/v/1G5BS 9JXA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:references:mime-version :message-id:in-reply-to:date:dkim-signature; bh=inMFi1r68yo31MqDSQUW1MrXqR/Fsx7sJdQYcs3nA2A=; b=HSbVPGSGCceLJodruFLrpN118NtWiRFrUJLCx3d6QRBbv5om0Q1Td+kOvGj0agU6Rm Qg5nkPTqopn70BPu1j64ba7OvuasVTByvwdd/xaGcWHTW5dY0wIiDgnaCH7vopAo3CfM KJ23lq3u0OIv00wBfx0oDiMCOBlyyTv2tf0sL9j2ch38vnwtOt9TMdQCAbvmPasccyGC d95xqu5pOXpPpg6coEiWSyeK9E1aVBn2Zb/dZy5UOZlgCdJ3P99RpEUjdw/nzHzXAPLi v8sjDgb+Qsvp9XZ4/9sODSFH+6x9LKJFZOGnh2/Iy2VZZhkWe42vlc7UNLd/FqCVzotO DfAA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=TciIvPL7; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id qb10-20020a1709077e8a00b00730a21eaa9dsi4947118ejc.760.2022.08.10.08.24.00; Wed, 10 Aug 2022 08:24:28 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=TciIvPL7; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233241AbiHJPVK (ORCPT + 99 others); Wed, 10 Aug 2022 11:21:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37278 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233127AbiHJPUr (ORCPT ); Wed, 10 Aug 2022 11:20:47 -0400 Received: from mail-pj1-x104a.google.com (mail-pj1-x104a.google.com [IPv6:2607:f8b0:4864:20::104a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8FA0848E8D for ; Wed, 10 Aug 2022 08:20:46 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id v12-20020a17090a088c00b001f3019a9cf2so1194673pjc.0 for ; Wed, 10 Aug 2022 08:20:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:references:mime-version:message-id:in-reply-to :date:from:to:cc; bh=inMFi1r68yo31MqDSQUW1MrXqR/Fsx7sJdQYcs3nA2A=; b=TciIvPL7Ok+MSMHHNnoV/S0cgh2k0O7YEE2UsWpJOjO2Rl++7/d0rE41bp4ZXn1PH0 uC2fGCuG8t4TfYR/fweWXYFKFz54IjdqRzrz6snAfpyzRN1k5JCfKxQJslr3Zayg3R+Y P1pqjrirg5eH7BgdvLq39bCWRjlQbL1Oa+aDeB1azAHtr1zaeZJ1nzBueHNPbwYhAP1H TsRxCNNAwogvZyAk9vaECyOXChzMlYC6soRz45PbfvGAv7kNgH7ezCmIKK1JLPf+6gpR orydod/QVAKzUVkTTqz5XICsC/MBfCNRKMGWenNL4G3hstq1tPgY6MT/D+OkWusnFqLM ueEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:references:mime-version:message-id:in-reply-to :date:x-gm-message-state:from:to:cc; bh=inMFi1r68yo31MqDSQUW1MrXqR/Fsx7sJdQYcs3nA2A=; b=APqfgvIns3i9B+/laQrFyOFSR9MsdNhrlHn+4JU+NMULSja3dM+x8UaM33gLW/4trv A8TimZp98fF5h4LC5E418lEfM0UxZWQwWT1OQ4GJr7jL3DjHaV4zQwCKr7C07xsBrSnM jXNbZupjOOto1nPtRyjLrjtu6xcA7IfP/7hs7XLmd8Hvlbitxdb7fW6iPQ9NG0jdjVdT ouKkm/mlYGJZ9+zwUxkin78fufWjF4iZ0NKq/flCiixAMw5SBSs/D7pCinQEGA572BDM ERXzwG7KDBKGtpWrgfju3M5K7ypEsbJTySbpGjo9bMXppybSd9w9mAe5NAX/OJCcdY6H jeBA== X-Gm-Message-State: ACgBeo2sVym8ohQNT5YrpI8RkBHRjiawQKG+Et9qoEMeEfesM37CvWkv CEFzVOc5pYxUYoiX1pL3LZ17U7QgL4k= X-Received: from pgonda1.kir.corp.google.com ([2620:15c:29:203:b185:1827:5b23:bbe2]) (user=pgonda job=sendgmr) by 2002:a05:6a00:8c8:b0:52c:887d:fa25 with SMTP id s8-20020a056a0008c800b0052c887dfa25mr27953088pfu.86.1660144846015; Wed, 10 Aug 2022 08:20:46 -0700 (PDT) Date: Wed, 10 Aug 2022 08:20:27 -0700 In-Reply-To: <20220810152033.946942-1-pgonda@google.com> Message-Id: <20220810152033.946942-6-pgonda@google.com> Mime-Version: 1.0 References: <20220810152033.946942-1-pgonda@google.com> X-Mailer: git-send-email 2.37.1.559.g78731f0fdb-goog Subject: [V3 05/11] KVM: selftests: add support for encrypted vm_vaddr_* allocations From: Peter Gonda To: kvm@vger.kernel.org Cc: linux-kernel@vger.kernel.org, marcorr@google.com, seanjc@google.com, michael.roth@amd.com, thomas.lendacky@amd.com, joro@8bytes.org, mizhang@google.com, pbonzini@redhat.com, andrew.jones@linux.dev, vannapurve@google.com, Peter Gonda Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Michael Roth The default policy for whether to handle allocations as encrypted or shared pages is currently determined by vm_phy_pages_alloc(), which in turn uses the policy defined by vm->memcrypt.enc_by_default. Test programs may wish to allocate shared vaddrs for things like sharing memory with the guest. Since enc_by_default will be true in the case of SEV guests (since it's required in order to have the initial ELF binary and page table become part of the initial guest payload), an interface is needed to explicitly request shared pages. Implement this by splitting the common code out from vm_vaddr_alloc() and introducing a new vm_vaddr_alloc_shared(). Signed-off-by: Michael Roth Signed-off-by: Peter Gonda --- .../selftests/kvm/include/kvm_util_base.h | 1 + tools/testing/selftests/kvm/lib/kvm_util.c | 21 +++++++++++++++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/testing/selftests/kvm/include/kvm_util_base.h index de769b3de274..8ce9e5be70a3 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -390,6 +390,7 @@ void vm_mem_region_move(struct kvm_vm *vm, uint32_t slot, uint64_t new_gpa); void vm_mem_region_delete(struct kvm_vm *vm, uint32_t slot); struct kvm_vcpu *__vm_vcpu_add(struct kvm_vm *vm, uint32_t vcpu_id); vm_vaddr_t vm_vaddr_alloc(struct kvm_vm *vm, size_t sz, vm_vaddr_t vaddr_min); +vm_vaddr_t vm_vaddr_alloc_shared(struct kvm_vm *vm, size_t sz, vm_vaddr_t vaddr_min); vm_vaddr_t vm_vaddr_alloc_pages(struct kvm_vm *vm, int nr_pages); vm_vaddr_t vm_vaddr_alloc_page(struct kvm_vm *vm); diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/selftests/kvm/lib/kvm_util.c index 87772e23d1b5..4e4b28e4e890 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -1262,12 +1262,13 @@ static vm_vaddr_t vm_vaddr_unused_gap(struct kvm_vm *vm, size_t sz, } /* - * VM Virtual Address Allocate + * VM Virtual Address Allocate Shared/Encrypted * * Input Args: * vm - Virtual Machine * sz - Size in bytes * vaddr_min - Minimum starting virtual address + * encrypt - Whether the region should be handled as encrypted * * Output Args: None * @@ -1280,13 +1281,15 @@ static vm_vaddr_t vm_vaddr_unused_gap(struct kvm_vm *vm, size_t sz, * a unique set of pages, with the minimum real allocation being at least * a page. */ -vm_vaddr_t vm_vaddr_alloc(struct kvm_vm *vm, size_t sz, vm_vaddr_t vaddr_min) +static vm_vaddr_t +_vm_vaddr_alloc(struct kvm_vm *vm, size_t sz, vm_vaddr_t vaddr_min, bool encrypt) { uint64_t pages = (sz >> vm->page_shift) + ((sz % vm->page_size) != 0); virt_pgd_alloc(vm); - vm_paddr_t paddr = vm_phy_pages_alloc(vm, pages, - KVM_UTIL_MIN_PFN * vm->page_size, 0); + vm_paddr_t paddr = _vm_phy_pages_alloc(vm, pages, + KVM_UTIL_MIN_PFN * vm->page_size, + 0, encrypt); /* * Find an unused range of virtual page addresses of at least @@ -1307,6 +1310,16 @@ vm_vaddr_t vm_vaddr_alloc(struct kvm_vm *vm, size_t sz, vm_vaddr_t vaddr_min) return vaddr_start; } +vm_vaddr_t vm_vaddr_alloc(struct kvm_vm *vm, size_t sz, vm_vaddr_t vaddr_min) +{ + return _vm_vaddr_alloc(vm, sz, vaddr_min, vm->memcrypt.enc_by_default); +} + +vm_vaddr_t vm_vaddr_alloc_shared(struct kvm_vm *vm, size_t sz, vm_vaddr_t vaddr_min) +{ + return _vm_vaddr_alloc(vm, sz, vaddr_min, false); +} + /* * VM Virtual Address Allocate Pages * -- 2.37.1.559.g78731f0fdb-goog