Received: by 2002:a05:6358:45e:b0:b5:b6eb:e1f9 with SMTP id 30csp3424449rwe; Mon, 29 Aug 2022 11:24:31 -0700 (PDT) X-Google-Smtp-Source: AA6agR4ozGzwrd1J39uqWOd98RhfnsHz0PIj633GbhiD3X0AbziTwmd0yYI7TCV0zSWCR4Ppu2dL X-Received: by 2002:a17:906:4fc3:b0:72e:eab4:d9d7 with SMTP id i3-20020a1709064fc300b0072eeab4d9d7mr14165303ejw.599.1661797470857; Mon, 29 Aug 2022 11:24:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1661797470; cv=none; d=google.com; s=arc-20160816; b=ddRp9NZm5frb9qdKpU1qdbrp7gnXZhgMOkeMcnauKrCYYVhS3ZTZMpvUQZEUIIzv4w 9d8PZOkjUe3WZEXmuPjTuTVVFnTPbRgs1OVWnNzVJJkiRbz2PGYknzAKDqIXifoqbVRN Y2awDmNcA+Hpl0rr8ADqtbcmvdtEIq1D1z0VhBJaj1gd82ZOz5HgW/vQ5uB2/xMj04VC oTUgyNy8IFoHipqXSVwUhrmjbwJafL/PCIOMqdpS8xR7PKgfh3v44M+WJ+Dp0hirn1OE VsSfO48P/Pa3fOwdtGjfGJ/9TVp/Oz0eGbBIyx9GFKnPXj4dl0N0YbmCw1OevtQ+aUD8 Udrg== 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=DjSpUEd4vF4lOtP0B99mET3glfEYpz5arg2nPAewBOU=; b=hpAhOqElmuXlN/M3qxRlzIOsYhUkvkVF6116HkSXNGD+vcmpCCjbh9yZG5Tq3EV+kB X2dQdjoH3+MRudzTM9dB4abCPVh28H426DDCqh3y4la2Qn7ZV/k+a6dUj5U17IDyzKFV DAe4VyF/b8hyh+L8Wu4r72yDUBMwhZlOeFk2ZxRs/mGfhwOXMfhIHarbkO1ECQiGBWB7 tAuz6xscGQbZ7/FWMKJlWHK+3l9Rxe2o0P8dcS/hH2xDbnTqj1TVI8i2s6smoyYWekrf UHppr5cbMIp7ktV66L3ZV7HNreWCk/hhlSLdeQzmkaveKKClMZN9NMjN9CXJOlQKYb2j WyuQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=dbslTdjb; 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 u3-20020a170906068300b00730a3906ecfsi6453337ejb.110.2022.08.29.11.24.04; Mon, 29 Aug 2022 11:24:30 -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=dbslTdjb; 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 S231438AbiH2RLT (ORCPT + 99 others); Mon, 29 Aug 2022 13:11:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52812 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231346AbiH2RLE (ORCPT ); Mon, 29 Aug 2022 13:11:04 -0400 Received: from mail-pl1-x649.google.com (mail-pl1-x649.google.com [IPv6:2607:f8b0:4864:20::649]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6EDEB67459 for ; Mon, 29 Aug 2022 10:11:00 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id l16-20020a170902f69000b00175138bcd25so65921plg.2 for ; Mon, 29 Aug 2022 10:11:00 -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=DjSpUEd4vF4lOtP0B99mET3glfEYpz5arg2nPAewBOU=; b=dbslTdjbaCy+F+LzP2tdEdjdbHXFFIR9slvTIDv3G6gdLS8Qx074F0vFDwHlu3al4c A434GfDVx+TxN4m0G5IjSxevmn0DuZUadZ9rw3Y5icqBrmUSAVSufMrMYkQXMKC0b5n5 ZYxZlrAXGNXMnM/LsEwEPxa5hrbYCgKgeJHhc+8PXU+zzj4crGvHR0tQo4V2sGnLQhHq udJom4hoMCj13IDh89VngNXEDoagGF85oXzRbQ4ijVTNZRO4QnpYS783ZiYe0w5svsDT ysB2X/wirzxvzXpYf1izcVDqMZm5medbG2Y80uoHLoi4s11tyHOdAn4Tnd93KtgVdd63 Bohw== 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=DjSpUEd4vF4lOtP0B99mET3glfEYpz5arg2nPAewBOU=; b=ZuEJr6QhDLyfEusGnsQ5qqNI5JtDyl5UMZGFMfy4Yu8bQKV4hRe9ndxAOIzTD24pRv JcmcBLiJ+Tk/F1BZ4Ei7GwZy9I1h1nBRBfeKyIYpsNIqpfmtDRVoDe+T8pKPBD2KNGph VQrcbkI9cKFV60x9+7eds6TrPsAhdI2rn0iwrMwSEWKSIQ781rSOTXHgKpwx2ubt5vQz i6mNKtTZ3BrGJTArqGUjSrxJ0oNWHLMlW+aZE/EL6H2p3jkcv8rIJ6isaBulOqUD3kZX uDDosc7hvy4f8I7vWcUVkyGZGzxSbd1dtzQS/275VdLplyM7QZFwyLtMSSgXg0M6AU8C znTg== X-Gm-Message-State: ACgBeo1OEQla1Wd/Qw7HjXG5ZfZBSzj6+TfEjR+kaP8HnDXHKbQiBvCe kicFFJ4TWPjRDRviYmzbL2qfQkn+CYk= X-Received: from pgonda1.kir.corp.google.com ([2620:15c:29:203:cddb:77a7:c55e:a7a2]) (user=pgonda job=sendgmr) by 2002:a17:90b:1e08:b0:1f5:1f0d:3736 with SMTP id pg8-20020a17090b1e0800b001f51f0d3736mr19635518pjb.58.1661793059938; Mon, 29 Aug 2022 10:10:59 -0700 (PDT) Date: Mon, 29 Aug 2022 10:10:18 -0700 In-Reply-To: <20220829171021.701198-1-pgonda@google.com> Message-Id: <20220829171021.701198-6-pgonda@google.com> Mime-Version: 1.0 References: <20220829171021.701198-1-pgonda@google.com> X-Mailer: git-send-email 2.37.2.672.g94769d06f0-goog Subject: [V4 5/8] 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, 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 dda8467d1434..489e8c833e5f 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -392,6 +392,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 de13be62d52d..ffdf39a5b12d 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -1273,12 +1273,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 * @@ -1291,13 +1292,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 @@ -1318,6 +1321,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.2.672.g94769d06f0-goog