From patchwork Sun Jan 23 18:45:40 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Dunn X-Patchwork-Id: 12721120 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9655DC433FE for ; Sun, 23 Jan 2022 18:45:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230437AbiAWSpz (ORCPT ); Sun, 23 Jan 2022 13:45:55 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55008 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229833AbiAWSpy (ORCPT ); Sun, 23 Jan 2022 13:45:54 -0500 Received: from mail-pg1-x549.google.com (mail-pg1-x549.google.com [IPv6:2607:f8b0:4864:20::549]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 20E72C06173D for ; Sun, 23 Jan 2022 10:45:54 -0800 (PST) Received: by mail-pg1-x549.google.com with SMTP id p6-20020a63ab06000000b0033fcc84d4f6so8470670pgf.5 for ; Sun, 23 Jan 2022 10:45:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=lHkAYzvU+gvACQS+B203C+Z1CPAITSVUhZfrMamGfEo=; b=quFUrJE1jNku2CvV1w6on8tPivLenytfz7RDTqEj2ryJRGT/GKfRuYrcE46RG2ncS6 qaReNHLiKb3v5Zw/ypdAOxXw5fZNz3cR+rIwoXxMdOSRG/IbTi03OmRmg8EvmJJF18AU iau3R2pODlFaXC9sZoUj9L6PLvrDnosb2reKuhYqAEhtW3bjhzzDldLTHtlksPFH0vLv KacbVLI/FERGuFREnR9cmJWoyw6iTo75FrHXeOdJ484QuYgVoAhN6XYrO0f174hEghtf 1Ft+Z74Y97ynDK4+uz3WjSASSxoftNhlt/BIiEyqvlOSJ28mFDM8u+OYJXoNDfF1DTuL xXcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=lHkAYzvU+gvACQS+B203C+Z1CPAITSVUhZfrMamGfEo=; b=kQPDexg9Zprm+lLWnbWrfGIEQbMLeP8ltJOG/j6QZN4ENgHXKBwjLu0IaajOOkJdbf JaCGGDWtkxMdn2cmLnqQS4PgRjF7oL6baC0SUjZRqO7ydPrdAv87MAn0kinOGRBb9mUa syiLRIaISSTX4CyS34CABHahzCx9Aw6oxR7Tbsdy6rlaDegsluwCKXy9kqViLEyBcfsn KLVFnrH+Z1Lk5NJvrDDuZXoP8cCFzlH3cnY1d6kBF2ppir4xu33KS0RhCIILFhzVQ+wU fO0bgFH7obE4bK+NBNBnMnWbamBLo+pjQM1C7ITr0pSC1Crp6Q2Xkf0gtByZdu0Bb0lR h2kQ== X-Gm-Message-State: AOAM533MO11K2Dkq8hAj5RlxbyNGMWK0VSY2q8KfJKRO3QyzkweeoeJE Ij59qRyidmMlRIdv1cXP8PFXb8/cP9nUAWdyrTcjEuMol9dcWXjichhAV9KAq/QmufrefbI0NUE M6lhhiskX0oEqatyHUop7gxpG2OlUFmarK3Th8bKyQRkwyx0lpQYGSq2WQdG4nbQ1MA== X-Google-Smtp-Source: ABdhPJweXMOZE+jMgkk4X2FxmeUmfvmiK+k9u9zrdEScYKRpx2JdQ8/uTPitemvpXahEAjkLM7moXmXTn8XxWF4= X-Received: from daviddunn-glinux.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:782]) (user=daviddunn job=sendgmr) by 2002:a62:7ecb:0:b0:4c8:6137:6f39 with SMTP id z194-20020a627ecb000000b004c861376f39mr4615451pfc.43.1642963553468; Sun, 23 Jan 2022 10:45:53 -0800 (PST) Date: Sun, 23 Jan 2022 18:45:40 +0000 In-Reply-To: <20220123184541.993212-1-daviddunn@google.com> Message-Id: <20220123184541.993212-3-daviddunn@google.com> Mime-Version: 1.0 References: <20220123184541.993212-1-daviddunn@google.com> X-Mailer: git-send-email 2.35.0.rc0.227.g00780c9af4-goog Subject: [PATCH v5 2/3] KVM: selftests: Allow creation of selftest VM without vcpus From: David Dunn To: kvm@vger.kernel.org, pbonzini@redhat.com, like.xu.linux@gmail.com, jmattson@google.com, cloudliang@tencent.com, seanjc@google.com Cc: daviddunn@google.com Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Break out portion of vm_create_with_vcpus so that selftests can modify the VM prior to creating vcpus. Signed-off-by: David Dunn --- .../selftests/kvm/include/kvm_util_base.h | 3 ++ tools/testing/selftests/kvm/lib/kvm_util.c | 48 ++++++++++++++----- 2 files changed, 38 insertions(+), 13 deletions(-) diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/testing/selftests/kvm/include/kvm_util_base.h index 66775de26952..0454027d588d 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -336,6 +336,9 @@ struct kvm_vm *vm_create_with_vcpus(enum vm_guest_mode mode, uint32_t nr_vcpus, uint32_t num_percpu_pages, void *guest_code, uint32_t vcpuids[]); +/* First phase of vm_create_with_vcpus, allows customization before vcpu add */ +struct kvm_vm *vm_create_without_vcpus(enum vm_guest_mode mode, uint64_t pages); + /* * Adds a vCPU with reasonable defaults (e.g. a stack) * diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/selftests/kvm/lib/kvm_util.c index 8c53f96ab7fe..f44fd2210c66 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -362,6 +362,40 @@ struct kvm_vm *vm_create(enum vm_guest_mode mode, uint64_t phy_pages, int perm) return vm; } +/* + * VM Create without creating VCPUs + * + * Input Args: + * mode - VM Mode (e.g. VM_MODE_P52V48_4K) + * pages - pages of memory required for VM + * + * Output Args: None + * + * Return: + * Pointer to opaque structure that describes the created VM. + * + * Creates a VM with the mode specified by mode (e.g. VM_MODE_P52V48_4K). + */ +struct kvm_vm *vm_create_without_vcpus(enum vm_guest_mode mode, uint64_t pages) +{ + struct kvm_vm *vm; + +#ifdef __x86_64__ + /* + * Permission needs to be requested before KVM_SET_CPUID2. + */ + vm_xsave_req_perm(); +#endif + vm = vm_create(mode, pages, O_RDWR); + + kvm_vm_elf_load(vm, program_invocation_name); + +#ifdef __x86_64__ + vm_create_irqchip(vm); +#endif + return vm; +} + /* * VM Create with customized parameters * @@ -393,13 +427,6 @@ struct kvm_vm *vm_create_with_vcpus(enum vm_guest_mode mode, uint32_t nr_vcpus, struct kvm_vm *vm; int i; -#ifdef __x86_64__ - /* - * Permission needs to be requested before KVM_SET_CPUID2. - */ - vm_xsave_req_perm(); -#endif - /* Force slot0 memory size not small than DEFAULT_GUEST_PHY_PAGES */ if (slot0_mem_pages < DEFAULT_GUEST_PHY_PAGES) slot0_mem_pages = DEFAULT_GUEST_PHY_PAGES; @@ -419,13 +446,8 @@ struct kvm_vm *vm_create_with_vcpus(enum vm_guest_mode mode, uint32_t nr_vcpus, nr_vcpus, kvm_check_cap(KVM_CAP_MAX_VCPUS)); pages = vm_adjust_num_guest_pages(mode, pages); - vm = vm_create(mode, pages, O_RDWR); - kvm_vm_elf_load(vm, program_invocation_name); - -#ifdef __x86_64__ - vm_create_irqchip(vm); -#endif + vm = vm_create_without_vcpus(mode, pages); for (i = 0; i < nr_vcpus; ++i) { uint32_t vcpuid = vcpuids ? vcpuids[i] : i;