From nobody Sun May 10 09:12:48 2026 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 48193C433EF for ; Wed, 4 May 2022 22:49:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379151AbiEDWxZ (ORCPT ); Wed, 4 May 2022 18:53:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40550 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1378578AbiEDWxL (ORCPT ); Wed, 4 May 2022 18:53:11 -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 540585373E for ; Wed, 4 May 2022 15:49:34 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id l4-20020a170903244400b0015ebe12a192so1361541pls.16 for ; Wed, 04 May 2022 15:49:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=igBOUh84Bmp3sUj2zghGZfHB0YgQf7bYIajTvYgZaa4=; b=JskJRQL0qX1iMZYu0hQWsft7snVsKa+MjoSkZRQlc5UCKQ0EaH6ydEWZzTUi5VaUTq AnTp/Zy10lS+G0uUoiulH0crwUJjZef4+2e8dznMJJ0RPcovM+vYFBESVJfW1P5d9ip5 ddlgA8UY3guQ0t+P/KHATBo06vrZBi6IbhLNSMbGrn0tvc+hdM/hpa0OleJHP5mJ/Xg4 IFI926zcLHTzun4XP0B3mrioNIdtu5i1l/xy/g1jpi00xY0uIvqJRMLRIPw9aR+Vqjl3 Idt/gNRwu+mKpciTRBHrn3ckn/b2KsgXORgpkQjNHhaeC89c/elqsNs9W7Y+u+7/kMii OPMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=igBOUh84Bmp3sUj2zghGZfHB0YgQf7bYIajTvYgZaa4=; b=nZhx5LX5QRT6l6XZh0hbt19asYRZWYBoa7L+j+IXD7hTCXbX5Wcj3xyqGeKM75RwlD jf89C35gvcyAZXQsP+NGCAbtq7a8UzNRLirGDkr98lq1gMqVDytcx8UASKG8LaXMIdO6 BK735C8NGRGEpE65rkTxnhsnrXk1hjuRQzs7TuzKzOivGXliSvzy6gLuFcjZ9mqmxTIs i1rtfda7j0/Xgcxd8Baqv/NyCp3UMPD9XUTSbc3gC942GXGwPapWHy4kl1cs8WXH8UaJ nAW+mV49NlSipDrRYrYw2whWok0Sk37LDPa2G5bra5zFxybERF6TBuhuDS+F7vHFBv3L ZMkg== X-Gm-Message-State: AOAM532R1x+Gf652aCxRKV3Vr1JgesaJQ6naTXRXaaLVfJ0MwRxXxSJn m6nQ8byMZcejbSjnjF9NGhSZyLPd3XM= X-Google-Smtp-Source: ABdhPJxo1AgZHB+N0CuD3I6BjfU5RiC79A+wzHVfo+tKBmoeZ/lTyBXj9wk/tQ6rmslGygYWzkn8C/KfDug= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90b:1e04:b0:1dc:9252:efbc with SMTP id pg4-20020a17090b1e0400b001dc9252efbcmr2180226pjb.39.1651704573833; Wed, 04 May 2022 15:49:33 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:07 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-2-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 001/128] KVM: selftests: Fix buggy-but-benign check in test_v3_new_redist_regions() From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Update 'ret' with the return value of _kvm_device_access() prior to asserting that ret is non-zero. In the current code base, the flaw is benign as 'ret' is guaranteed to be -EBUSY from the previous run_vcpu(), which also means that errno=3D=3DEBUSY prior to _kvm_device_access(), thus the "errno =3D=3D EFAULT" part of the assert means that a false negative is impossible (unless the kernel is being truly mean and spuriously setting errno=3DEFAULT while returning success). Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/aarch64/vgic_init.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/kvm/aarch64/vgic_init.c b/tools/testin= g/selftests/kvm/aarch64/vgic_init.c index 34379c98d2f4..0f046e3e953d 100644 --- a/tools/testing/selftests/kvm/aarch64/vgic_init.c +++ b/tools/testing/selftests/kvm/aarch64/vgic_init.c @@ -381,8 +381,8 @@ static void test_v3_new_redist_regions(void) v =3D vm_gic_create_with_vcpus(KVM_DEV_TYPE_ARM_VGIC_V3, NR_VCPUS); subtest_v3_redist_regions(&v); =20 - _kvm_device_access(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, dummy, true); + ret =3D _kvm_device_access(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, dummy, true); TEST_ASSERT(ret && errno =3D=3D EFAULT, "register a third region allowing to cover the 4 vcpus"); =20 --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 EE096C433FE for ; Wed, 4 May 2022 22:49:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379176AbiEDWxc (ORCPT ); Wed, 4 May 2022 18:53:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40570 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379110AbiEDWxM (ORCPT ); Wed, 4 May 2022 18:53:12 -0400 Received: from mail-pl1-x64a.google.com (mail-pl1-x64a.google.com [IPv6:2607:f8b0:4864:20::64a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 056E45373E for ; Wed, 4 May 2022 15:49:35 -0700 (PDT) Received: by mail-pl1-x64a.google.com with SMTP id n4-20020a170902f60400b00158d1f2d442so1362973plg.18 for ; Wed, 04 May 2022 15:49:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=Cqs5TIeLdHODF4WijWucbG7WQzY3+z3c6FfhuiqpzWI=; b=HFrNCi/d1jFJZljXfD8H2ZOJbbMk7b/nb6i58/0Vsm+DeIwjrTLBO1cW2b9QblhZYu KP50apJ1fzaikVTQs/lIokm3asXVha+5DjgUYAe4Fb5e5G/06LFh/VodwPHgn/tDJfhx BurHKe+NCrSg4Tqo5BmOVfPXtwiQWMvw/KqdmzWTEviYw4j2SQrDXPcpz+EKCWv8r/KS S+EzojfwULkUEoi2/t8u/xiKLbzTPZNvAnzvk79zrcLu2NZHsE8CT+5iUZ9X9wGGBkQr 6J3xAOZJt7OE6+aHDhDzgjfzqDxqXXJ72p1/Yy8a/NGj6TQDQOaUmwv5J67xVKCqK1OC 8QCg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=Cqs5TIeLdHODF4WijWucbG7WQzY3+z3c6FfhuiqpzWI=; b=weG3EjR3Cz/eJqQ++/13VelFg4qqmb8kti8K4wXuIXh7ayiQGCbWUdNZHlgQSlEyEF JWVFdOog1AG5yDA5cuaFI1HFtQ0wXH+lyhOe2fq2I6di896Xv0HpFIjlJQmQJVvcwNT1 m0+u8HU/mZN9PClrGiC0EQ/tA9NPKYpMa+Tro0f1pDLkx6ZS76U7ntlpUzwIZMbXNY5+ 3NC0qaSaz/Xt5woCPAH6jkWdjuAIEHHM6zUMAVFjFQSkJqUy4zMByi6dorU+FOrJEMGX SSOkfEj6YT6puz15L/PC14qbLx0d/WwpUVYh379N7g8YJA5sxza+iE972UffO9YjgBiT DC9A== X-Gm-Message-State: AOAM530PcSNmFcB23RvXZ4PF19oUA1rEoFTjXJ9DdTgXr950jqIiUE4R KmcqWlNFMuysnfWRy1O1M2786iXXLdk= X-Google-Smtp-Source: ABdhPJzDMLEOlYFuGSLY/Czn/CXsJqXWiHgx1OzRw3017HQFvTuATu/4dg2i6DFrSpbEdy6IROuA6T/tlFA= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:ea06:b0:15e:8367:150b with SMTP id s6-20020a170902ea0600b0015e8367150bmr23440476plg.167.1651704575333; Wed, 04 May 2022 15:49:35 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:08 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-3-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 002/128] KVM: selftests: Drop stale declarations from kvm_util_base.h From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Drop declarations for allocate_kvm_dirty_log() and vm_create_device(), which no longer have implementations. Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/include/kvm_util_base.h | 5 ----- 1 file changed, 5 deletions(-) diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index 92cef0ffb19e..47b77ebda6a3 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -381,11 +381,6 @@ struct kvm_userspace_memory_region * kvm_userspace_memory_region_find(struct kvm_vm *vm, uint64_t start, uint64_t end); =20 -struct kvm_dirty_log * -allocate_kvm_dirty_log(struct kvm_userspace_memory_region *region); - -int vm_create_device(struct kvm_vm *vm, struct kvm_create_device *cd); - #define sync_global_to_guest(vm, g) ({ \ typeof(g) *_p =3D addr_gva2hva(vm, (vm_vaddr_t)&(g)); \ memcpy(_p, &(g), sizeof(g)); \ --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 B565DC433EF for ; Wed, 4 May 2022 22:50:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379228AbiEDWxj (ORCPT ); Wed, 4 May 2022 18:53:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40636 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379102AbiEDWxP (ORCPT ); Wed, 4 May 2022 18:53:15 -0400 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 8426053728 for ; Wed, 4 May 2022 15:49:37 -0700 (PDT) Received: by mail-pg1-x549.google.com with SMTP id b198-20020a6334cf000000b003ab23ccd0cbso1337080pga.14 for ; Wed, 04 May 2022 15:49:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=309h4CdGAPcwiHb0ZM4SWUVDb0T/f6xUJOwKAgDDSGM=; b=ZUrelAy0Bnhc0z7Dj1FvhcDcGJufecyEo9sS9WZIefn7dmdWq21xt4WaQ2OXpsybKq o6ilh7c+GhOO9FjT9yt5ae/jq0ta7aIPRzCDwZeVNNbqSrdav/H60mydYTiPdR6oD7bW 51zuLMcd6dho3EGrqFALGhLITdC/t4A2JX2TIUlTcHdcMEjnvi4PaFEdSmUUtHoLW4fR geMCTJUNfo5r9O715SPThADanpQl9PQvGb2WAnzGHWTgOwnR6FUn+hy5jGDSAbKfqWZv y1rAgl4LxLNEMPcc7zX8/ZWhdzOekI9X9riy55mouWBfcpRER2apGHf5AXDAZ+mp7CGg pnMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=309h4CdGAPcwiHb0ZM4SWUVDb0T/f6xUJOwKAgDDSGM=; b=ITsbeUcUWFK9vK7YKW6wvQLZTiZprJ3MBKl9liOWcErzDvADVwJvcmWs6HdTEZnGec wI3vkoFvnVbeGo1GAx3VJizoLVkpCwQGPeF/BC6fEQ93NzonGrceZ3h0MJOtnWMv0HNQ 6iinnvu9sPaflB8/40HYMAV9Fie/KPGKW1Y9VKeq3o6K8M6v+HLFnVeKMYGoMm19NQNu DUUziIX0mMH3mlyiQPdR+WNASI456Oo+HqcTcHGiTLKEin9ezWnEHowXLPiN9M0IzXWP F9+tTAYSLim2NTO8GJUF1PMGnNN3NvT8e+YhHDB86D0z2d7hvgHg+v0VKvWiQpUo5vn5 /oig== X-Gm-Message-State: AOAM530BOTpf8nLDYZ6r4FM8xZD/MIQhtaokL+slZn5c1JuHgRuyU1JN b5E8fSaCwpAsePMnrqUwFsCdC2KcXCo= X-Google-Smtp-Source: ABdhPJyroa6y79geaC1Voqxr63GiFITL3Z3N0TL80As4HKXy0ciZTzff0PRUBNCA1EGsP1cZU0jjKr5Viis= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:aa09:b0:159:684:c50d with SMTP id be9-20020a170902aa0900b001590684c50dmr24671868plb.51.1651704576963; Wed, 04 May 2022 15:49:36 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:09 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-4-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 003/128] KVM: selftests: Unconditionally compile KVM selftests with -Werror From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Specify -Werror when compiling KVM's selftests, there's zero reason to let warnings sneak into the selftests. Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/testing/selftests/kvm/Makefile b/tools/testing/selftests= /kvm/Makefile index af582d168621..c8efaaeb0885 100644 --- a/tools/testing/selftests/kvm/Makefile +++ b/tools/testing/selftests/kvm/Makefile @@ -153,7 +153,7 @@ LINUX_TOOL_ARCH_INCLUDE =3D $(top_srcdir)/tools/arch/x8= 6/include else LINUX_TOOL_ARCH_INCLUDE =3D $(top_srcdir)/tools/arch/$(ARCH)/include endif -CFLAGS +=3D -Wall -Wstrict-prototypes -Wuninitialized -O2 -g -std=3Dgnu99 \ +CFLAGS +=3D -Wall -Werror -Wstrict-prototypes -Wuninitialized -O2 -g -std= =3Dgnu99 \ -fno-stack-protector -fno-PIE -I$(LINUX_TOOL_INCLUDE) \ -I$(LINUX_TOOL_ARCH_INCLUDE) -I$(LINUX_HDR_PATH) -Iinclude \ -I$( 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 3092CC433EF for ; Wed, 4 May 2022 22:50:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379154AbiEDWxf (ORCPT ); Wed, 4 May 2022 18:53:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40550 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379121AbiEDWxQ (ORCPT ); Wed, 4 May 2022 18:53:16 -0400 Received: from mail-pg1-x54a.google.com (mail-pg1-x54a.google.com [IPv6:2607:f8b0:4864:20::54a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4A0C95372E for ; Wed, 4 May 2022 15:49:39 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id x2-20020a63aa42000000b003aafe948eeeso1363261pgo.0 for ; Wed, 04 May 2022 15:49:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=AvzrdOxuja+IM3jp+NGhvYWEUG9cjCsvbGuRmyXWkro=; b=RljsCP2mzcLw8SpR7UUUBFp6ezJaKGzz7gByffGNE82TGgneLyxpsWNC5Z45vamJJM 1RgV8ovKGvQbl+Fi2rnn+dGJ1v7WBdAC67Vrp6gjPqbLi75arWmGJeWDZc69T6MVzG+i OfQDSy7Hto976MaHOm96sALvXDutw1IDc1lZLsA45fKuCoh0SpAWOIEfHriRV/niQpMd djpatNrvMuPkxnq+qLSlH97KEeCIy96hx/iWx4k/kdncjYecKJbAyAXxoUnX6sPvzZAI QIxj0IVb0cPWI5sEk+WfoQajBGdhn6QB7/RDFzOrGVQM6Mjj0qp+iY6+3sxwzmpOUFLX tzUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=AvzrdOxuja+IM3jp+NGhvYWEUG9cjCsvbGuRmyXWkro=; b=5JrCgKU7Cux3Uzo1S8k0opxcHpe2cZfHbwrOMOw3Sjm1mDGpHk5BBfivAn6tschcZq jC/FuYUnbWsSWZ/WR3AGrbaxGKHVazwHE9yr7Ww9iiIHOMfEqAmLa6+6LOv7uCRRg1LI ZkWKEGXCKU5+HA1ZLPmTZcTAKL6SVfJUx9bo+I0P9POXGt9inm6V6jRrlUUw1TGy/KnV IKBuPZ6xMmAnshaOEGBuGatmV3p0KFwGVEeCX8oURQ6CKpk6kgUlzG0JdI7SIcvUsELN YZkoOlIxyUukYjcwCh38h+FH+2X/Ej7l5nfS/GAuewI3dYSY7eaaJdLKBNiErfV5GmNd lTpA== X-Gm-Message-State: AOAM532vFiynUbUezKI0qbdR5LN2fHQ6cJoNv/bhBZVAgLpdUbGUZ4N9 UBEaO6dSFeWaZIWfXH2wVLaxw/oW6Pg= X-Google-Smtp-Source: ABdhPJw0sLi5nyZslvyn1yK+USLCd7q5CZ5QolzT0AMl76EkSSIGhGfTyw3Z6rgTgrIGNqbeQL5+bN662yM= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a62:d445:0:b0:50d:b868:47bc with SMTP id u5-20020a62d445000000b0050db86847bcmr23009842pfl.73.1651704578711; Wed, 04 May 2022 15:49:38 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:10 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-5-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 004/128] KVM: selftests: Always open VM file descriptors with O_RDWR From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Drop the @perm param from vm_create() and always open VM file descriptors with O_RDWR. There's no legitimate use case for other permissions, and if a selftest wants to do oddball negative testing it can open code the necessary bits instead of forcing a bunch of tests to provide useless information. Signed-off-by: Sean Christopherson --- .../selftests/kvm/aarch64/get-reg-list.c | 2 +- .../selftests/kvm/aarch64/psci_cpu_on_test.c | 2 +- .../selftests/kvm/aarch64/vcpu_width_config.c | 6 +++--- tools/testing/selftests/kvm/dirty_log_test.c | 2 +- .../selftests/kvm/hardware_disable_test.c | 2 +- .../selftests/kvm/include/kvm_util_base.h | 4 ++-- .../selftests/kvm/kvm_binary_stats_test.c | 2 +- .../selftests/kvm/kvm_create_max_vcpus.c | 2 +- tools/testing/selftests/kvm/lib/kvm_util.c | 20 +++++++++---------- .../selftests/kvm/set_memory_region_test.c | 4 ++-- tools/testing/selftests/kvm/x86_64/amx_test.c | 2 +- .../testing/selftests/kvm/x86_64/evmcs_test.c | 2 +- .../selftests/kvm/x86_64/set_boot_cpu_id.c | 2 +- .../selftests/kvm/x86_64/set_sregs_test.c | 2 +- .../selftests/kvm/x86_64/sev_migrate_tests.c | 8 ++++---- tools/testing/selftests/kvm/x86_64/smm_test.c | 2 +- .../testing/selftests/kvm/x86_64/state_test.c | 2 +- .../kvm/x86_64/vmx_preemption_timer_test.c | 2 +- 18 files changed, 33 insertions(+), 35 deletions(-) diff --git a/tools/testing/selftests/kvm/aarch64/get-reg-list.c b/tools/tes= ting/selftests/kvm/aarch64/get-reg-list.c index 0b571f3fe64c..397ff6c79599 100644 --- a/tools/testing/selftests/kvm/aarch64/get-reg-list.c +++ b/tools/testing/selftests/kvm/aarch64/get-reg-list.c @@ -411,7 +411,7 @@ static void run_test(struct vcpu_config *c) =20 check_supported(c); =20 - vm =3D vm_create(VM_MODE_DEFAULT, DEFAULT_GUEST_PHY_PAGES, O_RDWR); + vm =3D vm_create(VM_MODE_DEFAULT, DEFAULT_GUEST_PHY_PAGES); prepare_vcpu_init(c, &init); aarch64_vcpu_add_default(vm, 0, &init, NULL); finalize_vcpu(vm, 0, c); diff --git a/tools/testing/selftests/kvm/aarch64/psci_cpu_on_test.c b/tools= /testing/selftests/kvm/aarch64/psci_cpu_on_test.c index 4c5f6814030f..15f4b3544ee5 100644 --- a/tools/testing/selftests/kvm/aarch64/psci_cpu_on_test.c +++ b/tools/testing/selftests/kvm/aarch64/psci_cpu_on_test.c @@ -76,7 +76,7 @@ int main(void) struct kvm_vm *vm; struct ucall uc; =20 - vm =3D vm_create(VM_MODE_DEFAULT, DEFAULT_GUEST_PHY_PAGES, O_RDWR); + vm =3D vm_create(VM_MODE_DEFAULT, DEFAULT_GUEST_PHY_PAGES); kvm_vm_elf_load(vm, program_invocation_name); ucall_init(vm, NULL); =20 diff --git a/tools/testing/selftests/kvm/aarch64/vcpu_width_config.c b/tool= s/testing/selftests/kvm/aarch64/vcpu_width_config.c index 6e9402679229..d48129349213 100644 --- a/tools/testing/selftests/kvm/aarch64/vcpu_width_config.c +++ b/tools/testing/selftests/kvm/aarch64/vcpu_width_config.c @@ -24,7 +24,7 @@ static int add_init_2vcpus(struct kvm_vcpu_init *init1, struct kvm_vm *vm; int ret; =20 - vm =3D vm_create(VM_MODE_DEFAULT, DEFAULT_GUEST_PHY_PAGES, O_RDWR); + vm =3D vm_create(VM_MODE_DEFAULT, DEFAULT_GUEST_PHY_PAGES); =20 vm_vcpu_add(vm, 0); ret =3D _vcpu_ioctl(vm, 0, KVM_ARM_VCPU_INIT, init1); @@ -49,7 +49,7 @@ static int add_2vcpus_init_2vcpus(struct kvm_vcpu_init *i= nit1, struct kvm_vm *vm; int ret; =20 - vm =3D vm_create(VM_MODE_DEFAULT, DEFAULT_GUEST_PHY_PAGES, O_RDWR); + vm =3D vm_create(VM_MODE_DEFAULT, DEFAULT_GUEST_PHY_PAGES); =20 vm_vcpu_add(vm, 0); vm_vcpu_add(vm, 1); @@ -86,7 +86,7 @@ int main(void) } =20 /* Get the preferred target type and copy that to init2 for later use */ - vm =3D vm_create(VM_MODE_DEFAULT, DEFAULT_GUEST_PHY_PAGES, O_RDWR); + vm =3D vm_create(VM_MODE_DEFAULT, DEFAULT_GUEST_PHY_PAGES); vm_ioctl(vm, KVM_ARM_PREFERRED_TARGET, &init1); kvm_vm_free(vm); init2 =3D init1; diff --git a/tools/testing/selftests/kvm/dirty_log_test.c b/tools/testing/s= elftests/kvm/dirty_log_test.c index 3fcd89e195c7..11bf606e3165 100644 --- a/tools/testing/selftests/kvm/dirty_log_test.c +++ b/tools/testing/selftests/kvm/dirty_log_test.c @@ -679,7 +679,7 @@ static struct kvm_vm *create_vm(enum vm_guest_mode mode= , uint32_t vcpuid, =20 pr_info("Testing guest mode: %s\n", vm_guest_mode_string(mode)); =20 - vm =3D vm_create(mode, DEFAULT_GUEST_PHY_PAGES + extra_pg_pages, O_RDWR); + vm =3D vm_create(mode, DEFAULT_GUEST_PHY_PAGES + extra_pg_pages); kvm_vm_elf_load(vm, program_invocation_name); #ifdef __x86_64__ vm_create_irqchip(vm); diff --git a/tools/testing/selftests/kvm/hardware_disable_test.c b/tools/te= sting/selftests/kvm/hardware_disable_test.c index b21c69a56daa..1c9e2295c75b 100644 --- a/tools/testing/selftests/kvm/hardware_disable_test.c +++ b/tools/testing/selftests/kvm/hardware_disable_test.c @@ -104,7 +104,7 @@ static void run_test(uint32_t run) for (i =3D 0; i < VCPU_NUM; i++) CPU_SET(i, &cpu_set); =20 - vm =3D vm_create(VM_MODE_DEFAULT, DEFAULT_GUEST_PHY_PAGES, O_RDWR); + vm =3D vm_create(VM_MODE_DEFAULT, DEFAULT_GUEST_PHY_PAGES); kvm_vm_elf_load(vm, program_invocation_name); vm_create_irqchip(vm); =20 diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index 47b77ebda6a3..89b633b40247 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -110,9 +110,9 @@ int vcpu_enable_cap(struct kvm_vm *vm, uint32_t vcpu_id, void vm_enable_dirty_ring(struct kvm_vm *vm, uint32_t ring_size); const char *vm_guest_mode_string(uint32_t i); =20 -struct kvm_vm *vm_create(enum vm_guest_mode mode, uint64_t phy_pages, int = perm); +struct kvm_vm *vm_create(enum vm_guest_mode mode, uint64_t phy_pages); void kvm_vm_free(struct kvm_vm *vmp); -void kvm_vm_restart(struct kvm_vm *vmp, int perm); +void kvm_vm_restart(struct kvm_vm *vmp); void kvm_vm_release(struct kvm_vm *vmp); void kvm_vm_get_dirty_log(struct kvm_vm *vm, int slot, void *log); void kvm_vm_clear_dirty_log(struct kvm_vm *vm, int slot, void *log, diff --git a/tools/testing/selftests/kvm/kvm_binary_stats_test.c b/tools/te= sting/selftests/kvm/kvm_binary_stats_test.c index 17f65d514915..6217f4630e6c 100644 --- a/tools/testing/selftests/kvm/kvm_binary_stats_test.c +++ b/tools/testing/selftests/kvm/kvm_binary_stats_test.c @@ -230,7 +230,7 @@ int main(int argc, char *argv[]) TEST_ASSERT(vms, "Allocate memory for storing VM pointers"); for (i =3D 0; i < max_vm; ++i) { vms[i] =3D vm_create(VM_MODE_DEFAULT, - DEFAULT_GUEST_PHY_PAGES, O_RDWR); + DEFAULT_GUEST_PHY_PAGES); for (j =3D 0; j < max_vcpu; ++j) vm_vcpu_add(vms[i], j); } diff --git a/tools/testing/selftests/kvm/kvm_create_max_vcpus.c b/tools/tes= ting/selftests/kvm/kvm_create_max_vcpus.c index aed9dc3ca1e9..bb69b75eac23 100644 --- a/tools/testing/selftests/kvm/kvm_create_max_vcpus.c +++ b/tools/testing/selftests/kvm/kvm_create_max_vcpus.c @@ -28,7 +28,7 @@ void test_vcpu_creation(int first_vcpu_id, int num_vcpus) pr_info("Testing creating %d vCPUs, with IDs %d...%d.\n", num_vcpus, first_vcpu_id, first_vcpu_id + num_vcpus - 1); =20 - vm =3D vm_create(VM_MODE_DEFAULT, DEFAULT_GUEST_PHY_PAGES, O_RDWR); + vm =3D vm_create(VM_MODE_DEFAULT, DEFAULT_GUEST_PHY_PAGES); =20 for (i =3D first_vcpu_id; i < first_vcpu_id + num_vcpus; i++) /* This asserts that the vCPU was created. */ diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index 1665a220abcb..da7e3369f4b8 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -173,9 +173,9 @@ void vm_enable_dirty_ring(struct kvm_vm *vm, uint32_t r= ing_size) vm->dirty_ring_size =3D ring_size; } =20 -static void vm_open(struct kvm_vm *vm, int perm) +static void vm_open(struct kvm_vm *vm) { - vm->kvm_fd =3D _open_kvm_dev_path_or_exit(perm); + vm->kvm_fd =3D _open_kvm_dev_path_or_exit(O_RDWR); =20 if (!kvm_check_cap(KVM_CAP_IMMEDIATE_EXIT)) { print_skip("immediate_exit not available"); @@ -240,7 +240,6 @@ _Static_assert(sizeof(vm_guest_mode_params)/sizeof(stru= ct vm_guest_mode_params) * Input Args: * mode - VM Mode (e.g. VM_MODE_P52V48_4K) * phy_pages - Physical memory pages - * perm - permission * * Output Args: None * @@ -253,12 +252,12 @@ _Static_assert(sizeof(vm_guest_mode_params)/sizeof(st= ruct vm_guest_mode_params) * descriptor to control the created VM is created with the permissions * given by perm (e.g. O_RDWR). */ -struct kvm_vm *vm_create(enum vm_guest_mode mode, uint64_t phy_pages, int = perm) +struct kvm_vm *vm_create(enum vm_guest_mode mode, uint64_t phy_pages) { struct kvm_vm *vm; =20 - pr_debug("%s: mode=3D'%s' pages=3D'%ld' perm=3D'%d'\n", __func__, - vm_guest_mode_string(mode), phy_pages, perm); + pr_debug("%s: mode=3D'%s' pages=3D'%ld'\n", __func__, + vm_guest_mode_string(mode), phy_pages); =20 vm =3D calloc(1, sizeof(*vm)); TEST_ASSERT(vm !=3D NULL, "Insufficient Memory"); @@ -340,7 +339,7 @@ struct kvm_vm *vm_create(enum vm_guest_mode mode, uint6= 4_t phy_pages, int perm) vm->type =3D KVM_VM_TYPE_ARM_IPA_SIZE(vm->pa_bits); #endif =20 - vm_open(vm, perm); + vm_open(vm); =20 /* Limit to VA-bit canonical virtual addresses. */ vm->vpages_valid =3D sparsebit_alloc(); @@ -366,7 +365,7 @@ struct kvm_vm *vm_create_without_vcpus(enum vm_guest_mo= de mode, uint64_t pages) { struct kvm_vm *vm; =20 - vm =3D vm_create(mode, pages, O_RDWR); + vm =3D vm_create(mode, pages); =20 kvm_vm_elf_load(vm, program_invocation_name); =20 @@ -458,7 +457,6 @@ struct kvm_vm *vm_create_default(uint32_t vcpuid, uint6= 4_t extra_mem_pages, * * Input Args: * vm - VM that has been released before - * perm - permission * * Output Args: None * @@ -466,12 +464,12 @@ struct kvm_vm *vm_create_default(uint32_t vcpuid, uin= t64_t extra_mem_pages, * global state, such as the irqchip and the memory regions that are mapped * into the guest. */ -void kvm_vm_restart(struct kvm_vm *vmp, int perm) +void kvm_vm_restart(struct kvm_vm *vmp) { int ctr; struct userspace_mem_region *region; =20 - vm_open(vmp, perm); + vm_open(vmp); if (vmp->has_irqchip) vm_create_irqchip(vmp); =20 diff --git a/tools/testing/selftests/kvm/set_memory_region_test.c b/tools/t= esting/selftests/kvm/set_memory_region_test.c index 73bc297dabe6..d97cfd6866c3 100644 --- a/tools/testing/selftests/kvm/set_memory_region_test.c +++ b/tools/testing/selftests/kvm/set_memory_region_test.c @@ -314,7 +314,7 @@ static void test_zero_memory_regions(void) =20 pr_info("Testing KVM_RUN with zero added memory regions\n"); =20 - vm =3D vm_create(VM_MODE_DEFAULT, 0, O_RDWR); + vm =3D vm_create(VM_MODE_DEFAULT, 0); vm_vcpu_add(vm, VCPU_ID); =20 TEST_ASSERT(!ioctl(vm_get_fd(vm), KVM_SET_NR_MMU_PAGES, 64), @@ -354,7 +354,7 @@ static void test_add_max_memory_regions(void) "KVM_CAP_NR_MEMSLOTS should be greater than 0"); pr_info("Allowed number of memory slots: %i\n", max_mem_slots); =20 - vm =3D vm_create(VM_MODE_DEFAULT, 0, O_RDWR); + vm =3D vm_create(VM_MODE_DEFAULT, 0); =20 /* Check it can be added memory slots up to the maximum allowed */ pr_info("Adding slots 0..%i, each memory region with %dK size\n", diff --git a/tools/testing/selftests/kvm/x86_64/amx_test.c b/tools/testing/= selftests/kvm/x86_64/amx_test.c index 76f65c22796f..2f01247da0b5 100644 --- a/tools/testing/selftests/kvm/x86_64/amx_test.c +++ b/tools/testing/selftests/kvm/x86_64/amx_test.c @@ -431,7 +431,7 @@ int main(int argc, char *argv[]) kvm_vm_release(vm); =20 /* Restore state in a new VM. */ - kvm_vm_restart(vm, O_RDWR); + kvm_vm_restart(vm); vm_vcpu_add(vm, VCPU_ID); vcpu_set_cpuid(vm, VCPU_ID, kvm_get_supported_cpuid()); vcpu_load_state(vm, VCPU_ID, state); diff --git a/tools/testing/selftests/kvm/x86_64/evmcs_test.c b/tools/testin= g/selftests/kvm/x86_64/evmcs_test.c index d12e043aa2ee..f97049ab045f 100644 --- a/tools/testing/selftests/kvm/x86_64/evmcs_test.c +++ b/tools/testing/selftests/kvm/x86_64/evmcs_test.c @@ -184,7 +184,7 @@ static void save_restore_vm(struct kvm_vm *vm) kvm_vm_release(vm); =20 /* Restore state in a new VM. */ - kvm_vm_restart(vm, O_RDWR); + kvm_vm_restart(vm); vm_vcpu_add(vm, VCPU_ID); vcpu_set_hv_cpuid(vm, VCPU_ID); vcpu_enable_evmcs(vm, VCPU_ID); diff --git a/tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c b/tools/t= esting/selftests/kvm/x86_64/set_boot_cpu_id.c index ae76436af0cc..2fe893ccedd0 100644 --- a/tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c +++ b/tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c @@ -88,7 +88,7 @@ static struct kvm_vm *create_vm(void) uint64_t pages =3D DEFAULT_GUEST_PHY_PAGES + vcpu_pages + extra_pg_pages; =20 pages =3D vm_adjust_num_guest_pages(VM_MODE_DEFAULT, pages); - vm =3D vm_create(VM_MODE_DEFAULT, pages, O_RDWR); + vm =3D vm_create(VM_MODE_DEFAULT, pages); =20 kvm_vm_elf_load(vm, program_invocation_name); vm_create_irqchip(vm); diff --git a/tools/testing/selftests/kvm/x86_64/set_sregs_test.c b/tools/te= sting/selftests/kvm/x86_64/set_sregs_test.c index 318be0bf77ab..44711ab735c3 100644 --- a/tools/testing/selftests/kvm/x86_64/set_sregs_test.c +++ b/tools/testing/selftests/kvm/x86_64/set_sregs_test.c @@ -95,7 +95,7 @@ int main(int argc, char *argv[]) * use it to verify all supported CR4 bits can be set prior to defining * the vCPU model, i.e. without doing KVM_SET_CPUID2. */ - vm =3D vm_create(VM_MODE_DEFAULT, DEFAULT_GUEST_PHY_PAGES, O_RDWR); + vm =3D vm_create(VM_MODE_DEFAULT, DEFAULT_GUEST_PHY_PAGES); vm_vcpu_add(vm, VCPU_ID); =20 vcpu_sregs_get(vm, VCPU_ID, &sregs); diff --git a/tools/testing/selftests/kvm/x86_64/sev_migrate_tests.c b/tools= /testing/selftests/kvm/x86_64/sev_migrate_tests.c index d1dc1acf997c..b0c052443c44 100644 --- a/tools/testing/selftests/kvm/x86_64/sev_migrate_tests.c +++ b/tools/testing/selftests/kvm/x86_64/sev_migrate_tests.c @@ -54,7 +54,7 @@ static struct kvm_vm *sev_vm_create(bool es) struct kvm_sev_launch_start start =3D { 0 }; int i; =20 - vm =3D vm_create(VM_MODE_DEFAULT, 0, O_RDWR); + vm =3D vm_create(VM_MODE_DEFAULT, 0); sev_ioctl(vm->fd, es ? KVM_SEV_ES_INIT : KVM_SEV_INIT, NULL); for (i =3D 0; i < NR_MIGRATE_TEST_VCPUS; ++i) vm_vcpu_add(vm, i); @@ -71,7 +71,7 @@ static struct kvm_vm *aux_vm_create(bool with_vcpus) struct kvm_vm *vm; int i; =20 - vm =3D vm_create(VM_MODE_DEFAULT, 0, O_RDWR); + vm =3D vm_create(VM_MODE_DEFAULT, 0); if (!with_vcpus) return vm; =20 @@ -174,7 +174,7 @@ static void test_sev_migrate_parameters(void) *sev_es_vm_no_vmsa; int ret; =20 - vm_no_vcpu =3D vm_create(VM_MODE_DEFAULT, 0, O_RDWR); + vm_no_vcpu =3D vm_create(VM_MODE_DEFAULT, 0); vm_no_sev =3D aux_vm_create(true); ret =3D __sev_migrate_from(vm_no_vcpu->fd, vm_no_sev->fd); TEST_ASSERT(ret =3D=3D -1 && errno =3D=3D EINVAL, @@ -186,7 +186,7 @@ static void test_sev_migrate_parameters(void) =20 sev_vm =3D sev_vm_create(/* es=3D */ false); sev_es_vm =3D sev_vm_create(/* es=3D */ true); - sev_es_vm_no_vmsa =3D vm_create(VM_MODE_DEFAULT, 0, O_RDWR); + sev_es_vm_no_vmsa =3D vm_create(VM_MODE_DEFAULT, 0); sev_ioctl(sev_es_vm_no_vmsa->fd, KVM_SEV_ES_INIT, NULL); vm_vcpu_add(sev_es_vm_no_vmsa, 1); =20 diff --git a/tools/testing/selftests/kvm/x86_64/smm_test.c b/tools/testing/= selftests/kvm/x86_64/smm_test.c index b4e0c860769e..dd2c1522ab90 100644 --- a/tools/testing/selftests/kvm/x86_64/smm_test.c +++ b/tools/testing/selftests/kvm/x86_64/smm_test.c @@ -204,7 +204,7 @@ int main(int argc, char *argv[]) =20 state =3D vcpu_save_state(vm, VCPU_ID); kvm_vm_release(vm); - kvm_vm_restart(vm, O_RDWR); + kvm_vm_restart(vm); vm_vcpu_add(vm, VCPU_ID); vcpu_set_cpuid(vm, VCPU_ID, kvm_get_supported_cpuid()); vcpu_load_state(vm, VCPU_ID, state); diff --git a/tools/testing/selftests/kvm/x86_64/state_test.c b/tools/testin= g/selftests/kvm/x86_64/state_test.c index 2e0a92da8ff5..41f7faaef2ac 100644 --- a/tools/testing/selftests/kvm/x86_64/state_test.c +++ b/tools/testing/selftests/kvm/x86_64/state_test.c @@ -213,7 +213,7 @@ int main(int argc, char *argv[]) kvm_vm_release(vm); =20 /* Restore state in a new VM. */ - kvm_vm_restart(vm, O_RDWR); + kvm_vm_restart(vm); vm_vcpu_add(vm, VCPU_ID); vcpu_set_cpuid(vm, VCPU_ID, kvm_get_supported_cpuid()); vcpu_load_state(vm, VCPU_ID, state); diff --git a/tools/testing/selftests/kvm/x86_64/vmx_preemption_timer_test.c= b/tools/testing/selftests/kvm/x86_64/vmx_preemption_timer_test.c index ff92e25b6f1e..f5b4ae914131 100644 --- a/tools/testing/selftests/kvm/x86_64/vmx_preemption_timer_test.c +++ b/tools/testing/selftests/kvm/x86_64/vmx_preemption_timer_test.c @@ -239,7 +239,7 @@ int main(int argc, char *argv[]) kvm_vm_release(vm); =20 /* Restore state in a new VM. */ - kvm_vm_restart(vm, O_RDWR); + kvm_vm_restart(vm); vm_vcpu_add(vm, VCPU_ID); vcpu_set_cpuid(vm, VCPU_ID, kvm_get_supported_cpuid()); vcpu_load_state(vm, VCPU_ID, state); --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 BC9D8C433FE for ; Wed, 4 May 2022 22:52:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379208AbiEDWxn (ORCPT ); Wed, 4 May 2022 18:53:43 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40758 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379137AbiEDWxU (ORCPT ); Wed, 4 May 2022 18:53:20 -0400 Received: from mail-yw1-x114a.google.com (mail-yw1-x114a.google.com [IPv6:2607:f8b0:4864:20::114a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 49A9553A4C for ; Wed, 4 May 2022 15:49:41 -0700 (PDT) Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-2f8d487f575so24339517b3.5 for ; Wed, 04 May 2022 15:49:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=RAgWBr4KELraApaNWvn4jUvaYdTf/S0hME6OQEYrHLk=; b=qHspm6XaD9qlG2ZRU6p5kpPXs/iQVPnnv7mWDbeaMQJs0bkkva72bFaT3jJQ+U3Xz+ 4to10c2zHY7HBki1klyJRNNpkW6FoM5nbTvhSeUkJqvwj8Rm33ty77nDgPnNYySqyWYU SPkAM2XPyl6gDMcyxSO1+I0FER/uA5ME1DfvY8fQs9i1GGHG+XvxC+K0xQibu7PQRd9p bnwBAYgb0cQfb3n3YfCHcy+7fmUImL6GtVFPTDRMSoZ6Ki5lrnWFmfg/868bOeVOaXxJ i3d+cZ3mdPh6M6m5JF1fl7G/yhH/g4ZQKOXF717TffL0jtugTzz3QOs5TwuscVk8hxR6 5mWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=RAgWBr4KELraApaNWvn4jUvaYdTf/S0hME6OQEYrHLk=; b=SX0l3+vW/1U85puXO3IFVmFFh+qAJSZVXvmZGtydt2TbDZPxcG+SFwq68I+vpION8j XU4aVZf3jnCa9KLjPs8Vw6ql2zkkJ/oJ57HntrR+HacT6LpVuevQhn5Xb5nSrCpFMZ3+ sfE7t2IEVSFkVhD0j/ROzWAiNMqsmiOzqbJO8CRb9ClvJPy49ep7mrIRah8EMDtKmwL5 GZ/DCITiyUlDZ2tup47/vW8v13il+pAzmEPB3l+GiNKEYs4AlxWz0opN0Iw9Rzw6KQce zron3PGqbyx3/0OMxihu8zmk2SKoZ2vsQmGTwHrXWsnY6I+XdMq3CBLoOhmj/tu/DeLa 7saQ== X-Gm-Message-State: AOAM533/jxYqT/vJzZlYQQUfCzw1r5KDINZ+jxtHYA0dVqF6SX5cbZBs /koUUjWat9T+Kv6QZ+Atb4gYY0OHw9Q= X-Google-Smtp-Source: ABdhPJwMpIqrVfPpPp+3jMftMCU4e4ysJLPYa3S68GpZLxQJ6swlYcUlyLkhwSaoAyuYj/IxXoXxPs2iYtA= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a81:3a10:0:b0:2f9:9e0e:72ec with SMTP id h16-20020a813a10000000b002f99e0e72ecmr12795524ywa.4.1651704580489; Wed, 04 May 2022 15:49:40 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:11 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-6-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 005/128] KVM: selftests: Add another underscore to inner ioctl() helpers From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add a second underscore to inner ioctl() helpers to better align with commonly accepted kernel coding style, and to allow using a single underscore variant in the future for macro shenanigans. Signed-off-by: Sean Christopherson --- .../selftests/kvm/aarch64/get-reg-list.c | 6 ++--- .../selftests/kvm/aarch64/vcpu_width_config.c | 8 +++---- .../testing/selftests/kvm/aarch64/vgic_init.c | 2 +- .../selftests/kvm/include/kvm_util_base.h | 8 +++---- tools/testing/selftests/kvm/lib/kvm_util.c | 24 +++++++++---------- .../selftests/kvm/lib/riscv/processor.c | 2 +- tools/testing/selftests/kvm/s390x/memop.c | 4 ++-- tools/testing/selftests/kvm/s390x/resets.c | 4 ++-- tools/testing/selftests/kvm/steal_time.c | 6 ++--- .../selftests/kvm/x86_64/hyperv_cpuid.c | 4 ++-- .../selftests/kvm/x86_64/set_boot_cpu_id.c | 6 ++--- .../kvm/x86_64/vmx_nested_tsc_scaling_test.c | 2 +- 12 files changed, 38 insertions(+), 38 deletions(-) diff --git a/tools/testing/selftests/kvm/aarch64/get-reg-list.c b/tools/tes= ting/selftests/kvm/aarch64/get-reg-list.c index 397ff6c79599..b3ecaea67bfc 100644 --- a/tools/testing/selftests/kvm/aarch64/get-reg-list.c +++ b/tools/testing/selftests/kvm/aarch64/get-reg-list.c @@ -452,7 +452,7 @@ static void run_test(struct vcpu_config *c) bool reject_reg =3D false; int ret; =20 - ret =3D _vcpu_ioctl(vm, 0, KVM_GET_ONE_REG, ®); + ret =3D __vcpu_ioctl(vm, 0, KVM_GET_ONE_REG, ®); if (ret) { printf("%s: Failed to get ", config_name(c)); print_reg(c, reg.id); @@ -464,7 +464,7 @@ static void run_test(struct vcpu_config *c) for_each_sublist(c, s) { if (s->rejects_set && find_reg(s->rejects_set, s->rejects_set_n, reg.id= )) { reject_reg =3D true; - ret =3D _vcpu_ioctl(vm, 0, KVM_SET_ONE_REG, ®); + ret =3D __vcpu_ioctl(vm, 0, KVM_SET_ONE_REG, ®); if (ret !=3D -1 || errno !=3D EPERM) { printf("%s: Failed to reject (ret=3D%d, errno=3D%d) ", config_name(c)= , ret, errno); print_reg(c, reg.id); @@ -476,7 +476,7 @@ static void run_test(struct vcpu_config *c) } =20 if (!reject_reg) { - ret =3D _vcpu_ioctl(vm, 0, KVM_SET_ONE_REG, ®); + ret =3D __vcpu_ioctl(vm, 0, KVM_SET_ONE_REG, ®); if (ret) { printf("%s: Failed to set ", config_name(c)); print_reg(c, reg.id); diff --git a/tools/testing/selftests/kvm/aarch64/vcpu_width_config.c b/tool= s/testing/selftests/kvm/aarch64/vcpu_width_config.c index d48129349213..271fa90e53fd 100644 --- a/tools/testing/selftests/kvm/aarch64/vcpu_width_config.c +++ b/tools/testing/selftests/kvm/aarch64/vcpu_width_config.c @@ -27,12 +27,12 @@ static int add_init_2vcpus(struct kvm_vcpu_init *init1, vm =3D vm_create(VM_MODE_DEFAULT, DEFAULT_GUEST_PHY_PAGES); =20 vm_vcpu_add(vm, 0); - ret =3D _vcpu_ioctl(vm, 0, KVM_ARM_VCPU_INIT, init1); + ret =3D __vcpu_ioctl(vm, 0, KVM_ARM_VCPU_INIT, init1); if (ret) goto free_exit; =20 vm_vcpu_add(vm, 1); - ret =3D _vcpu_ioctl(vm, 1, KVM_ARM_VCPU_INIT, init2); + ret =3D __vcpu_ioctl(vm, 1, KVM_ARM_VCPU_INIT, init2); =20 free_exit: kvm_vm_free(vm); @@ -54,11 +54,11 @@ static int add_2vcpus_init_2vcpus(struct kvm_vcpu_init = *init1, vm_vcpu_add(vm, 0); vm_vcpu_add(vm, 1); =20 - ret =3D _vcpu_ioctl(vm, 0, KVM_ARM_VCPU_INIT, init1); + ret =3D __vcpu_ioctl(vm, 0, KVM_ARM_VCPU_INIT, init1); if (ret) goto free_exit; =20 - ret =3D _vcpu_ioctl(vm, 1, KVM_ARM_VCPU_INIT, init2); + ret =3D __vcpu_ioctl(vm, 1, KVM_ARM_VCPU_INIT, init2); =20 free_exit: kvm_vm_free(vm); diff --git a/tools/testing/selftests/kvm/aarch64/vgic_init.c b/tools/testin= g/selftests/kvm/aarch64/vgic_init.c index 0f046e3e953d..373c8005c2e7 100644 --- a/tools/testing/selftests/kvm/aarch64/vgic_init.c +++ b/tools/testing/selftests/kvm/aarch64/vgic_init.c @@ -55,7 +55,7 @@ static void guest_code(void) static int run_vcpu(struct kvm_vm *vm, uint32_t vcpuid) { ucall_init(vm, NULL); - int ret =3D _vcpu_ioctl(vm, vcpuid, KVM_RUN, NULL); + int ret =3D __vcpu_ioctl(vm, vcpuid, KVM_RUN, NULL); if (ret) return -errno; return 0; diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index 89b633b40247..662579a6358b 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -159,12 +159,12 @@ void vm_userspace_mem_region_add(struct kvm_vm *vm, =20 void vcpu_ioctl(struct kvm_vm *vm, uint32_t vcpuid, unsigned long ioctl, void *arg); -int _vcpu_ioctl(struct kvm_vm *vm, uint32_t vcpuid, unsigned long ioctl, - void *arg); +int __vcpu_ioctl(struct kvm_vm *vm, uint32_t vcpuid, unsigned long ioctl, + void *arg); void vm_ioctl(struct kvm_vm *vm, unsigned long ioctl, void *arg); -int _vm_ioctl(struct kvm_vm *vm, unsigned long cmd, void *arg); +int __vm_ioctl(struct kvm_vm *vm, unsigned long cmd, void *arg); void kvm_ioctl(struct kvm_vm *vm, unsigned long ioctl, void *arg); -int _kvm_ioctl(struct kvm_vm *vm, unsigned long ioctl, void *arg); +int __kvm_ioctl(struct kvm_vm *vm, unsigned long ioctl, void *arg); void vm_mem_region_set_flags(struct kvm_vm *vm, uint32_t slot, uint32_t fl= ags); 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); diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index da7e3369f4b8..03c1f885a98b 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -1719,7 +1719,7 @@ struct kvm_reg_list *vcpu_get_reg_list(struct kvm_vm = *vm, uint32_t vcpuid) struct kvm_reg_list reg_list_n =3D { .n =3D 0 }, *reg_list; int ret; =20 - ret =3D _vcpu_ioctl(vm, vcpuid, KVM_GET_REG_LIST, ®_list_n); + ret =3D __vcpu_ioctl(vm, vcpuid, KVM_GET_REG_LIST, ®_list_n); TEST_ASSERT(ret =3D=3D -1 && errno =3D=3D E2BIG, "KVM_GET_REG_LIST n=3D0"= ); reg_list =3D calloc(1, sizeof(*reg_list) + reg_list_n.n * sizeof(__u64)); reg_list->n =3D reg_list_n.n; @@ -1905,7 +1905,7 @@ void vcpu_fpu_get(struct kvm_vm *vm, uint32_t vcpuid,= struct kvm_fpu *fpu) { int ret; =20 - ret =3D _vcpu_ioctl(vm, vcpuid, KVM_GET_FPU, fpu); + ret =3D __vcpu_ioctl(vm, vcpuid, KVM_GET_FPU, fpu); TEST_ASSERT(ret =3D=3D 0, "KVM_GET_FPU failed, rc: %i errno: %i (%s)", ret, errno, strerror(errno)); } @@ -1914,7 +1914,7 @@ void vcpu_fpu_set(struct kvm_vm *vm, uint32_t vcpuid,= struct kvm_fpu *fpu) { int ret; =20 - ret =3D _vcpu_ioctl(vm, vcpuid, KVM_SET_FPU, fpu); + ret =3D __vcpu_ioctl(vm, vcpuid, KVM_SET_FPU, fpu); TEST_ASSERT(ret =3D=3D 0, "KVM_SET_FPU failed, rc: %i errno: %i (%s)", ret, errno, strerror(errno)); } @@ -1923,7 +1923,7 @@ void vcpu_get_reg(struct kvm_vm *vm, uint32_t vcpuid,= struct kvm_one_reg *reg) { int ret; =20 - ret =3D _vcpu_ioctl(vm, vcpuid, KVM_GET_ONE_REG, reg); + ret =3D __vcpu_ioctl(vm, vcpuid, KVM_GET_ONE_REG, reg); TEST_ASSERT(ret =3D=3D 0, "KVM_GET_ONE_REG failed, rc: %i errno: %i (%s)", ret, errno, strerror(errno)); } @@ -1932,7 +1932,7 @@ void vcpu_set_reg(struct kvm_vm *vm, uint32_t vcpuid,= struct kvm_one_reg *reg) { int ret; =20 - ret =3D _vcpu_ioctl(vm, vcpuid, KVM_SET_ONE_REG, reg); + ret =3D __vcpu_ioctl(vm, vcpuid, KVM_SET_ONE_REG, reg); TEST_ASSERT(ret =3D=3D 0, "KVM_SET_ONE_REG failed, rc: %i errno: %i (%s)", ret, errno, strerror(errno)); } @@ -1955,13 +1955,13 @@ void vcpu_ioctl(struct kvm_vm *vm, uint32_t vcpuid, { int ret; =20 - ret =3D _vcpu_ioctl(vm, vcpuid, cmd, arg); + ret =3D __vcpu_ioctl(vm, vcpuid, cmd, arg); TEST_ASSERT(ret =3D=3D 0, "vcpu ioctl %lu failed, rc: %i errno: %i (%s)", cmd, ret, errno, strerror(errno)); } =20 -int _vcpu_ioctl(struct kvm_vm *vm, uint32_t vcpuid, - unsigned long cmd, void *arg) +int __vcpu_ioctl(struct kvm_vm *vm, uint32_t vcpuid, + unsigned long cmd, void *arg) { struct vcpu *vcpu =3D vcpu_find(vm, vcpuid); int ret; @@ -2025,12 +2025,12 @@ void vm_ioctl(struct kvm_vm *vm, unsigned long cmd,= void *arg) { int ret; =20 - ret =3D _vm_ioctl(vm, cmd, arg); + ret =3D __vm_ioctl(vm, cmd, arg); TEST_ASSERT(ret =3D=3D 0, "vm ioctl %lu failed, rc: %i errno: %i (%s)", cmd, ret, errno, strerror(errno)); } =20 -int _vm_ioctl(struct kvm_vm *vm, unsigned long cmd, void *arg) +int __vm_ioctl(struct kvm_vm *vm, unsigned long cmd, void *arg) { return ioctl(vm->fd, cmd, arg); } @@ -2056,7 +2056,7 @@ void kvm_ioctl(struct kvm_vm *vm, unsigned long cmd, = void *arg) cmd, ret, errno, strerror(errno)); } =20 -int _kvm_ioctl(struct kvm_vm *vm, unsigned long cmd, void *arg) +int __kvm_ioctl(struct kvm_vm *vm, unsigned long cmd, void *arg) { return ioctl(vm->kvm_fd, cmd, arg); } @@ -2185,7 +2185,7 @@ int _kvm_irq_line(struct kvm_vm *vm, uint32_t irq, in= t level) .level =3D level, }; =20 - return _vm_ioctl(vm, KVM_IRQ_LINE, &irq_level); + return __vm_ioctl(vm, KVM_IRQ_LINE, &irq_level); } =20 void kvm_irq_line(struct kvm_vm *vm, uint32_t irq, int level) diff --git a/tools/testing/selftests/kvm/lib/riscv/processor.c b/tools/test= ing/selftests/kvm/lib/riscv/processor.c index 3961487a4870..10ae8036341d 100644 --- a/tools/testing/selftests/kvm/lib/riscv/processor.c +++ b/tools/testing/selftests/kvm/lib/riscv/processor.c @@ -294,7 +294,7 @@ void vm_vcpu_add_default(struct kvm_vm *vm, uint32_t vc= puid, void *guest_code) * are powered-on using KVM_SET_MP_STATE ioctl(). */ mps.mp_state =3D KVM_MP_STATE_RUNNABLE; - r =3D _vcpu_ioctl(vm, vcpuid, KVM_SET_MP_STATE, &mps); + r =3D __vcpu_ioctl(vm, vcpuid, KVM_SET_MP_STATE, &mps); TEST_ASSERT(!r, "IOCTL KVM_SET_MP_STATE failed (error %d)", r); =20 /* Setup global pointer of guest to be same as the host */ diff --git a/tools/testing/selftests/kvm/s390x/memop.c b/tools/testing/self= tests/kvm/s390x/memop.c index b04c2c1b3c30..5eb20a358cfe 100644 --- a/tools/testing/selftests/kvm/s390x/memop.c +++ b/tools/testing/selftests/kvm/s390x/memop.c @@ -156,9 +156,9 @@ static void memop_ioctl(struct test_vcpu vcpu, struct k= vm_s390_mem_op *ksmo) static int err_memop_ioctl(struct test_vcpu vcpu, struct kvm_s390_mem_op *= ksmo) { if (vcpu.id =3D=3D VM_VCPU_ID) - return _vm_ioctl(vcpu.vm, KVM_S390_MEM_OP, ksmo); + return __vm_ioctl(vcpu.vm, KVM_S390_MEM_OP, ksmo); else - return _vcpu_ioctl(vcpu.vm, vcpu.id, KVM_S390_MEM_OP, ksmo); + return __vcpu_ioctl(vcpu.vm, vcpu.id, KVM_S390_MEM_OP, ksmo); } =20 #define MEMOP(err, vcpu_p, mop_target_p, access_mode_p, buf_p, size_p, ...= ) \ diff --git a/tools/testing/selftests/kvm/s390x/resets.c b/tools/testing/sel= ftests/kvm/s390x/resets.c index b143db6d8693..cc4b7c86d69f 100644 --- a/tools/testing/selftests/kvm/s390x/resets.c +++ b/tools/testing/selftests/kvm/s390x/resets.c @@ -76,7 +76,7 @@ static void assert_noirq(void) =20 irq_state.len =3D sizeof(buf); irq_state.buf =3D (unsigned long)buf; - irqs =3D _vcpu_ioctl(vm, VCPU_ID, KVM_S390_GET_IRQ_STATE, &irq_state); + irqs =3D __vcpu_ioctl(vm, VCPU_ID, KVM_S390_GET_IRQ_STATE, &irq_state); /* * irqs contains the number of retrieved interrupts. Any interrupt * (notably, the emergency call interrupt we have injected) should @@ -196,7 +196,7 @@ static void inject_irq(int cpu_id) irq_state.buf =3D (unsigned long)buf; irq->type =3D KVM_S390_INT_EMERGENCY; irq->u.emerg.code =3D cpu_id; - irqs =3D _vcpu_ioctl(vm, cpu_id, KVM_S390_SET_IRQ_STATE, &irq_state); + irqs =3D __vcpu_ioctl(vm, cpu_id, KVM_S390_SET_IRQ_STATE, &irq_state); TEST_ASSERT(irqs >=3D 0, "Error injecting EMERGENCY IRQ errno %d\n", errn= o); } =20 diff --git a/tools/testing/selftests/kvm/steal_time.c b/tools/testing/selft= ests/kvm/steal_time.c index 62f2eb9ee3d5..1d6a91a53eae 100644 --- a/tools/testing/selftests/kvm/steal_time.c +++ b/tools/testing/selftests/kvm/steal_time.c @@ -173,7 +173,7 @@ static void steal_time_init(struct kvm_vm *vm) }; int i, ret; =20 - ret =3D _vcpu_ioctl(vm, 0, KVM_HAS_DEVICE_ATTR, &dev); + ret =3D __vcpu_ioctl(vm, 0, KVM_HAS_DEVICE_ATTR, &dev); if (ret !=3D 0 && errno =3D=3D ENXIO) { print_skip("steal-time not supported"); exit(KSFT_SKIP); @@ -191,13 +191,13 @@ static void steal_time_init(struct kvm_vm *vm) sync_global_to_guest(vm, st_gva[i]); =20 st_ipa =3D (ulong)st_gva[i] | 1; - ret =3D _vcpu_ioctl(vm, i, KVM_SET_DEVICE_ATTR, &dev); + ret =3D __vcpu_ioctl(vm, i, KVM_SET_DEVICE_ATTR, &dev); TEST_ASSERT(ret =3D=3D -1 && errno =3D=3D EINVAL, "Bad IPA didn't report= EINVAL"); =20 st_ipa =3D (ulong)st_gva[i]; vcpu_ioctl(vm, i, KVM_SET_DEVICE_ATTR, &dev); =20 - ret =3D _vcpu_ioctl(vm, i, KVM_SET_DEVICE_ATTR, &dev); + ret =3D __vcpu_ioctl(vm, i, KVM_SET_DEVICE_ATTR, &dev); TEST_ASSERT(ret =3D=3D -1 && errno =3D=3D EEXIST, "Set IPA twice without= EEXIST"); =20 } diff --git a/tools/testing/selftests/kvm/x86_64/hyperv_cpuid.c b/tools/test= ing/selftests/kvm/x86_64/hyperv_cpuid.c index 8c245ab2d98a..7e45a3df8f98 100644 --- a/tools/testing/selftests/kvm/x86_64/hyperv_cpuid.c +++ b/tools/testing/selftests/kvm/x86_64/hyperv_cpuid.c @@ -121,9 +121,9 @@ void test_hv_cpuid_e2big(struct kvm_vm *vm, bool system) int ret; =20 if (!system) - ret =3D _vcpu_ioctl(vm, VCPU_ID, KVM_GET_SUPPORTED_HV_CPUID, &cpuid); + ret =3D __vcpu_ioctl(vm, VCPU_ID, KVM_GET_SUPPORTED_HV_CPUID, &cpuid); else - ret =3D _kvm_ioctl(vm, KVM_GET_SUPPORTED_HV_CPUID, &cpuid); + ret =3D __kvm_ioctl(vm, KVM_GET_SUPPORTED_HV_CPUID, &cpuid); =20 TEST_ASSERT(ret =3D=3D -1 && errno =3D=3D E2BIG, "%s KVM_GET_SUPPORTED_HV_CPUID didn't fail with -E2BIG when" diff --git a/tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c b/tools/t= esting/selftests/kvm/x86_64/set_boot_cpu_id.c index 2fe893ccedd0..ee3d058a9fe1 100644 --- a/tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c +++ b/tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c @@ -42,7 +42,7 @@ static void test_set_boot_busy(struct kvm_vm *vm) { int res; =20 - res =3D _vm_ioctl(vm, KVM_SET_BOOT_CPU_ID, (void *) VCPU_ID0); + res =3D __vm_ioctl(vm, KVM_SET_BOOT_CPU_ID, (void *) VCPU_ID0); TEST_ASSERT(res =3D=3D -1 && errno =3D=3D EBUSY, "KVM_SET_BOOT_CPU_ID set while running vm"); } @@ -133,13 +133,13 @@ static void check_set_bsp_busy(void) add_x86_vcpu(vm, VCPU_ID0, true); add_x86_vcpu(vm, VCPU_ID1, false); =20 - res =3D _vm_ioctl(vm, KVM_SET_BOOT_CPU_ID, (void *) VCPU_ID1); + res =3D __vm_ioctl(vm, KVM_SET_BOOT_CPU_ID, (void *) VCPU_ID1); TEST_ASSERT(res =3D=3D -1 && errno =3D=3D EBUSY, "KVM_SET_BOOT_CPU_ID set= after adding vcpu"); =20 run_vcpu(vm, VCPU_ID0); run_vcpu(vm, VCPU_ID1); =20 - res =3D _vm_ioctl(vm, KVM_SET_BOOT_CPU_ID, (void *) VCPU_ID1); + res =3D __vm_ioctl(vm, KVM_SET_BOOT_CPU_ID, (void *) VCPU_ID1); TEST_ASSERT(res =3D=3D -1 && errno =3D=3D EBUSY, "KVM_SET_BOOT_CPU_ID set= to a terminated vcpu"); =20 kvm_vm_free(vm); diff --git a/tools/testing/selftests/kvm/x86_64/vmx_nested_tsc_scaling_test= .c b/tools/testing/selftests/kvm/x86_64/vmx_nested_tsc_scaling_test.c index 280c01fd2412..c35ada9f7f9c 100644 --- a/tools/testing/selftests/kvm/x86_64/vmx_nested_tsc_scaling_test.c +++ b/tools/testing/selftests/kvm/x86_64/vmx_nested_tsc_scaling_test.c @@ -186,7 +186,7 @@ int main(int argc, char *argv[]) vcpu_alloc_vmx(vm, &vmx_pages_gva); vcpu_args_set(vm, VCPU_ID, 1, vmx_pages_gva); =20 - tsc_khz =3D _vcpu_ioctl(vm, VCPU_ID, KVM_GET_TSC_KHZ, NULL); + tsc_khz =3D __vcpu_ioctl(vm, VCPU_ID, KVM_GET_TSC_KHZ, NULL); TEST_ASSERT(tsc_khz !=3D -1, "vcpu ioctl KVM_GET_TSC_KHZ failed"); =20 /* scale down L1's TSC frequency */ --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 D2603C433F5 for ; Wed, 4 May 2022 22:52:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379280AbiEDWxt (ORCPT ); Wed, 4 May 2022 18:53:49 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40760 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379149AbiEDWxU (ORCPT ); Wed, 4 May 2022 18:53:20 -0400 Received: from mail-pg1-x54a.google.com (mail-pg1-x54a.google.com [IPv6:2607:f8b0:4864:20::54a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 831AA53729 for ; Wed, 4 May 2022 15:49:42 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id 23-20020a630117000000b003c5ea4365a1so1343546pgb.6 for ; Wed, 04 May 2022 15:49:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=4pIauhSlde4XCXit2IlbWFMSroGJDw7QeFGFxnStppM=; b=a9+WhsNyIFthX2/9HChLG4NOifYBsqe11L7lWxR3ClM+nDKb459zt9goW8dgYEV3h9 RdKNolxw5aTFBVqUUGpe24s4SxsjUYG+Q1rN47d0ukeIDrM+XHt+E/TbxWhfZ45/IKmv qi2K6R6nH2Lnnq2XwTlHk4D5geT0qdM2ln/oozKJ66fHBGlqT1AfOhXASB68uK7s7BTg OC3d834iT8jJgb15w7TL9I9SWBhDFVCg/5uw6n+d96x2OCiYgLskiCgBHHuVN0o/2ia9 T/7o7iVo7+OWl6j5fw7ONY4TjMmTG8bXZxofKvVkW5pMQDHO2cmqXBIgLe4H8tfmlw5A tQ1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=4pIauhSlde4XCXit2IlbWFMSroGJDw7QeFGFxnStppM=; b=DuXNPHJTyGwODpb9co59NSogZFzyNvn1daDL/5T3AV/WQwSF04tyUyuCBaudjXlBEe HhBYIioPPXTgPtphCwgARd37wzhj4MiWOMWfigdpFusvewlCX0CzUlIDoke37Gp2TG/e oQ3P/QfKu1u5jkl7U6ntR/IVsVff4YJyRH9efTYy6LfieVlASj1X3f15DoD4HG9/67MO hH662qBoyGyBu0z6TKa3E1hWjGOmFDijJdh/7QIg0Z3ONMFJZxXEuD9KoR64iuGa9SZf 6J97XImbIhldgnueLJFVBle5LgWiegfkgjlE7fV3p1vHk0cT1n53Lq131t0YztfNqS7f FASQ== X-Gm-Message-State: AOAM5336hk1ocBfGJGT+W7ez08ucJ/XtGwiyQ4iG+e0VofHQSABFqzd4 B7/4jUc1ei6oS+2359PihLhJ3M0fCu8= X-Google-Smtp-Source: ABdhPJwuL73IVTiU2k74hQ3qJRkNU0pw5Xj2dfjKuUwh4LQNFfuRqowdR8m/OVpUzvVO7wgRdemp+EZAtGE= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:ec8c:b0:15e:a371:ad89 with SMTP id x12-20020a170902ec8c00b0015ea371ad89mr17656273plg.157.1651704582214; Wed, 04 May 2022 15:49:42 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:12 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-7-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 006/128] KVM: selftests: Make vcpu_ioctl() a wrapper to pretty print ioctl name From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Make vcpu_ioctl() a macro wrapper and pretty the _name_ of the ioctl on failure instead of the number. Add inner macros to allow handling cases where the name of the ioctl needs to be resolved higher up the stack, and to allow using the formatting for non-ioctl syscalls without being technically wrong. Deliberately do not use __stringify(), as that will expand the ioctl all the way down to its numerical sequence, again the intent is to print the name of the macro. Signed-off-by: Sean Christopherson --- .../selftests/kvm/include/kvm_util_base.h | 13 ++++++-- tools/testing/selftests/kvm/lib/kvm_util.c | 31 +++++-------------- 2 files changed, 19 insertions(+), 25 deletions(-) diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index 662579a6358b..00f3103dc85e 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -157,10 +157,19 @@ void vm_userspace_mem_region_add(struct kvm_vm *vm, uint64_t guest_paddr, uint32_t slot, uint64_t npages, uint32_t flags); =20 -void vcpu_ioctl(struct kvm_vm *vm, uint32_t vcpuid, unsigned long ioctl, - void *arg); +#define __KVM_SYSCALL_ERROR(_name, _ret) \ + "%s failed, rc: %i errno: %i (%s)", (_name), (_ret), errno, strerror(errn= o) + +#define __KVM_IOCTL_ERROR(_name, _ret) __KVM_SYSCALL_ERROR(_name, _ret) +#define KVM_IOCTL_ERROR(_ioctl, _ret) __KVM_IOCTL_ERROR(#_ioctl, _ret) + +void _vcpu_ioctl(struct kvm_vm *vm, uint32_t vcpuid, unsigned long ioctl, + const char *name, void *arg); int __vcpu_ioctl(struct kvm_vm *vm, uint32_t vcpuid, unsigned long ioctl, void *arg); +#define vcpu_ioctl(vm, vcpuid, ioctl, arg) \ + _vcpu_ioctl(vm, vcpuid, ioctl, #ioctl, arg) + void vm_ioctl(struct kvm_vm *vm, unsigned long ioctl, void *arg); int __vm_ioctl(struct kvm_vm *vm, unsigned long cmd, void *arg); void kvm_ioctl(struct kvm_vm *vm, unsigned long ioctl, void *arg); diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index 03c1f885a98b..fdcaf74b5959 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -1937,29 +1937,6 @@ void vcpu_set_reg(struct kvm_vm *vm, uint32_t vcpuid= , struct kvm_one_reg *reg) ret, errno, strerror(errno)); } =20 -/* - * VCPU Ioctl - * - * Input Args: - * vm - Virtual Machine - * vcpuid - VCPU ID - * cmd - Ioctl number - * arg - Argument to pass to the ioctl - * - * Return: None - * - * Issues an arbitrary ioctl on a VCPU fd. - */ -void vcpu_ioctl(struct kvm_vm *vm, uint32_t vcpuid, - unsigned long cmd, void *arg) -{ - int ret; - - ret =3D __vcpu_ioctl(vm, vcpuid, cmd, arg); - TEST_ASSERT(ret =3D=3D 0, "vcpu ioctl %lu failed, rc: %i errno: %i (%s)", - cmd, ret, errno, strerror(errno)); -} - int __vcpu_ioctl(struct kvm_vm *vm, uint32_t vcpuid, unsigned long cmd, void *arg) { @@ -1973,6 +1950,14 @@ int __vcpu_ioctl(struct kvm_vm *vm, uint32_t vcpuid, return ret; } =20 +void _vcpu_ioctl(struct kvm_vm *vm, uint32_t vcpuid, unsigned long cmd, + const char *name, void *arg) +{ + int ret =3D __vcpu_ioctl(vm, vcpuid, cmd, arg); + + TEST_ASSERT(!ret, __KVM_IOCTL_ERROR(name, ret)); +} + void *vcpu_map_dirty_ring(struct kvm_vm *vm, uint32_t vcpuid) { struct vcpu *vcpu; --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 0614BC4332F for ; Wed, 4 May 2022 22:50:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379559AbiEDWyb (ORCPT ); Wed, 4 May 2022 18:54:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40760 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379159AbiEDWxW (ORCPT ); Wed, 4 May 2022 18:53:22 -0400 Received: from mail-pg1-x54a.google.com (mail-pg1-x54a.google.com [IPv6:2607:f8b0:4864:20::54a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 720005373F for ; Wed, 4 May 2022 15:49:44 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id d127-20020a633685000000b003ab20e589a8so1327765pga.22 for ; Wed, 04 May 2022 15:49:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=BalRb3q6SpihL13zmwJdIKwo8UdKEV0Rb+YQQjr96N4=; b=UrQJuk0GymDF/lNvyCIxWtBNHrgtXxbCyquWPpxyuWMgjEKexPLV1yoEVVMGftPJtI AAL7PXDuzv+tuedExZLpkhCEmof9Hnr2UO+GxqH5luFzj7uWNgDk/lM+MqlKRHp+IC94 O/c76QZuxrIhJlyFHJmwFbr7Rfc8sZGs2rUHydadXWD6uxwl8tlojvq0O0SiX/PRNFnF LArtDKC+IweczI+y0+67H6XcbA9RqeixIRegzfLRv+t4cuZSU6HoXI5c1XlSp4HPp2sC 7TJB7C0MqynJkpIEUTFcdi4icpgCRUxHdEZifsNRtX3OkafR3FWKj/W5xVmq0FjCa6Vl NoAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=BalRb3q6SpihL13zmwJdIKwo8UdKEV0Rb+YQQjr96N4=; b=KdLgsk+pJmGLkEDD783Q6Rev+Qo0Gnf3mWFocvDdht5XgpdFlGYPcBMo//vKG0lbbJ qhhj1nlsefzKWpH0rSAyNHjlg67PCW6BC4eynJqsuSz81rHH+gtlgEQG6OpeU5pOv074 ctso6pqrfjSFp8F63O9ZihQc/b+MnlRGuNd1+MF1JRfsLXga1y7Rj5vmuOdOu6xE8t/O du2DcbEUZaF0/HtPZ6kNS8NO251i1ks/lkIK/QOO4V6rO0eaaB5BqZ5Aw6BYskDx7kR9 FiLwzCbhCUEsxZEA7KlDNs/+75Tu6pjsNfsR5EfSPD6JR50b5X6hnbGfOy39qEZ//r2G SFHA== X-Gm-Message-State: AOAM531uuTdWUhI1kt9ey6CQgIoQL0HaIFEBI24C0OdiOI83GrNXi4tg aVH6cdPjaHGsoGEfgdpx9DErW5G1fno= X-Google-Smtp-Source: ABdhPJyRKUk82euyO6yrwvLemirtUtG3Zh+JmJJF1iaeQRixDpoLyoUr/xpjUa4ao1oyEY5Gw7yc3V6HHnk= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:1a8d:b0:510:510f:d8e1 with SMTP id e13-20020a056a001a8d00b00510510fd8e1mr2510174pfv.83.1651704583807; Wed, 04 May 2022 15:49:43 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:13 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-8-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 007/128] KVM: selftests: Drop @mode from common vm_create() helper From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Drop @mode from vm_create() and have it use VM_MODE_DEFAULT. Add and use an inner helper, __vm_create(), to service the handful of tests that want something other than VM_MODE_DEFAULT. Signed-off-by: Sean Christopherson --- .../selftests/kvm/aarch64/get-reg-list.c | 2 +- .../selftests/kvm/aarch64/psci_cpu_on_test.c | 2 +- .../selftests/kvm/aarch64/vcpu_width_config.c | 6 +-- tools/testing/selftests/kvm/dirty_log_test.c | 2 +- .../selftests/kvm/hardware_disable_test.c | 2 +- .../selftests/kvm/include/kvm_util_base.h | 3 +- .../selftests/kvm/kvm_binary_stats_test.c | 3 +- .../selftests/kvm/kvm_create_max_vcpus.c | 2 +- tools/testing/selftests/kvm/lib/kvm_util.c | 42 ++++++++++--------- .../selftests/kvm/set_memory_region_test.c | 4 +- .../selftests/kvm/x86_64/set_boot_cpu_id.c | 2 +- .../selftests/kvm/x86_64/set_sregs_test.c | 2 +- .../selftests/kvm/x86_64/sev_migrate_tests.c | 8 ++-- 13 files changed, 41 insertions(+), 39 deletions(-) diff --git a/tools/testing/selftests/kvm/aarch64/get-reg-list.c b/tools/tes= ting/selftests/kvm/aarch64/get-reg-list.c index b3ecaea67bfc..bb71ed81b37a 100644 --- a/tools/testing/selftests/kvm/aarch64/get-reg-list.c +++ b/tools/testing/selftests/kvm/aarch64/get-reg-list.c @@ -411,7 +411,7 @@ static void run_test(struct vcpu_config *c) =20 check_supported(c); =20 - vm =3D vm_create(VM_MODE_DEFAULT, DEFAULT_GUEST_PHY_PAGES); + vm =3D vm_create(DEFAULT_GUEST_PHY_PAGES); prepare_vcpu_init(c, &init); aarch64_vcpu_add_default(vm, 0, &init, NULL); finalize_vcpu(vm, 0, c); diff --git a/tools/testing/selftests/kvm/aarch64/psci_cpu_on_test.c b/tools= /testing/selftests/kvm/aarch64/psci_cpu_on_test.c index 15f4b3544ee5..bde7bae20a6e 100644 --- a/tools/testing/selftests/kvm/aarch64/psci_cpu_on_test.c +++ b/tools/testing/selftests/kvm/aarch64/psci_cpu_on_test.c @@ -76,7 +76,7 @@ int main(void) struct kvm_vm *vm; struct ucall uc; =20 - vm =3D vm_create(VM_MODE_DEFAULT, DEFAULT_GUEST_PHY_PAGES); + vm =3D vm_create(DEFAULT_GUEST_PHY_PAGES); kvm_vm_elf_load(vm, program_invocation_name); ucall_init(vm, NULL); =20 diff --git a/tools/testing/selftests/kvm/aarch64/vcpu_width_config.c b/tool= s/testing/selftests/kvm/aarch64/vcpu_width_config.c index 271fa90e53fd..4145c28a245a 100644 --- a/tools/testing/selftests/kvm/aarch64/vcpu_width_config.c +++ b/tools/testing/selftests/kvm/aarch64/vcpu_width_config.c @@ -24,7 +24,7 @@ static int add_init_2vcpus(struct kvm_vcpu_init *init1, struct kvm_vm *vm; int ret; =20 - vm =3D vm_create(VM_MODE_DEFAULT, DEFAULT_GUEST_PHY_PAGES); + vm =3D vm_create(DEFAULT_GUEST_PHY_PAGES); =20 vm_vcpu_add(vm, 0); ret =3D __vcpu_ioctl(vm, 0, KVM_ARM_VCPU_INIT, init1); @@ -49,7 +49,7 @@ static int add_2vcpus_init_2vcpus(struct kvm_vcpu_init *i= nit1, struct kvm_vm *vm; int ret; =20 - vm =3D vm_create(VM_MODE_DEFAULT, DEFAULT_GUEST_PHY_PAGES); + vm =3D vm_create(DEFAULT_GUEST_PHY_PAGES); =20 vm_vcpu_add(vm, 0); vm_vcpu_add(vm, 1); @@ -86,7 +86,7 @@ int main(void) } =20 /* Get the preferred target type and copy that to init2 for later use */ - vm =3D vm_create(VM_MODE_DEFAULT, DEFAULT_GUEST_PHY_PAGES); + vm =3D vm_create(DEFAULT_GUEST_PHY_PAGES); vm_ioctl(vm, KVM_ARM_PREFERRED_TARGET, &init1); kvm_vm_free(vm); init2 =3D init1; diff --git a/tools/testing/selftests/kvm/dirty_log_test.c b/tools/testing/s= elftests/kvm/dirty_log_test.c index 11bf606e3165..01c01d40201f 100644 --- a/tools/testing/selftests/kvm/dirty_log_test.c +++ b/tools/testing/selftests/kvm/dirty_log_test.c @@ -679,7 +679,7 @@ static struct kvm_vm *create_vm(enum vm_guest_mode mode= , uint32_t vcpuid, =20 pr_info("Testing guest mode: %s\n", vm_guest_mode_string(mode)); =20 - vm =3D vm_create(mode, DEFAULT_GUEST_PHY_PAGES + extra_pg_pages); + vm =3D __vm_create(mode, DEFAULT_GUEST_PHY_PAGES + extra_pg_pages); kvm_vm_elf_load(vm, program_invocation_name); #ifdef __x86_64__ vm_create_irqchip(vm); diff --git a/tools/testing/selftests/kvm/hardware_disable_test.c b/tools/te= sting/selftests/kvm/hardware_disable_test.c index 1c9e2295c75b..81ba8645772a 100644 --- a/tools/testing/selftests/kvm/hardware_disable_test.c +++ b/tools/testing/selftests/kvm/hardware_disable_test.c @@ -104,7 +104,7 @@ static void run_test(uint32_t run) for (i =3D 0; i < VCPU_NUM; i++) CPU_SET(i, &cpu_set); =20 - vm =3D vm_create(VM_MODE_DEFAULT, DEFAULT_GUEST_PHY_PAGES); + vm =3D vm_create(DEFAULT_GUEST_PHY_PAGES); kvm_vm_elf_load(vm, program_invocation_name); vm_create_irqchip(vm); =20 diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index 00f3103dc85e..f6984b0c3816 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -110,7 +110,8 @@ int vcpu_enable_cap(struct kvm_vm *vm, uint32_t vcpu_id, void vm_enable_dirty_ring(struct kvm_vm *vm, uint32_t ring_size); const char *vm_guest_mode_string(uint32_t i); =20 -struct kvm_vm *vm_create(enum vm_guest_mode mode, uint64_t phy_pages); +struct kvm_vm *__vm_create(enum vm_guest_mode mode, uint64_t phy_pages); +struct kvm_vm *vm_create(uint64_t phy_pages); void kvm_vm_free(struct kvm_vm *vmp); void kvm_vm_restart(struct kvm_vm *vmp); void kvm_vm_release(struct kvm_vm *vmp); diff --git a/tools/testing/selftests/kvm/kvm_binary_stats_test.c b/tools/te= sting/selftests/kvm/kvm_binary_stats_test.c index 6217f4630e6c..4b149b383678 100644 --- a/tools/testing/selftests/kvm/kvm_binary_stats_test.c +++ b/tools/testing/selftests/kvm/kvm_binary_stats_test.c @@ -229,8 +229,7 @@ int main(int argc, char *argv[]) vms =3D malloc(sizeof(vms[0]) * max_vm); TEST_ASSERT(vms, "Allocate memory for storing VM pointers"); for (i =3D 0; i < max_vm; ++i) { - vms[i] =3D vm_create(VM_MODE_DEFAULT, - DEFAULT_GUEST_PHY_PAGES); + vms[i] =3D vm_create(DEFAULT_GUEST_PHY_PAGES); for (j =3D 0; j < max_vcpu; ++j) vm_vcpu_add(vms[i], j); } diff --git a/tools/testing/selftests/kvm/kvm_create_max_vcpus.c b/tools/tes= ting/selftests/kvm/kvm_create_max_vcpus.c index bb69b75eac23..9de5e1376c49 100644 --- a/tools/testing/selftests/kvm/kvm_create_max_vcpus.c +++ b/tools/testing/selftests/kvm/kvm_create_max_vcpus.c @@ -28,7 +28,7 @@ void test_vcpu_creation(int first_vcpu_id, int num_vcpus) pr_info("Testing creating %d vCPUs, with IDs %d...%d.\n", num_vcpus, first_vcpu_id, first_vcpu_id + num_vcpus - 1); =20 - vm =3D vm_create(VM_MODE_DEFAULT, DEFAULT_GUEST_PHY_PAGES); + vm =3D vm_create(DEFAULT_GUEST_PHY_PAGES); =20 for (i =3D first_vcpu_id; i < first_vcpu_id + num_vcpus; i++) /* This asserts that the vCPU was created. */ diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index fdcaf74b5959..bab4ab297fcc 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -234,25 +234,7 @@ const struct vm_guest_mode_params vm_guest_mode_params= [] =3D { _Static_assert(sizeof(vm_guest_mode_params)/sizeof(struct vm_guest_mode_pa= rams) =3D=3D NUM_VM_MODES, "Missing new mode params?"); =20 -/* - * VM Create - * - * Input Args: - * mode - VM Mode (e.g. VM_MODE_P52V48_4K) - * phy_pages - Physical memory pages - * - * 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). - * When phy_pages is non-zero, a memory region of phy_pages physical pages - * is created and mapped starting at guest physical address 0. The file - * descriptor to control the created VM is created with the permissions - * given by perm (e.g. O_RDWR). - */ -struct kvm_vm *vm_create(enum vm_guest_mode mode, uint64_t phy_pages) +struct kvm_vm *__vm_create(enum vm_guest_mode mode, uint64_t phy_pages) { struct kvm_vm *vm; =20 @@ -361,11 +343,31 @@ struct kvm_vm *vm_create(enum vm_guest_mode mode, uin= t64_t phy_pages) return vm; } =20 +/* + * VM Create + * + * Input Args: + * phy_pages - Physical memory pages + * + * Output Args: None + * + * Return: + * Pointer to opaque structure that describes the created VM. + * + * Creates a VM with the default physical/virtual address widths and page = size. + * When phy_pages is non-zero, a memory region of phy_pages physical pages + * is created and mapped starting at guest physical address 0. + */ +struct kvm_vm *vm_create(uint64_t phy_pages) +{ + return __vm_create(VM_MODE_DEFAULT, phy_pages); +} + struct kvm_vm *vm_create_without_vcpus(enum vm_guest_mode mode, uint64_t p= ages) { struct kvm_vm *vm; =20 - vm =3D vm_create(mode, pages); + vm =3D __vm_create(mode, pages); =20 kvm_vm_elf_load(vm, program_invocation_name); =20 diff --git a/tools/testing/selftests/kvm/set_memory_region_test.c b/tools/t= esting/selftests/kvm/set_memory_region_test.c index d97cfd6866c3..89b13f23c3ac 100644 --- a/tools/testing/selftests/kvm/set_memory_region_test.c +++ b/tools/testing/selftests/kvm/set_memory_region_test.c @@ -314,7 +314,7 @@ static void test_zero_memory_regions(void) =20 pr_info("Testing KVM_RUN with zero added memory regions\n"); =20 - vm =3D vm_create(VM_MODE_DEFAULT, 0); + vm =3D vm_create(0); vm_vcpu_add(vm, VCPU_ID); =20 TEST_ASSERT(!ioctl(vm_get_fd(vm), KVM_SET_NR_MMU_PAGES, 64), @@ -354,7 +354,7 @@ static void test_add_max_memory_regions(void) "KVM_CAP_NR_MEMSLOTS should be greater than 0"); pr_info("Allowed number of memory slots: %i\n", max_mem_slots); =20 - vm =3D vm_create(VM_MODE_DEFAULT, 0); + vm =3D vm_create(0); =20 /* Check it can be added memory slots up to the maximum allowed */ pr_info("Adding slots 0..%i, each memory region with %dK size\n", diff --git a/tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c b/tools/t= esting/selftests/kvm/x86_64/set_boot_cpu_id.c index ee3d058a9fe1..b4da92ddc1c6 100644 --- a/tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c +++ b/tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c @@ -88,7 +88,7 @@ static struct kvm_vm *create_vm(void) uint64_t pages =3D DEFAULT_GUEST_PHY_PAGES + vcpu_pages + extra_pg_pages; =20 pages =3D vm_adjust_num_guest_pages(VM_MODE_DEFAULT, pages); - vm =3D vm_create(VM_MODE_DEFAULT, pages); + vm =3D vm_create(pages); =20 kvm_vm_elf_load(vm, program_invocation_name); vm_create_irqchip(vm); diff --git a/tools/testing/selftests/kvm/x86_64/set_sregs_test.c b/tools/te= sting/selftests/kvm/x86_64/set_sregs_test.c index 44711ab735c3..4dc7fd925023 100644 --- a/tools/testing/selftests/kvm/x86_64/set_sregs_test.c +++ b/tools/testing/selftests/kvm/x86_64/set_sregs_test.c @@ -95,7 +95,7 @@ int main(int argc, char *argv[]) * use it to verify all supported CR4 bits can be set prior to defining * the vCPU model, i.e. without doing KVM_SET_CPUID2. */ - vm =3D vm_create(VM_MODE_DEFAULT, DEFAULT_GUEST_PHY_PAGES); + vm =3D vm_create(DEFAULT_GUEST_PHY_PAGES); vm_vcpu_add(vm, VCPU_ID); =20 vcpu_sregs_get(vm, VCPU_ID, &sregs); diff --git a/tools/testing/selftests/kvm/x86_64/sev_migrate_tests.c b/tools= /testing/selftests/kvm/x86_64/sev_migrate_tests.c index b0c052443c44..7424bec5ae23 100644 --- a/tools/testing/selftests/kvm/x86_64/sev_migrate_tests.c +++ b/tools/testing/selftests/kvm/x86_64/sev_migrate_tests.c @@ -54,7 +54,7 @@ static struct kvm_vm *sev_vm_create(bool es) struct kvm_sev_launch_start start =3D { 0 }; int i; =20 - vm =3D vm_create(VM_MODE_DEFAULT, 0); + vm =3D vm_create(0); sev_ioctl(vm->fd, es ? KVM_SEV_ES_INIT : KVM_SEV_INIT, NULL); for (i =3D 0; i < NR_MIGRATE_TEST_VCPUS; ++i) vm_vcpu_add(vm, i); @@ -71,7 +71,7 @@ static struct kvm_vm *aux_vm_create(bool with_vcpus) struct kvm_vm *vm; int i; =20 - vm =3D vm_create(VM_MODE_DEFAULT, 0); + vm =3D vm_create(0); if (!with_vcpus) return vm; =20 @@ -174,7 +174,7 @@ static void test_sev_migrate_parameters(void) *sev_es_vm_no_vmsa; int ret; =20 - vm_no_vcpu =3D vm_create(VM_MODE_DEFAULT, 0); + vm_no_vcpu =3D vm_create(0); vm_no_sev =3D aux_vm_create(true); ret =3D __sev_migrate_from(vm_no_vcpu->fd, vm_no_sev->fd); TEST_ASSERT(ret =3D=3D -1 && errno =3D=3D EINVAL, @@ -186,7 +186,7 @@ static void test_sev_migrate_parameters(void) =20 sev_vm =3D sev_vm_create(/* es=3D */ false); sev_es_vm =3D sev_vm_create(/* es=3D */ true); - sev_es_vm_no_vmsa =3D vm_create(VM_MODE_DEFAULT, 0); + sev_es_vm_no_vmsa =3D vm_create(0); sev_ioctl(sev_es_vm_no_vmsa->fd, KVM_SEV_ES_INIT, NULL); vm_vcpu_add(sev_es_vm_no_vmsa, 1); =20 --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 3D7ECC433F5 for ; Wed, 4 May 2022 22:51:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379342AbiEDWyu (ORCPT ); Wed, 4 May 2022 18:54:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40764 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379108AbiEDWxe (ORCPT ); Wed, 4 May 2022 18:53:34 -0400 Received: from mail-pg1-x54a.google.com (mail-pg1-x54a.google.com [IPv6:2607:f8b0:4864:20::54a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3558853A60 for ; Wed, 4 May 2022 15:49:46 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id 16-20020a630010000000b003c5e4be54b2so1353483pga.2 for ; Wed, 04 May 2022 15:49:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=vdoiFFuprO/80jj0608+r4h582qSuKW9UvQgFdb6/os=; b=CsjkGavuxd04ZWo1ZEmta5wWdm/pj0mLLRl/UDLyTU8O2QEyi7tRbWFVMhnVAIl7xt ACIEoFAD9zecvgfI1lsVBV9Pf76xixzdc10q3pyrU0kBQC4iecgB2bi0lHZIUCcJnooN bxBCOqKk8OTY+24J5+YDPUJHWPtZ1rmJgtYF2WFZtH39X22WWPGh2CD5fLy1cwFkbtzv 4/p5j8bk9zf0mS5sNdVsqaZTOWHPZ5e/Tbt3vwV4jATm8OKPGfIM9kGeb+F9GHIgjvHY zj1Km97NnqEf7sDgzs6N3/Fv0eotD911jTPSMagRghorE61tYRvSFp2J5ZnyXUOwa0X0 7iXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=vdoiFFuprO/80jj0608+r4h582qSuKW9UvQgFdb6/os=; b=vpivWxtqyFTRa9cKUPUSv2iByoGuZCqrI1sP4vM1iRa2xIkT7LaaYvH4r4itNjRSFU vStX6y8nnwSbM0NlB6vrqclOjjB3UIq190iPCvereUy5WU7nJvBgqJ+CcZLucUUT2zLD C5O+QW4+DBCVz/hWbw3xVJd6TT8Ua/1H5gMRtxGjj2dba4eUdcn25+8HYE4aJBokJSzC TniGP8R6xphwNsu3FolR/PlwuWU3t692UDyvv/n+nkUOBZD0JhBEDKeaV+HMtFMdYHRI yPFU3TDVGfIGISfcT1lx/jZrQXVkcJP4ARXPXrooVDeTyAJdhHiCMGPEjHdZzjdDucm4 QcEw== X-Gm-Message-State: AOAM5310IzEk1b1YLw0xh2RyYp53v3QJnUGR3CAKpmyVvS3xSXF2Z/gM +iL/boEeKoALES3egyC90/FKUWqeTOw= X-Google-Smtp-Source: ABdhPJww3I/HXN1k7DeKtvuR/EW+eiolzBbKVPYlhD1lhf7pINVhGjlhwBU6eBTna6N2UOeJ40sJ6tdmwiQ= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:813:b0:50d:f198:287b with SMTP id m19-20020a056a00081300b0050df198287bmr14969107pfk.68.1651704585477; Wed, 04 May 2022 15:49:45 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:14 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-9-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 008/128] KVM: selftests: Split vcpu_set_nested_state() into two helpers From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Split vcpu_nested_state_set() into a wrapper that asserts, and an inner helper that does not. Passing a bool is all kinds of awful as it's unintuitive for readers and requires returning an 'int' from a function that for most users can never return anything other than "success". Signed-off-by: Sean Christopherson --- .../selftests/kvm/include/kvm_util_base.h | 6 ++++-- tools/testing/selftests/kvm/lib/kvm_util.c | 20 +++++++++---------- .../kvm/x86_64/vmx_set_nested_state_test.c | 4 ++-- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index f6984b0c3816..314d971c1f06 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -261,8 +261,10 @@ void vcpu_events_set(struct kvm_vm *vm, uint32_t vcpui= d, #ifdef __x86_64__ void vcpu_nested_state_get(struct kvm_vm *vm, uint32_t vcpuid, struct kvm_nested_state *state); -int vcpu_nested_state_set(struct kvm_vm *vm, uint32_t vcpuid, - struct kvm_nested_state *state, bool ignore_error); +int __vcpu_nested_state_set(struct kvm_vm *vm, uint32_t vcpuid, + struct kvm_nested_state *state); +void vcpu_nested_state_set(struct kvm_vm *vm, uint32_t vcpuid, + struct kvm_nested_state *state); #endif void *vcpu_map_dirty_ring(struct kvm_vm *vm, uint32_t vcpuid); =20 diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index bab4ab297fcc..7b339f98070b 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -1826,22 +1826,22 @@ void vcpu_nested_state_get(struct kvm_vm *vm, uint3= 2_t vcpuid, ret, errno); } =20 -int vcpu_nested_state_set(struct kvm_vm *vm, uint32_t vcpuid, - struct kvm_nested_state *state, bool ignore_error) +int __vcpu_nested_state_set(struct kvm_vm *vm, uint32_t vcpuid, + struct kvm_nested_state *state) { struct vcpu *vcpu =3D vcpu_find(vm, vcpuid); - int ret; =20 TEST_ASSERT(vcpu !=3D NULL, "vcpu not found, vcpuid: %u", vcpuid); =20 - ret =3D ioctl(vcpu->fd, KVM_SET_NESTED_STATE, state); - if (!ignore_error) { - TEST_ASSERT(ret =3D=3D 0, - "KVM_SET_NESTED_STATE failed, ret: %i errno: %i", - ret, errno); - } + return ioctl(vcpu->fd, KVM_SET_NESTED_STATE, state); +} =20 - return ret; +void vcpu_nested_state_set(struct kvm_vm *vm, uint32_t vcpuid, + struct kvm_nested_state *state) +{ + int ret =3D __vcpu_nested_state_set(vm, vcpuid, state); + + TEST_ASSERT(!ret, "KVM_SET_NESTED_STATE failed, ret: %i errno: %i", ret, = errno); } #endif =20 diff --git a/tools/testing/selftests/kvm/x86_64/vmx_set_nested_state_test.c= b/tools/testing/selftests/kvm/x86_64/vmx_set_nested_state_test.c index 5827b9bae468..af3b60eb35ec 100644 --- a/tools/testing/selftests/kvm/x86_64/vmx_set_nested_state_test.c +++ b/tools/testing/selftests/kvm/x86_64/vmx_set_nested_state_test.c @@ -29,7 +29,7 @@ bool have_evmcs; =20 void test_nested_state(struct kvm_vm *vm, struct kvm_nested_state *state) { - vcpu_nested_state_set(vm, VCPU_ID, state, false); + vcpu_nested_state_set(vm, VCPU_ID, state); } =20 void test_nested_state_expect_errno(struct kvm_vm *vm, @@ -38,7 +38,7 @@ void test_nested_state_expect_errno(struct kvm_vm *vm, { int rv; =20 - rv =3D vcpu_nested_state_set(vm, VCPU_ID, state, true); + rv =3D __vcpu_nested_state_set(vm, VCPU_ID, state); TEST_ASSERT(rv =3D=3D -1 && errno =3D=3D expected_errno, "Expected %s (%d) from vcpu_nested_state_set but got rv: %i errno: %s (%= d)", strerror(expected_errno), expected_errno, rv, strerror(errno), --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 4EBF3C433EF for ; Wed, 4 May 2022 22:51:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379307AbiEDWyh (ORCPT ); Wed, 4 May 2022 18:54:37 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41256 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379153AbiEDWxf (ORCPT ); Wed, 4 May 2022 18:53:35 -0400 Received: from mail-pj1-x1049.google.com (mail-pj1-x1049.google.com [IPv6:2607:f8b0:4864:20::1049]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 202B153B49 for ; Wed, 4 May 2022 15:49:48 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id 16-20020a17090a0a9000b001d48f5547fbso1073195pjw.9 for ; Wed, 04 May 2022 15:49:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=hr5vt4KUphX7GgdM5akDeyO2vBd333rzi0QdXgvTmJo=; b=S1VPiBRG+3WONARl8IKU3uxLTXZvDm0A+CRU6UR0/YTGrCQpAWkdbd9aSpWWTZaJqc DrcZQ7MuBgw+MaZc60U7X00v4oXw6Oyxt04hOG/Jq1HmPMjgDpJPg7xiSiB5D3l9j/cS hafohcKcFg1D19RxxTDGOFN6zwdtAEUoDAket0U1/llIg7T6GQ+NSZt5OC386abph0T8 zw9qN3VJHZ0QSaSC7uD8Zq1T2bAQQKrOdODnGGCZUzcYysMmmN0EauTvONtyP6OV2MqR ZrkLsd4lG3QG4rjrZkJ37J0hzX3+tv7JGFWXpvaciVyFg4EBgbaNZzUkY5yVxh0DnXMB bYSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=hr5vt4KUphX7GgdM5akDeyO2vBd333rzi0QdXgvTmJo=; b=GjNYJBt9uxUD5F7hEcCNnPWqLk3RqwfpDkIImj5JsxiyTU0/sasu8TwuQWsZWuKHUu aebKDHM281k1ww+4FAZXCz/c/sryZ5zT/my4qAwaYIT03gh1QcM8ti7yEKT53dGZVFtR RntdjO0pbW1OCKp8pY3Ov2sLhoYsQOQe6xVaR3JXn1UUu1J9FWJHNE1IgtZeQIzWmkBw Hsk0hTu6xy/EEyyIh7Ox7kNM6N0t4IpPP/aOPszst95yLZ1MCd1U2QQsKZTUxSfxTi6R nvVewvpih9aspdvkPUMlQecI3ijOMMIOC325fLoYoT9cEqUqonUEfpxonzqDL+16rVu2 HNSQ== X-Gm-Message-State: AOAM530KSngV7lMAxY1ifwkamuiGib7Gvjysf+8Vo6VwtOfXvn9/BJMo g33XUbylJKPQxtfhVqkikDDfr7AA4eQ= X-Google-Smtp-Source: ABdhPJyouTPCUFyT/WgkVen/OjGFxFQLcKXyMJ2HoBTr9TMyJcjESIC9tC2f2hr1xv46Om1ABv+KWYowJ2U= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:e510:b0:1d9:ee23:9fa1 with SMTP id t16-20020a17090ae51000b001d9ee239fa1mr139758pjy.0.1651704587083; Wed, 04 May 2022 15:49:47 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:15 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-10-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 009/128] KVM: sefltests: Use vcpu_ioctl() and __vcpu_ioctl() helpers From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use the recently introduced vCPU-specific ioctl() helpers instead of open coding calls to ioctl() just to pretty print the ioctl name. Signed-off-by: Sean Christopherson --- .../selftests/kvm/include/kvm_util_base.h | 142 ++++++--- .../selftests/kvm/include/x86_64/processor.h | 28 +- .../selftests/kvm/kvm_binary_stats_test.c | 6 +- tools/testing/selftests/kvm/lib/kvm_util.c | 286 +----------------- .../selftests/kvm/lib/x86_64/processor.c | 112 +------ 5 files changed, 135 insertions(+), 439 deletions(-) diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index 314d971c1f06..4f18f03c537f 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -105,8 +105,6 @@ int open_kvm_dev_path_or_exit(void); int kvm_check_cap(long cap); int vm_check_cap(struct kvm_vm *vm, long cap); int vm_enable_cap(struct kvm_vm *vm, struct kvm_enable_cap *cap); -int vcpu_enable_cap(struct kvm_vm *vm, uint32_t vcpu_id, - struct kvm_enable_cap *cap); void vm_enable_dirty_ring(struct kvm_vm *vm, uint32_t ring_size); const char *vm_guest_mode_string(uint32_t i); =20 @@ -212,13 +210,112 @@ void vcpu_run(struct kvm_vm *vm, uint32_t vcpuid); int _vcpu_run(struct kvm_vm *vm, uint32_t vcpuid); int vcpu_get_fd(struct kvm_vm *vm, uint32_t vcpuid); void vcpu_run_complete_io(struct kvm_vm *vm, uint32_t vcpuid); -void vcpu_set_guest_debug(struct kvm_vm *vm, uint32_t vcpuid, - struct kvm_guest_debug *debug); -void vcpu_set_mp_state(struct kvm_vm *vm, uint32_t vcpuid, - struct kvm_mp_state *mp_state); struct kvm_reg_list *vcpu_get_reg_list(struct kvm_vm *vm, uint32_t vcpuid); -void vcpu_regs_get(struct kvm_vm *vm, uint32_t vcpuid, struct kvm_regs *re= gs); -void vcpu_regs_set(struct kvm_vm *vm, uint32_t vcpuid, struct kvm_regs *re= gs); + +static inline void vcpu_enable_cap(struct kvm_vm *vm, uint32_t vcpu_id, + struct kvm_enable_cap *cap) +{ + vcpu_ioctl(vm, vcpu_id, KVM_ENABLE_CAP, cap); +} + +static inline void vcpu_set_guest_debug(struct kvm_vm *vm, uint32_t vcpuid, + struct kvm_guest_debug *debug) +{ + vcpu_ioctl(vm, vcpuid, KVM_SET_GUEST_DEBUG, debug); +} + +static inline void vcpu_set_mp_state(struct kvm_vm *vm, uint32_t vcpuid, + struct kvm_mp_state *mp_state) +{ + vcpu_ioctl(vm, vcpuid, KVM_SET_MP_STATE, mp_state); +} + +static inline void vcpu_regs_get(struct kvm_vm *vm, uint32_t vcpuid, + struct kvm_regs *regs) +{ + vcpu_ioctl(vm, vcpuid, KVM_GET_REGS, regs); +} + +static inline void vcpu_regs_set(struct kvm_vm *vm, uint32_t vcpuid, + struct kvm_regs *regs) +{ + vcpu_ioctl(vm, vcpuid, KVM_SET_REGS, regs); +} +static inline void vcpu_sregs_get(struct kvm_vm *vm, uint32_t vcpuid, + struct kvm_sregs *sregs) +{ + vcpu_ioctl(vm, vcpuid, KVM_GET_SREGS, sregs); + +} +static inline void vcpu_sregs_set(struct kvm_vm *vm, uint32_t vcpuid, + struct kvm_sregs *sregs) +{ + vcpu_ioctl(vm, vcpuid, KVM_SET_SREGS, sregs); +} +static inline int _vcpu_sregs_set(struct kvm_vm *vm, uint32_t vcpuid, + struct kvm_sregs *sregs) +{ + return __vcpu_ioctl(vm, vcpuid, KVM_SET_SREGS, sregs); +} +static inline void vcpu_fpu_get(struct kvm_vm *vm, uint32_t vcpuid, + struct kvm_fpu *fpu) +{ + vcpu_ioctl(vm, vcpuid, KVM_GET_FPU, fpu); +} +static inline void vcpu_fpu_set(struct kvm_vm *vm, uint32_t vcpuid, + struct kvm_fpu *fpu) +{ + vcpu_ioctl(vm, vcpuid, KVM_SET_FPU, fpu); +} +static inline void vcpu_get_reg(struct kvm_vm *vm, uint32_t vcpuid, + struct kvm_one_reg *reg) +{ + vcpu_ioctl(vm, vcpuid, KVM_GET_ONE_REG, reg); +} +static inline void vcpu_set_reg(struct kvm_vm *vm, uint32_t vcpuid, + struct kvm_one_reg *reg) +{ + vcpu_ioctl(vm, vcpuid, KVM_SET_ONE_REG, reg); +} +#ifdef __KVM_HAVE_VCPU_EVENTS +static inline void vcpu_events_get(struct kvm_vm *vm, uint32_t vcpuid, + struct kvm_vcpu_events *events) +{ + vcpu_ioctl(vm, vcpuid, KVM_GET_VCPU_EVENTS, events); +} +static inline void vcpu_events_set(struct kvm_vm *vm, uint32_t vcpuid, + struct kvm_vcpu_events *events) +{ + vcpu_ioctl(vm, vcpuid, KVM_SET_VCPU_EVENTS, events); +} +#endif +#ifdef __x86_64__ +static inline void vcpu_nested_state_get(struct kvm_vm *vm, uint32_t vcpui= d, + struct kvm_nested_state *state) +{ + vcpu_ioctl(vm, vcpuid, KVM_GET_NESTED_STATE, state); +} +static inline int __vcpu_nested_state_set(struct kvm_vm *vm, uint32_t vcpu= id, + struct kvm_nested_state *state) +{ + return __vcpu_ioctl(vm, vcpuid, KVM_SET_NESTED_STATE, state); +} + +static inline void vcpu_nested_state_set(struct kvm_vm *vm, uint32_t vcpui= d, + struct kvm_nested_state *state) +{ + vcpu_ioctl(vm, vcpuid, KVM_SET_NESTED_STATE, state); +} +#endif +static inline int vcpu_get_stats_fd(struct kvm_vm *vm, uint32_t vcpuid) +{ + int fd =3D __vcpu_ioctl(vm, vcpuid, KVM_GET_STATS_FD, NULL); + + TEST_ASSERT(fd >=3D 0, KVM_IOCTL_ERROR(KVM_GET_STATS_FD, fd)); + return fd; +} + +void *vcpu_map_dirty_ring(struct kvm_vm *vm, uint32_t vcpuid); =20 /* * VM VCPU Args Set @@ -240,34 +337,6 @@ void vcpu_regs_set(struct kvm_vm *vm, uint32_t vcpuid,= struct kvm_regs *regs); */ void vcpu_args_set(struct kvm_vm *vm, uint32_t vcpuid, unsigned int num, .= ..); =20 -void vcpu_sregs_get(struct kvm_vm *vm, uint32_t vcpuid, - struct kvm_sregs *sregs); -void vcpu_sregs_set(struct kvm_vm *vm, uint32_t vcpuid, - struct kvm_sregs *sregs); -int _vcpu_sregs_set(struct kvm_vm *vm, uint32_t vcpuid, - struct kvm_sregs *sregs); -void vcpu_fpu_get(struct kvm_vm *vm, uint32_t vcpuid, - struct kvm_fpu *fpu); -void vcpu_fpu_set(struct kvm_vm *vm, uint32_t vcpuid, - struct kvm_fpu *fpu); -void vcpu_get_reg(struct kvm_vm *vm, uint32_t vcpuid, struct kvm_one_reg *= reg); -void vcpu_set_reg(struct kvm_vm *vm, uint32_t vcpuid, struct kvm_one_reg *= reg); -#ifdef __KVM_HAVE_VCPU_EVENTS -void vcpu_events_get(struct kvm_vm *vm, uint32_t vcpuid, - struct kvm_vcpu_events *events); -void vcpu_events_set(struct kvm_vm *vm, uint32_t vcpuid, - struct kvm_vcpu_events *events); -#endif -#ifdef __x86_64__ -void vcpu_nested_state_get(struct kvm_vm *vm, uint32_t vcpuid, - struct kvm_nested_state *state); -int __vcpu_nested_state_set(struct kvm_vm *vm, uint32_t vcpuid, - struct kvm_nested_state *state); -void vcpu_nested_state_set(struct kvm_vm *vm, uint32_t vcpuid, - struct kvm_nested_state *state); -#endif -void *vcpu_map_dirty_ring(struct kvm_vm *vm, uint32_t vcpuid); - int _kvm_device_check_attr(int dev_fd, uint32_t group, uint64_t attr); int kvm_device_check_attr(int dev_fd, uint32_t group, uint64_t attr); int _kvm_create_device(struct kvm_vm *vm, uint64_t type, bool test, int *f= d); @@ -406,7 +475,6 @@ kvm_userspace_memory_region_find(struct kvm_vm *vm, uin= t64_t start, void assert_on_unhandled_exception(struct kvm_vm *vm, uint32_t vcpuid); =20 int vm_get_stats_fd(struct kvm_vm *vm); -int vcpu_get_stats_fd(struct kvm_vm *vm, uint32_t vcpuid); =20 uint32_t guest_get_vcpuid(void); =20 diff --git a/tools/testing/selftests/kvm/include/x86_64/processor.h b/tools= /testing/selftests/kvm/include/x86_64/processor.h index d0d51adec76e..cf6c9738302f 100644 --- a/tools/testing/selftests/kvm/include/x86_64/processor.h +++ b/tools/testing/selftests/kvm/include/x86_64/processor.h @@ -413,12 +413,19 @@ void kvm_x86_state_cleanup(struct kvm_x86_state *stat= e); struct kvm_msr_list *kvm_get_msr_index_list(void); uint64_t kvm_get_feature_msr(uint64_t msr_index); struct kvm_cpuid2 *kvm_get_supported_cpuid(void); - struct kvm_cpuid2 *vcpu_get_cpuid(struct kvm_vm *vm, uint32_t vcpuid); -int __vcpu_set_cpuid(struct kvm_vm *vm, uint32_t vcpuid, - struct kvm_cpuid2 *cpuid); -void vcpu_set_cpuid(struct kvm_vm *vm, uint32_t vcpuid, - struct kvm_cpuid2 *cpuid); + +static inline int __vcpu_set_cpuid(struct kvm_vm *vm, uint32_t vcpuid, + struct kvm_cpuid2 *cpuid) +{ + return __vcpu_ioctl(vm, vcpuid, KVM_SET_CPUID2, cpuid); +} + +static inline void vcpu_set_cpuid(struct kvm_vm *vm, uint32_t vcpuid, + struct kvm_cpuid2 *cpuid) +{ + vcpu_ioctl(vm, vcpuid, KVM_SET_CPUID2, cpuid); +} =20 struct kvm_cpuid_entry2 * kvm_get_supported_cpuid_index(uint32_t function, uint32_t index); @@ -432,8 +439,15 @@ kvm_get_supported_cpuid_entry(uint32_t function) uint64_t vcpu_get_msr(struct kvm_vm *vm, uint32_t vcpuid, uint64_t msr_ind= ex); int _vcpu_set_msr(struct kvm_vm *vm, uint32_t vcpuid, uint64_t msr_index, uint64_t msr_value); -void vcpu_set_msr(struct kvm_vm *vm, uint32_t vcpuid, uint64_t msr_index, - uint64_t msr_value); + +static inline void vcpu_set_msr(struct kvm_vm *vm, uint32_t vcpuid, + uint64_t msr_index, uint64_t msr_value) +{ + int r =3D _vcpu_set_msr(vm, vcpuid, msr_index, msr_value); + + TEST_ASSERT(r =3D=3D 1, KVM_IOCTL_ERROR(KVM_SET_MSRS, r)); +} + =20 uint32_t kvm_get_cpuid_max_basic(void); uint32_t kvm_get_cpuid_max_extended(void); diff --git a/tools/testing/selftests/kvm/kvm_binary_stats_test.c b/tools/te= sting/selftests/kvm/kvm_binary_stats_test.c index 4b149b383678..bab8b49b52da 100644 --- a/tools/testing/selftests/kvm/kvm_binary_stats_test.c +++ b/tools/testing/selftests/kvm/kvm_binary_stats_test.c @@ -178,11 +178,7 @@ static void vm_stats_test(struct kvm_vm *vm) =20 static void vcpu_stats_test(struct kvm_vm *vm, int vcpu_id) { - int stats_fd; - - /* Get fd for VCPU stats */ - stats_fd =3D vcpu_get_stats_fd(vm, vcpu_id); - TEST_ASSERT(stats_fd >=3D 0, "Get VCPU stats fd"); + int stats_fd =3D vcpu_get_stats_fd(vm, vcpu_id); =20 stats_test(stats_fd); close(stats_fd); diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index 7b339f98070b..7ac4516d764c 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -135,34 +135,6 @@ int vm_enable_cap(struct kvm_vm *vm, struct kvm_enable= _cap *cap) return ret; } =20 -/* VCPU Enable Capability - * - * Input Args: - * vm - Virtual Machine - * vcpu_id - VCPU - * cap - Capability - * - * Output Args: None - * - * Return: On success, 0. On failure a TEST_ASSERT failure is produced. - * - * Enables a capability (KVM_CAP_*) on the VCPU. - */ -int vcpu_enable_cap(struct kvm_vm *vm, uint32_t vcpu_id, - struct kvm_enable_cap *cap) -{ - struct vcpu *vcpu =3D vcpu_find(vm, vcpu_id); - int r; - - TEST_ASSERT(vcpu, "cannot find vcpu %d", vcpu_id); - - r =3D ioctl(vcpu->fd, KVM_ENABLE_CAP, cap); - TEST_ASSERT(!r, "KVM_ENABLE_CAP vCPU ioctl failed,\n" - " rc: %i, errno: %i", r, errno); - - return r; -} - void vm_enable_dirty_ring(struct kvm_vm *vm, uint32_t ring_size) { struct kvm_enable_cap cap =3D { 0 }; @@ -1619,8 +1591,8 @@ struct kvm_run *vcpu_state(struct kvm_vm *vm, uint32_= t vcpuid) void vcpu_run(struct kvm_vm *vm, uint32_t vcpuid) { int ret =3D _vcpu_run(vm, vcpuid); - TEST_ASSERT(ret =3D=3D 0, "KVM_RUN IOCTL failed, " - "rc: %i errno: %i", ret, errno); + + TEST_ASSERT(!ret, KVM_IOCTL_ERROR(KVM_RUN, ret)); } =20 int _vcpu_run(struct kvm_vm *vm, uint32_t vcpuid) @@ -1663,43 +1635,6 @@ void vcpu_run_complete_io(struct kvm_vm *vm, uint32_= t vcpuid) ret, errno); } =20 -void vcpu_set_guest_debug(struct kvm_vm *vm, uint32_t vcpuid, - struct kvm_guest_debug *debug) -{ - struct vcpu *vcpu =3D vcpu_find(vm, vcpuid); - int ret =3D ioctl(vcpu->fd, KVM_SET_GUEST_DEBUG, debug); - - TEST_ASSERT(ret =3D=3D 0, "KVM_SET_GUEST_DEBUG failed: %d", ret); -} - -/* - * VM VCPU Set MP State - * - * Input Args: - * vm - Virtual Machine - * vcpuid - VCPU ID - * mp_state - mp_state to be set - * - * Output Args: None - * - * Return: None - * - * Sets the MP state of the VCPU given by vcpuid, to the state given - * by mp_state. - */ -void vcpu_set_mp_state(struct kvm_vm *vm, uint32_t vcpuid, - struct kvm_mp_state *mp_state) -{ - struct vcpu *vcpu =3D vcpu_find(vm, vcpuid); - int ret; - - TEST_ASSERT(vcpu !=3D NULL, "vcpu not found, vcpuid: %u", vcpuid); - - ret =3D ioctl(vcpu->fd, KVM_SET_MP_STATE, mp_state); - TEST_ASSERT(ret =3D=3D 0, "KVM_SET_MP_STATE IOCTL failed, " - "rc: %i errno: %i", ret, errno); -} - /* * VM VCPU Get Reg List * @@ -1729,216 +1664,6 @@ struct kvm_reg_list *vcpu_get_reg_list(struct kvm_v= m *vm, uint32_t vcpuid) return reg_list; } =20 -/* - * VM VCPU Regs Get - * - * Input Args: - * vm - Virtual Machine - * vcpuid - VCPU ID - * - * Output Args: - * regs - current state of VCPU regs - * - * Return: None - * - * Obtains the current register state for the VCPU specified by vcpuid - * and stores it at the location given by regs. - */ -void vcpu_regs_get(struct kvm_vm *vm, uint32_t vcpuid, struct kvm_regs *re= gs) -{ - struct vcpu *vcpu =3D vcpu_find(vm, vcpuid); - int ret; - - TEST_ASSERT(vcpu !=3D NULL, "vcpu not found, vcpuid: %u", vcpuid); - - ret =3D ioctl(vcpu->fd, KVM_GET_REGS, regs); - TEST_ASSERT(ret =3D=3D 0, "KVM_GET_REGS failed, rc: %i errno: %i", - ret, errno); -} - -/* - * VM VCPU Regs Set - * - * Input Args: - * vm - Virtual Machine - * vcpuid - VCPU ID - * regs - Values to set VCPU regs to - * - * Output Args: None - * - * Return: None - * - * Sets the regs of the VCPU specified by vcpuid to the values - * given by regs. - */ -void vcpu_regs_set(struct kvm_vm *vm, uint32_t vcpuid, struct kvm_regs *re= gs) -{ - struct vcpu *vcpu =3D vcpu_find(vm, vcpuid); - int ret; - - TEST_ASSERT(vcpu !=3D NULL, "vcpu not found, vcpuid: %u", vcpuid); - - ret =3D ioctl(vcpu->fd, KVM_SET_REGS, regs); - TEST_ASSERT(ret =3D=3D 0, "KVM_SET_REGS failed, rc: %i errno: %i", - ret, errno); -} - -#ifdef __KVM_HAVE_VCPU_EVENTS -void vcpu_events_get(struct kvm_vm *vm, uint32_t vcpuid, - struct kvm_vcpu_events *events) -{ - struct vcpu *vcpu =3D vcpu_find(vm, vcpuid); - int ret; - - TEST_ASSERT(vcpu !=3D NULL, "vcpu not found, vcpuid: %u", vcpuid); - - ret =3D ioctl(vcpu->fd, KVM_GET_VCPU_EVENTS, events); - TEST_ASSERT(ret =3D=3D 0, "KVM_GET_VCPU_EVENTS, failed, rc: %i errno: %i", - ret, errno); -} - -void vcpu_events_set(struct kvm_vm *vm, uint32_t vcpuid, - struct kvm_vcpu_events *events) -{ - struct vcpu *vcpu =3D vcpu_find(vm, vcpuid); - int ret; - - TEST_ASSERT(vcpu !=3D NULL, "vcpu not found, vcpuid: %u", vcpuid); - - ret =3D ioctl(vcpu->fd, KVM_SET_VCPU_EVENTS, events); - TEST_ASSERT(ret =3D=3D 0, "KVM_SET_VCPU_EVENTS, failed, rc: %i errno: %i", - ret, errno); -} -#endif - -#ifdef __x86_64__ -void vcpu_nested_state_get(struct kvm_vm *vm, uint32_t vcpuid, - struct kvm_nested_state *state) -{ - struct vcpu *vcpu =3D vcpu_find(vm, vcpuid); - int ret; - - TEST_ASSERT(vcpu !=3D NULL, "vcpu not found, vcpuid: %u", vcpuid); - - ret =3D ioctl(vcpu->fd, KVM_GET_NESTED_STATE, state); - TEST_ASSERT(ret =3D=3D 0, - "KVM_SET_NESTED_STATE failed, ret: %i errno: %i", - ret, errno); -} - -int __vcpu_nested_state_set(struct kvm_vm *vm, uint32_t vcpuid, - struct kvm_nested_state *state) -{ - struct vcpu *vcpu =3D vcpu_find(vm, vcpuid); - - TEST_ASSERT(vcpu !=3D NULL, "vcpu not found, vcpuid: %u", vcpuid); - - return ioctl(vcpu->fd, KVM_SET_NESTED_STATE, state); -} - -void vcpu_nested_state_set(struct kvm_vm *vm, uint32_t vcpuid, - struct kvm_nested_state *state) -{ - int ret =3D __vcpu_nested_state_set(vm, vcpuid, state); - - TEST_ASSERT(!ret, "KVM_SET_NESTED_STATE failed, ret: %i errno: %i", ret, = errno); -} -#endif - -/* - * VM VCPU System Regs Get - * - * Input Args: - * vm - Virtual Machine - * vcpuid - VCPU ID - * - * Output Args: - * sregs - current state of VCPU system regs - * - * Return: None - * - * Obtains the current system register state for the VCPU specified by - * vcpuid and stores it at the location given by sregs. - */ -void vcpu_sregs_get(struct kvm_vm *vm, uint32_t vcpuid, struct kvm_sregs *= sregs) -{ - struct vcpu *vcpu =3D vcpu_find(vm, vcpuid); - int ret; - - TEST_ASSERT(vcpu !=3D NULL, "vcpu not found, vcpuid: %u", vcpuid); - - ret =3D ioctl(vcpu->fd, KVM_GET_SREGS, sregs); - TEST_ASSERT(ret =3D=3D 0, "KVM_GET_SREGS failed, rc: %i errno: %i", - ret, errno); -} - -/* - * VM VCPU System Regs Set - * - * Input Args: - * vm - Virtual Machine - * vcpuid - VCPU ID - * sregs - Values to set VCPU system regs to - * - * Output Args: None - * - * Return: None - * - * Sets the system regs of the VCPU specified by vcpuid to the values - * given by sregs. - */ -void vcpu_sregs_set(struct kvm_vm *vm, uint32_t vcpuid, struct kvm_sregs *= sregs) -{ - int ret =3D _vcpu_sregs_set(vm, vcpuid, sregs); - TEST_ASSERT(ret =3D=3D 0, "KVM_SET_SREGS IOCTL failed, " - "rc: %i errno: %i", ret, errno); -} - -int _vcpu_sregs_set(struct kvm_vm *vm, uint32_t vcpuid, struct kvm_sregs *= sregs) -{ - struct vcpu *vcpu =3D vcpu_find(vm, vcpuid); - - TEST_ASSERT(vcpu !=3D NULL, "vcpu not found, vcpuid: %u", vcpuid); - - return ioctl(vcpu->fd, KVM_SET_SREGS, sregs); -} - -void vcpu_fpu_get(struct kvm_vm *vm, uint32_t vcpuid, struct kvm_fpu *fpu) -{ - int ret; - - ret =3D __vcpu_ioctl(vm, vcpuid, KVM_GET_FPU, fpu); - TEST_ASSERT(ret =3D=3D 0, "KVM_GET_FPU failed, rc: %i errno: %i (%s)", - ret, errno, strerror(errno)); -} - -void vcpu_fpu_set(struct kvm_vm *vm, uint32_t vcpuid, struct kvm_fpu *fpu) -{ - int ret; - - ret =3D __vcpu_ioctl(vm, vcpuid, KVM_SET_FPU, fpu); - TEST_ASSERT(ret =3D=3D 0, "KVM_SET_FPU failed, rc: %i errno: %i (%s)", - ret, errno, strerror(errno)); -} - -void vcpu_get_reg(struct kvm_vm *vm, uint32_t vcpuid, struct kvm_one_reg *= reg) -{ - int ret; - - ret =3D __vcpu_ioctl(vm, vcpuid, KVM_GET_ONE_REG, reg); - TEST_ASSERT(ret =3D=3D 0, "KVM_GET_ONE_REG failed, rc: %i errno: %i (%s)", - ret, errno, strerror(errno)); -} - -void vcpu_set_reg(struct kvm_vm *vm, uint32_t vcpuid, struct kvm_one_reg *= reg) -{ - int ret; - - ret =3D __vcpu_ioctl(vm, vcpuid, KVM_SET_ONE_REG, reg); - TEST_ASSERT(ret =3D=3D 0, "KVM_SET_ONE_REG failed, rc: %i errno: %i (%s)", - ret, errno, strerror(errno)); -} - int __vcpu_ioctl(struct kvm_vm *vm, uint32_t vcpuid, unsigned long cmd, void *arg) { @@ -2534,10 +2259,3 @@ int vm_get_stats_fd(struct kvm_vm *vm) { return ioctl(vm->fd, KVM_GET_STATS_FD, NULL); } - -int vcpu_get_stats_fd(struct kvm_vm *vm, uint32_t vcpuid) -{ - struct vcpu *vcpu =3D vcpu_find(vm, vcpuid); - - return ioctl(vcpu->fd, KVM_GET_STATS_FD, NULL); -} diff --git a/tools/testing/selftests/kvm/lib/x86_64/processor.c b/tools/tes= ting/selftests/kvm/lib/x86_64/processor.c index 33ea5e9955d9..27c40b5ab01d 100644 --- a/tools/testing/selftests/kvm/lib/x86_64/processor.c +++ b/tools/testing/selftests/kvm/lib/x86_64/processor.c @@ -803,18 +803,15 @@ uint64_t kvm_get_feature_msr(uint64_t msr_index) */ struct kvm_cpuid2 *vcpu_get_cpuid(struct kvm_vm *vm, uint32_t vcpuid) { - struct vcpu *vcpu =3D vcpu_find(vm, vcpuid); struct kvm_cpuid2 *cpuid; int max_ent; int rc =3D -1; =20 - TEST_ASSERT(vcpu !=3D NULL, "vcpu not found, vcpuid: %u", vcpuid); - cpuid =3D allocate_kvm_cpuid2(); max_ent =3D cpuid->nent; =20 for (cpuid->nent =3D 1; cpuid->nent <=3D max_ent; cpuid->nent++) { - rc =3D ioctl(vcpu->fd, KVM_GET_CPUID2, cpuid); + rc =3D __vcpu_ioctl(vm, vcpuid, KVM_GET_CPUID2, cpuid); if (!rc) break; =20 @@ -823,9 +820,7 @@ struct kvm_cpuid2 *vcpu_get_cpuid(struct kvm_vm *vm, ui= nt32_t vcpuid) rc, errno); } =20 - TEST_ASSERT(rc =3D=3D 0, "KVM_GET_CPUID2 failed, rc: %i errno: %i", - rc, errno); - + TEST_ASSERT(!rc, KVM_IOCTL_ERROR(KVM_GET_CPUID2, rc)); return cpuid; } =20 @@ -863,132 +858,37 @@ kvm_get_supported_cpuid_index(uint32_t function, uin= t32_t index) return entry; } =20 - -int __vcpu_set_cpuid(struct kvm_vm *vm, uint32_t vcpuid, - struct kvm_cpuid2 *cpuid) -{ - struct vcpu *vcpu =3D vcpu_find(vm, vcpuid); - - TEST_ASSERT(vcpu !=3D NULL, "vcpu not found, vcpuid: %u", vcpuid); - - return ioctl(vcpu->fd, KVM_SET_CPUID2, cpuid); -} - -/* - * VM VCPU CPUID Set - * - * Input Args: - * vm - Virtual Machine - * vcpuid - VCPU id - * cpuid - The CPUID values to set. - * - * Output Args: None - * - * Return: void - * - * Set the VCPU's CPUID. - */ -void vcpu_set_cpuid(struct kvm_vm *vm, - uint32_t vcpuid, struct kvm_cpuid2 *cpuid) -{ - int rc; - - rc =3D __vcpu_set_cpuid(vm, vcpuid, cpuid); - TEST_ASSERT(rc =3D=3D 0, "KVM_SET_CPUID2 failed, rc: %i errno: %i", - rc, errno); - -} - -/* - * VCPU Get MSR - * - * Input Args: - * vm - Virtual Machine - * vcpuid - VCPU ID - * msr_index - Index of MSR - * - * Output Args: None - * - * Return: On success, value of the MSR. On failure a TEST_ASSERT is produ= ced. - * - * Get value of MSR for VCPU. - */ uint64_t vcpu_get_msr(struct kvm_vm *vm, uint32_t vcpuid, uint64_t msr_ind= ex) { - struct vcpu *vcpu =3D vcpu_find(vm, vcpuid); struct { struct kvm_msrs header; struct kvm_msr_entry entry; } buffer =3D {}; int r; =20 - TEST_ASSERT(vcpu !=3D NULL, "vcpu not found, vcpuid: %u", vcpuid); buffer.header.nmsrs =3D 1; buffer.entry.index =3D msr_index; - r =3D ioctl(vcpu->fd, KVM_GET_MSRS, &buffer.header); - TEST_ASSERT(r =3D=3D 1, "KVM_GET_MSRS IOCTL failed,\n" - " rc: %i errno: %i", r, errno); + + r =3D __vcpu_ioctl(vm, vcpuid, KVM_GET_MSRS, &buffer.header); + TEST_ASSERT(r =3D=3D 1, KVM_IOCTL_ERROR(KVM_GET_MSRS, r)); =20 return buffer.entry.data; } =20 -/* - * _VCPU Set MSR - * - * Input Args: - * vm - Virtual Machine - * vcpuid - VCPU ID - * msr_index - Index of MSR - * msr_value - New value of MSR - * - * Output Args: None - * - * Return: The result of KVM_SET_MSRS. - * - * Sets the value of an MSR for the given VCPU. - */ int _vcpu_set_msr(struct kvm_vm *vm, uint32_t vcpuid, uint64_t msr_index, uint64_t msr_value) { - struct vcpu *vcpu =3D vcpu_find(vm, vcpuid); struct { struct kvm_msrs header; struct kvm_msr_entry entry; } buffer =3D {}; - int r; =20 - TEST_ASSERT(vcpu !=3D NULL, "vcpu not found, vcpuid: %u", vcpuid); memset(&buffer, 0, sizeof(buffer)); buffer.header.nmsrs =3D 1; buffer.entry.index =3D msr_index; buffer.entry.data =3D msr_value; - r =3D ioctl(vcpu->fd, KVM_SET_MSRS, &buffer.header); - return r; -} =20 -/* - * VCPU Set MSR - * - * Input Args: - * vm - Virtual Machine - * vcpuid - VCPU ID - * msr_index - Index of MSR - * msr_value - New value of MSR - * - * Output Args: None - * - * Return: On success, nothing. On failure a TEST_ASSERT is produced. - * - * Set value of MSR for VCPU. - */ -void vcpu_set_msr(struct kvm_vm *vm, uint32_t vcpuid, uint64_t msr_index, - uint64_t msr_value) -{ - int r; - - r =3D _vcpu_set_msr(vm, vcpuid, msr_index, msr_value); - TEST_ASSERT(r =3D=3D 1, "KVM_SET_MSRS IOCTL failed,\n" - " rc: %i errno: %i", r, errno); + return __vcpu_ioctl(vm, vcpuid, KVM_SET_MSRS, &buffer.header); } =20 void vcpu_args_set(struct kvm_vm *vm, uint32_t vcpuid, unsigned int num, .= ..) --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 08273C433F5 for ; Wed, 4 May 2022 22:51:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379326AbiEDWyo (ORCPT ); Wed, 4 May 2022 18:54:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41294 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379222AbiEDWxf (ORCPT ); Wed, 4 May 2022 18:53:35 -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 CFC525372E for ; Wed, 4 May 2022 15:49:49 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id bj12-20020a170902850c00b0015adf30aaccso1364177plb.15 for ; Wed, 04 May 2022 15:49:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=zKnCLZBl0iKbuaUJ2c8P14+HTnYeKNOrT10EIR+YEXk=; b=MmrNHNzQ+BmNHxua+Mydg7tD8a+0M4PzDyq1R5HsLSodMO/j6CTd/7xoM8r+nyVUzi yuTF8+xUtDP/vwQgB/yIms7KZ4l91i4bTBEaak0o42hPhYexEaZ5+9UdHijDAQgQ5deP yl9yTA4ajtsIwAFR/dOY4AU7/c7mHpUybR1QnQ55WV6xpGwX9ex3RzgM1+HhRNUWhxfj L1qUqPO6MC9MU8m0fPnu3VcqEwlltKZkXX9StgQznXiU9eUNvpS7/9RDK4EHsEFBYO0p GaERpEvTiBEPR0XR9zDyGHpFN3HNIum7kla2GKKaZdN53SPLi7S+yOl4w+NyRUIYGQPe ZMag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=zKnCLZBl0iKbuaUJ2c8P14+HTnYeKNOrT10EIR+YEXk=; b=adEUyR3WNCTMZEDZPw4FmAuNta67U9v372M14zimGh4WKUvsV4YXG9gJxCyz/SFgf2 B0rzeCLO4mtSUMlA+AR9O/CJ8OQ0Yempnsj4gVd6MjGnkgWAbjIFccY2QQ0pfWdlnH2B oNijx1Db3ajlffYD3pTKHBUQ+p44ExizlmPKBOEVovjXkusbrVhNQ3oG8xXGG4ASuerL 0v50sC1XSh2t+hIPQVsCznmmZXli0KWj2cEu1BhFsazKqLK6nHkP6l/0h00GAyDwEn5z q9JdW0A+DvwAziGS3YrnnwowsXS3uDL3D2U897tHP6OVSMm/qTGDeBMW6KLb8XmC2sCA hEMA== X-Gm-Message-State: AOAM531rAKzY6o9lhNfoMGGEw2tLHg1T8quCCfw0o/4SnzF89XX1X4iE odZ8RJ/+6MLs0681KK4v06OVvxQU0RA= X-Google-Smtp-Source: ABdhPJzX9q1EH0NVpgVFri34UYpD+hyxfHrnn9pZ4155kGZTjgh2EWV1zLz8Tcx94vzs5yLdnN9Fc2LRKvs= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:e510:b0:1d9:ee23:9fa1 with SMTP id t16-20020a17090ae51000b001d9ee239fa1mr139773pjy.0.1651704589073; Wed, 04 May 2022 15:49:49 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:16 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-11-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 010/128] KVM: selftests: Add __vcpu_run() helper From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add __vcpu_run() so that tests that want to avoid asserts on KVM_RUN failures don't need to open code the ioctl() call. Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/aarch64/vgic_init.c | 6 ++---- tools/testing/selftests/kvm/dirty_log_test.c | 6 ++---- tools/testing/selftests/kvm/include/kvm_util_base.h | 6 ++++++ tools/testing/selftests/kvm/lib/kvm_util.c | 6 ++---- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/tools/testing/selftests/kvm/aarch64/vgic_init.c b/tools/testin= g/selftests/kvm/aarch64/vgic_init.c index 373c8005c2e7..9a153b2ea3de 100644 --- a/tools/testing/selftests/kvm/aarch64/vgic_init.c +++ b/tools/testing/selftests/kvm/aarch64/vgic_init.c @@ -55,10 +55,8 @@ static void guest_code(void) static int run_vcpu(struct kvm_vm *vm, uint32_t vcpuid) { ucall_init(vm, NULL); - int ret =3D __vcpu_ioctl(vm, vcpuid, KVM_RUN, NULL); - if (ret) - return -errno; - return 0; + + return __vcpu_run(vm, vcpuid) ? -errno : 0; } =20 static struct vm_gic vm_gic_create_with_vcpus(uint32_t gic_dev_type, uint3= 2_t nr_vcpus) diff --git a/tools/testing/selftests/kvm/dirty_log_test.c b/tools/testing/s= elftests/kvm/dirty_log_test.c index 01c01d40201f..5752486764c9 100644 --- a/tools/testing/selftests/kvm/dirty_log_test.c +++ b/tools/testing/selftests/kvm/dirty_log_test.c @@ -509,7 +509,7 @@ static void generate_random_array(uint64_t *guest_array= , uint64_t size) =20 static void *vcpu_worker(void *data) { - int ret, vcpu_fd; + int ret; struct kvm_vm *vm =3D data; uint64_t *guest_array; uint64_t pages_count =3D 0; @@ -517,8 +517,6 @@ static void *vcpu_worker(void *data) + sizeof(sigset_t)); sigset_t *sigset =3D (sigset_t *) &sigmask->sigset; =20 - vcpu_fd =3D vcpu_get_fd(vm, VCPU_ID); - /* * SIG_IPI is unblocked atomically while in KVM_RUN. It causes the * ioctl to return with -EINTR, but it is still pending and we need @@ -539,7 +537,7 @@ static void *vcpu_worker(void *data) generate_random_array(guest_array, TEST_PAGES_PER_LOOP); pages_count +=3D TEST_PAGES_PER_LOOP; /* Let the guest dirty the random pages */ - ret =3D ioctl(vcpu_fd, KVM_RUN, NULL); + ret =3D __vcpu_run(vm, VCPU_ID); if (ret =3D=3D -1 && errno =3D=3D EINTR) { int sig =3D -1; sigwait(sigset, &sig); diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index 4f18f03c537f..6b7a5297053e 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -208,6 +208,12 @@ vm_paddr_t addr_gva2gpa(struct kvm_vm *vm, vm_vaddr_t = gva); struct kvm_run *vcpu_state(struct kvm_vm *vm, uint32_t vcpuid); void vcpu_run(struct kvm_vm *vm, uint32_t vcpuid); int _vcpu_run(struct kvm_vm *vm, uint32_t vcpuid); + +static inline int __vcpu_run(struct kvm_vm *vm, uint32_t vcpuid) +{ + return __vcpu_ioctl(vm, vcpuid, KVM_RUN, NULL); +} + int vcpu_get_fd(struct kvm_vm *vm, uint32_t vcpuid); void vcpu_run_complete_io(struct kvm_vm *vm, uint32_t vcpuid); struct kvm_reg_list *vcpu_get_reg_list(struct kvm_vm *vm, uint32_t vcpuid); diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index 7ac4516d764c..45895c9ca35a 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -1597,12 +1597,10 @@ void vcpu_run(struct kvm_vm *vm, uint32_t vcpuid) =20 int _vcpu_run(struct kvm_vm *vm, uint32_t vcpuid) { - struct vcpu *vcpu =3D vcpu_find(vm, vcpuid); int rc; =20 - TEST_ASSERT(vcpu !=3D NULL, "vcpu not found, vcpuid: %u", vcpuid); do { - rc =3D ioctl(vcpu->fd, KVM_RUN, NULL); + rc =3D __vcpu_run(vm, vcpuid); } while (rc =3D=3D -1 && errno =3D=3D EINTR); =20 assert_on_unhandled_exception(vm, vcpuid); @@ -1627,7 +1625,7 @@ void vcpu_run_complete_io(struct kvm_vm *vm, uint32_t= vcpuid) TEST_ASSERT(vcpu !=3D NULL, "vcpu not found, vcpuid: %u", vcpuid); =20 vcpu->state->immediate_exit =3D 1; - ret =3D ioctl(vcpu->fd, KVM_RUN, NULL); + ret =3D __vcpu_run(vm, vcpuid); vcpu->state->immediate_exit =3D 0; =20 TEST_ASSERT(ret =3D=3D -1 && errno =3D=3D EINTR, --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 C240AC4321E for ; Wed, 4 May 2022 22:56:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1380021AbiEDW7i (ORCPT ); Wed, 4 May 2022 18:59:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40772 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379245AbiEDWxh (ORCPT ); Wed, 4 May 2022 18:53:37 -0400 Received: from mail-pf1-x449.google.com (mail-pf1-x449.google.com [IPv6:2607:f8b0:4864:20::449]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8F64A53E00 for ; Wed, 4 May 2022 15:49:51 -0700 (PDT) Received: by mail-pf1-x449.google.com with SMTP id g5-20020a62f945000000b0050578328060so818393pfm.17 for ; Wed, 04 May 2022 15:49:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=RSDJ745FCphTNvqXw5uFQREWtoioB/PaIos9DDppyWw=; b=oZ/X9DlVHgrCDxUpGT4sgQW8stjbvmGDtc8TWZWTAgjt8ks3kbmWV6duE6LmBa8I6G 2nKsESB6OCm++OL8zzx2XtRt8vbE3sTkYlMSDEoJhDXCM+9edXSl3UD2DuQO/rX1Pdy/ k8RvNOdMdItWFiKuFYVRvL3frS11egfJltj55lza18KWSOtC2OEO2Mx4OFT+Io4KuT2b kpB+rVw1yXoJ/aVUi516ES6yWrBbajMbDy5b9CgLQuJVGSYJVIetGfY4yMp1KqDlWumT FTqcxzCMVKw6V8C4pHl/0SftLGXBjXFQYtbBf1KuTQH0kTpV7hhyscxuSumIauT8b/4s EC4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=RSDJ745FCphTNvqXw5uFQREWtoioB/PaIos9DDppyWw=; b=PMSHc+aI3uP9VNwib+REvzJ12eURmpYRDoe6ab10uWhWIDVxnq17SIi5b8L8utHKhg s2Wc8WBPgrJCdlg8t9rK9rx02b2Lw5aKdrAt0xOqch0nlISz3qCWxAcl2QpAtRE0GERj wkTemFemmrPS/TXAfnfThbZgzDHhyjP1q9476VDSQ0bzMsGjgCsNKyGOsbwPuuVoZnEx zZ9LE9CJy0spEm80cWs16R44Jc2+wEGtm5ooGbXX+Y94egpI2ljZV7GI4ln/irec7TBc HjcqGJfuJL9gaXWnKXhxEU07XG+S3V3jABcNexP2L+VOsfQoyue0mSdKjnmStFOoiCKr JyhA== X-Gm-Message-State: AOAM533CE7avPu1fgL4C42h095vyVJvJlPBKkYKrcbqX06zzitsUsjlr iC6ZEK/k6roJsmkRfK7Am7d74U6YUjw= X-Google-Smtp-Source: ABdhPJxBI1IzjPiVO4Es15vna+ytUi3AjeD9zbHHoabY6Z8o7u8NsyabMQ7V/VC75TepWxFO/1w9hT8+6yY= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:903:244d:b0:15e:a3a2:5a75 with SMTP id l13-20020a170903244d00b0015ea3a25a75mr17783647pls.89.1651704591007; Wed, 04 May 2022 15:49:51 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:17 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-12-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 011/128] KVM: selftests: Use vcpu_access_device_attr() in arm64 code From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use vcpu_access_device_attr() in arm's arch_timer test instead of manually retrieving the vCPU's fd. This will allow dropping vcpu_get_fd() in a future patch. Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/aarch64/arch_timer.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/tools/testing/selftests/kvm/aarch64/arch_timer.c b/tools/testi= ng/selftests/kvm/aarch64/arch_timer.c index 3b940a101bc0..f55c4c20d8b3 100644 --- a/tools/testing/selftests/kvm/aarch64/arch_timer.c +++ b/tools/testing/selftests/kvm/aarch64/arch_timer.c @@ -349,12 +349,10 @@ static void test_run(struct kvm_vm *vm) static void test_init_timer_irq(struct kvm_vm *vm) { /* Timer initid should be same for all the vCPUs, so query only vCPU-0 */ - int vcpu0_fd =3D vcpu_get_fd(vm, 0); - - kvm_device_access(vcpu0_fd, KVM_ARM_VCPU_TIMER_CTRL, - KVM_ARM_VCPU_TIMER_IRQ_PTIMER, &ptimer_irq, false); - kvm_device_access(vcpu0_fd, KVM_ARM_VCPU_TIMER_CTRL, - KVM_ARM_VCPU_TIMER_IRQ_VTIMER, &vtimer_irq, false); + vcpu_access_device_attr(vm, 0, KVM_ARM_VCPU_TIMER_CTRL, + KVM_ARM_VCPU_TIMER_IRQ_PTIMER, &ptimer_irq, false); + vcpu_access_device_attr(vm, 0, KVM_ARM_VCPU_TIMER_CTRL, + KVM_ARM_VCPU_TIMER_IRQ_VTIMER, &vtimer_irq, false); =20 sync_global_to_guest(vm, ptimer_irq); sync_global_to_guest(vm, vtimer_irq); --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 A9830C4167B for ; Wed, 4 May 2022 22:56:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379970AbiEDW7f (ORCPT ); Wed, 4 May 2022 18:59:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41212 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379246AbiEDWxh (ORCPT ); Wed, 4 May 2022 18:53:37 -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 2632B53E0E for ; Wed, 4 May 2022 15:49:53 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id gg5-20020a17090b0a0500b001d9852bd129so1315403pjb.9 for ; Wed, 04 May 2022 15:49:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=tN5g3ph93jNOSEVUREKui1+khzaKjUQx/GJZWoxm6Ug=; b=rVjdi/ZOIIYdCNIqQS4d2g2lT+YOhy9gLOiBhSJbp2RNGFmKzWYAzVEG5huyNgEWoy 7oncgiPi5dpBxeGkjXGLZHIuH802r3dWcL5FSIL7pI964jUJajmxUbtD0EAbxBLV9ENo eQQqLH3JnsIXCnkThsGexuq3X658ipPxoM97OHgGRIMsCAPuMWj5BQrTaNmX8j8con3+ wM5MJaH7x7gco7zyvz+k6uG6wAv52W22q0Etf4OXdveD0eF71S1ljE+uS4LJOEhOUUYk IlXonds98uO81LAOozrVQeG4ljNozx8yErPYVnGETeEYPeDhOhVp6h2TdhmJdsSYFirC +wGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=tN5g3ph93jNOSEVUREKui1+khzaKjUQx/GJZWoxm6Ug=; b=LibFkxW8Wbz+7g/rXbJe6SrBny4mQL5v4tSGdjGuXVTuAsr11HkjVDagcVzchaiYqH j8ddL6sYbHs9mvQoK7Se2FmhrS/kw0KLLmVxmn4jVJ6ny/ob6GsPEYiK3aVBhbEVjTWn nG07P19CQdZRo2D2jAWfJnI2WyKeEig0MqUTqam6MEmtmUytk/2BCcJE7vTdTrrqlTwj UDQxL18Um+m/RjAxqbit5Adf8xE8fPsOsYUFkjjCSX5Psi1hd8dp0x/56nPL4mEwOEoO fuEz3eFUjyVizKqKsd/VLa8pYU/SnfjbDGWa0YvpHgwDVWsDbNFVg17MYgLK/n4+u3k7 ZrRg== X-Gm-Message-State: AOAM531eWf/29u7ZutV5FPSmYrlhpvzeHhou+3wuNxBWTNtcvKDYyd2P ELW023xJR0PnQeyhUxmcXqwHL9ysXCQ= X-Google-Smtp-Source: ABdhPJzPRkUtgpAsl3Q2gmMdKlhCWtSvOFR4jZ9iXbf7HP9hEc0E+x+rnM6/CeEWMBDWVmhiuCFNheRQtQw= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:d512:b0:15e:93de:762a with SMTP id b18-20020a170902d51200b0015e93de762amr21785035plg.132.1651704592846; Wed, 04 May 2022 15:49:52 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:18 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-13-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 012/128] KVM: selftests: Remove vcpu_get_fd() From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Drop vcpu_get_fd(), it no longer has any users, and really should not exist as the framework has failed if tests need to manually operate on a vCPU fd. Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/include/kvm_util_base.h | 1 - tools/testing/selftests/kvm/lib/kvm_util.c | 9 --------- 2 files changed, 10 deletions(-) diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index 6b7a5297053e..c2dfc4341b31 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -214,7 +214,6 @@ static inline int __vcpu_run(struct kvm_vm *vm, uint32_= t vcpuid) return __vcpu_ioctl(vm, vcpuid, KVM_RUN, NULL); } =20 -int vcpu_get_fd(struct kvm_vm *vm, uint32_t vcpuid); void vcpu_run_complete_io(struct kvm_vm *vm, uint32_t vcpuid); struct kvm_reg_list *vcpu_get_reg_list(struct kvm_vm *vm, uint32_t vcpuid); =20 diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index 45895c9ca35a..73123b9d9625 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -1608,15 +1608,6 @@ int _vcpu_run(struct kvm_vm *vm, uint32_t vcpuid) return rc; } =20 -int vcpu_get_fd(struct kvm_vm *vm, uint32_t vcpuid) -{ - struct vcpu *vcpu =3D vcpu_find(vm, vcpuid); - - TEST_ASSERT(vcpu !=3D NULL, "vcpu not found, vcpuid: %u", vcpuid); - - return vcpu->fd; -} - void vcpu_run_complete_io(struct kvm_vm *vm, uint32_t vcpuid) { struct vcpu *vcpu =3D vcpu_find(vm, vcpuid); --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 A551EC3527E for ; Wed, 4 May 2022 22:56:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379917AbiEDW7d (ORCPT ); Wed, 4 May 2022 18:59:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40762 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379258AbiEDWxh (ORCPT ); Wed, 4 May 2022 18:53:37 -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 F004153E14 for ; Wed, 4 May 2022 15:49:54 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id g11-20020a17090a640b00b001dca0c276e7so1314850pjj.4 for ; Wed, 04 May 2022 15:49:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=dsqd2BC0he8cu3KMlN3fGhXr8Guk3V++LSAF0rvZtfQ=; b=pmSzKDfTWyW5D0ejUbtOpzAu5j7OkBtuF8fIUi0PswzOGWlXJYJ4pUwpHHAAr1P+XH rL8AHdGmlEeoJGRDagq6c6NMEzln75pR2TGRwOuZk5qPF10RnH5A5dluP0pn9CCPdvwv 8Din/NAEgPbDmDxyKBLYxMnGYiRKYUqbo7f2S/Rr1R7zc6ku7orxluaZg/96o7pCDrPv lV0TQMeXbDL5pr+IHswjr/PUN7rDJPv85sHCGLMqZEh6fQExh84LHGM/Y8qWV/wB2TB+ 1mhvHBSaVJpj06d6Cp187gbyQLyHOgcjqbGwgg8ihi3nAiJSybDiAJ9utdP8P511lIEQ doWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=dsqd2BC0he8cu3KMlN3fGhXr8Guk3V++LSAF0rvZtfQ=; b=kMgp4/H4+Cwc4iPXApcUF8oBT4bXNVdiCX55PnN+NC/j9r3gAXdBze8LeMkF9HyU7b 3hRkzAnlnV3Zt11yU+/gJhTvnGpGVAT9aT+UK8rxoTn45aY7/H3v9QdBkOGHgOuVqx6v wQElc44fHIeSE6I+LifvuSK/om7cyC/iOfvnWk6sO3fWMfFR37s1scEgOhRWmeCj6Geg nWJ3iqoysJScqI0ByuZ7UPFcwzj0a59OCPznV4136wSS/z8aAQBS2OSQqR/zglS0H2+W FADBXwWs1+EoqprE2WveHD/UHSwi7Qkn+L02X1XaXyQwM8TAuRjDWdOOcP3Z6YN6KEs8 3Kiw== X-Gm-Message-State: AOAM533xOYEZykkGc6aVtUyP/VbVvqngBeQVHVKbR1A721tNAcZYunOL GdMASLQvQjlRVAMjeqmJxlxn2r5PScA= X-Google-Smtp-Source: ABdhPJyr59EMatyWhqepevXEWefEjBJYSvGWE9KtZe3WD/Mr8qKZTtnUx6xIQ634iaTVd0I9Y2gUYjfSa/4= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:cf0b:b0:15a:2681:9180 with SMTP id i11-20020a170902cf0b00b0015a26819180mr24015658plg.137.1651704594480; Wed, 04 May 2022 15:49:54 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:19 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-14-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 013/128] KVM: selftests: Add vcpu_get() to retrieve and assert on vCPU existence From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add vcpu_get() to wrap vcpu_find() and deduplicate a pile of code that asserts the requested vCPU exists. Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/lib/kvm_util.c | 56 ++++++------------- .../selftests/kvm/lib/kvm_util_internal.h | 2 +- .../selftests/kvm/lib/s390x/processor.c | 5 +- .../selftests/kvm/lib/x86_64/processor.c | 4 +- 4 files changed, 20 insertions(+), 47 deletions(-) diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index 73123b9d9625..940decfaa633 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -561,23 +561,7 @@ kvm_userspace_memory_region_find(struct kvm_vm *vm, ui= nt64_t start, return ®ion->region; } =20 -/* - * VCPU Find - * - * Input Args: - * vm - Virtual Machine - * vcpuid - VCPU ID - * - * Output Args: None - * - * Return: - * Pointer to VCPU structure - * - * Locates a vcpu structure that describes the VCPU specified by vcpuid and - * returns a pointer to it. Returns NULL if the VM doesn't contain a VCPU - * for the specified vcpuid. - */ -struct vcpu *vcpu_find(struct kvm_vm *vm, uint32_t vcpuid) +static struct vcpu *vcpu_find(struct kvm_vm *vm, uint32_t vcpuid) { struct vcpu *vcpu; =20 @@ -589,6 +573,14 @@ struct vcpu *vcpu_find(struct kvm_vm *vm, uint32_t vcp= uid) return NULL; } =20 +struct vcpu *vcpu_get(struct kvm_vm *vm, uint32_t vcpuid) +{ + struct vcpu *vcpu =3D vcpu_find(vm, vcpuid); + + TEST_ASSERT(vcpu, "vCPU %d does not exist", vcpuid); + return vcpu; +} + /* * VM VCPU Remove * @@ -1568,8 +1560,7 @@ void vm_create_irqchip(struct kvm_vm *vm) */ struct kvm_run *vcpu_state(struct kvm_vm *vm, uint32_t vcpuid) { - struct vcpu *vcpu =3D vcpu_find(vm, vcpuid); - TEST_ASSERT(vcpu !=3D NULL, "vcpu not found, vcpuid: %u", vcpuid); + struct vcpu *vcpu =3D vcpu_get(vm, vcpuid); =20 return vcpu->state; } @@ -1610,11 +1601,9 @@ int _vcpu_run(struct kvm_vm *vm, uint32_t vcpuid) =20 void vcpu_run_complete_io(struct kvm_vm *vm, uint32_t vcpuid) { - struct vcpu *vcpu =3D vcpu_find(vm, vcpuid); + struct vcpu *vcpu =3D vcpu_get(vm, vcpuid); int ret; =20 - TEST_ASSERT(vcpu !=3D NULL, "vcpu not found, vcpuid: %u", vcpuid); - vcpu->state->immediate_exit =3D 1; ret =3D __vcpu_run(vm, vcpuid); vcpu->state->immediate_exit =3D 0; @@ -1656,14 +1645,9 @@ struct kvm_reg_list *vcpu_get_reg_list(struct kvm_vm= *vm, uint32_t vcpuid) int __vcpu_ioctl(struct kvm_vm *vm, uint32_t vcpuid, unsigned long cmd, void *arg) { - struct vcpu *vcpu =3D vcpu_find(vm, vcpuid); - int ret; + struct vcpu *vcpu =3D vcpu_get(vm, vcpuid); =20 - TEST_ASSERT(vcpu !=3D NULL, "vcpu not found, vcpuid: %u", vcpuid); - - ret =3D ioctl(vcpu->fd, cmd, arg); - - return ret; + return ioctl(vcpu->fd, cmd, arg); } =20 void _vcpu_ioctl(struct kvm_vm *vm, uint32_t vcpuid, unsigned long cmd, @@ -1676,15 +1660,11 @@ void _vcpu_ioctl(struct kvm_vm *vm, uint32_t vcpuid= , unsigned long cmd, =20 void *vcpu_map_dirty_ring(struct kvm_vm *vm, uint32_t vcpuid) { - struct vcpu *vcpu; + struct vcpu *vcpu =3D vcpu_get(vm, vcpuid); uint32_t size =3D vm->dirty_ring_size; =20 TEST_ASSERT(size > 0, "Should enable dirty ring first"); =20 - vcpu =3D vcpu_find(vm, vcpuid); - - TEST_ASSERT(vcpu, "Cannot find vcpu %u", vcpuid); - if (!vcpu->dirty_gfns) { void *addr; =20 @@ -1840,9 +1820,7 @@ int kvm_device_access(int dev_fd, uint32_t group, uin= t64_t attr, int _vcpu_has_device_attr(struct kvm_vm *vm, uint32_t vcpuid, uint32_t gro= up, uint64_t attr) { - struct vcpu *vcpu =3D vcpu_find(vm, vcpuid); - - TEST_ASSERT(vcpu, "nonexistent vcpu id: %d", vcpuid); + struct vcpu *vcpu =3D vcpu_get(vm, vcpuid); =20 return _kvm_device_check_attr(vcpu->fd, group, attr); } @@ -1859,9 +1837,7 @@ int vcpu_has_device_attr(struct kvm_vm *vm, uint32_t = vcpuid, uint32_t group, int _vcpu_access_device_attr(struct kvm_vm *vm, uint32_t vcpuid, uint32_t = group, uint64_t attr, void *val, bool write) { - struct vcpu *vcpu =3D vcpu_find(vm, vcpuid); - - TEST_ASSERT(vcpu, "nonexistent vcpu id: %d", vcpuid); + struct vcpu *vcpu =3D vcpu_get(vm, vcpuid); =20 return _kvm_device_access(vcpu->fd, group, attr, val, write); } diff --git a/tools/testing/selftests/kvm/lib/kvm_util_internal.h b/tools/te= sting/selftests/kvm/lib/kvm_util_internal.h index a03febc24ba6..0c7c44499129 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util_internal.h +++ b/tools/testing/selftests/kvm/lib/kvm_util_internal.h @@ -69,7 +69,7 @@ struct kvm_vm { uint32_t dirty_ring_size; }; =20 -struct vcpu *vcpu_find(struct kvm_vm *vm, uint32_t vcpuid); +struct vcpu *vcpu_get(struct kvm_vm *vm, uint32_t vcpuid); =20 /* * Virtual Translation Tables Dump diff --git a/tools/testing/selftests/kvm/lib/s390x/processor.c b/tools/test= ing/selftests/kvm/lib/s390x/processor.c index f87c7137598e..7cc1051c4b71 100644 --- a/tools/testing/selftests/kvm/lib/s390x/processor.c +++ b/tools/testing/selftests/kvm/lib/s390x/processor.c @@ -208,10 +208,7 @@ void vcpu_args_set(struct kvm_vm *vm, uint32_t vcpuid,= unsigned int num, ...) =20 void vcpu_dump(FILE *stream, struct kvm_vm *vm, uint32_t vcpuid, uint8_t i= ndent) { - struct vcpu *vcpu =3D vcpu_find(vm, vcpuid); - - if (!vcpu) - return; + struct vcpu *vcpu =3D vcpu_get(vm, vcpuid); =20 fprintf(stream, "%*spstate: psw: 0x%.16llx:0x%.16llx\n", indent, "", vcpu->state->psw_mask, vcpu->state->psw_addr); diff --git a/tools/testing/selftests/kvm/lib/x86_64/processor.c b/tools/tes= ting/selftests/kvm/lib/x86_64/processor.c index 27c40b5ab01d..bd9d1b63b848 100644 --- a/tools/testing/selftests/kvm/lib/x86_64/processor.c +++ b/tools/testing/selftests/kvm/lib/x86_64/processor.c @@ -996,7 +996,7 @@ static int vcpu_save_xsave_state(struct kvm_vm *vm, str= uct vcpu *vcpu, =20 struct kvm_x86_state *vcpu_save_state(struct kvm_vm *vm, uint32_t vcpuid) { - struct vcpu *vcpu =3D vcpu_find(vm, vcpuid); + struct vcpu *vcpu =3D vcpu_get(vm, vcpuid); struct kvm_msr_list *list; struct kvm_x86_state *state; int nmsrs, r, i; @@ -1079,7 +1079,7 @@ struct kvm_x86_state *vcpu_save_state(struct kvm_vm *= vm, uint32_t vcpuid) =20 void vcpu_load_state(struct kvm_vm *vm, uint32_t vcpuid, struct kvm_x86_st= ate *state) { - struct vcpu *vcpu =3D vcpu_find(vm, vcpuid); + struct vcpu *vcpu =3D vcpu_get(vm, vcpuid); int r; =20 r =3D ioctl(vcpu->fd, KVM_SET_SREGS, &state->sregs); --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 04141C433F5 for ; Wed, 4 May 2022 22:51:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379399AbiEDWyy (ORCPT ); Wed, 4 May 2022 18:54:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41352 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379263AbiEDWxh (ORCPT ); Wed, 4 May 2022 18:53:37 -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 34E0B53E2D for ; Wed, 4 May 2022 15:49:57 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id t15-20020a17090a3b4f00b001d67e27715dso3588150pjf.0 for ; Wed, 04 May 2022 15:49:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=0nLwtUOlrCY6H6iuzO7O1Ko+feOabX7Ai0gSkCSh+GE=; b=NU021v3VWv5BJdKgD0s5e+BojwjxOUpPb6MjxZU4krq3imD0zVIhH9hBvpTOYNBwIv PZKhOn9StTHDHOcTsiSLJRxniDd9x5o3sMjCpHeGTHPS3a186/eTGfaYuGN8Qp/u5hvh cPxiq/Tkij+hlG/7dnLUC0Y8Sh2d6OoYs+7BhSGlWl8JinseF21WTDIVcB7s3sXenV3e ZVO1btEGw+atJYifJQga0YEtwSfEoy1oNttxyyFzHLcIyT+RdJqFu1xZeqGpPiSFnD0d iewWoX/HNynHGbSloJgbBlAmeIuRok2tHAepna4VlWCBpNdo8AK2n15GdPl90dinXW9N 8jNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=0nLwtUOlrCY6H6iuzO7O1Ko+feOabX7Ai0gSkCSh+GE=; b=SHcgrQE1NcO/EehNESZ1L3jElausGdQdK8sFH0iZixXULE2r6YvV8E6pQMiJfQKNzb dAey925H/eEMtpXu8FMEJZi7fr9M/ivRoMXjr/zelYtWm7JnZC/hUXOm/Ft9SocAwAmB STLcBuUbQgp+b21METORCEqfPgpbQhIdyV7E3Bczl7onUO70xrcr3TLaJy2xWgyiBdS/ wspb1X8EcZHhoITRmyM2AAIJj4Me5N3TacGflKRgqtNwhaDxIqIubirPEbdsu/Y+2wYJ StbO34Y3sNwYjT6+7yxwXHCUiGVym6OHFVyYr03ejNYCb30kwt00ZuFhiO3NXMRcyybK fHyA== X-Gm-Message-State: AOAM532tHY0VPCkBUWduc40diy4mUyvktDnu35siDpwwSHG0yRor+i2W SAXvI4X4aTOGUZnOi7zMgJ/6SlxSkm0= X-Google-Smtp-Source: ABdhPJy5fUxmBhhrHQfLP5m4CIHgD9QKxki712Pdge72NhLZqXncttgZHQEOtQyM3809h/zEZjEgg5EiFto= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:e510:b0:1d9:ee23:9fa1 with SMTP id t16-20020a17090ae51000b001d9ee239fa1mr139820pjy.0.1651704596258; Wed, 04 May 2022 15:49:56 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:20 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-15-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 014/128] KVM: selftests: Make vm_ioctl() a wrapper to pretty print ioctl name From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Make vm_ioctl() a macro wrapper and print the _name_ of the ioctl on failure instead of the number. Deliberately do not use __stringify(), as that will expand the ioctl all the way down to its numerical sequence. Again the intent is to print the name of the macro. Signed-off-by: Sean Christopherson --- .../selftests/kvm/include/kvm_util_base.h | 38 ++++++++++--------- tools/testing/selftests/kvm/lib/kvm_util.c | 28 ++++---------- 2 files changed, 28 insertions(+), 38 deletions(-) diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index c2dfc4341b31..39e1971e5d65 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -105,6 +105,27 @@ int open_kvm_dev_path_or_exit(void); int kvm_check_cap(long cap); int vm_check_cap(struct kvm_vm *vm, long cap); int vm_enable_cap(struct kvm_vm *vm, struct kvm_enable_cap *cap); + +#define __KVM_SYSCALL_ERROR(_name, _ret) \ + "%s failed, rc: %i errno: %i (%s)", (_name), (_ret), errno, strerror(errn= o) + +#define __KVM_IOCTL_ERROR(_name, _ret) __KVM_SYSCALL_ERROR(_name, _ret) +#define KVM_IOCTL_ERROR(_ioctl, _ret) __KVM_IOCTL_ERROR(#_ioctl, _ret) + +int __kvm_ioctl(struct kvm_vm *vm, unsigned long cmd, void *arg); +void kvm_ioctl(struct kvm_vm *vm, unsigned long cmd, void *arg); + +int __vm_ioctl(struct kvm_vm *vm, unsigned long cmd, void *arg); +void _vm_ioctl(struct kvm_vm *vm, unsigned long cmd, const char *name, voi= d *arg); +#define vm_ioctl(vm, cmd, arg) _vm_ioctl(vm, cmd, #cmd, arg) + +int __vcpu_ioctl(struct kvm_vm *vm, uint32_t vcpuid, unsigned long cmd, + void *arg); +void _vcpu_ioctl(struct kvm_vm *vm, uint32_t vcpuid, unsigned long cmd, + const char *name, void *arg); +#define vcpu_ioctl(vm, vcpuid, cmd, arg) \ + _vcpu_ioctl(vm, vcpuid, cmd, #cmd, arg) + void vm_enable_dirty_ring(struct kvm_vm *vm, uint32_t ring_size); const char *vm_guest_mode_string(uint32_t i); =20 @@ -156,23 +177,6 @@ void vm_userspace_mem_region_add(struct kvm_vm *vm, uint64_t guest_paddr, uint32_t slot, uint64_t npages, uint32_t flags); =20 -#define __KVM_SYSCALL_ERROR(_name, _ret) \ - "%s failed, rc: %i errno: %i (%s)", (_name), (_ret), errno, strerror(errn= o) - -#define __KVM_IOCTL_ERROR(_name, _ret) __KVM_SYSCALL_ERROR(_name, _ret) -#define KVM_IOCTL_ERROR(_ioctl, _ret) __KVM_IOCTL_ERROR(#_ioctl, _ret) - -void _vcpu_ioctl(struct kvm_vm *vm, uint32_t vcpuid, unsigned long ioctl, - const char *name, void *arg); -int __vcpu_ioctl(struct kvm_vm *vm, uint32_t vcpuid, unsigned long ioctl, - void *arg); -#define vcpu_ioctl(vm, vcpuid, ioctl, arg) \ - _vcpu_ioctl(vm, vcpuid, ioctl, #ioctl, arg) - -void vm_ioctl(struct kvm_vm *vm, unsigned long ioctl, void *arg); -int __vm_ioctl(struct kvm_vm *vm, unsigned long cmd, void *arg); -void kvm_ioctl(struct kvm_vm *vm, unsigned long ioctl, void *arg); -int __kvm_ioctl(struct kvm_vm *vm, unsigned long ioctl, void *arg); void vm_mem_region_set_flags(struct kvm_vm *vm, uint32_t slot, uint32_t fl= ags); 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); diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index 940decfaa633..7eedd9ff20fa 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -1690,32 +1690,18 @@ void *vcpu_map_dirty_ring(struct kvm_vm *vm, uint32= _t vcpuid) return vcpu->dirty_gfns; } =20 -/* - * VM Ioctl - * - * Input Args: - * vm - Virtual Machine - * cmd - Ioctl number - * arg - Argument to pass to the ioctl - * - * Return: None - * - * Issues an arbitrary ioctl on a VM fd. - */ -void vm_ioctl(struct kvm_vm *vm, unsigned long cmd, void *arg) -{ - int ret; - - ret =3D __vm_ioctl(vm, cmd, arg); - TEST_ASSERT(ret =3D=3D 0, "vm ioctl %lu failed, rc: %i errno: %i (%s)", - cmd, ret, errno, strerror(errno)); -} - int __vm_ioctl(struct kvm_vm *vm, unsigned long cmd, void *arg) { return ioctl(vm->fd, cmd, arg); } =20 +void _vm_ioctl(struct kvm_vm *vm, unsigned long cmd, const char *name, voi= d *arg) +{ + int ret =3D __vm_ioctl(vm, cmd, arg); + + TEST_ASSERT(!ret, __KVM_IOCTL_ERROR(name, ret)); +} + /* * KVM system ioctl * --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 2070FC35294 for ; Wed, 4 May 2022 22:56:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1380108AbiEDW7o (ORCPT ); Wed, 4 May 2022 18:59:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41298 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379267AbiEDWxi (ORCPT ); Wed, 4 May 2022 18:53:38 -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 7A61653E35 for ; Wed, 4 May 2022 15:49:58 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id u18-20020a170902e21200b0015e5e660618so1374779plb.5 for ; Wed, 04 May 2022 15:49:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=aJAg5113oAm3HRX0IgJjabbpguSIh0dT8Z8AWcNkJR8=; b=Ws3bgr+Hx7pKax9gR/rzMKsewPUs7LvnfucByqQbR6esrYeicOxPZBKQndmdhD2DJf aVe63HCNxxVrNY00NcPwTbGZNZiiIpGHh7ZnPSpYIloGltcwuhgZlVSRXpcYnPrAHUED tS8eQuOcoobm+cTtCK3Qyg5MPar6o4Da+u2EHqxGMxeY4JUNdha6yRY+k8NfRKxW7aMf P8ZowHNzorBBG4Yp2EjqPnX85miXXsjneX1QoJegE6BYthodvY6SkGdzR/423siyO52x Z8GUypnxg688nK86AjNfaVNJYXTzcBlAr3/FeABqSJGo4KjCCO7QnHJJhbU8rlMyISOT 69Qw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=aJAg5113oAm3HRX0IgJjabbpguSIh0dT8Z8AWcNkJR8=; b=2rM9vEYpGSAwCXrVfItTSvZrqj1rMI05+opd6JN24To1nu8DbnwviBYurNHqi0zTsE JllH0CHSZLe8LOVlIMKubAbqrVVK4oPS9r07bBXbiAtFW4yDyri96N+PJaXQF4KQHn8N 7Yypkasym8/GeCheYbjFr2lMyNr2Lz+2n8pDBBOAMdmRct/TcQ4EDudTsObrJJroX008 wvW8Ybh2hNDilhSOqtbNtpKdxIsZYJ8nmjvo4LXRHxX0ZmVsV/FGMgJ+BceAXrW8X2qf ttabEKD66ipcUhKYh7vLUEKutAX0s4SHt+knFpKhhsk6IaMqEwBecfSZqVT2ijm8sam+ axvg== X-Gm-Message-State: AOAM532vjdRlpJW08NYN0AGrDXGHXUC00sbQwLPybA1IpsDP2k66LiqF ueFw6IGHofKfSOjoghYbJqwDdj6qIRs= X-Google-Smtp-Source: ABdhPJxeYsv3l6+vvejW5d66wFMiOK3jUWKINMy5RpLeMDnbaWa7fBZtGu2pS2+SHM1um6W/VPtnRBHjXMM= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:1781:b0:50a:94f0:661d with SMTP id s1-20020a056a00178100b0050a94f0661dmr23109380pfg.10.1651704597967; Wed, 04 May 2022 15:49:57 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:21 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-16-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 015/128] KVM: sefltests: Use vm_ioctl() and __vm_ioctl() helpers From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use the recently introduced VM-specific ioctl() helpers instead of open coding calls to ioctl() just to pretty print the ioctl name. Keep a few open coded assertions that provide additional info. Signed-off-by: Sean Christopherson --- .../selftests/kvm/include/kvm_util_base.h | 60 +++++++-- .../selftests/kvm/kvm_binary_stats_test.c | 6 +- .../testing/selftests/kvm/lib/aarch64/vgic.c | 6 +- tools/testing/selftests/kvm/lib/kvm_util.c | 116 ++---------------- .../selftests/kvm/set_memory_region_test.c | 3 +- .../kvm/x86_64/pmu_event_filter_test.c | 2 +- 6 files changed, 67 insertions(+), 126 deletions(-) diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index 39e1971e5d65..1ccb91103e74 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -103,8 +103,6 @@ extern const struct vm_guest_mode_params vm_guest_mode_= params[]; int open_path_or_exit(const char *path, int flags); int open_kvm_dev_path_or_exit(void); int kvm_check_cap(long cap); -int vm_check_cap(struct kvm_vm *vm, long cap); -int vm_enable_cap(struct kvm_vm *vm, struct kvm_enable_cap *cap); =20 #define __KVM_SYSCALL_ERROR(_name, _ret) \ "%s failed, rc: %i errno: %i (%s)", (_name), (_ret), errno, strerror(errn= o) @@ -126,6 +124,23 @@ void _vcpu_ioctl(struct kvm_vm *vm, uint32_t vcpuid, u= nsigned long cmd, #define vcpu_ioctl(vm, vcpuid, cmd, arg) \ _vcpu_ioctl(vm, vcpuid, cmd, #cmd, arg) =20 +/* + * Looks up and returns the value corresponding to the capability + * (KVM_CAP_*) given by cap. + */ +static inline int vm_check_cap(struct kvm_vm *vm, long cap) +{ + int ret =3D __vm_ioctl(vm, KVM_CHECK_EXTENSION, (void *)cap); + + TEST_ASSERT(ret >=3D 0, KVM_IOCTL_ERROR(KVM_CHECK_EXTENSION, ret)); + return ret; +} + +static inline void vm_enable_cap(struct kvm_vm *vm, struct kvm_enable_cap = *cap) +{ + vm_ioctl(vm, KVM_ENABLE_CAP, cap); +} + void vm_enable_dirty_ring(struct kvm_vm *vm, uint32_t ring_size); const char *vm_guest_mode_string(uint32_t i); =20 @@ -134,19 +149,46 @@ struct kvm_vm *vm_create(uint64_t phy_pages); void kvm_vm_free(struct kvm_vm *vmp); void kvm_vm_restart(struct kvm_vm *vmp); void kvm_vm_release(struct kvm_vm *vmp); -void kvm_vm_get_dirty_log(struct kvm_vm *vm, int slot, void *log); -void kvm_vm_clear_dirty_log(struct kvm_vm *vm, int slot, void *log, - uint64_t first_page, uint32_t num_pages); -uint32_t kvm_vm_reset_dirty_ring(struct kvm_vm *vm); - int kvm_memcmp_hva_gva(void *hva, struct kvm_vm *vm, const vm_vaddr_t gva, size_t len); - void kvm_vm_elf_load(struct kvm_vm *vm, const char *filename); int kvm_memfd_alloc(size_t size, bool hugepages); =20 void vm_dump(FILE *stream, struct kvm_vm *vm, uint8_t indent); =20 +static inline void kvm_vm_get_dirty_log(struct kvm_vm *vm, int slot, void = *log) +{ + struct kvm_dirty_log args =3D { .dirty_bitmap =3D log, .slot =3D slot }; + + vm_ioctl(vm, KVM_GET_DIRTY_LOG, &args); +} + +static inline void kvm_vm_clear_dirty_log(struct kvm_vm *vm, int slot, voi= d *log, + uint64_t first_page, uint32_t num_pages) +{ + struct kvm_clear_dirty_log args =3D { + .dirty_bitmap =3D log, + .slot =3D slot, + .first_page =3D first_page, + .num_pages =3D num_pages + }; + + vm_ioctl(vm, KVM_CLEAR_DIRTY_LOG, &args); +} + +static inline uint32_t kvm_vm_reset_dirty_ring(struct kvm_vm *vm) +{ + return __vm_ioctl(vm, KVM_RESET_DIRTY_RINGS, NULL); +} + +static inline int vm_get_stats_fd(struct kvm_vm *vm) +{ + int fd =3D __vm_ioctl(vm, KVM_GET_STATS_FD, NULL); + + TEST_ASSERT(fd >=3D 0, KVM_IOCTL_ERROR(KVM_GET_STATS_FD, fd)); + return fd; +} + /* * VM VCPU Dump * @@ -483,8 +525,6 @@ kvm_userspace_memory_region_find(struct kvm_vm *vm, uin= t64_t start, =20 void assert_on_unhandled_exception(struct kvm_vm *vm, uint32_t vcpuid); =20 -int vm_get_stats_fd(struct kvm_vm *vm); - uint32_t guest_get_vcpuid(void); =20 #endif /* SELFTEST_KVM_UTIL_BASE_H */ diff --git a/tools/testing/selftests/kvm/kvm_binary_stats_test.c b/tools/te= sting/selftests/kvm/kvm_binary_stats_test.c index bab8b49b52da..0a27b0f85009 100644 --- a/tools/testing/selftests/kvm/kvm_binary_stats_test.c +++ b/tools/testing/selftests/kvm/kvm_binary_stats_test.c @@ -165,11 +165,7 @@ static void stats_test(int stats_fd) =20 static void vm_stats_test(struct kvm_vm *vm) { - int stats_fd; - - /* Get fd for VM stats */ - stats_fd =3D vm_get_stats_fd(vm); - TEST_ASSERT(stats_fd >=3D 0, "Get VM stats fd"); + int stats_fd =3D vm_get_stats_fd(vm); =20 stats_test(stats_fd); close(stats_fd); diff --git a/tools/testing/selftests/kvm/lib/aarch64/vgic.c b/tools/testing= /selftests/kvm/lib/aarch64/vgic.c index 5d45046c1b80..25d1ec65621d 100644 --- a/tools/testing/selftests/kvm/lib/aarch64/vgic.c +++ b/tools/testing/selftests/kvm/lib/aarch64/vgic.c @@ -104,8 +104,7 @@ void kvm_irq_set_level_info(int gic_fd, uint32_t intid,= int level) { int ret =3D _kvm_irq_set_level_info(gic_fd, intid, level); =20 - TEST_ASSERT(ret =3D=3D 0, "KVM_DEV_ARM_VGIC_GRP_LEVEL_INFO failed, " - "rc: %i errno: %i", ret, errno); + TEST_ASSERT(!ret, KVM_IOCTL_ERROR(KVM_DEV_ARM_VGIC_GRP_LEVEL_INFO, ret)); } =20 int _kvm_arm_irq_line(struct kvm_vm *vm, uint32_t intid, int level) @@ -127,8 +126,7 @@ void kvm_arm_irq_line(struct kvm_vm *vm, uint32_t intid= , int level) { int ret =3D _kvm_arm_irq_line(vm, intid, level); =20 - TEST_ASSERT(ret =3D=3D 0, "KVM_IRQ_LINE failed, rc: %i errno: %i", - ret, errno); + TEST_ASSERT(!ret, KVM_IOCTL_ERROR(KVM_IRQ_LINE, ret)); } =20 static void vgic_poke_irq(int gic_fd, uint32_t intid, diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index 7eedd9ff20fa..339d524a0399 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -85,56 +85,6 @@ int kvm_check_cap(long cap) return ret; } =20 -/* VM Check Capability - * - * Input Args: - * vm - Virtual Machine - * cap - Capability - * - * Output Args: None - * - * Return: - * On success, the Value corresponding to the capability (KVM_CAP_*) - * specified by the value of cap. On failure a TEST_ASSERT failure - * is produced. - * - * Looks up and returns the value corresponding to the capability - * (KVM_CAP_*) given by cap. - */ -int vm_check_cap(struct kvm_vm *vm, long cap) -{ - int ret; - - ret =3D ioctl(vm->fd, KVM_CHECK_EXTENSION, cap); - TEST_ASSERT(ret >=3D 0, "KVM_CHECK_EXTENSION VM IOCTL failed,\n" - " rc: %i errno: %i", ret, errno); - - return ret; -} - -/* VM Enable Capability - * - * Input Args: - * vm - Virtual Machine - * cap - Capability - * - * Output Args: None - * - * Return: On success, 0. On failure a TEST_ASSERT failure is produced. - * - * Enables a capability (KVM_CAP_*) on the VM. - */ -int vm_enable_cap(struct kvm_vm *vm, struct kvm_enable_cap *cap) -{ - int ret; - - ret =3D ioctl(vm->fd, KVM_ENABLE_CAP, cap); - TEST_ASSERT(ret =3D=3D 0, "KVM_ENABLE_CAP IOCTL failed,\n" - " rc: %i errno: %i", ret, errno); - - return ret; -} - void vm_enable_dirty_ring(struct kvm_vm *vm, uint32_t ring_size) { struct kvm_enable_cap cap =3D { 0 }; @@ -460,36 +410,6 @@ void kvm_vm_restart(struct kvm_vm *vmp) } } =20 -void kvm_vm_get_dirty_log(struct kvm_vm *vm, int slot, void *log) -{ - struct kvm_dirty_log args =3D { .dirty_bitmap =3D log, .slot =3D slot }; - int ret; - - ret =3D ioctl(vm->fd, KVM_GET_DIRTY_LOG, &args); - TEST_ASSERT(ret =3D=3D 0, "%s: KVM_GET_DIRTY_LOG failed: %s", - __func__, strerror(-ret)); -} - -void kvm_vm_clear_dirty_log(struct kvm_vm *vm, int slot, void *log, - uint64_t first_page, uint32_t num_pages) -{ - struct kvm_clear_dirty_log args =3D { - .dirty_bitmap =3D log, .slot =3D slot, - .first_page =3D first_page, - .num_pages =3D num_pages - }; - int ret; - - ret =3D ioctl(vm->fd, KVM_CLEAR_DIRTY_LOG, &args); - TEST_ASSERT(ret =3D=3D 0, "%s: KVM_CLEAR_DIRTY_LOG failed: %s", - __func__, strerror(-ret)); -} - -uint32_t kvm_vm_reset_dirty_ring(struct kvm_vm *vm) -{ - return ioctl(vm->fd, KVM_RESET_DIRTY_RINGS); -} - /* * Userspace Memory Region Find * @@ -645,9 +565,7 @@ static void __vm_mem_region_delete(struct kvm_vm *vm, } =20 region->region.memory_size =3D 0; - ret =3D ioctl(vm->fd, KVM_SET_USER_MEMORY_REGION, ®ion->region); - TEST_ASSERT(ret =3D=3D 0, "KVM_SET_USER_MEMORY_REGION IOCTL failed, " - "rc: %i errno: %i", ret, errno); + vm_ioctl(vm, KVM_SET_USER_MEMORY_REGION, ®ion->region); =20 sparsebit_free(®ion->unused_phy_pages); ret =3D munmap(region->mmap_start, region->mmap_size); @@ -993,7 +911,7 @@ void vm_userspace_mem_region_add(struct kvm_vm *vm, region->region.guest_phys_addr =3D guest_paddr; region->region.memory_size =3D npages * vm->page_size; region->region.userspace_addr =3D (uintptr_t) region->host_mem; - ret =3D ioctl(vm->fd, KVM_SET_USER_MEMORY_REGION, ®ion->region); + ret =3D __vm_ioctl(vm, KVM_SET_USER_MEMORY_REGION, ®ion->region); TEST_ASSERT(ret =3D=3D 0, "KVM_SET_USER_MEMORY_REGION IOCTL failed,\n" " rc: %i errno: %i\n" " slot: %u flags: 0x%x\n" @@ -1076,7 +994,7 @@ void vm_mem_region_set_flags(struct kvm_vm *vm, uint32= _t slot, uint32_t flags) =20 region->region.flags =3D flags; =20 - ret =3D ioctl(vm->fd, KVM_SET_USER_MEMORY_REGION, ®ion->region); + ret =3D __vm_ioctl(vm, KVM_SET_USER_MEMORY_REGION, ®ion->region); =20 TEST_ASSERT(ret =3D=3D 0, "KVM_SET_USER_MEMORY_REGION IOCTL failed,\n" " rc: %i errno: %i slot: %u flags: 0x%x", @@ -1106,7 +1024,7 @@ void vm_mem_region_move(struct kvm_vm *vm, uint32_t s= lot, uint64_t new_gpa) =20 region->region.guest_phys_addr =3D new_gpa; =20 - ret =3D ioctl(vm->fd, KVM_SET_USER_MEMORY_REGION, ®ion->region); + ret =3D __vm_ioctl(vm, KVM_SET_USER_MEMORY_REGION, ®ion->region); =20 TEST_ASSERT(!ret, "KVM_SET_USER_MEMORY_REGION failed\n" "ret: %i errno: %i slot: %u new_gpa: 0x%lx", @@ -1190,10 +1108,10 @@ void vm_vcpu_add(struct kvm_vm *vm, uint32_t vcpuid) /* Allocate and initialize new vcpu structure. */ vcpu =3D calloc(1, sizeof(*vcpu)); TEST_ASSERT(vcpu !=3D NULL, "Insufficient Memory"); + vcpu->id =3D vcpuid; - vcpu->fd =3D ioctl(vm->fd, KVM_CREATE_VCPU, vcpuid); - TEST_ASSERT(vcpu->fd >=3D 0, "KVM_CREATE_VCPU failed, rc: %i errno: %i", - vcpu->fd, errno); + vcpu->fd =3D __vm_ioctl(vm, KVM_CREATE_VCPU, (void *)(unsigned long)vcpui= d); + TEST_ASSERT(vcpu->fd >=3D 0, KVM_IOCTL_ERROR(KVM_CREATE_VCPU, vcpu->fd)); =20 TEST_ASSERT(vcpu_mmap_sz() >=3D sizeof(*vcpu->state), "vcpu mmap size " "smaller than expected, vcpu_mmap_sz: %i expected_min: %zi", @@ -1534,11 +1452,7 @@ void *addr_gpa2alias(struct kvm_vm *vm, vm_paddr_t g= pa) */ void vm_create_irqchip(struct kvm_vm *vm) { - int ret; - - ret =3D ioctl(vm->fd, KVM_CREATE_IRQCHIP, 0); - TEST_ASSERT(ret =3D=3D 0, "KVM_CREATE_IRQCHIP IOCTL failed, " - "rc: %i errno: %i", ret, errno); + vm_ioctl(vm, KVM_CREATE_IRQCHIP, NULL); =20 vm->has_irqchip =3D true; } @@ -1759,7 +1673,7 @@ int _kvm_create_device(struct kvm_vm *vm, uint64_t ty= pe, bool test, int *fd) create_dev.type =3D type; create_dev.fd =3D -1; create_dev.flags =3D test ? KVM_CREATE_DEVICE_TEST : 0; - ret =3D ioctl(vm_get_fd(vm), KVM_CREATE_DEVICE, &create_dev); + ret =3D __vm_ioctl(vm, KVM_CREATE_DEVICE, &create_dev); *fd =3D create_dev.fd; return ret; } @@ -1855,7 +1769,7 @@ void kvm_irq_line(struct kvm_vm *vm, uint32_t irq, in= t level) { int ret =3D _kvm_irq_line(vm, irq, level); =20 - TEST_ASSERT(ret >=3D 0, "KVM_IRQ_LINE failed, rc: %i errno: %i", ret, err= no); + TEST_ASSERT(ret >=3D 0, KVM_IOCTL_ERROR(KVM_IRQ_LINE, ret)); } =20 struct kvm_irq_routing *kvm_gsi_routing_create(void) @@ -1894,7 +1808,7 @@ int _kvm_gsi_routing_write(struct kvm_vm *vm, struct = kvm_irq_routing *routing) int ret; =20 assert(routing); - ret =3D ioctl(vm_get_fd(vm), KVM_SET_GSI_ROUTING, routing); + ret =3D __vm_ioctl(vm, KVM_SET_GSI_ROUTING, routing); free(routing); =20 return ret; @@ -1905,8 +1819,7 @@ void kvm_gsi_routing_write(struct kvm_vm *vm, struct = kvm_irq_routing *routing) int ret; =20 ret =3D _kvm_gsi_routing_write(vm, routing); - TEST_ASSERT(ret =3D=3D 0, "KVM_SET_GSI_ROUTING failed, rc: %i errno: %i", - ret, errno); + TEST_ASSERT(!ret, KVM_IOCTL_ERROR(KVM_SET_GSI_ROUTING, ret)); } =20 /* @@ -2205,8 +2118,3 @@ unsigned int vm_calc_num_guest_pages(enum vm_guest_mo= de mode, size_t size) n =3D DIV_ROUND_UP(size, vm_guest_mode_params[mode].page_size); return vm_adjust_num_guest_pages(mode, n); } - -int vm_get_stats_fd(struct kvm_vm *vm) -{ - return ioctl(vm->fd, KVM_GET_STATS_FD, NULL); -} diff --git a/tools/testing/selftests/kvm/set_memory_region_test.c b/tools/t= esting/selftests/kvm/set_memory_region_test.c index 89b13f23c3ac..e66deb8ba7e0 100644 --- a/tools/testing/selftests/kvm/set_memory_region_test.c +++ b/tools/testing/selftests/kvm/set_memory_region_test.c @@ -317,8 +317,7 @@ static void test_zero_memory_regions(void) vm =3D vm_create(0); vm_vcpu_add(vm, VCPU_ID); =20 - TEST_ASSERT(!ioctl(vm_get_fd(vm), KVM_SET_NR_MMU_PAGES, 64), - "KVM_SET_NR_MMU_PAGES failed, errno =3D %d\n", errno); + vm_ioctl(vm, KVM_SET_NR_MMU_PAGES, (void *)64ul); vcpu_run(vm, VCPU_ID); =20 run =3D vcpu_state(vm, VCPU_ID); diff --git a/tools/testing/selftests/kvm/x86_64/pmu_event_filter_test.c b/t= ools/testing/selftests/kvm/x86_64/pmu_event_filter_test.c index 0d06ffa95d9d..269033af43ce 100644 --- a/tools/testing/selftests/kvm/x86_64/pmu_event_filter_test.c +++ b/tools/testing/selftests/kvm/x86_64/pmu_event_filter_test.c @@ -344,7 +344,7 @@ static void test_pmu_config_disable(void (*guest_code)(= void)) =20 cap.cap =3D KVM_CAP_PMU_CAPABILITY; cap.args[0] =3D KVM_PMU_CAP_DISABLE; - TEST_ASSERT(!vm_enable_cap(vm, &cap), "Failed to set KVM_PMU_CAP_DISABLE.= "); + vm_enable_cap(vm, &cap); =20 vm_vcpu_add_default(vm, VCPU_ID, guest_code); vm_init_descriptor_tables(vm); --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 0B8D0C35280 for ; Wed, 4 May 2022 22:56:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1380067AbiEDW7k (ORCPT ); Wed, 4 May 2022 18:59:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41300 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379274AbiEDWxi (ORCPT ); Wed, 4 May 2022 18:53:38 -0400 Received: from mail-pl1-x64a.google.com (mail-pl1-x64a.google.com [IPv6:2607:f8b0:4864:20::64a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E91D753A5F for ; Wed, 4 May 2022 15:49:59 -0700 (PDT) Received: by mail-pl1-x64a.google.com with SMTP id z5-20020a170902ccc500b0015716eaec65so1366318ple.14 for ; Wed, 04 May 2022 15:49:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=hILKMTXhI7mRm2ADq6Bo0astJ7uCLjembG67g1jJ450=; b=Ncaaljy9+Lfur2pGzGKsKPkhJPX9MLSHtkXBPpvCBySaAZuIyZMPBdgkM0GL9GYDUd S2IcMlJGcGRZk6VsLkbBVZQk82rsgf7W1uIaxmjBzBnP26oTl0k4FxX/21kPmK9lgVJD +fforQSppisWLgOClyk9KaHMPZpiqZxYCVGrveqhBjBmap8A+9rmeM0MOekTcjFKJKRt CnEHQsGYBtT4ALon9OCAsUkBOS33SIZMYJByYZTvw5t4a1iKG2L4aGD8CsSpzTSVHhPf Eqf2ZEETFgcH28UiN6u/xmSMJ1CKKD26I77ACFhP+CU9gCCaDpVHNFRfW87mCPhRqD2Y SwRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=hILKMTXhI7mRm2ADq6Bo0astJ7uCLjembG67g1jJ450=; b=P1g8KomN6z2dFKhUi84Y7TjHM1Y+FYx7Oihi/5gfyeyN/yrlSSl+IVZ+KiNIZ49CSg 0TKrT5Qwnj4kRi6todwyvMKFuV9sINzvwPsJVw9yjUs7ZgrQDTpJhLzE86DuBqIkRPvW 3vjZo2Gn/394YhYXEkvKMTpTXdH9mx5pTq4OfaYhmlpqtXsoFYj6yw9wqcHHN6UbqWpp 0sQY0IWd7x6NIZvZXJIjN5oQlRE3d18c/rudVHWh2lieo8ceC0SedM8nYm4g2yMHyC4s LmGivlgwqrSWwl7jh3VEvORNlo5n8M/hUhDJJrNHVftjN9WV57FkoizUOvCvhvwRLOYN We6Q== X-Gm-Message-State: AOAM533pYQWe/DmWwQtTnjsPDX1s27hqiJJ5FTIkr3FBPQPQ/WNj0muq WKT8P7qYn1zUk0lrDJhduZZaIH2p50s= X-Google-Smtp-Source: ABdhPJz+TJFzV0X1qy9CMo/Jq3gGk8wZv/bs/1O8q3seQKUZU2YCyLYVIK/dQ4G95jYZo36n+bVfPfDZNeY= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90b:3b52:b0:1dc:b438:68b7 with SMTP id ot18-20020a17090b3b5200b001dcb43868b7mr1827113pjb.166.1651704599471; Wed, 04 May 2022 15:49:59 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:22 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-17-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 016/128] KVM: selftests: Make kvm_ioctl() a wrapper to pretty print ioctl name From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Make kvm_ioctl() a macro wrapper and print the _name_ of the ioctl on failure instead of the number. Deliberately do not use __stringify(), as that will expand the ioctl all the way down to its numerical sequence, again the intent is to print the name of the macro. Signed-off-by: Sean Christopherson --- .../selftests/kvm/include/kvm_util_base.h | 16 ++++++++-- tools/testing/selftests/kvm/lib/kvm_util.c | 31 +++---------------- .../selftests/kvm/x86_64/hyperv_cpuid.c | 2 +- 3 files changed, 20 insertions(+), 29 deletions(-) diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index 1ccb91103e74..f5bfdf0b4548 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -110,8 +110,19 @@ int kvm_check_cap(long cap); #define __KVM_IOCTL_ERROR(_name, _ret) __KVM_SYSCALL_ERROR(_name, _ret) #define KVM_IOCTL_ERROR(_ioctl, _ret) __KVM_IOCTL_ERROR(#_ioctl, _ret) =20 -int __kvm_ioctl(struct kvm_vm *vm, unsigned long cmd, void *arg); -void kvm_ioctl(struct kvm_vm *vm, unsigned long cmd, void *arg); +#define __kvm_ioctl(kvm_fd, cmd, arg) \ + ioctl(kvm_fd, cmd, arg) + +static inline void _kvm_ioctl(int kvm_fd, unsigned long cmd, const char *n= ame, + void *arg) +{ + int ret =3D __kvm_ioctl(kvm_fd, cmd, arg); + + TEST_ASSERT(!ret, __KVM_IOCTL_ERROR(name, ret)); +} + +#define kvm_ioctl(kvm_fd, cmd, arg) \ + _kvm_ioctl(kvm_fd, cmd, #cmd, arg) =20 int __vm_ioctl(struct kvm_vm *vm, unsigned long cmd, void *arg); void _vm_ioctl(struct kvm_vm *vm, unsigned long cmd, const char *name, voi= d *arg); @@ -492,6 +503,7 @@ unsigned int vm_get_page_size(struct kvm_vm *vm); unsigned int vm_get_page_shift(struct kvm_vm *vm); unsigned long vm_compute_max_gfn(struct kvm_vm *vm); uint64_t vm_get_max_gfn(struct kvm_vm *vm); +int vm_get_kvm_fd(struct kvm_vm *vm); int vm_get_fd(struct kvm_vm *vm); =20 unsigned int vm_calc_num_guest_pages(enum vm_guest_mode mode, size_t size); diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index 339d524a0399..ac8faf072288 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -1616,32 +1616,6 @@ void _vm_ioctl(struct kvm_vm *vm, unsigned long cmd,= const char *name, void *arg TEST_ASSERT(!ret, __KVM_IOCTL_ERROR(name, ret)); } =20 -/* - * KVM system ioctl - * - * Input Args: - * vm - Virtual Machine - * cmd - Ioctl number - * arg - Argument to pass to the ioctl - * - * Return: None - * - * Issues an arbitrary ioctl on a KVM fd. - */ -void kvm_ioctl(struct kvm_vm *vm, unsigned long cmd, void *arg) -{ - int ret; - - ret =3D ioctl(vm->kvm_fd, cmd, arg); - TEST_ASSERT(ret =3D=3D 0, "KVM ioctl %lu failed, rc: %i errno: %i (%s)", - cmd, ret, errno, strerror(errno)); -} - -int __kvm_ioctl(struct kvm_vm *vm, unsigned long cmd, void *arg) -{ - return ioctl(vm->kvm_fd, cmd, arg); -} - /* * Device Ioctl */ @@ -2074,6 +2048,11 @@ uint64_t vm_get_max_gfn(struct kvm_vm *vm) return vm->max_gfn; } =20 +int vm_get_kvm_fd(struct kvm_vm *vm) +{ + return vm->kvm_fd; +} + int vm_get_fd(struct kvm_vm *vm) { return vm->fd; diff --git a/tools/testing/selftests/kvm/x86_64/hyperv_cpuid.c b/tools/test= ing/selftests/kvm/x86_64/hyperv_cpuid.c index 7e45a3df8f98..896e1e7c1df7 100644 --- a/tools/testing/selftests/kvm/x86_64/hyperv_cpuid.c +++ b/tools/testing/selftests/kvm/x86_64/hyperv_cpuid.c @@ -123,7 +123,7 @@ void test_hv_cpuid_e2big(struct kvm_vm *vm, bool system) if (!system) ret =3D __vcpu_ioctl(vm, VCPU_ID, KVM_GET_SUPPORTED_HV_CPUID, &cpuid); else - ret =3D __kvm_ioctl(vm, KVM_GET_SUPPORTED_HV_CPUID, &cpuid); + ret =3D __kvm_ioctl(vm_get_kvm_fd(vm), KVM_GET_SUPPORTED_HV_CPUID, &cpui= d); =20 TEST_ASSERT(ret =3D=3D -1 && errno =3D=3D E2BIG, "%s KVM_GET_SUPPORTED_HV_CPUID didn't fail with -E2BIG when" --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 D0E51C4167E for ; Wed, 4 May 2022 22:56:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1380170AbiEDW7r (ORCPT ); Wed, 4 May 2022 18:59:47 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41494 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379166AbiEDWxl (ORCPT ); Wed, 4 May 2022 18:53:41 -0400 Received: from mail-pj1-x1049.google.com (mail-pj1-x1049.google.com [IPv6:2607:f8b0:4864:20::1049]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D8ED153A7E for ; Wed, 4 May 2022 15:50:01 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id d64-20020a17090a6f4600b001da3937032fso3564107pjk.5 for ; Wed, 04 May 2022 15:50:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=z05sQ8D4P30XiULJWcwFs9mh171mX0mSMWHAMNLnHZo=; b=bth2jgsguVvIuOciPFa06sV4ex8fyLpCfr90iFdCecRzDU5Vn2u7uj5eHfTcVKjG2k fX6I6mou9a09wpw7ZUaeuHKu2wj3nxhG5LF/6zhPqLeLeaAwD6DetH6g+KUF5jFjaqsr y4UkoZEBkcfcCMaTVIZvY2myhD/7FeSJpJGw+MWmXk+HYLvZp/euMRnr+SQQCyt8rQSS s0kHcyEKKONlMlDWSezHxLYWe3MNyPZdv1JrZZx9RLXdMfxImPR3o3lsoRorV9yWb6IG I2FubyOJDYBSSd7p4eyovnrPBdetIxk1VXpmo5YrAIGF5CCPXsE2kvFZDH7NR0n3Uxun 9ISQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=z05sQ8D4P30XiULJWcwFs9mh171mX0mSMWHAMNLnHZo=; b=rpxtn09fl1jTWx6xrOZwnSWkv2DXWUP4+YxIuEEVdAdosdwR/K9hbKYG/wbnMXrB6f vqy+I3TlqtfpcXpJ/WyUPODscMKZC7/sWsfYV/UPmK9x8pqIDKOZKZ4FkMr3U9IluTbn VfjmRJu7kaItRmcU9/bR0zaMhUSjdl3zkhOlO/MWt5JC8m6ZsW/yeuBQ/g8liMUR0XUI KWFkKfuidKXarpzCBEcpy4T99FD0TjrLBmlMwPIgsaSbtt6kO0+VMFn5R5K0sPy4DKOv 3Q5tSM16+3Pl4vSRW2mhv77rbNb22fUikwBDVJ+WmAmhVtnwpe+dRXH1KzN1psOtJDGu kzPA== X-Gm-Message-State: AOAM533YrYSXwU10LgK0i5VVmnns6E43DLaNJ+ChDxI3izjod1gfNMVK ES7+PRnXCVD5suL+f7GXECCe3iZFwtk= X-Google-Smtp-Source: ABdhPJxAD110ga/bq61Gn9AsY3sSfdWTUpPMPG65+eV6jm8B1tVyfq5GgZlXJRS2BF9GuItSjLbuffK7pGw= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:2e83:b0:1da:3273:53ab with SMTP id r3-20020a17090a2e8300b001da327353abmr2215121pjd.14.1651704601018; Wed, 04 May 2022 15:50:01 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:23 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-18-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 017/128] KVM: selftests: Use kvm_ioctl() helpers From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use the recently introduced KVM-specific ioctl() helpers instead of open coding calls to ioctl() just to pretty print the ioctl name. Signed-off-by: Sean Christopherson --- .../selftests/kvm/lib/aarch64/processor.c | 4 +-- tools/testing/selftests/kvm/lib/guest_modes.c | 2 +- tools/testing/selftests/kvm/lib/kvm_util.c | 13 +++---- .../selftests/kvm/lib/x86_64/processor.c | 34 ++++++------------- .../kvm/x86_64/get_msr_index_features.c | 16 +++------ .../selftests/kvm/x86_64/mmio_warning_test.c | 6 ++-- 6 files changed, 26 insertions(+), 49 deletions(-) diff --git a/tools/testing/selftests/kvm/lib/aarch64/processor.c b/tools/te= sting/selftests/kvm/lib/aarch64/processor.c index 9343d82519b4..06c3dafc82c4 100644 --- a/tools/testing/selftests/kvm/lib/aarch64/processor.c +++ b/tools/testing/selftests/kvm/lib/aarch64/processor.c @@ -469,8 +469,8 @@ void aarch64_get_supported_page_sizes(uint32_t ipa, }; =20 kvm_fd =3D open_kvm_dev_path_or_exit(); - vm_fd =3D ioctl(kvm_fd, KVM_CREATE_VM, ipa); - TEST_ASSERT(vm_fd >=3D 0, "Can't create VM"); + vm_fd =3D __kvm_ioctl(kvm_fd, KVM_CREATE_VM, ipa); + TEST_ASSERT(vm_fd >=3D 0, KVM_IOCTL_ERROR(KVM_CREATE_VM, vm_fd)); =20 vcpu_fd =3D ioctl(vm_fd, KVM_CREATE_VCPU, 0); TEST_ASSERT(vcpu_fd >=3D 0, "Can't create vcpu"); diff --git a/tools/testing/selftests/kvm/lib/guest_modes.c b/tools/testing/= selftests/kvm/lib/guest_modes.c index 8784013b747c..9ab27b4169bf 100644 --- a/tools/testing/selftests/kvm/lib/guest_modes.c +++ b/tools/testing/selftests/kvm/lib/guest_modes.c @@ -65,7 +65,7 @@ void guest_modes_append_default(void) struct kvm_s390_vm_cpu_processor info; =20 kvm_fd =3D open_kvm_dev_path_or_exit(); - vm_fd =3D ioctl(kvm_fd, KVM_CREATE_VM, 0); + vm_fd =3D __kvm_ioctl(kvm_fd, KVM_CREATE_VM, 0); kvm_device_access(vm_fd, KVM_S390_VM_CPU_MODEL, KVM_S390_VM_CPU_PROCESSOR, &info, false); close(vm_fd); diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index ac8faf072288..4d2748e8428a 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -76,9 +76,8 @@ int kvm_check_cap(long cap) int kvm_fd; =20 kvm_fd =3D open_kvm_dev_path_or_exit(); - ret =3D ioctl(kvm_fd, KVM_CHECK_EXTENSION, cap); - TEST_ASSERT(ret >=3D 0, "KVM_CHECK_EXTENSION IOCTL failed,\n" - " rc: %i errno: %i", ret, errno); + ret =3D __kvm_ioctl(kvm_fd, KVM_CHECK_EXTENSION, cap); + TEST_ASSERT(ret >=3D 0, KVM_IOCTL_ERROR(KVM_CHECK_EXTENSION, ret)); =20 close(kvm_fd); =20 @@ -104,9 +103,8 @@ static void vm_open(struct kvm_vm *vm) exit(KSFT_SKIP); } =20 - vm->fd =3D ioctl(vm->kvm_fd, KVM_CREATE_VM, vm->type); - TEST_ASSERT(vm->fd >=3D 0, "KVM_CREATE_VM ioctl failed, " - "rc: %i errno: %i", vm->fd, errno); + vm->fd =3D __kvm_ioctl(vm->kvm_fd, KVM_CREATE_VM, vm->type); + TEST_ASSERT(vm->fd >=3D 0, KVM_IOCTL_ERROR(KVM_CREATE_VM, vm->fd)); } =20 const char *vm_guest_mode_string(uint32_t i) @@ -1070,8 +1068,7 @@ static int vcpu_mmap_sz(void) =20 ret =3D ioctl(dev_fd, KVM_GET_VCPU_MMAP_SIZE, NULL); TEST_ASSERT(ret >=3D sizeof(struct kvm_run), - "%s KVM_GET_VCPU_MMAP_SIZE ioctl failed, rc: %i errno: %i", - __func__, ret, errno); + KVM_IOCTL_ERROR(KVM_GET_VCPU_MMAP_SIZE, ret)); =20 close(dev_fd); =20 diff --git a/tools/testing/selftests/kvm/lib/x86_64/processor.c b/tools/tes= ting/selftests/kvm/lib/x86_64/processor.c index bd9d1b63b848..6113cf6bb238 100644 --- a/tools/testing/selftests/kvm/lib/x86_64/processor.c +++ b/tools/testing/selftests/kvm/lib/x86_64/processor.c @@ -639,7 +639,7 @@ void vm_xsave_req_perm(int bit) }; =20 kvm_fd =3D open_kvm_dev_path_or_exit(); - rc =3D ioctl(kvm_fd, KVM_GET_DEVICE_ATTR, &attr); + rc =3D __kvm_ioctl(kvm_fd, KVM_GET_DEVICE_ATTR, &attr); close(kvm_fd); if (rc =3D=3D -1 && (errno =3D=3D ENXIO || errno =3D=3D EINVAL)) exit(KSFT_SKIP); @@ -739,7 +739,6 @@ static struct kvm_cpuid2 *allocate_kvm_cpuid2(void) struct kvm_cpuid2 *kvm_get_supported_cpuid(void) { static struct kvm_cpuid2 *cpuid; - int ret; int kvm_fd; =20 if (cpuid) @@ -748,9 +747,7 @@ struct kvm_cpuid2 *kvm_get_supported_cpuid(void) cpuid =3D allocate_kvm_cpuid2(); kvm_fd =3D open_kvm_dev_path_or_exit(); =20 - ret =3D ioctl(kvm_fd, KVM_GET_SUPPORTED_CPUID, cpuid); - TEST_ASSERT(ret =3D=3D 0, "KVM_GET_SUPPORTED_CPUID failed %d %d\n", - ret, errno); + kvm_ioctl(kvm_fd, KVM_GET_SUPPORTED_CPUID, cpuid); =20 close(kvm_fd); return cpuid; @@ -780,9 +777,8 @@ uint64_t kvm_get_feature_msr(uint64_t msr_index) buffer.entry.index =3D msr_index; kvm_fd =3D open_kvm_dev_path_or_exit(); =20 - r =3D ioctl(kvm_fd, KVM_GET_MSRS, &buffer.header); - TEST_ASSERT(r =3D=3D 1, "KVM_GET_MSRS IOCTL failed,\n" - " rc: %i errno: %i", r, errno); + r =3D __kvm_ioctl(kvm_fd, KVM_GET_MSRS, &buffer.header); + TEST_ASSERT(r =3D=3D 1, KVM_IOCTL_ERROR(KVM_GET_MSRS, r)); =20 close(kvm_fd); return buffer.entry.data; @@ -947,9 +943,9 @@ static int kvm_get_num_msrs_fd(int kvm_fd) int r; =20 nmsrs.nmsrs =3D 0; - r =3D ioctl(kvm_fd, KVM_GET_MSR_INDEX_LIST, &nmsrs); - TEST_ASSERT(r =3D=3D -1 && errno =3D=3D E2BIG, "Unexpected result from KV= M_GET_MSR_INDEX_LIST probe, r: %i", - r); + r =3D __kvm_ioctl(kvm_fd, KVM_GET_MSR_INDEX_LIST, &nmsrs); + TEST_ASSERT(r =3D=3D -1 && errno =3D=3D E2BIG, + "Unexpected result from KVM_GET_MSR_INDEX_LIST probe, r: %i", r); =20 return nmsrs.nmsrs; } @@ -962,19 +958,16 @@ static int kvm_get_num_msrs(struct kvm_vm *vm) struct kvm_msr_list *kvm_get_msr_index_list(void) { struct kvm_msr_list *list; - int nmsrs, r, kvm_fd; + int nmsrs, kvm_fd; =20 kvm_fd =3D open_kvm_dev_path_or_exit(); =20 nmsrs =3D kvm_get_num_msrs_fd(kvm_fd); list =3D malloc(sizeof(*list) + nmsrs * sizeof(list->indices[0])); list->nmsrs =3D nmsrs; - r =3D ioctl(kvm_fd, KVM_GET_MSR_INDEX_LIST, list); + kvm_ioctl(kvm_fd, KVM_GET_MSR_INDEX_LIST, list); close(kvm_fd); =20 - TEST_ASSERT(r =3D=3D 0, "Unexpected result from KVM_GET_MSR_INDEX_LIST, r= : %i", - r); - return list; } =20 @@ -1020,9 +1013,7 @@ struct kvm_x86_state *vcpu_save_state(struct kvm_vm *= vm, uint32_t vcpuid) nmsrs =3D kvm_get_num_msrs(vm); list =3D malloc(sizeof(*list) + nmsrs * sizeof(list->indices[0])); list->nmsrs =3D nmsrs; - r =3D ioctl(vm->kvm_fd, KVM_GET_MSR_INDEX_LIST, list); - TEST_ASSERT(r =3D=3D 0, "Unexpected result from KVM_GET_MSR_INDEX_LIST, r= : %i", - r); + kvm_ioctl(vm->kvm_fd, KVM_GET_MSR_INDEX_LIST, list); =20 state =3D malloc(sizeof(*state) + nmsrs * sizeof(state->msrs.entries[0])); r =3D ioctl(vcpu->fd, KVM_GET_VCPU_EVENTS, &state->events); @@ -1330,7 +1321,6 @@ uint64_t kvm_hypercall(uint64_t nr, uint64_t a0, uint= 64_t a1, uint64_t a2, struct kvm_cpuid2 *kvm_get_supported_hv_cpuid(void) { static struct kvm_cpuid2 *cpuid; - int ret; int kvm_fd; =20 if (cpuid) @@ -1339,9 +1329,7 @@ struct kvm_cpuid2 *kvm_get_supported_hv_cpuid(void) cpuid =3D allocate_kvm_cpuid2(); kvm_fd =3D open_kvm_dev_path_or_exit(); =20 - ret =3D ioctl(kvm_fd, KVM_GET_SUPPORTED_HV_CPUID, cpuid); - TEST_ASSERT(ret =3D=3D 0, "KVM_GET_SUPPORTED_HV_CPUID failed %d %d\n", - ret, errno); + kvm_ioctl(kvm_fd, KVM_GET_SUPPORTED_HV_CPUID, cpuid); =20 close(kvm_fd); return cpuid; diff --git a/tools/testing/selftests/kvm/x86_64/get_msr_index_features.c b/= tools/testing/selftests/kvm/x86_64/get_msr_index_features.c index 8aed0db1331d..4ef60adbe108 100644 --- a/tools/testing/selftests/kvm/x86_64/get_msr_index_features.c +++ b/tools/testing/selftests/kvm/x86_64/get_msr_index_features.c @@ -34,7 +34,7 @@ static int kvm_num_index_msrs(int kvm_fd, int nmsrs) =20 static void test_get_msr_index(void) { - int old_res, res, kvm_fd, r; + int old_res, res, kvm_fd; struct kvm_msr_list *list; =20 kvm_fd =3D open_kvm_dev_path_or_exit(); @@ -50,11 +50,8 @@ static void test_get_msr_index(void) =20 list =3D malloc(sizeof(*list) + old_res * sizeof(list->indices[0])); list->nmsrs =3D old_res; - r =3D ioctl(kvm_fd, KVM_GET_MSR_INDEX_LIST, list); + kvm_ioctl(kvm_fd, KVM_GET_MSR_INDEX_LIST, list); =20 - TEST_ASSERT(r =3D=3D 0, - "Unexpected result from KVM_GET_MSR_FEATURE_INDEX_LIST, r: %i", - r); TEST_ASSERT(list->nmsrs =3D=3D old_res, "Expecting nmsrs to be identical"= ); free(list); =20 @@ -68,7 +65,7 @@ static int kvm_num_feature_msrs(int kvm_fd, int nmsrs) =20 list =3D malloc(sizeof(*list) + nmsrs * sizeof(list->indices[0])); list->nmsrs =3D nmsrs; - r =3D ioctl(kvm_fd, KVM_GET_MSR_FEATURE_INDEX_LIST, list); + r =3D __kvm_ioctl(kvm_fd, KVM_GET_MSR_FEATURE_INDEX_LIST, list); TEST_ASSERT(r =3D=3D -1 && errno =3D=3D E2BIG, "Unexpected result from KVM_GET_MSR_FEATURE_INDEX_LIST probe, r: %i", r); @@ -81,15 +78,10 @@ static int kvm_num_feature_msrs(int kvm_fd, int nmsrs) struct kvm_msr_list *kvm_get_msr_feature_list(int kvm_fd, int nmsrs) { struct kvm_msr_list *list; - int r; =20 list =3D malloc(sizeof(*list) + nmsrs * sizeof(list->indices[0])); list->nmsrs =3D nmsrs; - r =3D ioctl(kvm_fd, KVM_GET_MSR_FEATURE_INDEX_LIST, list); - - TEST_ASSERT(r =3D=3D 0, - "Unexpected result from KVM_GET_MSR_FEATURE_INDEX_LIST, r: %i", - r); + kvm_ioctl(kvm_fd, KVM_GET_MSR_FEATURE_INDEX_LIST, list); =20 return list; } diff --git a/tools/testing/selftests/kvm/x86_64/mmio_warning_test.c b/tools= /testing/selftests/kvm/x86_64/mmio_warning_test.c index 9f55ccd169a1..31ae837fedb1 100644 --- a/tools/testing/selftests/kvm/x86_64/mmio_warning_test.c +++ b/tools/testing/selftests/kvm/x86_64/mmio_warning_test.c @@ -59,10 +59,10 @@ void test(void) =20 kvm =3D open("/dev/kvm", O_RDWR); TEST_ASSERT(kvm !=3D -1, "failed to open /dev/kvm"); - kvmvm =3D ioctl(kvm, KVM_CREATE_VM, 0); - TEST_ASSERT(kvmvm !=3D -1, "KVM_CREATE_VM failed"); + kvmvm =3D __kvm_ioctl(kvm, KVM_CREATE_VM, 0); + TEST_ASSERT(kvmvm > 0, KVM_IOCTL_ERROR(KVM_CREATE_VM, kvmvm)); kvmcpu =3D ioctl(kvmvm, KVM_CREATE_VCPU, 0); - TEST_ASSERT(kvmcpu !=3D -1, "KVM_CREATE_VCPU failed"); + TEST_ASSERT(kvmcpu !=3D -1, KVM_IOCTL_ERROR(KVM_CREATE_VCPU, kvmcpu)); run =3D (struct kvm_run *)mmap(0, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, kvmcpu, 0); tc.kvmcpu =3D kvmcpu; --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 3F425C433EF for ; Wed, 4 May 2022 22:51:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230502AbiEDWzG (ORCPT ); Wed, 4 May 2022 18:55:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41724 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379290AbiEDWxt (ORCPT ); Wed, 4 May 2022 18:53:49 -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 5BEE953A6E for ; Wed, 4 May 2022 15:50:03 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id x23-20020a170902b41700b0015ea144789fso1367579plr.13 for ; Wed, 04 May 2022 15:50:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=QG7d90BBcOCbRixG4Hyzinx/QW3w13YQQMCvmPKcdNM=; b=nMrn/47aE6PkAfWsf+AWKs2bCFW4YtZRPWI2kO7vjC9X/DbE36QWdUKztdib4CSgVq 3omtaNyUg0dfS5prARfqMDqamGdWWCZso3AIXP/OoVid6NUKAyMmA1eV2riyS7yZkUr5 CqVxyd/A+XdeMrsFl6xrL5k57bbH/TxQoRwTfOL1QnoJQQ2AXoteKqsl/I8dkMxhuYZz lrJJyg3axX65n1UyA1M7GxZQcxBZUkejVDGY8ikYGVOIApQUmLBPNLRq90zG+cxp7wli 9NFdhk3p6rGdtzeFRWxstqkM1GRApTV3BbN3KrXp+s98BkRoI/uZabZz2u5oHqGZRUXd Ne1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=QG7d90BBcOCbRixG4Hyzinx/QW3w13YQQMCvmPKcdNM=; b=HunLWq0f7FPFsi/JWoWAr9rI0vfytm0jYjl5paC9ZrvIXN/+Um5I0oYb3TzGTSuSsU 6EYx8BsaIc2G3BfSk0vSn3rR1tksCXEpYM9HXO5SrF9C/BfRGAhHPpk1aEC+glukLPZP kuDrITDczC79YGY1UVcllQWMD8LJJTgksKs4AofjmLGwPk/U3sEBi+SHcQ7gWOuLzIDX 1Ho0Voj7kNvT1yZ7ujy0iYKflrKwwW/SSW6wPafrYhCe8EK1JNe7TpDSkEx3ABx2u39F Y3GKqLDfNiIzElKuD8WTU1XIWYWzSo4HXr2o2m2yR1AuYx2acI54IeW/7pAbBWgO0R2E gdbQ== X-Gm-Message-State: AOAM531xaVPoFZV4EaO8iqgS3TJnmU0cS42iUh73YQOZSu+Qklm9JmHo 4MToDoOkrAvyBVKgVMMrt3FMwg4V/9A= X-Google-Smtp-Source: ABdhPJzbIZGFr6r4Au99FBrIyvNU/qURhcm3v0Z2XJZ+/3h5p1Zoefh4AUCJO2HPtxPL+Fx22OapwmrLaIs= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:903:244b:b0:15e:8844:1578 with SMTP id l11-20020a170903244b00b0015e88441578mr23589128pls.13.1651704602558; Wed, 04 May 2022 15:50:02 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:24 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-19-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 018/128] KVM: selftests: Use __KVM_SYSCALL_ERROR() to handle non-KVM syscall errors From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use __KVM_SYSCALL_ERROR() to report and pretty print non-KVM syscall and ioctl errors, e.g. for mmap(), munmap(), uffd ioctls, etc... Signed-off-by: Sean Christopherson --- .../testing/selftests/kvm/aarch64/vgic_irq.c | 5 ++- .../selftests/kvm/demand_paging_test.c | 12 +++---- tools/testing/selftests/kvm/lib/kvm_util.c | 34 ++++++++----------- 3 files changed, 22 insertions(+), 29 deletions(-) diff --git a/tools/testing/selftests/kvm/aarch64/vgic_irq.c b/tools/testing= /selftests/kvm/aarch64/vgic_irq.c index 554ca649d470..87e41895b385 100644 --- a/tools/testing/selftests/kvm/aarch64/vgic_irq.c +++ b/tools/testing/selftests/kvm/aarch64/vgic_irq.c @@ -630,8 +630,7 @@ static void kvm_routing_and_irqfd_check(struct kvm_vm *= vm, =20 for (f =3D 0, i =3D intid; i < (uint64_t)intid + num; i++, f++) { fd[f] =3D eventfd(0, 0); - TEST_ASSERT(fd[f] !=3D -1, - "eventfd failed, errno: %i\n", errno); + TEST_ASSERT(fd[f] !=3D -1, __KVM_SYSCALL_ERROR("eventfd()", fd[f])); } =20 for (f =3D 0, i =3D intid; i < (uint64_t)intid + num; i++, f++) { @@ -647,7 +646,7 @@ static void kvm_routing_and_irqfd_check(struct kvm_vm *= vm, val =3D 1; ret =3D write(fd[f], &val, sizeof(uint64_t)); TEST_ASSERT(ret =3D=3D sizeof(uint64_t), - "Write to KVM_IRQFD failed with ret: %d\n", ret); + __KVM_SYSCALL_ERROR("write()", ret)); } =20 for (f =3D 0, i =3D intid; i < (uint64_t)intid + num; i++, f++) diff --git a/tools/testing/selftests/kvm/demand_paging_test.c b/tools/testi= ng/selftests/kvm/demand_paging_test.c index 6a719d065599..d8db0a37e973 100644 --- a/tools/testing/selftests/kvm/demand_paging_test.c +++ b/tools/testing/selftests/kvm/demand_paging_test.c @@ -223,6 +223,7 @@ static void setup_demand_paging(struct kvm_vm *vm, struct uffdio_api uffdio_api; struct uffdio_register uffdio_register; uint64_t expected_ioctls =3D ((uint64_t) 1) << _UFFDIO_COPY; + int ret; =20 PER_PAGE_DEBUG("Userfaultfd %s mode, faults resolved with %s\n", is_minor ? "MINOR" : "MISSING", @@ -242,19 +243,18 @@ static void setup_demand_paging(struct kvm_vm *vm, } =20 uffd =3D syscall(__NR_userfaultfd, O_CLOEXEC | O_NONBLOCK); - TEST_ASSERT(uffd >=3D 0, "uffd creation failed, errno: %d", errno); + TEST_ASSERT(uffd >=3D 0, __KVM_SYSCALL_ERROR("userfaultfd()", uffd)); =20 uffdio_api.api =3D UFFD_API; uffdio_api.features =3D 0; - TEST_ASSERT(ioctl(uffd, UFFDIO_API, &uffdio_api) !=3D -1, - "ioctl UFFDIO_API failed: %" PRIu64, - (uint64_t)uffdio_api.api); + ret =3D ioctl(uffd, UFFDIO_API, &uffdio_api); + TEST_ASSERT(ret !=3D -1, __KVM_SYSCALL_ERROR("UFFDIO_API", ret)); =20 uffdio_register.range.start =3D (uint64_t)hva; uffdio_register.range.len =3D len; uffdio_register.mode =3D uffd_mode; - TEST_ASSERT(ioctl(uffd, UFFDIO_REGISTER, &uffdio_register) !=3D -1, - "ioctl UFFDIO_REGISTER failed"); + ret =3D ioctl(uffd, UFFDIO_REGISTER, &uffdio_register); + TEST_ASSERT(ret !=3D -1, __KVM_SYSCALL_ERROR("UFFDIO_REGISTER", ret)); TEST_ASSERT((uffdio_register.ioctls & expected_ioctls) =3D=3D expected_ioctls, "missing userfaultfd ioctls"); =20 diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index 4d2748e8428a..c7df8ba04ec5 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -517,17 +517,15 @@ static void vm_vcpu_rm(struct kvm_vm *vm, struct vcpu= *vcpu) =20 if (vcpu->dirty_gfns) { ret =3D munmap(vcpu->dirty_gfns, vm->dirty_ring_size); - TEST_ASSERT(ret =3D=3D 0, "munmap of VCPU dirty ring failed, " - "rc: %i errno: %i", ret, errno); + TEST_ASSERT(!ret, __KVM_SYSCALL_ERROR("munmap()", ret)); vcpu->dirty_gfns =3D NULL; } =20 ret =3D munmap(vcpu->state, vcpu_mmap_sz()); - TEST_ASSERT(ret =3D=3D 0, "munmap of VCPU fd failed, rc: %i " - "errno: %i", ret, errno); + TEST_ASSERT(!ret, __KVM_SYSCALL_ERROR("munmap()", ret)); + ret =3D close(vcpu->fd); - TEST_ASSERT(ret =3D=3D 0, "Close of VCPU fd failed, rc: %i " - "errno: %i", ret, errno); + TEST_ASSERT(!ret, __KVM_SYSCALL_ERROR("close()", ret)); =20 list_del(&vcpu->list); free(vcpu); @@ -542,12 +540,10 @@ void kvm_vm_release(struct kvm_vm *vmp) vm_vcpu_rm(vmp, vcpu); =20 ret =3D close(vmp->fd); - TEST_ASSERT(ret =3D=3D 0, "Close of vm fd failed,\n" - " vmp->fd: %i rc: %i errno: %i", vmp->fd, ret, errno); + TEST_ASSERT(!ret, __KVM_SYSCALL_ERROR("close()", ret)); =20 ret =3D close(vmp->kvm_fd); - TEST_ASSERT(ret =3D=3D 0, "Close of /dev/kvm fd failed,\n" - " vmp->kvm_fd: %i rc: %i errno: %i", vmp->kvm_fd, ret, errno); + TEST_ASSERT(!ret, __KVM_SYSCALL_ERROR("close()", ret)); } =20 static void __vm_mem_region_delete(struct kvm_vm *vm, @@ -567,7 +563,7 @@ static void __vm_mem_region_delete(struct kvm_vm *vm, =20 sparsebit_free(®ion->unused_phy_pages); ret =3D munmap(region->mmap_start, region->mmap_size); - TEST_ASSERT(ret =3D=3D 0, "munmap failed, rc: %i errno: %i", ret, errno); + TEST_ASSERT(!ret, __KVM_SYSCALL_ERROR("munmap()", ret)); =20 free(region); } @@ -607,14 +603,13 @@ int kvm_memfd_alloc(size_t size, bool hugepages) memfd_flags |=3D MFD_HUGETLB; =20 fd =3D memfd_create("kvm_selftest", memfd_flags); - TEST_ASSERT(fd !=3D -1, "memfd_create() failed, errno: %i (%s)", - errno, strerror(errno)); + TEST_ASSERT(fd !=3D -1, __KVM_SYSCALL_ERROR("memfd_create()", fd)); =20 r =3D ftruncate(fd, size); - TEST_ASSERT(!r, "ftruncate() failed, errno: %i (%s)", errno, strerror(err= no)); + TEST_ASSERT(!r, __KVM_SYSCALL_ERROR("ftruncate()", r)); =20 r =3D fallocate(fd, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, size); - TEST_ASSERT(!r, "fallocate() failed, errno: %i (%s)", errno, strerror(err= no)); + TEST_ASSERT(!r, __KVM_SYSCALL_ERROR("fallocate()", r)); =20 return fd; } @@ -880,8 +875,7 @@ void vm_userspace_mem_region_add(struct kvm_vm *vm, vm_mem_backing_src_alias(src_type)->flag, region->fd, 0); TEST_ASSERT(region->mmap_start !=3D MAP_FAILED, - "test_malloc failed, mmap_start: %p errno: %i", - region->mmap_start, errno); + __KVM_SYSCALL_ERROR("mmap()", (int)(unsigned long)MAP_FAILED)); =20 TEST_ASSERT(!is_backing_src_hugetlb(src_type) || region->mmap_start =3D=3D align_ptr_up(region->mmap_start, backing_s= rc_pagesz), @@ -929,7 +923,7 @@ void vm_userspace_mem_region_add(struct kvm_vm *vm, vm_mem_backing_src_alias(src_type)->flag, region->fd, 0); TEST_ASSERT(region->mmap_alias !=3D MAP_FAILED, - "mmap of alias failed, errno: %i", errno); + __KVM_SYSCALL_ERROR("mmap()", (int)(unsigned long)MAP_FAILED)); =20 /* Align host alias address */ region->host_alias =3D align_ptr_up(region->mmap_alias, alignment); @@ -1115,8 +1109,8 @@ void vm_vcpu_add(struct kvm_vm *vm, uint32_t vcpuid) vcpu_mmap_sz(), sizeof(*vcpu->state)); vcpu->state =3D (struct kvm_run *) mmap(NULL, vcpu_mmap_sz(), PROT_READ | PROT_WRITE, MAP_SHARED, vcpu->fd, 0); - TEST_ASSERT(vcpu->state !=3D MAP_FAILED, "mmap vcpu_state failed, " - "vcpu id: %u errno: %i", vcpuid, errno); + TEST_ASSERT(vcpu->state !=3D MAP_FAILED, + __KVM_SYSCALL_ERROR("mmap()", (int)(unsigned long)MAP_FAILED)); =20 /* Add to linked-list of VCPUs. */ list_add(&vcpu->list, &vm->vcpus); --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 BB711C433F5 for ; Wed, 4 May 2022 22:51:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379610AbiEDWzA (ORCPT ); Wed, 4 May 2022 18:55:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41730 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379295AbiEDWxt (ORCPT ); Wed, 4 May 2022 18:53:49 -0400 Received: from mail-pg1-x54a.google.com (mail-pg1-x54a.google.com [IPv6:2607:f8b0:4864:20::54a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 83CC053B5E for ; Wed, 4 May 2022 15:50:04 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id s185-20020a632cc2000000b003c18e076a2bso1338913pgs.13 for ; Wed, 04 May 2022 15:50:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=X5ejK3ALymV3WJX0jLnTwZBvoVVn9CiBNagBWrKCE/c=; b=FQ5Y4G1jdMcxzC4YeAze9qmRTVA51vK7cwsOKwP2c+9bqfg7Y3ip3xUjqBbbqKF3U6 hZL8jhuJsSotBGo5rOR/r9DyzkNYUIUivbyKzo9mRaYYCwEzUFhPkEQStsRVWE+AQkri IJQf8ib+efSe21JvQQS2CSGUCZccS7JQwyqd2qVxHkqwyvbB9PH++HnRp9x9++WTVbtk 3DSSSSeErAN0k9X7fbrCRvlUmrnNE4NMW6uLjoFKzcOBZCSCxnvZqVCcKmp2Nf2hRr39 TtlftgTN17otS9qlAi17mXG6OpzxE7bO7T3BP6WJxnQDyTntnss6nfqerKLgdtQFwBPO ghZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=X5ejK3ALymV3WJX0jLnTwZBvoVVn9CiBNagBWrKCE/c=; b=ahTcrEGn7zAYE+Qn+saDrLbHdSWKx1xmMloXu07sYeQC0B+1fGMGt4IJXU4ANKsGuU DQymk7LB67VBFB6OXlplH0NoJRwXzeKc4FPae8ck+wd0V8HvgwmkQm3hKAw4vh3KYkOC RC5m+skWG2hvdyQV11dVo5/yOs/haAPtGchi4s6fCW0MVy8L05RigszsqmgWNu7Ej4bI 5IdMmk8HijFzyRyrm7WWqeQLzNN7zywaSWPMk+AE1m2qq+Le5Hnl35UbOS+lUOFOdKVy n448FPSaOwwzMijy6J1EiFlioaXy7M8R2dJfRFJa9rD1zFktSB188jJX+Ql60G5ztoEW undg== X-Gm-Message-State: AOAM533gpvbqwsv1NN1wg4bcWMd1ZDb7nCMlFsoewLD9zr+igtvuYB7s 5kExjaC06o3zncfdPNbQKJvQAUUbXjI= X-Google-Smtp-Source: ABdhPJwBGWVdCEp8FNBvPucswMVo2PWyvJN8pOvf7+umBXFwxnQLKA0HVK7Gr1tVT/6BlRctH96PiMxUG6M= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a62:8684:0:b0:50d:972b:d9d2 with SMTP id x126-20020a628684000000b0050d972bd9d2mr22697955pfd.4.1651704604041; Wed, 04 May 2022 15:50:04 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:25 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-20-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 019/128] KVM: selftests: Make x86-64's register dump helpers static From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Make regs_dump() and sregs_dump() static, they're only implemented by x86 and only used internally. Signed-off-by: Sean Christopherson --- .../selftests/kvm/lib/kvm_util_internal.h | 34 ------------------ .../selftests/kvm/lib/x86_64/processor.c | 36 ++----------------- 2 files changed, 2 insertions(+), 68 deletions(-) diff --git a/tools/testing/selftests/kvm/lib/kvm_util_internal.h b/tools/te= sting/selftests/kvm/lib/kvm_util_internal.h index 0c7c44499129..544b90df2f80 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util_internal.h +++ b/tools/testing/selftests/kvm/lib/kvm_util_internal.h @@ -88,40 +88,6 @@ struct vcpu *vcpu_get(struct kvm_vm *vm, uint32_t vcpuid= ); */ void virt_dump(FILE *stream, struct kvm_vm *vm, uint8_t indent); =20 -/* - * Register Dump - * - * Input Args: - * stream - Output FILE stream - * regs - Registers - * indent - Left margin indent amount - * - * Output Args: None - * - * Return: None - * - * Dumps the state of the registers given by @regs, to the FILE stream - * given by @stream. - */ -void regs_dump(FILE *stream, struct kvm_regs *regs, uint8_t indent); - -/* - * System Register Dump - * - * Input Args: - * stream - Output FILE stream - * sregs - System registers - * indent - Left margin indent amount - * - * Output Args: None - * - * Return: None - * - * Dumps the state of the system registers given by @sregs, to the FILE st= ream - * given by @stream. - */ -void sregs_dump(FILE *stream, struct kvm_sregs *sregs, uint8_t indent); - struct userspace_mem_region * memslot2region(struct kvm_vm *vm, uint32_t memslot); =20 diff --git a/tools/testing/selftests/kvm/lib/x86_64/processor.c b/tools/tes= ting/selftests/kvm/lib/x86_64/processor.c index 6113cf6bb238..93726d8cac44 100644 --- a/tools/testing/selftests/kvm/lib/x86_64/processor.c +++ b/tools/testing/selftests/kvm/lib/x86_64/processor.c @@ -19,8 +19,7 @@ =20 vm_vaddr_t exception_handlers; =20 -void regs_dump(FILE *stream, struct kvm_regs *regs, - uint8_t indent) +static void regs_dump(FILE *stream, struct kvm_regs *regs, uint8_t indent) { fprintf(stream, "%*srax: 0x%.16llx rbx: 0x%.16llx " "rcx: 0x%.16llx rdx: 0x%.16llx\n", @@ -43,21 +42,6 @@ void regs_dump(FILE *stream, struct kvm_regs *regs, regs->rip, regs->rflags); } =20 -/* - * Segment Dump - * - * Input Args: - * stream - Output FILE stream - * segment - KVM segment - * indent - Left margin indent amount - * - * Output Args: None - * - * Return: None - * - * Dumps the state of the KVM segment given by @segment, to the FILE stream - * given by @stream. - */ static void segment_dump(FILE *stream, struct kvm_segment *segment, uint8_t indent) { @@ -75,21 +59,6 @@ static void segment_dump(FILE *stream, struct kvm_segmen= t *segment, segment->unusable, segment->padding); } =20 -/* - * dtable Dump - * - * Input Args: - * stream - Output FILE stream - * dtable - KVM dtable - * indent - Left margin indent amount - * - * Output Args: None - * - * Return: None - * - * Dumps the state of the KVM dtable given by @dtable, to the FILE stream - * given by @stream. - */ static void dtable_dump(FILE *stream, struct kvm_dtable *dtable, uint8_t indent) { @@ -99,8 +68,7 @@ static void dtable_dump(FILE *stream, struct kvm_dtable *= dtable, dtable->padding[0], dtable->padding[1], dtable->padding[2]); } =20 -void sregs_dump(FILE *stream, struct kvm_sregs *sregs, - uint8_t indent) +static void sregs_dump(FILE *stream, struct kvm_sregs *sregs, uint8_t inde= nt) { unsigned int i; =20 --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 B3D4EC433FE for ; Wed, 4 May 2022 22:51:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379262AbiEDWzQ (ORCPT ); Wed, 4 May 2022 18:55:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40764 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379315AbiEDWxu (ORCPT ); Wed, 4 May 2022 18:53:50 -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 868E153E3D for ; Wed, 4 May 2022 15:50:06 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id s5-20020a17090aa10500b001d9a8e99e3aso1317047pjp.2 for ; Wed, 04 May 2022 15:50:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=DA19lBclEuba6gF302ASehW6hWCbwM8ygvWYl248eOM=; b=hhMxMWJtRg137uvzO7AgO849vyGGq7HcZmO4mxRYYrl5X0DzkkLzErAHEqsw47TVjf jmRli/so4UUv61eKCkhg2f8+FQlOAZ3+cfyCoJSDO7K0BRPyNyduhLq+C5W/ON2OdBlB 01CzINZnAGCPb7RA+KSigeh/ohOg7p+WiHfz1e1wCzIz6v6L8/YlL/VH3zxjkouj3fsF 7G2Dv/mghd4ZWD0UX+eriW3jVrNvTl1mTovol+wzKa1HCRG1ZIQxFWtInMVfo6NNDv53 irvmBJVX+grWzE030TJeEUpn1pISJsvK//JENMtcUWacMScQqjPRqTC5yJF2BFRoD3rB LiIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=DA19lBclEuba6gF302ASehW6hWCbwM8ygvWYl248eOM=; b=Kf5DJDFQaPaxEARAQqsm1TJAoo1CzzlDYURHxES/kDMOYLeXecwjBkRbeRCrKm0Uc3 GBfmjPIkRqzzdcrxE2eF0i8f3JbEUpdwJXFP23QvGUaGb1Ks77T9F2p3ZD+HzALmcB8D VNX4lTc2tcPWUTihoIJEyeWmq3W4SZy5jX3+CBv7hEm2LC6aRyl/j9F/SuO49bpo/6TP 9fkryK3hYUp5FQeVDEsJ3GwnJlX2gAwG9HRn4udo5INgSe7kwYWAkQ+GLbsyAUpwfLXn BNdin5ipjiAFdhTn0tjDBfefsXf4iu6SMd6PL6SgIAe+7zoZpP1ICNu3rryxIwZe0CJf UYWA== X-Gm-Message-State: AOAM533sPrKx6RI0+CJbrJhN2gjaJkTv5JMHzyPVjOvTtYBzXkF+Q+0d wNAlrAzUF2udBHAV48ZFlPzEMH9ti0s= X-Google-Smtp-Source: ABdhPJywxbrUL0retmWO0NYSIFl4RfQBvaiz1RRmefomQKUofKGkRa4maCuneMixfRhJF4tQwyRphGh7bFM= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a62:1d09:0:b0:50d:fa91:a4c5 with SMTP id d9-20020a621d09000000b0050dfa91a4c5mr13625161pfd.25.1651704605774; Wed, 04 May 2022 15:50:05 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:26 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-21-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 020/128] KVM: selftests: Get rid of kvm_util_internal.h From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Fold kvm_util_internal.h into kvm_util_base.h, i.e. make all KVM utility stuff "public". Hiding struct implementations from tests has been a massive failure, as it has led to pointless and poorly named wrappers, unnecessarily opaque code, etc... Signed-off-by: Sean Christopherson --- .../selftests/kvm/include/kvm_util_base.h | 99 +++++++++++++++++-- .../selftests/kvm/lib/aarch64/processor.c | 1 - .../testing/selftests/kvm/lib/aarch64/ucall.c | 1 - .../testing/selftests/kvm/lib/aarch64/vgic.c | 1 - tools/testing/selftests/kvm/lib/elf.c | 1 - tools/testing/selftests/kvm/lib/kvm_util.c | 1 - .../selftests/kvm/lib/kvm_util_internal.h | 94 ------------------ .../selftests/kvm/lib/riscv/processor.c | 1 - tools/testing/selftests/kvm/lib/riscv/ucall.c | 1 - .../selftests/kvm/lib/s390x/processor.c | 1 - .../selftests/kvm/lib/x86_64/processor.c | 1 - tools/testing/selftests/kvm/lib/x86_64/svm.c | 1 - tools/testing/selftests/kvm/lib/x86_64/vmx.c | 1 - .../selftests/kvm/x86_64/sev_migrate_tests.c | 1 - 14 files changed, 91 insertions(+), 114 deletions(-) delete mode 100644 tools/testing/selftests/kvm/lib/kvm_util_internal.h diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index f5bfdf0b4548..c0199f3b59bb 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -9,9 +9,13 @@ =20 #include "test_util.h" =20 -#include "asm/kvm.h" +#include +#include "linux/hashtable.h" #include "linux/list.h" -#include "linux/kvm.h" +#include +#include +#include "linux/rbtree.h" + #include =20 #include "sparsebit.h" @@ -21,15 +25,94 @@ =20 #define NSEC_PER_SEC 1000000000L =20 -/* - * Callers of kvm_util only have an incomplete/opaque description of the - * structure kvm_util is using to maintain the state of a VM. - */ -struct kvm_vm; - typedef uint64_t vm_paddr_t; /* Virtual Machine (Guest) physical address */ typedef uint64_t vm_vaddr_t; /* Virtual Machine (Guest) virtual address */ =20 +struct userspace_mem_region { + struct kvm_userspace_memory_region region; + struct sparsebit *unused_phy_pages; + int fd; + off_t offset; + void *host_mem; + void *host_alias; + void *mmap_start; + void *mmap_alias; + size_t mmap_size; + struct rb_node gpa_node; + struct rb_node hva_node; + struct hlist_node slot_node; +}; + +struct vcpu { + struct list_head list; + uint32_t id; + int fd; + struct kvm_run *state; + struct kvm_dirty_gfn *dirty_gfns; + uint32_t fetch_index; + uint32_t dirty_gfns_count; +}; + +struct userspace_mem_regions { + struct rb_root gpa_tree; + struct rb_root hva_tree; + DECLARE_HASHTABLE(slot_hash, 9); +}; + +struct kvm_vm { + int mode; + unsigned long type; + int kvm_fd; + int fd; + unsigned int pgtable_levels; + unsigned int page_size; + unsigned int page_shift; + unsigned int pa_bits; + unsigned int va_bits; + uint64_t max_gfn; + struct list_head vcpus; + struct userspace_mem_regions regions; + struct sparsebit *vpages_valid; + struct sparsebit *vpages_mapped; + bool has_irqchip; + bool pgd_created; + vm_paddr_t pgd; + vm_vaddr_t gdt; + vm_vaddr_t tss; + vm_vaddr_t idt; + vm_vaddr_t handlers; + uint32_t dirty_ring_size; +}; + + +#define kvm_for_each_vcpu(vm, i, vcpu) \ + for ((i) =3D 0; (i) <=3D (vm)->last_vcpu_id; (i)++) \ + if (!((vcpu) =3D vm->vcpus[i])) \ + continue; \ + else + +struct vcpu *vcpu_get(struct kvm_vm *vm, uint32_t vcpuid); + +/* + * Virtual Translation Tables Dump + * + * Input Args: + * stream - Output FILE stream + * vm - Virtual Machine + * indent - Left margin indent amount + * + * Output Args: None + * + * Return: None + * + * Dumps to the FILE stream given by @stream, the contents of all the + * virtual translation tables for the VM given by @vm. + */ +void virt_dump(FILE *stream, struct kvm_vm *vm, uint8_t indent); + +struct userspace_mem_region * +memslot2region(struct kvm_vm *vm, uint32_t memslot); + /* Minimum allocated guest virtual and physical addresses */ #define KVM_UTIL_MIN_VADDR 0x2000 #define KVM_GUEST_PAGE_TABLE_MIN_PADDR 0x180000 diff --git a/tools/testing/selftests/kvm/lib/aarch64/processor.c b/tools/te= sting/selftests/kvm/lib/aarch64/processor.c index 06c3dafc82c4..6fa52e141e1b 100644 --- a/tools/testing/selftests/kvm/lib/aarch64/processor.c +++ b/tools/testing/selftests/kvm/lib/aarch64/processor.c @@ -10,7 +10,6 @@ =20 #include "guest_modes.h" #include "kvm_util.h" -#include "../kvm_util_internal.h" #include "processor.h" =20 #define DEFAULT_ARM64_GUEST_STACK_VADDR_MIN 0xac0000 diff --git a/tools/testing/selftests/kvm/lib/aarch64/ucall.c b/tools/testin= g/selftests/kvm/lib/aarch64/ucall.c index e0b0164e9af8..e14663ab2056 100644 --- a/tools/testing/selftests/kvm/lib/aarch64/ucall.c +++ b/tools/testing/selftests/kvm/lib/aarch64/ucall.c @@ -5,7 +5,6 @@ * Copyright (C) 2018, Red Hat, Inc. */ #include "kvm_util.h" -#include "../kvm_util_internal.h" =20 static vm_vaddr_t *ucall_exit_mmio_addr; =20 diff --git a/tools/testing/selftests/kvm/lib/aarch64/vgic.c b/tools/testing= /selftests/kvm/lib/aarch64/vgic.c index 25d1ec65621d..c34f0f116f39 100644 --- a/tools/testing/selftests/kvm/lib/aarch64/vgic.c +++ b/tools/testing/selftests/kvm/lib/aarch64/vgic.c @@ -9,7 +9,6 @@ #include =20 #include "kvm_util.h" -#include "../kvm_util_internal.h" #include "vgic.h" #include "gic.h" #include "gic_v3.h" diff --git a/tools/testing/selftests/kvm/lib/elf.c b/tools/testing/selftest= s/kvm/lib/elf.c index 13e8e3dcf984..9f54c098d9d0 100644 --- a/tools/testing/selftests/kvm/lib/elf.c +++ b/tools/testing/selftests/kvm/lib/elf.c @@ -11,7 +11,6 @@ #include =20 #include "kvm_util.h" -#include "kvm_util_internal.h" =20 static void elfhdr_get(const char *filename, Elf64_Ehdr *hdrp) { diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index c7df8ba04ec5..a57958a39c1b 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -8,7 +8,6 @@ #define _GNU_SOURCE /* for program_invocation_name */ #include "test_util.h" #include "kvm_util.h" -#include "kvm_util_internal.h" #include "processor.h" =20 #include diff --git a/tools/testing/selftests/kvm/lib/kvm_util_internal.h b/tools/te= sting/selftests/kvm/lib/kvm_util_internal.h deleted file mode 100644 index 544b90df2f80..000000000000 --- a/tools/testing/selftests/kvm/lib/kvm_util_internal.h +++ /dev/null @@ -1,94 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-only */ -/* - * tools/testing/selftests/kvm/lib/kvm_util_internal.h - * - * Copyright (C) 2018, Google LLC. - */ - -#ifndef SELFTEST_KVM_UTIL_INTERNAL_H -#define SELFTEST_KVM_UTIL_INTERNAL_H - -#include "linux/hashtable.h" -#include "linux/rbtree.h" - -#include "sparsebit.h" - -struct userspace_mem_region { - struct kvm_userspace_memory_region region; - struct sparsebit *unused_phy_pages; - int fd; - off_t offset; - void *host_mem; - void *host_alias; - void *mmap_start; - void *mmap_alias; - size_t mmap_size; - struct rb_node gpa_node; - struct rb_node hva_node; - struct hlist_node slot_node; -}; - -struct vcpu { - struct list_head list; - uint32_t id; - int fd; - struct kvm_run *state; - struct kvm_dirty_gfn *dirty_gfns; - uint32_t fetch_index; - uint32_t dirty_gfns_count; -}; - -struct userspace_mem_regions { - struct rb_root gpa_tree; - struct rb_root hva_tree; - DECLARE_HASHTABLE(slot_hash, 9); -}; - -struct kvm_vm { - int mode; - unsigned long type; - int kvm_fd; - int fd; - unsigned int pgtable_levels; - unsigned int page_size; - unsigned int page_shift; - unsigned int pa_bits; - unsigned int va_bits; - uint64_t max_gfn; - struct list_head vcpus; - struct userspace_mem_regions regions; - struct sparsebit *vpages_valid; - struct sparsebit *vpages_mapped; - bool has_irqchip; - bool pgd_created; - vm_paddr_t pgd; - vm_vaddr_t gdt; - vm_vaddr_t tss; - vm_vaddr_t idt; - vm_vaddr_t handlers; - uint32_t dirty_ring_size; -}; - -struct vcpu *vcpu_get(struct kvm_vm *vm, uint32_t vcpuid); - -/* - * Virtual Translation Tables Dump - * - * Input Args: - * stream - Output FILE stream - * vm - Virtual Machine - * indent - Left margin indent amount - * - * Output Args: None - * - * Return: None - * - * Dumps to the FILE stream given by @stream, the contents of all the - * virtual translation tables for the VM given by @vm. - */ -void virt_dump(FILE *stream, struct kvm_vm *vm, uint8_t indent); - -struct userspace_mem_region * -memslot2region(struct kvm_vm *vm, uint32_t memslot); - -#endif /* SELFTEST_KVM_UTIL_INTERNAL_H */ diff --git a/tools/testing/selftests/kvm/lib/riscv/processor.c b/tools/test= ing/selftests/kvm/lib/riscv/processor.c index 10ae8036341d..c61c4856ed03 100644 --- a/tools/testing/selftests/kvm/lib/riscv/processor.c +++ b/tools/testing/selftests/kvm/lib/riscv/processor.c @@ -9,7 +9,6 @@ #include =20 #include "kvm_util.h" -#include "../kvm_util_internal.h" #include "processor.h" =20 #define DEFAULT_RISCV_GUEST_STACK_VADDR_MIN 0xac0000 diff --git a/tools/testing/selftests/kvm/lib/riscv/ucall.c b/tools/testing/= selftests/kvm/lib/riscv/ucall.c index 9e42d8248fa6..c554ed173b38 100644 --- a/tools/testing/selftests/kvm/lib/riscv/ucall.c +++ b/tools/testing/selftests/kvm/lib/riscv/ucall.c @@ -8,7 +8,6 @@ #include =20 #include "kvm_util.h" -#include "../kvm_util_internal.h" #include "processor.h" =20 void ucall_init(struct kvm_vm *vm, void *arg) diff --git a/tools/testing/selftests/kvm/lib/s390x/processor.c b/tools/test= ing/selftests/kvm/lib/s390x/processor.c index 7cc1051c4b71..53c413932f64 100644 --- a/tools/testing/selftests/kvm/lib/s390x/processor.c +++ b/tools/testing/selftests/kvm/lib/s390x/processor.c @@ -7,7 +7,6 @@ =20 #include "processor.h" #include "kvm_util.h" -#include "../kvm_util_internal.h" =20 #define PAGES_PER_REGION 4 =20 diff --git a/tools/testing/selftests/kvm/lib/x86_64/processor.c b/tools/tes= ting/selftests/kvm/lib/x86_64/processor.c index 93726d8cac44..1e3d68bdfc7d 100644 --- a/tools/testing/selftests/kvm/lib/x86_64/processor.c +++ b/tools/testing/selftests/kvm/lib/x86_64/processor.c @@ -7,7 +7,6 @@ =20 #include "test_util.h" #include "kvm_util.h" -#include "../kvm_util_internal.h" #include "processor.h" =20 #ifndef NUM_INTERRUPTS diff --git a/tools/testing/selftests/kvm/lib/x86_64/svm.c b/tools/testing/s= elftests/kvm/lib/x86_64/svm.c index 736ee4a23df6..01a9d831da13 100644 --- a/tools/testing/selftests/kvm/lib/x86_64/svm.c +++ b/tools/testing/selftests/kvm/lib/x86_64/svm.c @@ -9,7 +9,6 @@ =20 #include "test_util.h" #include "kvm_util.h" -#include "../kvm_util_internal.h" #include "processor.h" #include "svm_util.h" =20 diff --git a/tools/testing/selftests/kvm/lib/x86_64/vmx.c b/tools/testing/s= elftests/kvm/lib/x86_64/vmx.c index d089d8b850b5..0d42aa821833 100644 --- a/tools/testing/selftests/kvm/lib/x86_64/vmx.c +++ b/tools/testing/selftests/kvm/lib/x86_64/vmx.c @@ -7,7 +7,6 @@ =20 #include "test_util.h" #include "kvm_util.h" -#include "../kvm_util_internal.h" #include "processor.h" #include "vmx.h" =20 diff --git a/tools/testing/selftests/kvm/x86_64/sev_migrate_tests.c b/tools= /testing/selftests/kvm/x86_64/sev_migrate_tests.c index 7424bec5ae23..5b565aa11e32 100644 --- a/tools/testing/selftests/kvm/x86_64/sev_migrate_tests.c +++ b/tools/testing/selftests/kvm/x86_64/sev_migrate_tests.c @@ -12,7 +12,6 @@ #include "processor.h" #include "svm_util.h" #include "kselftest.h" -#include "../lib/kvm_util_internal.h" =20 #define SEV_POLICY_ES 0b100 =20 --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 85E24C433EF for ; Wed, 4 May 2022 22:51:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379379AbiEDWzL (ORCPT ); Wed, 4 May 2022 18:55:11 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40836 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379320AbiEDWxu (ORCPT ); Wed, 4 May 2022 18:53:50 -0400 Received: from mail-pl1-x64a.google.com (mail-pl1-x64a.google.com [IPv6:2607:f8b0:4864:20::64a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F3B6554190 for ; Wed, 4 May 2022 15:50:07 -0700 (PDT) Received: by mail-pl1-x64a.google.com with SMTP id g12-20020a170902740c00b0015d243ff163so1365483pll.19 for ; Wed, 04 May 2022 15:50:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=Djm5rmkimpppk7KGwmY5ydPxurjwLb8khy4Eso/pVfI=; b=Ek4WZXxNk4G1y/bYgSjgqG8wi2hJ1ktpeFX4P/lNsi+IO3jrVW9I+vU/Y6OVOxagVs /p4uwbp7UYn06bYGrdWEwBDafyFZkmU2yleSpbR5W/ZFHaoXYDUtl297ER4mcNJ75iF8 aDCf69EQCA66L9Qs+EoJlZOiclGfKUn3mJVGMmq9nYVNY1ohpYNbgaG6ill0AA4r9Q+s cvxPNN124BV3b+k05YVbS3EetyY/McX4ZRwYJ8uZLY5H5T2R/ryjgXCNvcMcTKYFwziF Jn0vYjq6qIA3gmeVfsOl7EZRzWtmK+LYvrU4FEjDlvJ5YuWmRYdUOFx+PuEUrDYFD7Cp +ZzA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=Djm5rmkimpppk7KGwmY5ydPxurjwLb8khy4Eso/pVfI=; b=2tR1pbDtpmpVQ5M8y6omz+qtTEn03hSVbFOdyyA7/Fq5wqbOYQZqvo+IIwY9mVMyDO GpbwCQfQZcAGGQhty273HCbeQNgTeL32Fgsc9VKB6VhIx9lhAEl5cKxayw2MsPWWruqY 3yVjVqA8OINixFXI4yvGJ1pUSLf2xIIBCHWj+Jk59A2jlCjtUA5DqtBFrNnig5JGXKc5 E8uRAG/JLv8WBRHNY60gJpIh5Q4OXepyeTrRW6cSsqPhLheFn/YX0aQsqW0QL05w0TwK MwR25d/5+ish3RMDzUsQfdqIkfxO2Iu0Ycvvz5GlUhKiU19CDHwdsweWFgUVwnksdKIi Jq4w== X-Gm-Message-State: AOAM533rCy9jT5RkWQfCGGMZ6TAYwPCl/9B0937VWFgy4etKjw/TYZBw AObhms95EwXA5zBKpcGs6TKPt9UAYac= X-Google-Smtp-Source: ABdhPJxSjkxb1rTGdXpAgcLyiC0IoEq1IUDNIgnOtURf/eWK4K4TRTGcjNe6NFG682MgKIXHEbXhF2mHRWg= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90b:601:b0:1d9:5a0f:2017 with SMTP id gb1-20020a17090b060100b001d95a0f2017mr2253310pjb.162.1651704607534; Wed, 04 May 2022 15:50:07 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:27 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-22-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 021/128] KVM: selftests: Use KVM_IOCTL_ERROR() for one-off arm64 ioctls From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use the KVM_IOCTL_ERROR() macro to generate error messages for a handful of one-off arm64 ioctls. The calls in question are made without an associated struct kvm_vm/kvm_vcpu as they are used to configure those structs, i.e. can't be easily converted to e.g. vcpu_ioctl(). Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/lib/aarch64/processor.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/testing/selftests/kvm/lib/aarch64/processor.c b/tools/te= sting/selftests/kvm/lib/aarch64/processor.c index 6fa52e141e1b..5f6967058647 100644 --- a/tools/testing/selftests/kvm/lib/aarch64/processor.c +++ b/tools/testing/selftests/kvm/lib/aarch64/processor.c @@ -472,15 +472,15 @@ void aarch64_get_supported_page_sizes(uint32_t ipa, TEST_ASSERT(vm_fd >=3D 0, KVM_IOCTL_ERROR(KVM_CREATE_VM, vm_fd)); =20 vcpu_fd =3D ioctl(vm_fd, KVM_CREATE_VCPU, 0); - TEST_ASSERT(vcpu_fd >=3D 0, "Can't create vcpu"); + TEST_ASSERT(vcpu_fd >=3D 0, KVM_IOCTL_ERROR(KVM_CREATE_VCPU, vcpu_fd)); =20 err =3D ioctl(vm_fd, KVM_ARM_PREFERRED_TARGET, &preferred_init); - TEST_ASSERT(err =3D=3D 0, "Can't get target"); + TEST_ASSERT(err =3D=3D 0, KVM_IOCTL_ERROR(KVM_ARM_PREFERRED_TARGET, err)); err =3D ioctl(vcpu_fd, KVM_ARM_VCPU_INIT, &preferred_init); - TEST_ASSERT(err =3D=3D 0, "Can't get init vcpu"); + TEST_ASSERT(err =3D=3D 0, KVM_IOCTL_ERROR(KVM_ARM_VCPU_INIT, err)); =20 err =3D ioctl(vcpu_fd, KVM_GET_ONE_REG, ®); - TEST_ASSERT(err =3D=3D 0, "Can't get MMFR0"); + TEST_ASSERT(err =3D=3D 0, KVM_IOCTL_ERROR(KVM_GET_ONE_REG, vcpu_fd)); =20 *ps4k =3D ((val >> 28) & 0xf) !=3D 0xf; *ps64k =3D ((val >> 24) & 0xf) =3D=3D 0; --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 3B8CBC433F5 for ; Wed, 4 May 2022 22:51:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379452AbiEDWzV (ORCPT ); Wed, 4 May 2022 18:55:21 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41720 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379339AbiEDWxy (ORCPT ); Wed, 4 May 2022 18:53:54 -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 058345419B for ; Wed, 4 May 2022 15:50:10 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id gn21-20020a17090ac79500b001dc8a800410so1837755pjb.0 for ; Wed, 04 May 2022 15:50:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=9MYqVcaHqXemKrQxjWs3On/yC1RfQIL11OGjYRaSgOM=; b=FsbWapnOxw+aJpu2dQXg5tRUbDM3UKFkFMUYQ94yQ2sULr3pEbwriHNABnvbACsrhW Uq6itWrAWng5bSmX5LoAPkm2tL+6J2vT0KZQ1JPoDLed9ab30kgngTC4munf8zjml2v5 BvBN/rPivO9t55c+jyqcao7I7b2vCHzAYcbcf+7IzK0Q5V1HW7uM/owiQhjUJyv4ojMV rTebazwSY1Yk5KCPD2QiaFfWsolNFjnA25MTeheuv9+ZiZuHAHaAW55onfMXyEmsZTG2 LYWemW3vgwmkVKGysOrcJC37C3f43yceeen3IntU5aFNeUX/kVmskepv2otKv188Pyxj gsrQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=9MYqVcaHqXemKrQxjWs3On/yC1RfQIL11OGjYRaSgOM=; b=A7KBYMVqvusKBuG53sb0rvn00I8OLCbWKHOhcP+zX03PwZ18CakvLABBv3WNUzHO1t t2UsNx9ZynaYWAIETY/xvnt22HMXt8+nbu1x4+U5hmB+VztcDwZTexkMgF2fzpWa16HT zudoCYRhOYiH+74tFzQ9/S+eyycjOyqTXwT0k5OOA8EDg1nf14JvDsgyEJDKbE38lbbi zPUtOydGUccHmRZDF5ksPvZV3S5nTfKP3BHiSd9ZyuKOBOTBmswylSwD6dk7VfrlupDL sdWb0u68rsOL6IuPaM+YX/ErQV6/mFJZzcg7XrbunhX3PZTawMfAZbH5xQVZcUaa3eFt ZaMA== X-Gm-Message-State: AOAM532AWLqK9M/xy+w8DIuEhy3OssIwuzECy5Y1MTsUbtOII/xDc+ft Emu4yrfvA++Uikv3K72To7/ulYUmyxA= X-Google-Smtp-Source: ABdhPJwD6QMoI+HXifXgxvIHBwuUXwD0JHYrffG0bTubcmw4tYm4XyClCI1Q8P+9XSz8+p+RgAIJNDfh6SA= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:21c6:b0:4fa:914c:2c2b with SMTP id t6-20020a056a0021c600b004fa914c2c2bmr22967081pfj.56.1651704609534; Wed, 04 May 2022 15:50:09 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:28 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-23-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 022/128] KVM: selftests: Drop @test param from kvm_create_device() From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Remove the two calls that pass @test=3Dtrue to kvm_create_device() and drop the @test param entirely. The two removed calls don't check the return value of kvm_create_device(), so other than verifying KVM doesn't explode, which is extremely unlikely given that the non-test variant was _just_ called, they are pointless and provide no validation coverage. Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/aarch64/vgic_init.c | 14 ++++++-------- .../testing/selftests/kvm/include/kvm_util_base.h | 2 +- tools/testing/selftests/kvm/lib/kvm_util.c | 12 ++++-------- 3 files changed, 11 insertions(+), 17 deletions(-) diff --git a/tools/testing/selftests/kvm/aarch64/vgic_init.c b/tools/testin= g/selftests/kvm/aarch64/vgic_init.c index 9a153b2ea3de..9cd58f22f5bd 100644 --- a/tools/testing/selftests/kvm/aarch64/vgic_init.c +++ b/tools/testing/selftests/kvm/aarch64/vgic_init.c @@ -65,7 +65,7 @@ static struct vm_gic vm_gic_create_with_vcpus(uint32_t gi= c_dev_type, uint32_t nr =20 v.gic_dev_type =3D gic_dev_type; v.vm =3D vm_create_default_with_vcpus(nr_vcpus, 0, 0, guest_code, NULL); - v.gic_fd =3D kvm_create_device(v.vm, gic_dev_type, false); + v.gic_fd =3D kvm_create_device(v.vm, gic_dev_type); =20 return v; } @@ -406,7 +406,7 @@ static void test_v3_typer_accesses(void) =20 v.vm =3D vm_create_default(0, 0, guest_code); =20 - v.gic_fd =3D kvm_create_device(v.vm, KVM_DEV_TYPE_ARM_VGIC_V3, false); + v.gic_fd =3D kvm_create_device(v.vm, KVM_DEV_TYPE_ARM_VGIC_V3); =20 vm_vcpu_add_default(v.vm, 3, guest_code); =20 @@ -486,7 +486,7 @@ static void test_v3_last_bit_redist_regions(void) =20 v.vm =3D vm_create_default_with_vcpus(6, 0, 0, guest_code, vcpuids); =20 - v.gic_fd =3D kvm_create_device(v.vm, KVM_DEV_TYPE_ARM_VGIC_V3, false); + v.gic_fd =3D kvm_create_device(v.vm, KVM_DEV_TYPE_ARM_VGIC_V3); =20 kvm_device_access(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL, KVM_DEV_ARM_VGIC_CTRL_INIT, NULL, true); @@ -535,7 +535,7 @@ static void test_v3_last_bit_single_rdist(void) =20 v.vm =3D vm_create_default_with_vcpus(6, 0, 0, guest_code, vcpuids); =20 - v.gic_fd =3D kvm_create_device(v.vm, KVM_DEV_TYPE_ARM_VGIC_V3, false); + v.gic_fd =3D kvm_create_device(v.vm, KVM_DEV_TYPE_ARM_VGIC_V3); =20 kvm_device_access(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL, KVM_DEV_ARM_VGIC_CTRL_INIT, NULL, true); @@ -602,7 +602,7 @@ static void test_v3_its_region(void) int its_fd, ret; =20 v =3D vm_gic_create_with_vcpus(KVM_DEV_TYPE_ARM_VGIC_V3, NR_VCPUS); - its_fd =3D kvm_create_device(v.vm, KVM_DEV_TYPE_ARM_VGIC_ITS, false); + its_fd =3D kvm_create_device(v.vm, KVM_DEV_TYPE_ARM_VGIC_ITS); =20 addr =3D 0x401000; ret =3D _kvm_device_access(its_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, @@ -655,13 +655,11 @@ int test_kvm_device(uint32_t gic_dev_type) ret =3D _kvm_create_device(v.vm, gic_dev_type, true, &fd); if (ret) return ret; - v.gic_fd =3D kvm_create_device(v.vm, gic_dev_type, false); + v.gic_fd =3D kvm_create_device(v.vm, gic_dev_type); =20 ret =3D _kvm_create_device(v.vm, gic_dev_type, false, &fd); TEST_ASSERT(ret && errno =3D=3D EEXIST, "create GIC device twice"); =20 - kvm_create_device(v.vm, gic_dev_type, true); - /* try to create the other gic_dev_type */ other =3D VGIC_DEV_IS_V2(gic_dev_type) ? KVM_DEV_TYPE_ARM_VGIC_V3 : KVM_DEV_TYPE_ARM_VGIC_V2; diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index c0199f3b59bb..6e1926abb248 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -485,7 +485,7 @@ void vcpu_args_set(struct kvm_vm *vm, uint32_t vcpuid, = unsigned int num, ...); int _kvm_device_check_attr(int dev_fd, uint32_t group, uint64_t attr); int kvm_device_check_attr(int dev_fd, uint32_t group, uint64_t attr); int _kvm_create_device(struct kvm_vm *vm, uint64_t type, bool test, int *f= d); -int kvm_create_device(struct kvm_vm *vm, uint64_t type, bool test); +int kvm_create_device(struct kvm_vm *vm, uint64_t type); int _kvm_device_access(int dev_fd, uint32_t group, uint64_t attr, void *val, bool write); int kvm_device_access(int dev_fd, uint32_t group, uint64_t attr, diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index a57958a39c1b..cb2e42aa1c03 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -1642,18 +1642,14 @@ int _kvm_create_device(struct kvm_vm *vm, uint64_t = type, bool test, int *fd) return ret; } =20 -int kvm_create_device(struct kvm_vm *vm, uint64_t type, bool test) +int kvm_create_device(struct kvm_vm *vm, uint64_t type) { int fd, ret; =20 - ret =3D _kvm_create_device(vm, type, test, &fd); + ret =3D _kvm_create_device(vm, type, false, &fd); =20 - if (!test) { - TEST_ASSERT(!ret, - "KVM_CREATE_DEVICE IOCTL failed, rc: %i errno: %i", ret, errno); - return fd; - } - return ret; + TEST_ASSERT(!ret, "KVM_CREATE_DEVICE IOCTL failed, rc: %i errno: %i", ret= , errno); + return fd; } =20 int _kvm_device_access(int dev_fd, uint32_t group, uint64_t attr, --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 E5668C4167D for ; Wed, 4 May 2022 22:56:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1380229AbiEDW7v (ORCPT ); Wed, 4 May 2022 18:59:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42036 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379355AbiEDWxz (ORCPT ); Wed, 4 May 2022 18:53:55 -0400 Received: from mail-pj1-x1049.google.com (mail-pj1-x1049.google.com [IPv6:2607:f8b0:4864:20::1049]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6616753A7C for ; Wed, 4 May 2022 15:50:11 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id 92-20020a17090a09e500b001d917022847so1090249pjo.1 for ; Wed, 04 May 2022 15:50:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=w5Ek3pNn+zgpTimrLM2NeiBwJXLo+yC/AOU9ElYI0s8=; b=MopPeM3N8fxIAPiwK1n3koAqXWH+OgyMbJXC561jYAYh0TJQiham7PbUAMpy6eNruO Kz6L2OZteF8qFLF7U8b1fotng8TpL6/mMQCRJHm3sL+mzA3jgxyk3Dmx3z0iul1EuNuk 9D71VbfCPrT2RQlVntdgT6q7OVC/h/Aro0j9cUqSrG7ZmVpqtV4wI9/8Fydh8EAqU5jG E0/x5L8oKHD7cW7mTOYTo9DSt3XdzIvD5T2wuB5T/3QPA7VB2iSNBPCBwHJvbwA3oy6L wfDkf94LVQF95glWMEKh1V0SCf3JbuEocK4Zl4tTYazPLUwO8mavCO/S7K59JTKTXwfv yaRA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=w5Ek3pNn+zgpTimrLM2NeiBwJXLo+yC/AOU9ElYI0s8=; b=l3dj086CBSgvqUW+MuArrImEegKH+HpM1fBweVlosb20Atd50lVhR+lp4q/rZPSnmU fwWheAvQC7My97JK9GXZ4Lol+Fi6McC+jCQlPuawTyPX15Rx905PUiR2wi2iF1lZod37 g9PUoManUPIpw4Qe02zd2gMgVXMMVoZGbO+KPtLXKUMsAJS2e9s0JQJkPzB6LYpkA4eD 9cLj9DxusA9rr3uJ96jGxqPx4j1n+oTqdXATIFNu4QmD6wDSECdAmN6Ahx/km30Kwu22 GS0pWRUfy9vKCuqO6gLLKj1ffGvgw+Am1Gk5RCecCWuPF55esF3GvAkPI2pIzK1y/UhF DgIw== X-Gm-Message-State: AOAM531rWJKwRWQT5fXyQQ1wphbSe5YE1x3u/EVAnk7a3YBn7yYtnRV6 o3niSFBulAbwl+rBQvy4wH1niP/E9Yg= X-Google-Smtp-Source: ABdhPJy8mF106ymdK7WcXSxN1PdSCxKU8bMX1yGpTZitke2REvLbdTt4LlT5LiQUmOaESc00oKXKN/z8RaM= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:c002:b0:1d9:250a:73c8 with SMTP id p2-20020a17090ac00200b001d9250a73c8mr2161247pjt.133.1651704611101; Wed, 04 May 2022 15:50:11 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:29 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-24-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 023/128] KVM: selftests: Move KVM_CREATE_DEVICE_TEST code to separate helper From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Move KVM_CREATE_DEVICE_TEST to its own helper, identifying "real" versus "test" device creation based on a hardcoded boolean buried in the middle of a param list is painful for readers. Signed-off-by: Sean Christopherson --- .../testing/selftests/kvm/aarch64/vgic_init.c | 10 ++++---- .../selftests/kvm/include/kvm_util_base.h | 3 ++- .../testing/selftests/kvm/lib/aarch64/vgic.c | 3 +-- tools/testing/selftests/kvm/lib/kvm_util.c | 23 ++++++++++++++----- 4 files changed, 25 insertions(+), 14 deletions(-) diff --git a/tools/testing/selftests/kvm/aarch64/vgic_init.c b/tools/testin= g/selftests/kvm/aarch64/vgic_init.c index 9cd58f22f5bd..18d1d0335108 100644 --- a/tools/testing/selftests/kvm/aarch64/vgic_init.c +++ b/tools/testing/selftests/kvm/aarch64/vgic_init.c @@ -648,24 +648,24 @@ int test_kvm_device(uint32_t gic_dev_type) v.vm =3D vm_create_default_with_vcpus(NR_VCPUS, 0, 0, guest_code, NULL); =20 /* try to create a non existing KVM device */ - ret =3D _kvm_create_device(v.vm, 0, true, &fd); + ret =3D __kvm_test_create_device(v.vm, 0); TEST_ASSERT(ret && errno =3D=3D ENODEV, "unsupported device"); =20 /* trial mode */ - ret =3D _kvm_create_device(v.vm, gic_dev_type, true, &fd); + ret =3D __kvm_test_create_device(v.vm, gic_dev_type); if (ret) return ret; v.gic_fd =3D kvm_create_device(v.vm, gic_dev_type); =20 - ret =3D _kvm_create_device(v.vm, gic_dev_type, false, &fd); + ret =3D __kvm_create_device(v.vm, gic_dev_type, &fd); TEST_ASSERT(ret && errno =3D=3D EEXIST, "create GIC device twice"); =20 /* try to create the other gic_dev_type */ other =3D VGIC_DEV_IS_V2(gic_dev_type) ? KVM_DEV_TYPE_ARM_VGIC_V3 : KVM_DEV_TYPE_ARM_VGIC_V2; =20 - if (!_kvm_create_device(v.vm, other, true, &fd)) { - ret =3D _kvm_create_device(v.vm, other, false, &fd); + if (!__kvm_test_create_device(v.vm, other)) { + ret =3D __kvm_test_create_device(v.vm, other); TEST_ASSERT(ret && errno =3D=3D EINVAL, "create GIC device while other version exists"); } diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index 6e1926abb248..8795f4624c2c 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -484,7 +484,8 @@ void vcpu_args_set(struct kvm_vm *vm, uint32_t vcpuid, = unsigned int num, ...); =20 int _kvm_device_check_attr(int dev_fd, uint32_t group, uint64_t attr); int kvm_device_check_attr(int dev_fd, uint32_t group, uint64_t attr); -int _kvm_create_device(struct kvm_vm *vm, uint64_t type, bool test, int *f= d); +int __kvm_test_create_device(struct kvm_vm *vm, uint64_t type); +int __kvm_create_device(struct kvm_vm *vm, uint64_t type, int *fd); int kvm_create_device(struct kvm_vm *vm, uint64_t type); int _kvm_device_access(int dev_fd, uint32_t group, uint64_t attr, void *val, bool write); diff --git a/tools/testing/selftests/kvm/lib/aarch64/vgic.c b/tools/testing= /selftests/kvm/lib/aarch64/vgic.c index c34f0f116f39..74b4bcaffcfa 100644 --- a/tools/testing/selftests/kvm/lib/aarch64/vgic.c +++ b/tools/testing/selftests/kvm/lib/aarch64/vgic.c @@ -51,8 +51,7 @@ int vgic_v3_setup(struct kvm_vm *vm, unsigned int nr_vcpu= s, uint32_t nr_irqs, nr_vcpus, nr_vcpus_created); =20 /* Distributor setup */ - if (_kvm_create_device(vm, KVM_DEV_TYPE_ARM_VGIC_V3, - false, &gic_fd) !=3D 0) + if (__kvm_create_device(vm, KVM_DEV_TYPE_ARM_VGIC_V3, &gic_fd)) return -1; =20 kvm_device_access(gic_fd, KVM_DEV_ARM_VGIC_GRP_NR_IRQS, diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index cb2e42aa1c03..9c0122b0e393 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -1629,14 +1629,25 @@ int kvm_device_check_attr(int dev_fd, uint32_t grou= p, uint64_t attr) return ret; } =20 -int _kvm_create_device(struct kvm_vm *vm, uint64_t type, bool test, int *f= d) +int __kvm_test_create_device(struct kvm_vm *vm, uint64_t type) { - struct kvm_create_device create_dev; + struct kvm_create_device create_dev =3D { + .type =3D type, + .flags =3D KVM_CREATE_DEVICE_TEST, + }; + + return __vm_ioctl(vm, KVM_CREATE_DEVICE, &create_dev); +} + +int __kvm_create_device(struct kvm_vm *vm, uint64_t type, int *fd) +{ + struct kvm_create_device create_dev =3D { + .type =3D type, + .fd =3D -1, + .flags =3D 0, + }; int ret; =20 - create_dev.type =3D type; - create_dev.fd =3D -1; - create_dev.flags =3D test ? KVM_CREATE_DEVICE_TEST : 0; ret =3D __vm_ioctl(vm, KVM_CREATE_DEVICE, &create_dev); *fd =3D create_dev.fd; return ret; @@ -1646,7 +1657,7 @@ int kvm_create_device(struct kvm_vm *vm, uint64_t typ= e) { int fd, ret; =20 - ret =3D _kvm_create_device(vm, type, false, &fd); + ret =3D __kvm_create_device(vm, type, &fd); =20 TEST_ASSERT(!ret, "KVM_CREATE_DEVICE IOCTL failed, rc: %i errno: %i", ret= , errno); return fd; --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 AFA4CC433EF for ; Wed, 4 May 2022 22:51:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379372AbiEDWz2 (ORCPT ); Wed, 4 May 2022 18:55:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41350 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379361AbiEDWx4 (ORCPT ); Wed, 4 May 2022 18:53:56 -0400 Received: from mail-pg1-x54a.google.com (mail-pg1-x54a.google.com [IPv6:2607:f8b0:4864:20::54a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4231410E for ; Wed, 4 May 2022 15:50:13 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id d127-20020a633685000000b003ab20e589a8so1327765pga.22 for ; Wed, 04 May 2022 15:50:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=KNlMIi/5CD/FZqIH5hea8ZZiDw7T78aX5qVZNF9SKlk=; b=Bx0HXgIBdqqfUItCqbnUC6lRO1YyL9mQod1z7AJjwLWNdnw9hysn65hDCROePdpSLh baK/HVPYtwiOflMsTXas+WWsAjAH0lX/BYQCpbCEMEzEubx6Zfc7HNgFlNYoQnfFAUPF gxQnkJiy0hDCxqGpUfu1jLuYlI4r5Qvc6jNUQgLDnq8hKDxv5xuYWBBwwjb2F+J2fvqU iHXPeDrkl6f8KAEOqQTlFe2zN4VCsYCzM3YS/Ga8pkkIBGowwp8d4xaCXzvL1HoRUbuh XSZ3HjZiqjxQ1cnYG2avwE+iZm9Yb5omUP9wcFrtwdKuLGeoeAUHPL38cuNhRpVyZT6O N80w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=KNlMIi/5CD/FZqIH5hea8ZZiDw7T78aX5qVZNF9SKlk=; b=VIslI9D7w9yOzwIPltsF8OmlunukOIR5Sb25Eydm5Gtd5CXo8DM8axQeTN1GBmNrSu 0bpdmeGfqYNGUGhRQYbGMLppJKF1STag5OfXt8FpmpAsMBMpbCPouDPY7aJ4fITaXAzL GEoW2shiN7F0c1iOoo4q5r2lgsorUIqlxRU5WJZYz8p9NiVEnHIEI1LOjF1yJF37mMh7 OaNswqSyCn2i8+AQBS6kbLwIry/+kWW+TzxLzAOcMawl6XUBA01IbALF13I7NuoqJIf6 zEwhjFGa9NASoFir26PNyUuRa+OzUbaTqEFqCYefQ1hCX72p5bdFMa5xJREP4a1yL8BJ 164Q== X-Gm-Message-State: AOAM530LLePOetTeagJpnWUrw3NOyRljdc0LrQYDRyELrIBYEMNPsePe 03KQFjPRo8chCl4aNYt2tE/W+dRBNRY= X-Google-Smtp-Source: ABdhPJx1tg43rZpUL2vSpPWkpp3iSZOaDhrPZAHI7pErY2gleGBrUEoeFlINhiiODljj46JGoQvfRH4RSXk= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:6501:b0:1ca:a7df:695c with SMTP id i1-20020a17090a650100b001caa7df695cmr2262636pjj.152.1651704612814; Wed, 04 May 2022 15:50:12 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:30 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-25-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 024/128] KVM: selftests: Multiplex return code and fd in __kvm_create_device() From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Multiplex the return value and fd (on success) in __kvm_create_device() to mimic common library helpers that return file descriptors, e.g. open(). Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/aarch64/vgic_init.c | 6 +++--- .../selftests/kvm/include/kvm_util_base.h | 2 +- tools/testing/selftests/kvm/lib/aarch64/vgic.c | 5 +++-- tools/testing/selftests/kvm/lib/kvm_util.c | 16 +++++++--------- 4 files changed, 14 insertions(+), 15 deletions(-) diff --git a/tools/testing/selftests/kvm/aarch64/vgic_init.c b/tools/testin= g/selftests/kvm/aarch64/vgic_init.c index 18d1d0335108..1015f6fc352c 100644 --- a/tools/testing/selftests/kvm/aarch64/vgic_init.c +++ b/tools/testing/selftests/kvm/aarch64/vgic_init.c @@ -642,8 +642,8 @@ static void test_v3_its_region(void) int test_kvm_device(uint32_t gic_dev_type) { struct vm_gic v; - int ret, fd; uint32_t other; + int ret; =20 v.vm =3D vm_create_default_with_vcpus(NR_VCPUS, 0, 0, guest_code, NULL); =20 @@ -657,8 +657,8 @@ int test_kvm_device(uint32_t gic_dev_type) return ret; v.gic_fd =3D kvm_create_device(v.vm, gic_dev_type); =20 - ret =3D __kvm_create_device(v.vm, gic_dev_type, &fd); - TEST_ASSERT(ret && errno =3D=3D EEXIST, "create GIC device twice"); + ret =3D __kvm_create_device(v.vm, gic_dev_type); + TEST_ASSERT(ret < 0 && errno =3D=3D EEXIST, "create GIC device twice"); =20 /* try to create the other gic_dev_type */ other =3D VGIC_DEV_IS_V2(gic_dev_type) ? KVM_DEV_TYPE_ARM_VGIC_V3 diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index 8795f4624c2c..1ccf44805fa0 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -485,7 +485,7 @@ void vcpu_args_set(struct kvm_vm *vm, uint32_t vcpuid, = unsigned int num, ...); int _kvm_device_check_attr(int dev_fd, uint32_t group, uint64_t attr); int kvm_device_check_attr(int dev_fd, uint32_t group, uint64_t attr); int __kvm_test_create_device(struct kvm_vm *vm, uint64_t type); -int __kvm_create_device(struct kvm_vm *vm, uint64_t type, int *fd); +int __kvm_create_device(struct kvm_vm *vm, uint64_t type); int kvm_create_device(struct kvm_vm *vm, uint64_t type); int _kvm_device_access(int dev_fd, uint32_t group, uint64_t attr, void *val, bool write); diff --git a/tools/testing/selftests/kvm/lib/aarch64/vgic.c b/tools/testing= /selftests/kvm/lib/aarch64/vgic.c index 74b4bcaffcfa..7925b4c5dad0 100644 --- a/tools/testing/selftests/kvm/lib/aarch64/vgic.c +++ b/tools/testing/selftests/kvm/lib/aarch64/vgic.c @@ -51,8 +51,9 @@ int vgic_v3_setup(struct kvm_vm *vm, unsigned int nr_vcpu= s, uint32_t nr_irqs, nr_vcpus, nr_vcpus_created); =20 /* Distributor setup */ - if (__kvm_create_device(vm, KVM_DEV_TYPE_ARM_VGIC_V3, &gic_fd)) - return -1; + gic_fd =3D __kvm_create_device(vm, KVM_DEV_TYPE_ARM_VGIC_V3); + if (gic_fd < 0) + return gic_fd; =20 kvm_device_access(gic_fd, KVM_DEV_ARM_VGIC_GRP_NR_IRQS, 0, &nr_irqs, true); diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index 9c0122b0e393..17e226107b65 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -1639,27 +1639,25 @@ int __kvm_test_create_device(struct kvm_vm *vm, uin= t64_t type) return __vm_ioctl(vm, KVM_CREATE_DEVICE, &create_dev); } =20 -int __kvm_create_device(struct kvm_vm *vm, uint64_t type, int *fd) +int __kvm_create_device(struct kvm_vm *vm, uint64_t type) { struct kvm_create_device create_dev =3D { .type =3D type, .fd =3D -1, .flags =3D 0, }; - int ret; + int err; =20 - ret =3D __vm_ioctl(vm, KVM_CREATE_DEVICE, &create_dev); - *fd =3D create_dev.fd; - return ret; + err =3D __vm_ioctl(vm, KVM_CREATE_DEVICE, &create_dev); + TEST_ASSERT(err <=3D 0, "KVM_CREATE_DEVICE shouldn't return a positive va= lue"); + return err ? : create_dev.fd; } =20 int kvm_create_device(struct kvm_vm *vm, uint64_t type) { - int fd, ret; + int fd =3D __kvm_create_device(vm, type); =20 - ret =3D __kvm_create_device(vm, type, &fd); - - TEST_ASSERT(!ret, "KVM_CREATE_DEVICE IOCTL failed, rc: %i errno: %i", ret= , errno); + TEST_ASSERT(fd >=3D 0, "KVM_CREATE_DEVICE IOCTL failed, rc: %i errno: %i"= , fd, errno); return fd; } =20 --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 23422C433EF for ; Wed, 4 May 2022 22:52:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379505AbiEDWze (ORCPT ); Wed, 4 May 2022 18:55:34 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42460 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379393AbiEDWyC (ORCPT ); Wed, 4 May 2022 18:54:02 -0400 Received: from mail-pl1-x64a.google.com (mail-pl1-x64a.google.com [IPv6:2607:f8b0:4864:20::64a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 700FFB6B for ; Wed, 4 May 2022 15:50:15 -0700 (PDT) Received: by mail-pl1-x64a.google.com with SMTP id i16-20020a170902cf1000b001540b6a09e3so1379155plg.0 for ; Wed, 04 May 2022 15:50:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=B5xOiYq5DBAgzQjdMn5ipYvk589ia+w+WkBY20rzQmc=; b=nUNaJYl42mqq5KWNJAYDmh0gmn1fX1BTePbY6srWLqwQAgRp6OS/oxPmRSOYsFThO8 c5wMjwlCzAp9MF3qDoPXvfGWJinG2mzE1fHjZ8067kAJxpvZKWHs6Rzp/EHUEwlE1ECA z52ulOecNiDYVg762aNPWZJEXiK0jN+NcVmbFoiTT9X2XMAxzUPJRgIg01gXchGVPFIX 4Was4gWuiHvBG+jQVIP8NjjkJW5s7G+OpDYWBxf+lFtGDH9jPOis+7lKusYUekucGeqZ X1ogKVruKBsKYXr29EbskU5HaTBUgHtuRACiw530Qd9JENL+/SGYE9fkxru3lZ5RaYCY Qejw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=B5xOiYq5DBAgzQjdMn5ipYvk589ia+w+WkBY20rzQmc=; b=UjW7UrKeutovxN8fmN9VttsCJUCNAx8EQpp/SNs4RIxNItWLDa4vL/0+8ra6iGjeYP FPkHmXvVFe59oKpW/0CacZ21jMB5ibWsDQlIAUWcEIrMGmEo+jzR0Dkp3KPKM3Qpg9FF BndTXb110NzS6nXiuRHiJMlJtN+9SuXZ1l6Qs+2BwnqRdzXBJ4Jh70YmBD60vc+OINXf h2mYCxzIBcSXIHEfRnpbKoX6yhV7gQ84EsKDJszrGG4Si+utGiBwbozwPYEYbhNnQQ4q NzfR6fMHZHLYBNbrlyo6VxSSkOUXe2mzQ0oWc5iygLD79KGXW0LQw437YCgsMppCCY0N 8ETg== X-Gm-Message-State: AOAM532GjeDssZUuSwQTTiDqu48Ib3wBkzKLB/prhHbC1n6oEa4QTYYS Rht6Yrm+9Aoh2b+/X/hqT+QV+IZ3ylA= X-Google-Smtp-Source: ABdhPJy8HeUz1cbMyhSv1En5hiPh/kxB3sjVoxFOG+Pu+WFk0VXRYKu4kAKE49V8TJq6IlIkTpReR+LKBqw= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90b:1b0d:b0:1dc:672e:c913 with SMTP id nu13-20020a17090b1b0d00b001dc672ec913mr2228005pjb.102.1651704614650; Wed, 04 May 2022 15:50:14 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:31 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-26-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 025/128] KVM: selftests: Rename KVM_HAS_DEVICE_ATTR helpers for consistency From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Rename kvm_device_check_attr() and its variants to kvm_has_device_attr() to be consistent with the ioctl names and with other helpers in the KVM selftests framework. Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/aarch64/vgic_init.c | 12 +++++------- tools/testing/selftests/kvm/include/kvm_util_base.h | 6 +++--- tools/testing/selftests/kvm/lib/kvm_util.c | 12 ++++++------ .../selftests/kvm/system_counter_offset_test.c | 2 +- 4 files changed, 15 insertions(+), 17 deletions(-) diff --git a/tools/testing/selftests/kvm/aarch64/vgic_init.c b/tools/testin= g/selftests/kvm/aarch64/vgic_init.c index 1015f6fc352c..223fef4c1f62 100644 --- a/tools/testing/selftests/kvm/aarch64/vgic_init.c +++ b/tools/testing/selftests/kvm/aarch64/vgic_init.c @@ -127,14 +127,12 @@ static void subtest_dist_rdist(struct vm_gic *v) : gic_v2_dist_region; =20 /* Check existing group/attributes */ - kvm_device_check_attr(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - dist.attr); + kvm_has_device_attr(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, dist.attr); =20 - kvm_device_check_attr(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - rdist.attr); + kvm_has_device_attr(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, rdist.attr); =20 /* check non existing attribute */ - ret =3D _kvm_device_check_attr(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, -1); + ret =3D __kvm_has_device_attr(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, -1); TEST_ASSERT(ret && errno =3D=3D ENXIO, "attribute not supported"); =20 /* misaligned DIST and REDIST address settings */ @@ -176,7 +174,7 @@ static void subtest_dist_rdist(struct vm_gic *v) rdist.attr, &addr, true); TEST_ASSERT(ret && errno =3D=3D EEXIST, "GIC redist base set again"); =20 - ret =3D _kvm_device_check_attr(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + ret =3D __kvm_has_device_attr(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, KVM_VGIC_V3_ADDR_TYPE_REDIST); if (!ret) { /* Attempt to mix legacy and new redistributor regions */ @@ -203,7 +201,7 @@ static void subtest_v3_redist_regions(struct vm_gic *v) uint64_t addr, expected_addr; int ret; =20 - ret =3D kvm_device_check_attr(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + ret =3D kvm_has_device_attr(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, KVM_VGIC_V3_ADDR_TYPE_REDIST); TEST_ASSERT(!ret, "Multiple redist regions advertised"); =20 diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index 1ccf44805fa0..66d896c8e19b 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -482,8 +482,8 @@ void *vcpu_map_dirty_ring(struct kvm_vm *vm, uint32_t v= cpuid); */ void vcpu_args_set(struct kvm_vm *vm, uint32_t vcpuid, unsigned int num, .= ..); =20 -int _kvm_device_check_attr(int dev_fd, uint32_t group, uint64_t attr); -int kvm_device_check_attr(int dev_fd, uint32_t group, uint64_t attr); +int __kvm_has_device_attr(int dev_fd, uint32_t group, uint64_t attr); +int kvm_has_device_attr(int dev_fd, uint32_t group, uint64_t attr); int __kvm_test_create_device(struct kvm_vm *vm, uint64_t type); int __kvm_create_device(struct kvm_vm *vm, uint64_t type); int kvm_create_device(struct kvm_vm *vm, uint64_t type); @@ -494,7 +494,7 @@ int kvm_device_access(int dev_fd, uint32_t group, uint6= 4_t attr, void kvm_irq_line(struct kvm_vm *vm, uint32_t irq, int level); int _kvm_irq_line(struct kvm_vm *vm, uint32_t irq, int level); =20 -int _vcpu_has_device_attr(struct kvm_vm *vm, uint32_t vcpuid, uint32_t gro= up, +int __vcpu_has_device_attr(struct kvm_vm *vm, uint32_t vcpuid, uint32_t gr= oup, uint64_t attr); int vcpu_has_device_attr(struct kvm_vm *vm, uint32_t vcpuid, uint32_t grou= p, uint64_t attr); diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index 17e226107b65..ca313dc8b37a 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -1610,7 +1610,7 @@ void _vm_ioctl(struct kvm_vm *vm, unsigned long cmd, = const char *name, void *arg * Device Ioctl */ =20 -int _kvm_device_check_attr(int dev_fd, uint32_t group, uint64_t attr) +int __kvm_has_device_attr(int dev_fd, uint32_t group, uint64_t attr) { struct kvm_device_attr attribute =3D { .group =3D group, @@ -1621,9 +1621,9 @@ int _kvm_device_check_attr(int dev_fd, uint32_t group= , uint64_t attr) return ioctl(dev_fd, KVM_HAS_DEVICE_ATTR, &attribute); } =20 -int kvm_device_check_attr(int dev_fd, uint32_t group, uint64_t attr) +int kvm_has_device_attr(int dev_fd, uint32_t group, uint64_t attr) { - int ret =3D _kvm_device_check_attr(dev_fd, group, attr); + int ret =3D __kvm_has_device_attr(dev_fd, group, attr); =20 TEST_ASSERT(!ret, "KVM_HAS_DEVICE_ATTR failed, rc: %i errno: %i", ret, er= rno); return ret; @@ -1686,18 +1686,18 @@ int kvm_device_access(int dev_fd, uint32_t group, u= int64_t attr, return ret; } =20 -int _vcpu_has_device_attr(struct kvm_vm *vm, uint32_t vcpuid, uint32_t gro= up, +int __vcpu_has_device_attr(struct kvm_vm *vm, uint32_t vcpuid, uint32_t gr= oup, uint64_t attr) { struct vcpu *vcpu =3D vcpu_get(vm, vcpuid); =20 - return _kvm_device_check_attr(vcpu->fd, group, attr); + return __kvm_has_device_attr(vcpu->fd, group, attr); } =20 int vcpu_has_device_attr(struct kvm_vm *vm, uint32_t vcpuid, uint32_t grou= p, uint64_t attr) { - int ret =3D _vcpu_has_device_attr(vm, vcpuid, group, attr); + int ret =3D __vcpu_has_device_attr(vm, vcpuid, group, attr); =20 TEST_ASSERT(!ret, "KVM_HAS_DEVICE_ATTR IOCTL failed, rc: %i errno: %i", r= et, errno); return ret; diff --git a/tools/testing/selftests/kvm/system_counter_offset_test.c b/too= ls/testing/selftests/kvm/system_counter_offset_test.c index b337bbbfa41f..2b10c53abf4f 100644 --- a/tools/testing/selftests/kvm/system_counter_offset_test.c +++ b/tools/testing/selftests/kvm/system_counter_offset_test.c @@ -30,7 +30,7 @@ static struct test_case test_cases[] =3D { =20 static void check_preconditions(struct kvm_vm *vm) { - if (!_vcpu_has_device_attr(vm, VCPU_ID, KVM_VCPU_TSC_CTRL, KVM_VCPU_TSC_O= FFSET)) + if (!__vcpu_has_device_attr(vm, VCPU_ID, KVM_VCPU_TSC_CTRL, KVM_VCPU_TSC_= OFFSET)) return; =20 print_skip("KVM_VCPU_TSC_OFFSET not supported; skipping test"); --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 00124C41535 for ; Wed, 4 May 2022 22:56:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1380295AbiEDW7y (ORCPT ); Wed, 4 May 2022 18:59:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42518 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379414AbiEDWyC (ORCPT ); Wed, 4 May 2022 18:54:02 -0400 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 AD19410B5 for ; Wed, 4 May 2022 15:50:17 -0700 (PDT) Received: by mail-pg1-x549.google.com with SMTP id h17-20020a656391000000b003c606ca1b47so619453pgv.19 for ; Wed, 04 May 2022 15:50:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=ABkJ+xdsSyQQbclWdh79qI/Sw/9eZJ1mPAtO9vDn39s=; b=ZFsZLeKwKy56ZE1YxkyRcVbhtV7DjPQTGIahWMWPeW7ihhZlH1tAM+qMNmJZCiuLg0 wUefZU0fpxlMPZhFJn8b3DjoNIBQxWZXg2hyw+NJGBQ6TYJkluvYPJfE7NQWhGp3ZeYI kbNDg/8UvHvJtEBaXciPZ3KWpAHA8XoW9gERptHaxNwtvKevLazYnaKznCUYHCG4L5mV pKGSzSBz4wCucZEzeaZ7AZitmjxFoBYAwRGNI/Mze0PQ8GJU7nZDLB/BO8ncwChPT7wY 1UZqUP+UA3AuBxIudKF1PrLYLzcWTOKSzwBXtzu529NIxx3v+Pi5fydMb71PgSzfjTEK vuOQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=ABkJ+xdsSyQQbclWdh79qI/Sw/9eZJ1mPAtO9vDn39s=; b=aK39kPp9Rqjz0FjY/mRev4UXyznFzypamnjXTWZNgaHmQyojEuKewTozjfA0Uvw7dy x1XKYjjgTD+52WwBz5g3kPDQdP4F3y8UVGlk2fNWPA6m6wiM8q66OE+sX0Lu7TXKZsac siIe8sINchdhFpUihiRUmNuDk4QY/Bia+rLcdemv0duwQ+lKtXDJcwSUutXOU9ToISmL gXZLRjwXx0G/8eVJemzr4CgUuelm59epHbAJxLsUBaJyeEjpIJSFZxBvbNGbM92jWZ3h IPYqfwPqecWZLrcHV6o3E4Op/hq6WC/Q5M7BG+PKdcx//AR1xCKdoJ8y8tYubVuJ8h/s weyQ== X-Gm-Message-State: AOAM533DmrJIEOCcVFDqO4OoABsMeVUq4wgIqFuoBFwLAeMJ6Jx4sT0c QAhIoEH8CdEUZoYG8ucFmUSZoKFWeh4= X-Google-Smtp-Source: ABdhPJyFvrQg8+REjJN/9YrdzQsl2xKTXMuWGDaxYXcUh8fxtH8+FwCyziWCoj1TgYa1fgF9OyQie/zhLdY= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:a5c4:b0:15d:4ca:90cf with SMTP id t4-20020a170902a5c400b0015d04ca90cfmr23951338plq.133.1651704616542; Wed, 04 May 2022 15:50:16 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:32 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-27-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 026/128] KVM: selftests: Drop 'int' return from asserting *_has_device_attr() From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Drop 'int' returns from *_device_has_attr() helpers that assert the return is '0', there's no point in returning '0' and "requiring" the caller to perform a redundant assertion. Signed-off-by: Sean Christopherson --- .../testing/selftests/kvm/aarch64/vgic_init.c | 4 ++-- .../selftests/kvm/include/kvm_util_base.h | 20 ++++++++++++++++--- tools/testing/selftests/kvm/lib/kvm_util.c | 17 ---------------- 3 files changed, 19 insertions(+), 22 deletions(-) diff --git a/tools/testing/selftests/kvm/aarch64/vgic_init.c b/tools/testin= g/selftests/kvm/aarch64/vgic_init.c index 223fef4c1f62..2425894b3775 100644 --- a/tools/testing/selftests/kvm/aarch64/vgic_init.c +++ b/tools/testing/selftests/kvm/aarch64/vgic_init.c @@ -201,8 +201,8 @@ static void subtest_v3_redist_regions(struct vm_gic *v) uint64_t addr, expected_addr; int ret; =20 - ret =3D kvm_has_device_attr(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - KVM_VGIC_V3_ADDR_TYPE_REDIST); + ret =3D __kvm_has_device_attr(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_REDIST); TEST_ASSERT(!ret, "Multiple redist regions advertised"); =20 addr =3D REDIST_REGION_ATTR_ADDR(NR_VCPUS, 0x100000, 2, 0); diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index 66d896c8e19b..f9aeac540699 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -483,7 +483,14 @@ void *vcpu_map_dirty_ring(struct kvm_vm *vm, uint32_t = vcpuid); void vcpu_args_set(struct kvm_vm *vm, uint32_t vcpuid, unsigned int num, .= ..); =20 int __kvm_has_device_attr(int dev_fd, uint32_t group, uint64_t attr); -int kvm_has_device_attr(int dev_fd, uint32_t group, uint64_t attr); + +static inline void kvm_has_device_attr(int dev_fd, uint32_t group, uint64_= t attr) +{ + int ret =3D __kvm_has_device_attr(dev_fd, group, attr); + + TEST_ASSERT(!ret, "KVM_HAS_DEVICE_ATTR failed, rc: %i errno: %i", ret, er= rno); +} + int __kvm_test_create_device(struct kvm_vm *vm, uint64_t type); int __kvm_create_device(struct kvm_vm *vm, uint64_t type); int kvm_create_device(struct kvm_vm *vm, uint64_t type); @@ -496,8 +503,15 @@ int _kvm_irq_line(struct kvm_vm *vm, uint32_t irq, int= level); =20 int __vcpu_has_device_attr(struct kvm_vm *vm, uint32_t vcpuid, uint32_t gr= oup, uint64_t attr); -int vcpu_has_device_attr(struct kvm_vm *vm, uint32_t vcpuid, uint32_t grou= p, - uint64_t attr); + +static inline void vcpu_has_device_attr(struct kvm_vm *vm, uint32_t vcpuid, + uint32_t group, uint64_t attr) +{ + int ret =3D __vcpu_has_device_attr(vm, vcpuid, group, attr); + + TEST_ASSERT(!ret, KVM_IOCTL_ERROR(KVM_HAS_DEVICE_ATTR, ret)); +} + int _vcpu_access_device_attr(struct kvm_vm *vm, uint32_t vcpuid, uint32_t = group, uint64_t attr, void *val, bool write); int vcpu_access_device_attr(struct kvm_vm *vm, uint32_t vcpuid, uint32_t g= roup, diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index ca313dc8b37a..a7bc6b623871 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -1621,14 +1621,6 @@ int __kvm_has_device_attr(int dev_fd, uint32_t group= , uint64_t attr) return ioctl(dev_fd, KVM_HAS_DEVICE_ATTR, &attribute); } =20 -int kvm_has_device_attr(int dev_fd, uint32_t group, uint64_t attr) -{ - int ret =3D __kvm_has_device_attr(dev_fd, group, attr); - - TEST_ASSERT(!ret, "KVM_HAS_DEVICE_ATTR failed, rc: %i errno: %i", ret, er= rno); - return ret; -} - int __kvm_test_create_device(struct kvm_vm *vm, uint64_t type) { struct kvm_create_device create_dev =3D { @@ -1694,15 +1686,6 @@ int __vcpu_has_device_attr(struct kvm_vm *vm, uint32= _t vcpuid, uint32_t group, return __kvm_has_device_attr(vcpu->fd, group, attr); } =20 -int vcpu_has_device_attr(struct kvm_vm *vm, uint32_t vcpuid, uint32_t grou= p, - uint64_t attr) -{ - int ret =3D __vcpu_has_device_attr(vm, vcpuid, group, attr); - - TEST_ASSERT(!ret, "KVM_HAS_DEVICE_ATTR IOCTL failed, rc: %i errno: %i", r= et, errno); - return ret; -} - int _vcpu_access_device_attr(struct kvm_vm *vm, uint32_t vcpuid, uint32_t = group, uint64_t attr, void *val, bool write) { --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 0F311C35275 for ; Wed, 4 May 2022 22:56:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1380351AbiEDW75 (ORCPT ); Wed, 4 May 2022 18:59:57 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42536 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379418AbiEDWyC (ORCPT ); Wed, 4 May 2022 18:54:02 -0400 Received: from mail-pl1-x64a.google.com (mail-pl1-x64a.google.com [IPv6:2607:f8b0:4864:20::64a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 04B845F99 for ; Wed, 4 May 2022 15:50:18 -0700 (PDT) Received: by mail-pl1-x64a.google.com with SMTP id t14-20020a1709028c8e00b0015cf7e541feso1374468plo.1 for ; Wed, 04 May 2022 15:50:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=1smiTzplsA+5I+VbVQjMxietgrZ80FuScv91SEXkGbg=; b=JJgEx0eBp1ei1timWg3sxYWSP0yyAPZTmu5RWw7psUUdgXeY+Zh71zTqcd3I5LHWUl jitUEDO0ml/IwQcm24zPEfdUpyHqlolW2kTyOJvwI2GOZjwWRvFsMcfsr1EcXz2U48Q3 nBF8hAzX6rXoVT5aFwiSQCBZ+Maa/p1FK/M6N9qPJlskM4vASu40zfxKDfmVEGzVhcN7 ImB2gCx2ERMYa0WO75dIBLI39JduKKCw5oT/NYVqCW9xb6DrH4eLKFN05Xqq+dR6SSfA O5k+dpP+ZEX3oIqAQG8YD/7biZXjx8jeYrDfiMT3MY3XXLBk0qE5LcvRIGL/FHEfonRl dxww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=1smiTzplsA+5I+VbVQjMxietgrZ80FuScv91SEXkGbg=; b=KDJ478xKV886vnUmWbv8dwpnjkS4pN77hTaQtIQeXnN4yLa72lhktQDKMNEJcfX0fY E8bw23QVgrjRZ0Y5CxQ1Abp10M5h17fcJorGaA1iPtfRamzPkMvL7NwuPqg6MBCVCpE7 ESnr7tGKswuj3kq7H1lDfMHX4KxdiaaplZFONPwmoT+U2tg2M7G4RPaItDobRxg8GQur /Gj3jR5r07a9TznBqz3UxrpIBeg4aOyuAlfL742eZgFDfA0wHVeumTPWH2mT7BvHWLPh IvlbgYk91crBIsJU0f41VU/JMjiOasnKXgFgffFmX0kMorFGeJK7mSrt6jZndn9lZ+G7 8Vdw== X-Gm-Message-State: AOAM531d8FE6TKviZNNQI50dSPgLz4EAwbYc5ZFArrsXXBjF9SSIMw7b Rva1NjAYVoCfcAKfOqNWwMImv0Bz9gc= X-Google-Smtp-Source: ABdhPJwzSUcbBefw5Pe7cLbTGcbH0fcQUXQS23VENgBdyOTw5t3zchmUuL+Rmzi/OVvBjFQHDuPVadaP+6w= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:801:b0:50d:ec66:fac0 with SMTP id m1-20020a056a00080100b0050dec66fac0mr16586722pfk.23.1651704618391; Wed, 04 May 2022 15:50:18 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:33 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-28-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 027/128] KVM: selftests: Split get/set device_attr helpers From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Split the get/set device_attr helpers instead of using a boolean param to select between get and set. Duplicating upper level wrappers is a very, very small price to pay for improved readability. Signed-off-by: Sean Christopherson --- .../selftests/kvm/aarch64/arch_timer.c | 8 +- .../testing/selftests/kvm/aarch64/vgic_init.c | 246 +++++++++--------- .../selftests/kvm/include/kvm_util_base.h | 105 +++++--- .../testing/selftests/kvm/lib/aarch64/vgic.c | 31 ++- tools/testing/selftests/kvm/lib/guest_modes.c | 4 +- tools/testing/selftests/kvm/lib/kvm_util.c | 59 ++--- .../kvm/system_counter_offset_test.c | 4 +- 7 files changed, 240 insertions(+), 217 deletions(-) diff --git a/tools/testing/selftests/kvm/aarch64/arch_timer.c b/tools/testi= ng/selftests/kvm/aarch64/arch_timer.c index f55c4c20d8b3..f04ca07c7f14 100644 --- a/tools/testing/selftests/kvm/aarch64/arch_timer.c +++ b/tools/testing/selftests/kvm/aarch64/arch_timer.c @@ -349,10 +349,10 @@ static void test_run(struct kvm_vm *vm) static void test_init_timer_irq(struct kvm_vm *vm) { /* Timer initid should be same for all the vCPUs, so query only vCPU-0 */ - vcpu_access_device_attr(vm, 0, KVM_ARM_VCPU_TIMER_CTRL, - KVM_ARM_VCPU_TIMER_IRQ_PTIMER, &ptimer_irq, false); - vcpu_access_device_attr(vm, 0, KVM_ARM_VCPU_TIMER_CTRL, - KVM_ARM_VCPU_TIMER_IRQ_VTIMER, &vtimer_irq, false); + vcpu_device_attr_get(vm, 0, KVM_ARM_VCPU_TIMER_CTRL, + KVM_ARM_VCPU_TIMER_IRQ_PTIMER, &ptimer_irq); + vcpu_device_attr_get(vm, 0, KVM_ARM_VCPU_TIMER_CTRL, + KVM_ARM_VCPU_TIMER_IRQ_VTIMER, &vtimer_irq); =20 sync_global_to_guest(vm, ptimer_irq); sync_global_to_guest(vm, vtimer_irq); diff --git a/tools/testing/selftests/kvm/aarch64/vgic_init.c b/tools/testin= g/selftests/kvm/aarch64/vgic_init.c index 2425894b3775..0329aa04da31 100644 --- a/tools/testing/selftests/kvm/aarch64/vgic_init.c +++ b/tools/testing/selftests/kvm/aarch64/vgic_init.c @@ -33,13 +33,10 @@ struct vm_gic { static uint64_t max_phys_size; =20 /* helper to access a redistributor register */ -static int access_v3_redist_reg(int gicv3_fd, int vcpu, int offset, - uint32_t *val, bool write) +static int v3_redist_reg_get(int gicv3_fd, int vcpu, int offset, uint32_t = *val) { - uint64_t attr =3D REG_OFFSET(vcpu, offset); - - return _kvm_device_access(gicv3_fd, KVM_DEV_ARM_VGIC_GRP_REDIST_REGS, - attr, val, write); + return __kvm_device_attr_get(gicv3_fd, KVM_DEV_ARM_VGIC_GRP_REDIST_REGS, + REG_OFFSET(vcpu, offset), val); } =20 /* dummy guest code */ @@ -137,41 +134,41 @@ static void subtest_dist_rdist(struct vm_gic *v) =20 /* misaligned DIST and REDIST address settings */ addr =3D dist.alignment / 0x10; - ret =3D _kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - dist.attr, &addr, true); + ret =3D __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + dist.attr, &addr); TEST_ASSERT(ret && errno =3D=3D EINVAL, "GIC dist base not aligned"); =20 addr =3D rdist.alignment / 0x10; - ret =3D _kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - rdist.attr, &addr, true); + ret =3D __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + rdist.attr, &addr); TEST_ASSERT(ret && errno =3D=3D EINVAL, "GIC redist/cpu base not aligned"= ); =20 /* out of range address */ addr =3D max_phys_size; - ret =3D _kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - dist.attr, &addr, true); + ret =3D __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + dist.attr, &addr); TEST_ASSERT(ret && errno =3D=3D E2BIG, "dist address beyond IPA limit"); =20 - ret =3D _kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - rdist.attr, &addr, true); + ret =3D __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + rdist.attr, &addr); TEST_ASSERT(ret && errno =3D=3D E2BIG, "redist address beyond IPA limit"); =20 /* Space for half a rdist (a rdist is: 2 * rdist.alignment). */ addr =3D max_phys_size - dist.alignment; - ret =3D _kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - rdist.attr, &addr, true); + ret =3D __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + rdist.attr, &addr); TEST_ASSERT(ret && errno =3D=3D E2BIG, "half of the redist is beyond IPA limit"); =20 /* set REDIST base address @0x0*/ addr =3D 0x00000; - kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - rdist.attr, &addr, true); + kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + rdist.attr, &addr); =20 /* Attempt to create a second legacy redistributor region */ addr =3D 0xE0000; - ret =3D _kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - rdist.attr, &addr, true); + ret =3D __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + rdist.attr, &addr); TEST_ASSERT(ret && errno =3D=3D EEXIST, "GIC redist base set again"); =20 ret =3D __kvm_has_device_attr(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, @@ -179,9 +176,8 @@ static void subtest_dist_rdist(struct vm_gic *v) if (!ret) { /* Attempt to mix legacy and new redistributor regions */ addr =3D REDIST_REGION_ATTR_ADDR(NR_VCPUS, 0x100000, 0, 0); - ret =3D _kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, - &addr, true); + ret =3D __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr); TEST_ASSERT(ret && errno =3D=3D EINVAL, "attempt to mix GICv3 REDIST and REDIST_REGION"); } @@ -191,8 +187,8 @@ static void subtest_dist_rdist(struct vm_gic *v) * on first vcpu run instead. */ addr =3D rdist.size - rdist.alignment; - kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - dist.attr, &addr, true); + kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + dist.attr, &addr); } =20 /* Test the new REDIST region API */ @@ -206,66 +202,66 @@ static void subtest_v3_redist_regions(struct vm_gic *= v) TEST_ASSERT(!ret, "Multiple redist regions advertised"); =20 addr =3D REDIST_REGION_ATTR_ADDR(NR_VCPUS, 0x100000, 2, 0); - ret =3D _kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr, true); + ret =3D __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr); TEST_ASSERT(ret && errno =3D=3D EINVAL, "redist region attr value with fl= ags !=3D 0"); =20 addr =3D REDIST_REGION_ATTR_ADDR(0, 0x100000, 0, 0); - ret =3D _kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr, true); + ret =3D __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr); TEST_ASSERT(ret && errno =3D=3D EINVAL, "redist region attr value with co= unt=3D=3D 0"); =20 addr =3D REDIST_REGION_ATTR_ADDR(2, 0x200000, 0, 1); - ret =3D _kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr, true); + ret =3D __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr); TEST_ASSERT(ret && errno =3D=3D EINVAL, "attempt to register the first rdist region with index !=3D 0"); =20 addr =3D REDIST_REGION_ATTR_ADDR(2, 0x201000, 0, 1); - ret =3D _kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr, true); + ret =3D __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr); TEST_ASSERT(ret && errno =3D=3D EINVAL, "rdist region with misaligned add= ress"); =20 addr =3D REDIST_REGION_ATTR_ADDR(2, 0x200000, 0, 0); - kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr, true); + kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr); =20 addr =3D REDIST_REGION_ATTR_ADDR(2, 0x200000, 0, 1); - ret =3D _kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr, true); + ret =3D __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr); TEST_ASSERT(ret && errno =3D=3D EINVAL, "register an rdist region with al= ready used index"); =20 addr =3D REDIST_REGION_ATTR_ADDR(1, 0x210000, 0, 2); - ret =3D _kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr, true); + ret =3D __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr); TEST_ASSERT(ret && errno =3D=3D EINVAL, "register an rdist region overlapping with another one"); =20 addr =3D REDIST_REGION_ATTR_ADDR(1, 0x240000, 0, 2); - ret =3D _kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr, true); + ret =3D __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr); TEST_ASSERT(ret && errno =3D=3D EINVAL, "register redist region with inde= x not +1"); =20 addr =3D REDIST_REGION_ATTR_ADDR(1, 0x240000, 0, 1); - kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr, true); + kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr); =20 addr =3D REDIST_REGION_ATTR_ADDR(1, max_phys_size, 0, 2); - ret =3D _kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr, true); + ret =3D __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr); TEST_ASSERT(ret && errno =3D=3D E2BIG, "register redist region with base address beyond IPA range"); =20 /* The last redist is above the pa range. */ addr =3D REDIST_REGION_ATTR_ADDR(2, max_phys_size - 0x30000, 0, 2); - ret =3D _kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr, true); + ret =3D __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr); TEST_ASSERT(ret && errno =3D=3D E2BIG, "register redist region with top address beyond IPA range"); =20 addr =3D 0x260000; - ret =3D _kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - KVM_VGIC_V3_ADDR_TYPE_REDIST, &addr, true); + ret =3D __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_REDIST, &addr); TEST_ASSERT(ret && errno =3D=3D EINVAL, "Mix KVM_VGIC_V3_ADDR_TYPE_REDIST and REDIST_REGION"); =20 @@ -278,28 +274,28 @@ static void subtest_v3_redist_regions(struct vm_gic *= v) =20 addr =3D REDIST_REGION_ATTR_ADDR(0, 0, 0, 0); expected_addr =3D REDIST_REGION_ATTR_ADDR(2, 0x200000, 0, 0); - ret =3D _kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr, false); + ret =3D __kvm_device_attr_get(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr); TEST_ASSERT(!ret && addr =3D=3D expected_addr, "read characteristics of r= egion #0"); =20 addr =3D REDIST_REGION_ATTR_ADDR(0, 0, 0, 1); expected_addr =3D REDIST_REGION_ATTR_ADDR(1, 0x240000, 0, 1); - ret =3D _kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr, false); + ret =3D __kvm_device_attr_get(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr); TEST_ASSERT(!ret && addr =3D=3D expected_addr, "read characteristics of r= egion #1"); =20 addr =3D REDIST_REGION_ATTR_ADDR(0, 0, 0, 2); - ret =3D _kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr, false); + ret =3D __kvm_device_attr_get(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr); TEST_ASSERT(ret && errno =3D=3D ENOENT, "read characteristics of non exis= ting region"); =20 addr =3D 0x260000; - kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - KVM_VGIC_V3_ADDR_TYPE_DIST, &addr, true); + kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_DIST, &addr); =20 addr =3D REDIST_REGION_ATTR_ADDR(1, 0x260000, 0, 2); - ret =3D _kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr, true); + ret =3D __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr); TEST_ASSERT(ret && errno =3D=3D EINVAL, "register redist region colliding= with dist"); } =20 @@ -351,8 +347,8 @@ static void test_v3_new_redist_regions(void) =20 v =3D vm_gic_create_with_vcpus(KVM_DEV_TYPE_ARM_VGIC_V3, NR_VCPUS); subtest_v3_redist_regions(&v); - kvm_device_access(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL, - KVM_DEV_ARM_VGIC_CTRL_INIT, NULL, true); + kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL, + KVM_DEV_ARM_VGIC_CTRL_INIT, NULL); =20 ret =3D run_vcpu(v.vm, 3); TEST_ASSERT(ret =3D=3D -ENXIO, "running without sufficient number of rdis= ts"); @@ -364,8 +360,8 @@ static void test_v3_new_redist_regions(void) subtest_v3_redist_regions(&v); =20 addr =3D REDIST_REGION_ATTR_ADDR(1, 0x280000, 0, 2); - kvm_device_access(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr, true); + kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr); =20 ret =3D run_vcpu(v.vm, 3); TEST_ASSERT(ret =3D=3D -EBUSY, "running without vgic explicit init"); @@ -377,17 +373,17 @@ static void test_v3_new_redist_regions(void) v =3D vm_gic_create_with_vcpus(KVM_DEV_TYPE_ARM_VGIC_V3, NR_VCPUS); subtest_v3_redist_regions(&v); =20 - ret =3D _kvm_device_access(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, dummy, true); + ret =3D __kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, dummy); TEST_ASSERT(ret && errno =3D=3D EFAULT, "register a third region allowing to cover the 4 vcpus"); =20 addr =3D REDIST_REGION_ATTR_ADDR(1, 0x280000, 0, 2); - kvm_device_access(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr, true); + kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr); =20 - kvm_device_access(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL, - KVM_DEV_ARM_VGIC_CTRL_INIT, NULL, true); + kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL, + KVM_DEV_ARM_VGIC_CTRL_INIT, NULL); =20 ret =3D run_vcpu(v.vm, 3); TEST_ASSERT(!ret, "vcpu run"); @@ -408,56 +404,56 @@ static void test_v3_typer_accesses(void) =20 vm_vcpu_add_default(v.vm, 3, guest_code); =20 - ret =3D access_v3_redist_reg(v.gic_fd, 1, GICR_TYPER, &val, false); + ret =3D v3_redist_reg_get(v.gic_fd, 1, GICR_TYPER, &val); TEST_ASSERT(ret && errno =3D=3D EINVAL, "attempting to read GICR_TYPER of= non created vcpu"); =20 vm_vcpu_add_default(v.vm, 1, guest_code); =20 - ret =3D access_v3_redist_reg(v.gic_fd, 1, GICR_TYPER, &val, false); + ret =3D v3_redist_reg_get(v.gic_fd, 1, GICR_TYPER, &val); TEST_ASSERT(ret && errno =3D=3D EBUSY, "read GICR_TYPER before GIC initia= lized"); =20 vm_vcpu_add_default(v.vm, 2, guest_code); =20 - kvm_device_access(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL, - KVM_DEV_ARM_VGIC_CTRL_INIT, NULL, true); + kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL, + KVM_DEV_ARM_VGIC_CTRL_INIT, NULL); =20 for (i =3D 0; i < NR_VCPUS ; i++) { - ret =3D access_v3_redist_reg(v.gic_fd, 0, GICR_TYPER, &val, false); + ret =3D v3_redist_reg_get(v.gic_fd, 0, GICR_TYPER, &val); TEST_ASSERT(!ret && !val, "read GICR_TYPER before rdist region setting"); } =20 addr =3D REDIST_REGION_ATTR_ADDR(2, 0x200000, 0, 0); - kvm_device_access(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr, true); + kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr); =20 /* The 2 first rdists should be put there (vcpu 0 and 3) */ - ret =3D access_v3_redist_reg(v.gic_fd, 0, GICR_TYPER, &val, false); + ret =3D v3_redist_reg_get(v.gic_fd, 0, GICR_TYPER, &val); TEST_ASSERT(!ret && !val, "read typer of rdist #0"); =20 - ret =3D access_v3_redist_reg(v.gic_fd, 3, GICR_TYPER, &val, false); + ret =3D v3_redist_reg_get(v.gic_fd, 3, GICR_TYPER, &val); TEST_ASSERT(!ret && val =3D=3D 0x310, "read typer of rdist #1"); =20 addr =3D REDIST_REGION_ATTR_ADDR(10, 0x100000, 0, 1); - ret =3D _kvm_device_access(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr, true); + ret =3D __kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr); TEST_ASSERT(ret && errno =3D=3D EINVAL, "collision with previous rdist re= gion"); =20 - ret =3D access_v3_redist_reg(v.gic_fd, 1, GICR_TYPER, &val, false); + ret =3D v3_redist_reg_get(v.gic_fd, 1, GICR_TYPER, &val); TEST_ASSERT(!ret && val =3D=3D 0x100, "no redist region attached to vcpu #1 yet, last cannot be returned"); =20 - ret =3D access_v3_redist_reg(v.gic_fd, 2, GICR_TYPER, &val, false); + ret =3D v3_redist_reg_get(v.gic_fd, 2, GICR_TYPER, &val); TEST_ASSERT(!ret && val =3D=3D 0x200, "no redist region attached to vcpu #2, last cannot be returned"); =20 addr =3D REDIST_REGION_ATTR_ADDR(10, 0x20000, 0, 1); - kvm_device_access(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr, true); + kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr); =20 - ret =3D access_v3_redist_reg(v.gic_fd, 1, GICR_TYPER, &val, false); + ret =3D v3_redist_reg_get(v.gic_fd, 1, GICR_TYPER, &val); TEST_ASSERT(!ret && val =3D=3D 0x100, "read typer of rdist #1"); =20 - ret =3D access_v3_redist_reg(v.gic_fd, 2, GICR_TYPER, &val, false); + ret =3D v3_redist_reg_get(v.gic_fd, 2, GICR_TYPER, &val); TEST_ASSERT(!ret && val =3D=3D 0x210, "read typer of rdist #1, last properly returned"); =20 @@ -486,37 +482,37 @@ static void test_v3_last_bit_redist_regions(void) =20 v.gic_fd =3D kvm_create_device(v.vm, KVM_DEV_TYPE_ARM_VGIC_V3); =20 - kvm_device_access(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL, - KVM_DEV_ARM_VGIC_CTRL_INIT, NULL, true); + kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL, + KVM_DEV_ARM_VGIC_CTRL_INIT, NULL); =20 addr =3D REDIST_REGION_ATTR_ADDR(2, 0x100000, 0, 0); - kvm_device_access(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr, true); + kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr); =20 addr =3D REDIST_REGION_ATTR_ADDR(2, 0x240000, 0, 1); - kvm_device_access(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr, true); + kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr); =20 addr =3D REDIST_REGION_ATTR_ADDR(2, 0x200000, 0, 2); - kvm_device_access(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr, true); + kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr); =20 - ret =3D access_v3_redist_reg(v.gic_fd, 0, GICR_TYPER, &val, false); + ret =3D v3_redist_reg_get(v.gic_fd, 0, GICR_TYPER, &val); TEST_ASSERT(!ret && val =3D=3D 0x000, "read typer of rdist #0"); =20 - ret =3D access_v3_redist_reg(v.gic_fd, 1, GICR_TYPER, &val, false); + ret =3D v3_redist_reg_get(v.gic_fd, 1, GICR_TYPER, &val); TEST_ASSERT(!ret && val =3D=3D 0x100, "read typer of rdist #1"); =20 - ret =3D access_v3_redist_reg(v.gic_fd, 2, GICR_TYPER, &val, false); + ret =3D v3_redist_reg_get(v.gic_fd, 2, GICR_TYPER, &val); TEST_ASSERT(!ret && val =3D=3D 0x200, "read typer of rdist #2"); =20 - ret =3D access_v3_redist_reg(v.gic_fd, 3, GICR_TYPER, &val, false); + ret =3D v3_redist_reg_get(v.gic_fd, 3, GICR_TYPER, &val); TEST_ASSERT(!ret && val =3D=3D 0x310, "read typer of rdist #3"); =20 - ret =3D access_v3_redist_reg(v.gic_fd, 5, GICR_TYPER, &val, false); + ret =3D v3_redist_reg_get(v.gic_fd, 5, GICR_TYPER, &val); TEST_ASSERT(!ret && val =3D=3D 0x500, "read typer of rdist #5"); =20 - ret =3D access_v3_redist_reg(v.gic_fd, 4, GICR_TYPER, &val, false); + ret =3D v3_redist_reg_get(v.gic_fd, 4, GICR_TYPER, &val); TEST_ASSERT(!ret && val =3D=3D 0x410, "read typer of rdist #4"); =20 vm_gic_destroy(&v); @@ -535,26 +531,26 @@ static void test_v3_last_bit_single_rdist(void) =20 v.gic_fd =3D kvm_create_device(v.vm, KVM_DEV_TYPE_ARM_VGIC_V3); =20 - kvm_device_access(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL, - KVM_DEV_ARM_VGIC_CTRL_INIT, NULL, true); + kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL, + KVM_DEV_ARM_VGIC_CTRL_INIT, NULL); =20 addr =3D 0x10000; - kvm_device_access(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - KVM_VGIC_V3_ADDR_TYPE_REDIST, &addr, true); + kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_REDIST, &addr); =20 - ret =3D access_v3_redist_reg(v.gic_fd, 0, GICR_TYPER, &val, false); + ret =3D v3_redist_reg_get(v.gic_fd, 0, GICR_TYPER, &val); TEST_ASSERT(!ret && val =3D=3D 0x000, "read typer of rdist #0"); =20 - ret =3D access_v3_redist_reg(v.gic_fd, 3, GICR_TYPER, &val, false); + ret =3D v3_redist_reg_get(v.gic_fd, 3, GICR_TYPER, &val); TEST_ASSERT(!ret && val =3D=3D 0x300, "read typer of rdist #1"); =20 - ret =3D access_v3_redist_reg(v.gic_fd, 5, GICR_TYPER, &val, false); + ret =3D v3_redist_reg_get(v.gic_fd, 5, GICR_TYPER, &val); TEST_ASSERT(!ret && val =3D=3D 0x500, "read typer of rdist #2"); =20 - ret =3D access_v3_redist_reg(v.gic_fd, 1, GICR_TYPER, &val, false); + ret =3D v3_redist_reg_get(v.gic_fd, 1, GICR_TYPER, &val); TEST_ASSERT(!ret && val =3D=3D 0x100, "read typer of rdist #3"); =20 - ret =3D access_v3_redist_reg(v.gic_fd, 2, GICR_TYPER, &val, false); + ret =3D v3_redist_reg_get(v.gic_fd, 2, GICR_TYPER, &val); TEST_ASSERT(!ret && val =3D=3D 0x210, "read typer of rdist #3"); =20 vm_gic_destroy(&v); @@ -571,19 +567,19 @@ static void test_v3_redist_ipa_range_check_at_vcpu_ru= n(void) =20 /* Set space for 3 redists, we have 1 vcpu, so this succeeds. */ addr =3D max_phys_size - (3 * 2 * 0x10000); - kvm_device_access(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - KVM_VGIC_V3_ADDR_TYPE_REDIST, &addr, true); + kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_REDIST, &addr); =20 addr =3D 0x00000; - kvm_device_access(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - KVM_VGIC_V3_ADDR_TYPE_DIST, &addr, true); + kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_DIST, &addr); =20 /* Add the rest of the VCPUs */ for (i =3D 1; i < NR_VCPUS; ++i) vm_vcpu_add_default(v.vm, i, guest_code); =20 - kvm_device_access(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL, - KVM_DEV_ARM_VGIC_CTRL_INIT, NULL, true); + kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL, + KVM_DEV_ARM_VGIC_CTRL_INIT, NULL); =20 /* Attempt to run a vcpu without enough redist space. */ ret =3D run_vcpu(v.vm, 2); @@ -603,31 +599,31 @@ static void test_v3_its_region(void) its_fd =3D kvm_create_device(v.vm, KVM_DEV_TYPE_ARM_VGIC_ITS); =20 addr =3D 0x401000; - ret =3D _kvm_device_access(its_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - KVM_VGIC_ITS_ADDR_TYPE, &addr, true); + ret =3D __kvm_device_attr_set(its_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_ITS_ADDR_TYPE, &addr); TEST_ASSERT(ret && errno =3D=3D EINVAL, "ITS region with misaligned address"); =20 addr =3D max_phys_size; - ret =3D _kvm_device_access(its_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - KVM_VGIC_ITS_ADDR_TYPE, &addr, true); + ret =3D __kvm_device_attr_set(its_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_ITS_ADDR_TYPE, &addr); TEST_ASSERT(ret && errno =3D=3D E2BIG, "register ITS region with base address beyond IPA range"); =20 addr =3D max_phys_size - 0x10000; - ret =3D _kvm_device_access(its_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - KVM_VGIC_ITS_ADDR_TYPE, &addr, true); + ret =3D __kvm_device_attr_set(its_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_ITS_ADDR_TYPE, &addr); TEST_ASSERT(ret && errno =3D=3D E2BIG, "Half of ITS region is beyond IPA range"); =20 /* This one succeeds setting the ITS base */ addr =3D 0x400000; - kvm_device_access(its_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - KVM_VGIC_ITS_ADDR_TYPE, &addr, true); + kvm_device_attr_set(its_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_ITS_ADDR_TYPE, &addr); =20 addr =3D 0x300000; - ret =3D _kvm_device_access(its_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - KVM_VGIC_ITS_ADDR_TYPE, &addr, true); + ret =3D __kvm_device_attr_set(its_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_ITS_ADDR_TYPE, &addr); TEST_ASSERT(ret && errno =3D=3D EEXIST, "ITS base set again"); =20 close(its_fd); diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index f9aeac540699..c508a860984f 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -460,6 +460,79 @@ static inline int vcpu_get_stats_fd(struct kvm_vm *vm,= uint32_t vcpuid) return fd; } =20 +int __kvm_has_device_attr(int dev_fd, uint32_t group, uint64_t attr); + +static inline void kvm_has_device_attr(int dev_fd, uint32_t group, uint64_= t attr) +{ + int ret =3D __kvm_has_device_attr(dev_fd, group, attr); + + TEST_ASSERT(!ret, "KVM_HAS_DEVICE_ATTR failed, rc: %i errno: %i", ret, er= rno); +} + + +int __kvm_device_attr_access(int dev_fd, uint32_t group, uint64_t attr, + void *val, unsigned long cmd); + +static inline int __kvm_device_attr_get(int dev_fd, uint32_t group, + uint64_t attr, void *val) +{ + return __kvm_device_attr_access(dev_fd, group, attr, val, + KVM_GET_DEVICE_ATTR); +} + +static inline void kvm_device_attr_get(int dev_fd, uint32_t group, + uint64_t attr, void *val) +{ + int ret =3D __kvm_device_attr_get(dev_fd, group, attr, val); + + TEST_ASSERT(!ret, KVM_IOCTL_ERROR(KVM_GET_DEVICE_ATTR, ret)); +} + +static inline int __kvm_device_attr_set(int dev_fd, uint32_t group, + uint64_t attr, void *val) +{ + return __kvm_device_attr_access(dev_fd, group, attr, val, + KVM_SET_DEVICE_ATTR); +} + +static inline void kvm_device_attr_set(int dev_fd, uint32_t group, + uint64_t attr, void *val) +{ + int ret =3D __kvm_device_attr_set(dev_fd, group, attr, val); + + TEST_ASSERT(!ret, KVM_IOCTL_ERROR(KVM_SET_DEVICE_ATTR, ret)); +} + +int __vcpu_has_device_attr(struct kvm_vm *vm, uint32_t vcpuid, uint32_t gr= oup, + uint64_t attr); + +static inline void vcpu_has_device_attr(struct kvm_vm *vm, uint32_t vcpuid, + uint32_t group, uint64_t attr) +{ + int ret =3D __vcpu_has_device_attr(vm, vcpuid, group, attr); + + TEST_ASSERT(!ret, KVM_IOCTL_ERROR(KVM_HAS_DEVICE_ATTR, ret)); +} + +int __vcpu_device_attr_get(struct kvm_vm *vm, uint32_t vcpuid, uint32_t gr= oup, + uint64_t attr, void *val); +void vcpu_device_attr_get(struct kvm_vm *vm, uint32_t vcpuid, uint32_t gro= up, + uint64_t attr, void *val); +int __vcpu_device_attr_set(struct kvm_vm *vm, uint32_t vcpuid, uint32_t gr= oup, + uint64_t attr, void *val); +void vcpu_device_attr_set(struct kvm_vm *vm, uint32_t vcpuid, uint32_t gro= up, + uint64_t attr, void *val); +int __kvm_test_create_device(struct kvm_vm *vm, uint64_t type); +int __kvm_create_device(struct kvm_vm *vm, uint64_t type); + +static inline int kvm_create_device(struct kvm_vm *vm, uint64_t type) +{ + int fd =3D __kvm_create_device(vm, type); + + TEST_ASSERT(fd >=3D 0, KVM_IOCTL_ERROR(KVM_CREATE_DEVICE, fd)); + return fd; +} + void *vcpu_map_dirty_ring(struct kvm_vm *vm, uint32_t vcpuid); =20 /* @@ -482,41 +555,9 @@ void *vcpu_map_dirty_ring(struct kvm_vm *vm, uint32_t = vcpuid); */ void vcpu_args_set(struct kvm_vm *vm, uint32_t vcpuid, unsigned int num, .= ..); =20 -int __kvm_has_device_attr(int dev_fd, uint32_t group, uint64_t attr); - -static inline void kvm_has_device_attr(int dev_fd, uint32_t group, uint64_= t attr) -{ - int ret =3D __kvm_has_device_attr(dev_fd, group, attr); - - TEST_ASSERT(!ret, "KVM_HAS_DEVICE_ATTR failed, rc: %i errno: %i", ret, er= rno); -} - -int __kvm_test_create_device(struct kvm_vm *vm, uint64_t type); -int __kvm_create_device(struct kvm_vm *vm, uint64_t type); -int kvm_create_device(struct kvm_vm *vm, uint64_t type); -int _kvm_device_access(int dev_fd, uint32_t group, uint64_t attr, - void *val, bool write); -int kvm_device_access(int dev_fd, uint32_t group, uint64_t attr, - void *val, bool write); void kvm_irq_line(struct kvm_vm *vm, uint32_t irq, int level); int _kvm_irq_line(struct kvm_vm *vm, uint32_t irq, int level); =20 -int __vcpu_has_device_attr(struct kvm_vm *vm, uint32_t vcpuid, uint32_t gr= oup, - uint64_t attr); - -static inline void vcpu_has_device_attr(struct kvm_vm *vm, uint32_t vcpuid, - uint32_t group, uint64_t attr) -{ - int ret =3D __vcpu_has_device_attr(vm, vcpuid, group, attr); - - TEST_ASSERT(!ret, KVM_IOCTL_ERROR(KVM_HAS_DEVICE_ATTR, ret)); -} - -int _vcpu_access_device_attr(struct kvm_vm *vm, uint32_t vcpuid, uint32_t = group, - uint64_t attr, void *val, bool write); -int vcpu_access_device_attr(struct kvm_vm *vm, uint32_t vcpuid, uint32_t g= roup, - uint64_t attr, void *val, bool write); - #define KVM_MAX_IRQ_ROUTES 4096 =20 struct kvm_irq_routing *kvm_gsi_routing_create(void); diff --git a/tools/testing/selftests/kvm/lib/aarch64/vgic.c b/tools/testing= /selftests/kvm/lib/aarch64/vgic.c index 7925b4c5dad0..61da345c48ac 100644 --- a/tools/testing/selftests/kvm/lib/aarch64/vgic.c +++ b/tools/testing/selftests/kvm/lib/aarch64/vgic.c @@ -55,27 +55,26 @@ int vgic_v3_setup(struct kvm_vm *vm, unsigned int nr_vc= pus, uint32_t nr_irqs, if (gic_fd < 0) return gic_fd; =20 - kvm_device_access(gic_fd, KVM_DEV_ARM_VGIC_GRP_NR_IRQS, - 0, &nr_irqs, true); + kvm_device_attr_get(gic_fd, KVM_DEV_ARM_VGIC_GRP_NR_IRQS, 0, &nr_irqs); =20 - kvm_device_access(gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL, - KVM_DEV_ARM_VGIC_CTRL_INIT, NULL, true); + kvm_device_attr_set(gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL, + KVM_DEV_ARM_VGIC_CTRL_INIT, NULL); =20 - kvm_device_access(gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - KVM_VGIC_V3_ADDR_TYPE_DIST, &gicd_base_gpa, true); + kvm_device_attr_set(gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_DIST, &gicd_base_gpa); nr_gic_pages =3D vm_calc_num_guest_pages(vm->mode, KVM_VGIC_V3_DIST_SIZE); virt_map(vm, gicd_base_gpa, gicd_base_gpa, nr_gic_pages); =20 /* Redistributor setup */ redist_attr =3D REDIST_REGION_ATTR_ADDR(nr_vcpus, gicr_base_gpa, 0, 0); - kvm_device_access(gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, - KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &redist_attr, true); + kvm_device_attr_set(gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &redist_attr); nr_gic_pages =3D vm_calc_num_guest_pages(vm->mode, KVM_VGIC_V3_REDIST_SIZE * nr_vcpus); virt_map(vm, gicr_base_gpa, gicr_base_gpa, nr_gic_pages); =20 - kvm_device_access(gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL, - KVM_DEV_ARM_VGIC_CTRL_INIT, NULL, true); + kvm_device_attr_set(gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL, + KVM_DEV_ARM_VGIC_CTRL_INIT, NULL); =20 return gic_fd; } @@ -88,14 +87,14 @@ int _kvm_irq_set_level_info(int gic_fd, uint32_t intid,= int level) uint64_t val; int ret; =20 - ret =3D _kvm_device_access(gic_fd, KVM_DEV_ARM_VGIC_GRP_LEVEL_INFO, - attr, &val, false); + ret =3D __kvm_device_attr_get(gic_fd, KVM_DEV_ARM_VGIC_GRP_LEVEL_INFO, + attr, &val); if (ret !=3D 0) return ret; =20 val |=3D 1U << index; - ret =3D _kvm_device_access(gic_fd, KVM_DEV_ARM_VGIC_GRP_LEVEL_INFO, - attr, &val, true); + ret =3D __kvm_device_attr_set(gic_fd, KVM_DEV_ARM_VGIC_GRP_LEVEL_INFO, + attr, &val); return ret; } =20 @@ -155,9 +154,9 @@ static void vgic_poke_irq(int gic_fd, uint32_t intid, * intid will just make the read/writes point to above the intended * register space (i.e., ICPENDR after ISPENDR). */ - kvm_device_access(gic_fd, group, attr, &val, false); + kvm_device_attr_get(gic_fd, group, attr, &val); val |=3D 1ULL << index; - kvm_device_access(gic_fd, group, attr, &val, true); + kvm_device_attr_set(gic_fd, group, attr, &val); } =20 void kvm_irq_write_ispendr(int gic_fd, uint32_t intid, uint32_t vcpu) diff --git a/tools/testing/selftests/kvm/lib/guest_modes.c b/tools/testing/= selftests/kvm/lib/guest_modes.c index 9ab27b4169bf..0be56c63aed6 100644 --- a/tools/testing/selftests/kvm/lib/guest_modes.c +++ b/tools/testing/selftests/kvm/lib/guest_modes.c @@ -66,8 +66,8 @@ void guest_modes_append_default(void) =20 kvm_fd =3D open_kvm_dev_path_or_exit(); vm_fd =3D __kvm_ioctl(kvm_fd, KVM_CREATE_VM, 0); - kvm_device_access(vm_fd, KVM_S390_VM_CPU_MODEL, - KVM_S390_VM_CPU_PROCESSOR, &info, false); + kvm_device_attr_get(vm_fd, KVM_S390_VM_CPU_MODEL, + KVM_S390_VM_CPU_PROCESSOR, &info); close(vm_fd); close(kvm_fd); /* Starting with z13 we have 47bits of physical address */ diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index a7bc6b623871..c654c81f7d9d 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -1645,16 +1645,8 @@ int __kvm_create_device(struct kvm_vm *vm, uint64_t = type) return err ? : create_dev.fd; } =20 -int kvm_create_device(struct kvm_vm *vm, uint64_t type) -{ - int fd =3D __kvm_create_device(vm, type); - - TEST_ASSERT(fd >=3D 0, "KVM_CREATE_DEVICE IOCTL failed, rc: %i errno: %i"= , fd, errno); - return fd; -} - -int _kvm_device_access(int dev_fd, uint32_t group, uint64_t attr, - void *val, bool write) +int __kvm_device_attr_access(int dev_fd, uint32_t group, uint64_t attr, + void *val, unsigned long cmd) { struct kvm_device_attr kvmattr =3D { .group =3D group, @@ -1662,20 +1654,32 @@ int _kvm_device_access(int dev_fd, uint32_t group, = uint64_t attr, .flags =3D 0, .addr =3D (uintptr_t)val, }; - int ret; =20 - ret =3D ioctl(dev_fd, write ? KVM_SET_DEVICE_ATTR : KVM_GET_DEVICE_ATTR, - &kvmattr); - return ret; + return __kvm_ioctl(dev_fd, cmd, &kvmattr); } =20 -int kvm_device_access(int dev_fd, uint32_t group, uint64_t attr, - void *val, bool write) +int __vcpu_device_attr_get(struct kvm_vm *vm, uint32_t vcpuid, uint32_t gr= oup, + uint64_t attr, void *val) { - int ret =3D _kvm_device_access(dev_fd, group, attr, val, write); + return __kvm_device_attr_get(vcpu_get(vm, vcpuid)->fd, group, attr, val); +} + +void vcpu_device_attr_get(struct kvm_vm *vm, uint32_t vcpuid, uint32_t gro= up, + uint64_t attr, void *val) +{ + kvm_device_attr_get(vcpu_get(vm, vcpuid)->fd, group, attr, val); +} =20 - TEST_ASSERT(!ret, "KVM_SET|GET_DEVICE_ATTR IOCTL failed, rc: %i errno: %i= ", ret, errno); - return ret; +int __vcpu_device_attr_set(struct kvm_vm *vm, uint32_t vcpuid, uint32_t gr= oup, + uint64_t attr, void *val) +{ + return __kvm_device_attr_set(vcpu_get(vm, vcpuid)->fd, group, attr, val); +} + +void vcpu_device_attr_set(struct kvm_vm *vm, uint32_t vcpuid, uint32_t gro= up, + uint64_t attr, void *val) +{ + kvm_device_attr_set(vcpu_get(vm, vcpuid)->fd, group, attr, val); } =20 int __vcpu_has_device_attr(struct kvm_vm *vm, uint32_t vcpuid, uint32_t gr= oup, @@ -1686,23 +1690,6 @@ int __vcpu_has_device_attr(struct kvm_vm *vm, uint32= _t vcpuid, uint32_t group, return __kvm_has_device_attr(vcpu->fd, group, attr); } =20 -int _vcpu_access_device_attr(struct kvm_vm *vm, uint32_t vcpuid, uint32_t = group, - uint64_t attr, void *val, bool write) -{ - struct vcpu *vcpu =3D vcpu_get(vm, vcpuid); - - return _kvm_device_access(vcpu->fd, group, attr, val, write); -} - -int vcpu_access_device_attr(struct kvm_vm *vm, uint32_t vcpuid, uint32_t g= roup, - uint64_t attr, void *val, bool write) -{ - int ret =3D _vcpu_access_device_attr(vm, vcpuid, group, attr, val, write); - - TEST_ASSERT(!ret, "KVM_SET|GET_DEVICE_ATTR IOCTL failed, rc: %i errno: %i= ", ret, errno); - return ret; -} - /* * IRQ related functions. */ diff --git a/tools/testing/selftests/kvm/system_counter_offset_test.c b/too= ls/testing/selftests/kvm/system_counter_offset_test.c index 2b10c53abf4f..5dd9d28efb97 100644 --- a/tools/testing/selftests/kvm/system_counter_offset_test.c +++ b/tools/testing/selftests/kvm/system_counter_offset_test.c @@ -39,8 +39,8 @@ static void check_preconditions(struct kvm_vm *vm) =20 static void setup_system_counter(struct kvm_vm *vm, struct test_case *test) { - vcpu_access_device_attr(vm, VCPU_ID, KVM_VCPU_TSC_CTRL, - KVM_VCPU_TSC_OFFSET, &test->tsc_offset, true); + vcpu_device_attr_set(vm, VCPU_ID, KVM_VCPU_TSC_CTRL, + KVM_VCPU_TSC_OFFSET, &test->tsc_offset); } =20 static uint64_t guest_read_system_counter(struct test_case *test) --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 648ECC43219 for ; Wed, 4 May 2022 22:52:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379613AbiEDWzm (ORCPT ); Wed, 4 May 2022 18:55:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42420 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379429AbiEDWyF (ORCPT ); Wed, 4 May 2022 18:54:05 -0400 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 9AB146338 for ; Wed, 4 May 2022 15:50:20 -0700 (PDT) Received: by mail-pg1-x549.google.com with SMTP id d127-20020a633685000000b003ab20e589a8so1328329pga.22 for ; Wed, 04 May 2022 15:50:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=bS1JnwmFoqnz6fKaqQP9Ax0YC4MVWcJGi1pcVulGY0E=; b=GJ0tm7YShP4rbsgcay7UeMRP3cb6NJC8p673pBAiMCXrIU2GWFJei0OPF7kuZXNCOX Xvpd6Pe34ksgkEHdVIKqAYKUp79jpUhXdYJwgx5ChwjG/+MY8xNnNDcQ8SScOU9vV0Yj WGMKK6FpICc1texMyMhciRBgmaY9l5OmbMnh4k6vUsddY2iGSjthQsmdW9bD05EEghTU FVINQZR35sFxoQqm2HZJCejIMEHyDeOJq02MEBw2QWsYpiRysaA5cVingbLLhU1PI8KD UZrz4PS5uyOUDHnMyOQ3F7SqqiE1Pi52EMQcks/dgoD0maFPJ7JQeJo6jZRLY2QoukWY rM1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=bS1JnwmFoqnz6fKaqQP9Ax0YC4MVWcJGi1pcVulGY0E=; b=pn1iKCZXHUr25OQDDrZ6aqD/f2jkhs3ELRLdZYDcaszKGn599twHt5/uRwkZMfvNwm kTbgFYh7XtBljxtFVvOQNiiWszmZapyGfCRNRfSPlh3nPat/7hD/sZnW2FKp0H2hXW0i LWHj/BO2ndU0s1lPuJ6SpQkCNtvdfIjcgGeoTHAHlhiov9QWllBCofEDtVTUiPp6uTYC dUm6Ddmxf1y//oFl+TJa8eWYGd3o/AcYs01FgqiH+EqgnZbWmCB/wm+tGUo5IbZ1MVlF ckN1Je+VGib601E93SQt+eUYHYKaM2535PVkV3g9FI4YJ7XmVP35shIWfgbW5bYYDYAD mdag== X-Gm-Message-State: AOAM5327LwoynDYHSCzkpnHO+rFJkCe/w/pU8iA7IYUdcIe0/n3xQb7I 92S4Cjk/c1Von8URR0XsJOyvhGW04pA= X-Google-Smtp-Source: ABdhPJx8ILgf/ODZTw1L8q8mgG2X/4nVaMXkK6Yxppdi3PH2RaVRqZEiCAMnWA/Nv89d1zz0nIOZXK/92ow= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:903:1205:b0:15e:8cbc:fd2b with SMTP id l5-20020a170903120500b0015e8cbcfd2bmr23990616plh.99.1651704620058; Wed, 04 May 2022 15:50:20 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:34 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-29-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 028/128] KVM: selftests: Add a VM backpointer to 'struct vcpu' From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add a backpointer to 'struct vcpu' so that tests can get at the owning VM when passing around a vCPU object. Long term, this will be little more than a nice-to-have feature, but in the short term it is a critical step toward purging the VM+vcpu_id ioctl mess without introducing even more churn. Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/include/kvm_util_base.h | 1 + tools/testing/selftests/kvm/lib/kvm_util.c | 1 + 2 files changed, 2 insertions(+) diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index c508a860984f..5d06d384bf10 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -47,6 +47,7 @@ struct vcpu { struct list_head list; uint32_t id; int fd; + struct kvm_vm *vm; struct kvm_run *state; struct kvm_dirty_gfn *dirty_gfns; uint32_t fetch_index; diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index c654c81f7d9d..937e1b80a420 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -1099,6 +1099,7 @@ void vm_vcpu_add(struct kvm_vm *vm, uint32_t vcpuid) vcpu =3D calloc(1, sizeof(*vcpu)); TEST_ASSERT(vcpu !=3D NULL, "Insufficient Memory"); =20 + vcpu->vm =3D vm; vcpu->id =3D vcpuid; vcpu->fd =3D __vm_ioctl(vm, KVM_CREATE_VCPU, (void *)(unsigned long)vcpui= d); TEST_ASSERT(vcpu->fd >=3D 0, KVM_IOCTL_ERROR(KVM_CREATE_VCPU, vcpu->fd)); --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 6708AC433EF for ; Wed, 4 May 2022 22:52:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379618AbiEDWzi (ORCPT ); Wed, 4 May 2022 18:55:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42424 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379442AbiEDWyG (ORCPT ); Wed, 4 May 2022 18:54:06 -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 78831120B2 for ; Wed, 4 May 2022 15:50:22 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id z16-20020a17090a015000b001dbc8da29a1so1315913pje.7 for ; Wed, 04 May 2022 15:50:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=CCjFdttK3ojszU+ceLKLHTNc3RJgVsyUXIdUXpmHmJ0=; b=F8oSR/oCtITryrxXQb/bUhxlifCVsN/ZGwm4DP8RxFYPNw2529DRRxU7jT6Q+sX6K3 iqybSuhKP3aJykLC5j03lrbtFgELCVkIP9wzWSDeLRUtOyon3zZ52GaTk9QHaBb0zhnq p8GOx2WjqEmArX9vHnsCatMp7KsgCmsQAD7z+9VT4xJlA+o3qV4gwBfo8v24VO+mOEPV KpEEbr1L5Czfqe9457KQkn4vSX0zcSO1+ToIExzzEq6sEVUQPTFm95w4kmFo76dyri0e KNTnByyik9cdij91szDVlprIduTWrDpl7M8KrDXDSCDNYmJ2jUgH8GE/ZBu2bF6xaleX 6YdA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=CCjFdttK3ojszU+ceLKLHTNc3RJgVsyUXIdUXpmHmJ0=; b=yjAxZ31s6ZgE756QX1Clq52mNUWQ+RsWybmXWsAPyfJytyUr9QR84n6J7viDvJ/oU/ FSn+OQQZb3n87jFOU+hFcVRp8nWiHadZfB8hI5pKBdQ9f/MmE3k0A3aXfOjakPG4wfIy s54zP+Tcy38Rz7mTfS81VyeWqznylgabq5phmqlLVDzp8YpFDNjVP/m+rkQ/+lkDaLDL 2Mmi93hCnXSq56+5vYgZGI9tVug3YgGxv6xVjSCJHJAdW8/6KRLBnJGlDKSLD3bwa8gx Wlz2cNmKXQ/zfN4qanx+rDdc8j9YCl4zGwg/HEtYncamJKrOOFaHlnxCiKCk5GIUhLDI susg== X-Gm-Message-State: AOAM530bG3/KjtwJgqX/EeyA7yFM0jNiSKQ/AoW4fcUCHhZpu2FFHSb/ Ivx7sZr9SIQrqPNhcewCj5uDSSlXITc= X-Google-Smtp-Source: ABdhPJyF+9X097h6QDljW/0vVEuPwsUfGtuebUGPmAllqyCOQx3Y0xbVnWuSrXw9faXvqvdPZa8xp0sE0gU= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:174a:b0:50d:44ca:4b with SMTP id j10-20020a056a00174a00b0050d44ca004bmr22965190pfc.0.1651704621604; Wed, 04 May 2022 15:50:21 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:35 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-30-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 029/128] KVM: selftests: Add vm_create_*() variants to expose/return 'struct vcpu' From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add VM creation helpers to expose/return 'struct vcpu' so that tests don't have to hardcode a VCPU_ID or make assumptions about what vCPU ID is used by the framework just to retrieve a vCPU the test created. Signed-off-by: Sean Christopherson --- .../selftests/kvm/include/kvm_util_base.h | 16 ++++++++++++++++ tools/testing/selftests/kvm/lib/kvm_util.c | 18 ++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index 5d06d384bf10..07c453428e06 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -627,6 +627,22 @@ struct kvm_vm *vm_create_with_vcpus(enum vm_guest_mode= mode, uint32_t nr_vcpus, /* Create a default VM without any vcpus. */ struct kvm_vm *vm_create_without_vcpus(enum vm_guest_mode mode, uint64_t p= ages); =20 +/* + * Create a VM with a single vCPU with reasonable defaults and @extra_mem_= pages + * additional pages of guest memory. Returns the VM and vCPU (via out par= am). + */ +struct kvm_vm *__vm_create_with_one_vcpu(struct vcpu **vcpu, + uint64_t extra_mem_pages, + void *guest_code); + +static inline struct kvm_vm *vm_create_with_one_vcpu(struct vcpu **vcpu, + void *guest_code) +{ + return __vm_create_with_one_vcpu(vcpu, 0, guest_code); +} + +struct vcpu *vm_recreate_with_one_vcpu(struct kvm_vm *vm); + /* * Adds a vCPU with reasonable defaults (e.g. a stack) * diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index 937e1b80a420..bf14574288e7 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -373,6 +373,16 @@ struct kvm_vm *vm_create_default(uint32_t vcpuid, uint= 64_t extra_mem_pages, (uint32_t []){ vcpuid }); } =20 +struct kvm_vm *__vm_create_with_one_vcpu(struct vcpu **vcpu, + uint64_t extra_mem_pages, + void *guest_code) +{ + struct kvm_vm *vm =3D vm_create_default(0, extra_mem_pages, guest_code); + + *vcpu =3D vcpu_get(vm, 0); + return vm; +} + /* * VM Restart * @@ -407,6 +417,14 @@ void kvm_vm_restart(struct kvm_vm *vmp) } } =20 +struct vcpu *vm_recreate_with_one_vcpu(struct kvm_vm *vm) +{ + kvm_vm_restart(vm); + + vm_vcpu_add(vm, 0); + return vcpu_get(vm, 0); +} + /* * Userspace Memory Region Find * --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 23619C46467 for ; Wed, 4 May 2022 22:56:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1380429AbiEDXAA (ORCPT ); Wed, 4 May 2022 19:00:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42456 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379443AbiEDWyG (ORCPT ); Wed, 4 May 2022 18:54:06 -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 319F8DF80 for ; Wed, 4 May 2022 15:50:23 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id v10-20020a17090a0c8a00b001c7a548e4f7so3574291pja.2 for ; Wed, 04 May 2022 15:50:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=psBTJFrPNVICflUW/MEp016XD8K7S5scJ+9lP/twJs4=; b=D7wn7BHdvQWzQkObifPfo0AQLq5qVVVYYLAk3V35LZl5eMWDqO5nIZM7NSw5LDMGVI m9WMYX3SoEOjwRolxqUsmGewslsd2YrYQjhGzUsh9EebLfYC//bzpG9bggAxH6ldCl1O +rRGGo81kNuoADEVa6osnsIlJgzktWqhNdbFX2a6OC6LK2ejoOfIeHIAFvkLxdPc8OpP ZpMTxZZ0xm9cfJPwYaEVCnbwcPQSNj6PMSmJQ+sVX900D24sbiguet9oRPmu1UDK0BbQ QlqY7uaoVzZZiftoX5y6XiOjk3QXE58J2AWkuSzoEGlMmtTu32pZseiXsjOaNjWb2zV7 r76g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=psBTJFrPNVICflUW/MEp016XD8K7S5scJ+9lP/twJs4=; b=YR12+4tPbNQSm9gVa9Ou/P4XTEjA7zn5z/9+W1Spbu8IIHqhLy6HIIZL3N6rjTzqMv rsn7zmKozLoRwMDG6fq2Kyq60Cni6SXnUuOvnobXB2Fjv3IO8MqSlVc3izBaw7RjBy7d nVK5fPL96BR+YTujv5oJazQKFglbgT025GgO5XmItyuTiaLb3CerSAOYqgCuJZEz/Mun GqdCCrBNyLLitrywRorbCjdmzAaeIsJX/YnA017yK9R5RpOJPTUcrSP8EpSzDnuf5frC Y4XSuMpzv3clGrINwj3a/swkpMtYXtkRqRp0l9TczYaqP7+HSlVinrJBqG6CgkhXp6hB J+og== X-Gm-Message-State: AOAM532ZihdJZ5QNcqCq9I+a96JW3KZEcC/oiJU8mm/PjuEHhxRLA+lY j9qTxcDFYBvhZRewfSDGzaJip+xJP0Q= X-Google-Smtp-Source: ABdhPJyG7Ej5qmVSbIsTd7T7MsAiDi3azvdGk3RdO1PW3OENI3MLkNrdqZek1cRvp64p338+pEpeq/VTNHQ= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:c986:b0:1d9:56e7:4e83 with SMTP id w6-20020a17090ac98600b001d956e74e83mr139603pjt.1.1651704623277; Wed, 04 May 2022 15:50:23 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:36 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-31-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 030/128] KVM: selftests: Push vm_adjust_num_guest_pages() into "w/o vCPUs" helper From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Move the call to vm_adjust_num_guest_pages() from vm_create_with_vcpus() down into vm_create_without_vcpus(). This will allow a future patch to make the "w/o vCPUs" variant the common inner helper, e.g. so that the "with_vcpus" helper calls the "without_vcpus" helper, instead of having them be separate paths. Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/lib/kvm_util.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index bf14574288e7..9a82d44e427d 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -286,6 +286,8 @@ struct kvm_vm *vm_create_without_vcpus(enum vm_guest_mo= de mode, uint64_t pages) { struct kvm_vm *vm; =20 + pages =3D vm_adjust_num_guest_pages(VM_MODE_DEFAULT, pages); + vm =3D __vm_create(mode, pages); =20 kvm_vm_elf_load(vm, program_invocation_name); @@ -345,8 +347,6 @@ struct kvm_vm *vm_create_with_vcpus(enum vm_guest_mode = mode, uint32_t nr_vcpus, "nr_vcpus =3D %d too large for host, max-vcpus =3D %d", nr_vcpus, kvm_check_cap(KVM_CAP_MAX_VCPUS)); =20 - pages =3D vm_adjust_num_guest_pages(mode, pages); - vm =3D vm_create_without_vcpus(mode, pages); =20 for (i =3D 0; i < nr_vcpus; ++i) { --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 60F71C433FE for ; Wed, 4 May 2022 22:52:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379221AbiEDWzq (ORCPT ); Wed, 4 May 2022 18:55:46 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42470 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379457AbiEDWyG (ORCPT ); Wed, 4 May 2022 18:54:06 -0400 Received: from mail-pg1-x54a.google.com (mail-pg1-x54a.google.com [IPv6:2607:f8b0:4864:20::54a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3225E14021 for ; Wed, 4 May 2022 15:50:25 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id h9-20020a631209000000b0039cc31b22aeso1345096pgl.9 for ; Wed, 04 May 2022 15:50:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=7yAH+5mQpivzXrDqX+vptjX+TeCwxFtk+nD3YIQO4p4=; b=KVITuzeGhJ+UUEfBbPkSfGR5qfMLN+KscCoiz27xYGMTaDb5voK/y/F+uIDP/eoRsQ TCi0G/3DApU9l2g35Mc7lgx6Z+bW4XRBRL09tzTe6csI9J+jX/LaRWYBchyXmgr2Idr9 Pk0MSHC7JnDaGJWUkmeiFJ8MgY4w2MeAyBacLwFmCFvyPPmHUB0n58EdXV0z+BQUSWjR Wm1K64JteYWWMJHQuABbrUvEfYpJl2Uuj2EwL8m5L4OD+GtDeke49752ABAnPq4FIrIj zqvAqz8Osbg6KExI9xcgn5Gn5M230eM0eYDa475HjRjCr9DoCNgYqJAipNS46dKeSCGd tyCA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=7yAH+5mQpivzXrDqX+vptjX+TeCwxFtk+nD3YIQO4p4=; b=ID8kturacvfRDGX/TD59r2hJ7mip9jIdBv5cYPqAt0axJGuwj/KmC7yFDQdUsDdoRL yvr8Uab4pbQDTom06jLqYTHNt7gb/KChgasglWQO4pp0k5hO8IwkaBauU0SgZXD2eNbT lg5gbyaAYmUlHrNwNeqN9R5uxf3jjlVL7ypBDIpPujQHQTzFL0nVM8ZFaQ98XyruFb5a FEOKDo+jn7ur2E7yEk5FFZYDfH7JRoC0N8yKPw4//MBulU40nOcJuB3V5i/GFcexULsK rwf6DA8v2VbMNTjDmxtMzMs5dRs4THcWTGN+Lo7yHlzAgrHixvO53sm0S9+vFZ4032GF 90WQ== X-Gm-Message-State: AOAM533t8cmkgCWEscIgazKV1SUXT0laV4n6R5o7rbYqYlsjPHKYdX+B Fz+KhqFAJotrcph4zrPeS3zz/r3NXuI= X-Google-Smtp-Source: ABdhPJxbBMWiw7LrwCKAOBZkuqtVq1rOjNrD9JMGQpEhqBmv14TyW0x3pj7ac/dKTvGaAsX90nhMUZiPYmM= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:846:b0:50d:f02f:bb46 with SMTP id q6-20020a056a00084600b0050df02fbb46mr15595775pfk.74.1651704625067; Wed, 04 May 2022 15:50:25 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:37 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-32-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 031/128] KVM: selftests: Use vm_create_without_vcpus() in set_boot_cpu_id From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use vm_create_without_vcpus() in set_boot_cpu_id instead of open coding the equivlant now that the "without_vcpus" variant does vm_adjust_num_guest_pages(). Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c b/tools/t= esting/selftests/kvm/x86_64/set_boot_cpu_id.c index b4da92ddc1c6..4c5775a8de6a 100644 --- a/tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c +++ b/tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c @@ -82,18 +82,11 @@ static void run_vcpu(struct kvm_vm *vm, uint32_t vcpuid) =20 static struct kvm_vm *create_vm(void) { - struct kvm_vm *vm; uint64_t vcpu_pages =3D (DEFAULT_STACK_PGS) * 2; uint64_t extra_pg_pages =3D vcpu_pages / PTES_PER_MIN_PAGE * N_VCPU; uint64_t pages =3D DEFAULT_GUEST_PHY_PAGES + vcpu_pages + extra_pg_pages; =20 - pages =3D vm_adjust_num_guest_pages(VM_MODE_DEFAULT, pages); - vm =3D vm_create(pages); - - kvm_vm_elf_load(vm, program_invocation_name); - vm_create_irqchip(vm); - - return vm; + return vm_create_without_vcpus(VM_MODE_DEFAULT, pages); } =20 static void add_x86_vcpu(struct kvm_vm *vm, uint32_t vcpuid, bool bsp_code) --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 24EC6C433FE for ; Wed, 4 May 2022 22:52:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239269AbiEDW4G (ORCPT ); Wed, 4 May 2022 18:56:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42480 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379460AbiEDWyH (ORCPT ); Wed, 4 May 2022 18:54:07 -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 2AF7C1CFF8 for ; Wed, 4 May 2022 15:50:27 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id v9-20020a17090a7c0900b001cb45f88cdcso1100232pjf.0 for ; Wed, 04 May 2022 15:50:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=NtspSlUg4ML5uMJ7vjR/+OVkX26xwVVuotNivGjDjEw=; b=i8p9S2Q1YB++zvCiyZcgldBtm/WJw9SzZVcpnlekEf4KNcXr57t+cI2f9o5y/+bouz hD3fCxoTJpO5y9V2EzM/7R69ywUoevXk1abQq/HM9nkCdKIe4TVijfS0UNDXifnnpzzq uSm2bEf1r2cKU34QG5U9TK6Kp2LkoTvd1PyHpZFJM0qshIwz/IfxjMUIgFSa2hdETFW3 oZdOHglDbZJckyotMHLZJW9AD6sTY1QZ+4kFZe9iuaYB8345EP8ET8P8dJvxYYt+yu+7 w6Yn10lgUwLSQwS+7zSLiigBIbryXfcgT+F5dt/hTPRABsc8OigVmItPBCOYYOWe2KMp LlCA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=NtspSlUg4ML5uMJ7vjR/+OVkX26xwVVuotNivGjDjEw=; b=lNfg7G05hF8sSGyy1C/7pXua2q/C0E9JAdkabz6QffdEgejpNW7fz2xyqtlH9Jycrk mp89Fdf31EzPRwOzoSW/P065z9Nm3HLcwl9p3gTmnvbcJ3j+nEsYDJMKaYeND70HDP0N YEw0Qcjv3E0zoXBWdq+3UYzyQR/+ixZjHULYU0eCr5oSjjhMH3yZclrr5EpGUwzVlb4X LcafHsJt4JThYxiHnE+DAfFy++FEPgOAFwdYmcgQ57pf84LNJhin89038gx4KxUmVUzp rx46/wPkzSynVIke1TJq3HVqomC3xtzs/abd0/81aTs0WFs5x5fN/caDGs96Mv1ja5Az jGIA== X-Gm-Message-State: AOAM532Dx41Q5R48rkwze4xP8Hy56xFsVf78pyZaUdPIqD4J7FyTD5WP p1W6IPRbQh+xKxwBccT9x0GHmEahKfo= X-Google-Smtp-Source: ABdhPJxP1o0Y315OZJ5ArQVikvoycdcvFzlcnlwt1FfAgnv3BEg3jUo17c3+V0ncJnPB8bB7WS9S+77NCuY= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:7d81:b0:14f:e18b:2b9e with SMTP id a1-20020a1709027d8100b0014fe18b2b9emr23642359plm.160.1651704626657; Wed, 04 May 2022 15:50:26 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:38 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-33-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 032/128] KVM: selftests: Use vm_create_without_vcpus() in dirty_log_test From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use vm_create_without_vcpus() instead of open coding a rough equivalent. Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/dirty_log_test.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/tools/testing/selftests/kvm/dirty_log_test.c b/tools/testing/s= elftests/kvm/dirty_log_test.c index 5752486764c9..74dcac0c22c5 100644 --- a/tools/testing/selftests/kvm/dirty_log_test.c +++ b/tools/testing/selftests/kvm/dirty_log_test.c @@ -677,11 +677,8 @@ static struct kvm_vm *create_vm(enum vm_guest_mode mod= e, uint32_t vcpuid, =20 pr_info("Testing guest mode: %s\n", vm_guest_mode_string(mode)); =20 - vm =3D __vm_create(mode, DEFAULT_GUEST_PHY_PAGES + extra_pg_pages); - kvm_vm_elf_load(vm, program_invocation_name); -#ifdef __x86_64__ - vm_create_irqchip(vm); -#endif + vm =3D vm_create_without_vcpus(mode, DEFAULT_GUEST_PHY_PAGES + extra_pg_p= ages); + log_mode_create_vm_done(vm); vm_vcpu_add_default(vm, vcpuid, guest_code); return vm; --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 E2FBDC433FE for ; Wed, 4 May 2022 22:52:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379231AbiEDW4A (ORCPT ); Wed, 4 May 2022 18:56:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42516 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379466AbiEDWyH (ORCPT ); Wed, 4 May 2022 18:54:07 -0400 Received: from mail-pl1-x64a.google.com (mail-pl1-x64a.google.com [IPv6:2607:f8b0:4864:20::64a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CFC3EBFF for ; Wed, 4 May 2022 15:50:28 -0700 (PDT) Received: by mail-pl1-x64a.google.com with SMTP id u9-20020a17090282c900b0015ea48078b7so1368788plz.10 for ; Wed, 04 May 2022 15:50:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=sZH9G7euzV9rnyh47iho6g8MIzosuwbetrmDjZD8ZTE=; b=RdrJ3mSRKo8KcMIwl96zO0aVxE7Kd9yL5NnXUXbiElkEsbIHCGetW9mNt/Ova49R5d mbq0ihLPoPr8O8x5f7yUR6wqbj29pYJEAQgJzDg/S9AqPY+NuGb7FrZKR17SoZD2PXdd 3VQjbAqr9W2MRmdIRzUDkgAiG6SuwvQxlMN3KwFp/V0SDgiAY0q8LOtdwzu9OPMekRF2 2OW6PxJgdXCv1nZTwI+7V9t70/wt/ydAdX8ruvgbp4gSYans10VAUkaiIQO/n3mMLRXn oGOmXVwvBH29ReHDXHJ6Rge3Y3rHuZbastkUEoO32vaZ745UOzdImh5SNEFuKdd7LfR8 iQ7Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=sZH9G7euzV9rnyh47iho6g8MIzosuwbetrmDjZD8ZTE=; b=1qW+k0ZOkTMnQ2PT2zi/3ggo1xYMbQ9xIqS/6eSMSz342wug966b0IrE6DYpEa9zg3 Zo3cVaIFdFUnEhu/GLsreYLqaKZuXOEwjbpLjoOe2pGE0Ep33zIKBmXv0+ImbR5CnQ7F MSJRt0+iTwvJm0RwBKIHqkWiU/4tcQ3B2vxdLyiNFVok4Vow0JqGKbYX2pZshIYNt1HN Szj927qy2nC/S0iiaTJODml5g3/J1JvvxGti6/FQ/CALznp8pT7nSOrnICaH94A9Iowe 3YEfr058Nxa3GYxfCU5sDDxRt7zhgEnsoQbnEcxhB5qdoeC1rmbz229xHHW3ex0keBqj kbqQ== X-Gm-Message-State: AOAM533fSEVwnOzPQIzPH70L019NOhxJELn/kLEEFpkx8LxKT8KvFPyD 1KdiJ4tKcg/ZdgOyKN+uC5ilacmBvEc= X-Google-Smtp-Source: ABdhPJxz4jVPHmo56+gbSe+F7J/gie2YxwPijSVt8ps/mj3nYM65D/hVu0uM9fwRXY7yFUn0vH5sn5IwQas= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:bf06:b0:156:af5b:e6c with SMTP id bi6-20020a170902bf0600b00156af5b0e6cmr23996876plb.147.1651704628278; Wed, 04 May 2022 15:50:28 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:39 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-34-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 033/128] KVM: selftests: Use vm_create_without_vcpus() in hardware_disable_test From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use vm_create_without_vcpus() instead of open coding a rough equivalent in hardware_disable_test. Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/hardware_disable_test.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tools/testing/selftests/kvm/hardware_disable_test.c b/tools/te= sting/selftests/kvm/hardware_disable_test.c index 81ba8645772a..32837207fe4e 100644 --- a/tools/testing/selftests/kvm/hardware_disable_test.c +++ b/tools/testing/selftests/kvm/hardware_disable_test.c @@ -104,9 +104,7 @@ static void run_test(uint32_t run) for (i =3D 0; i < VCPU_NUM; i++) CPU_SET(i, &cpu_set); =20 - vm =3D vm_create(DEFAULT_GUEST_PHY_PAGES); - kvm_vm_elf_load(vm, program_invocation_name); - vm_create_irqchip(vm); + vm =3D vm_create_without_vcpus(VM_MODE_DEFAULT, DEFAULT_GUEST_PHY_PAGES); =20 pr_debug("%s: [%d] start vcpus\n", __func__, run); for (i =3D 0; i < VCPU_NUM; ++i) { --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 EDD61C433EF for ; Wed, 4 May 2022 22:52:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241317AbiEDW4T (ORCPT ); Wed, 4 May 2022 18:56:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42518 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379472AbiEDWyI (ORCPT ); Wed, 4 May 2022 18:54:08 -0400 Received: from mail-pj1-x1049.google.com (mail-pj1-x1049.google.com [IPv6:2607:f8b0:4864:20::1049]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5D7FCD74 for ; Wed, 4 May 2022 15:50:30 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id q14-20020a17090a178e00b001dc970bf587so1942859pja.1 for ; Wed, 04 May 2022 15:50:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=1aNRK/v5PJV+kxqA6liInwVdvDu0u370B7s4ZQwy8dY=; b=o2163Irn7XxC//LJc+Tjo7pLivoUvw3p/c5fGf8IovDvdplxbQFlL9ZQp6ypiU51U4 jKbAIWMkpgoc0q8VVUR9uT9eznXfUsPDHdpEdLU8zpCfpaIzwf6XuiKzHAx3kDnLIJf1 yQxNaxFXU/M9JNhKAats9oXfLZOo68wofk4EMPxk+fGzLNKnO++MADnZr1qDY546e46y 9J1RHybWx95zGWf6bEh0IJ5DHNBwTzgZhr5/+5uBT3bE39FKxfVVqlsYIVWkxn27CDoD m42nouqq34Q/NRFVtCyptDtloXsFyZSnsPn1iQJaalrVLJyHBECRyX1pS+6WQHrC+Fpp xkkg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=1aNRK/v5PJV+kxqA6liInwVdvDu0u370B7s4ZQwy8dY=; b=ZmgUqlGk6+CAZNJ5SmKltA6CcAgcnyXiNRP2VAqg0R0G3Z16o06XVTjAhbXPgcjgln cWoLNjQkDYFP1JKmvKf89w8L17+O+mQTqVcqMv2y2OfussdY4naQOM8h4KWvszasOcdg E5KmimVI8t2Mx9gD9FpvuxLSCYXZ3U7BNbCQ804vAGcwuZbYGDklnxXjg11GAPyCi/3d KTPSvguYMfxOCv/9EYGY8zBlAmlk3fdiGA7sVLdqGnG7EZBlapbdrSKckW9/lI+SgG/R oxBs2NyQY2o5JRX33c/liwQFrF4+RJLt8raHAj5XR4MC1bMpEqc2HNj7mkRVI2F7goVX 2/kw== X-Gm-Message-State: AOAM531gqP545qO/fTmqQbSF56uRIkvsvQl6yT4uTf7US0uzg1139rVm /Tlx8TF20/UocCxbchtfesklOIM4rKU= X-Google-Smtp-Source: ABdhPJyiJRX6wi6I/Yfk/jzv+rbmknQ3xM/rsEhoAMsjXeMRkrqbQWi8O9GK5F8UZH2jawvA2g3f0YE9xgc= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:2484:b0:50e:68e:d5a5 with SMTP id c4-20020a056a00248400b0050e068ed5a5mr11922192pfv.47.1651704630068; Wed, 04 May 2022 15:50:30 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:40 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-35-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 034/128] KVM: selftests: Use vm_create_without_vcpus() in psci_cpu_on_test From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use vm_create_without_vcpus() instead of open coding a rough equivalent in psci_cpu_on_test. Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/aarch64/psci_cpu_on_test.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tools/testing/selftests/kvm/aarch64/psci_cpu_on_test.c b/tools= /testing/selftests/kvm/aarch64/psci_cpu_on_test.c index bde7bae20a6e..b4b0fa5d7c21 100644 --- a/tools/testing/selftests/kvm/aarch64/psci_cpu_on_test.c +++ b/tools/testing/selftests/kvm/aarch64/psci_cpu_on_test.c @@ -76,8 +76,7 @@ int main(void) struct kvm_vm *vm; struct ucall uc; =20 - vm =3D vm_create(DEFAULT_GUEST_PHY_PAGES); - kvm_vm_elf_load(vm, program_invocation_name); + vm =3D vm_create_without_vcpus(VM_MODE_DEFAULT, DEFAULT_GUEST_PHY_PAGES); ucall_init(vm, NULL); =20 vm_ioctl(vm, KVM_ARM_PREFERRED_TARGET, &init); --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 A1CF0C433FE for ; Wed, 4 May 2022 22:52:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379460AbiEDW4M (ORCPT ); Wed, 4 May 2022 18:56:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42424 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379481AbiEDWyK (ORCPT ); Wed, 4 May 2022 18:54:10 -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 80A8C49F21 for ; Wed, 4 May 2022 15:50:32 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id a23-20020a17090a6d9700b001d60327d73aso3556955pjk.7 for ; Wed, 04 May 2022 15:50:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=TUOCxssA73SXRQy0U7fbywHKFVdr1tjiCb1c9eEq4x4=; b=cR5uCoPbJpcQBx8Hl2/o0iZhjmiMP8ZIpMjOKQGgDWyx/RVUqjVNhRcGSUiY91Skx+ eocmRLbZ2bOPOABOBJeZ5Sk8eBlOWSV0jceVHWgneAbiPGYhmpT/aL7eAtBumIk4/hl6 /uYJMmBWh0mDKSD++xi6PZekcNLVeP7xngJoeC66PYyfTMIuq/BsiDBefUcYkN9YNmit DUcDC96APDZZamyZTvIYgsw+8gmxC54eUrZxiUTKo/eWJ/c61M/6bz9GNTABNGfUCCKf V/Eqlw12XpLaHi0rrqMfv5zdT35emZT+fKtC2SWo6u8dAo3rb3JbA/I5WAKK6+0eA/g5 BaNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=TUOCxssA73SXRQy0U7fbywHKFVdr1tjiCb1c9eEq4x4=; b=v13bi1n0+3T6mad2ZzJ4Ykss1Tbw8vbqaQgvlLQ3EO1EQLjdF7CuuubYHinX1fz8Rt jI1OO+KYNW24JYu0XQfpPKDJ57fwteUDUC8aoAWnWc/EzMLHTt2X5EUxEruC+K5/xY30 KEpTMUAbSqoty9COjY0kj2sZXOjHgyToB3nCpev8Ypbg0e77Jal9SfQtyPUU1+NoCAUI kEs9cB1pLUCD93zqQevZ8sS2UburksiWiDJnXUaPhnU5bQeLa1mXu8nTTJprbWGw/Qmh 0yDGm1AxyMD2gOP0qlbg46RsY4ndu95CqaWs9jpV3qmxok8wR/6/nHmx6+HRWNeU9uxN phbQ== X-Gm-Message-State: AOAM530kVibL2tDcTWnzbVblh6aAQCCnIMQISeVQLQpFx6fUDV+JJ1wN frMGqUYS3j4GrFxRhxg4CtUdbSpVvhg= X-Google-Smtp-Source: ABdhPJwdXldAfhdi6mskqsLuSuwvqAvm/Y6/FESXVUL5JPC1glHBzH59LHtjtBEvnUwoa6kd2IM/ngPkOgg= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:d2ce:b0:15e:c024:6635 with SMTP id n14-20020a170902d2ce00b0015ec0246635mr8021113plc.28.1651704631860; Wed, 04 May 2022 15:50:31 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:41 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-36-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 035/128] KVM: selftests: Rename vm_create() => vm_create_barebones(), drop param From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Rename vm_create() to vm_create_barebones() and drop the @phys_pages param. Pass '0' for the number of pages even though some callers pass 'DEFAULT_GUEST_PHY_PAGES', as the intent behind creating truly barebones VMs is purely to create a VM, i.e. there aren't vCPUs, there's no guest code loaded, etc..., and so there is nothing that will ever need or consume guest memory. Freeing up the name vm_create() will allow using the name for an inner helper to the other VM creators, which need a "full" VM. Opportunisticaly rewrite the function comment for addr_gpa2alias() to focus on what the _function_ does, not what its _sole caller_ does. Signed-off-by: Sean Christopherson --- .../selftests/kvm/aarch64/get-reg-list.c | 2 +- .../selftests/kvm/aarch64/vcpu_width_config.c | 6 ++-- .../selftests/kvm/include/kvm_util_base.h | 6 +++- .../selftests/kvm/kvm_binary_stats_test.c | 2 +- .../selftests/kvm/kvm_create_max_vcpus.c | 2 +- tools/testing/selftests/kvm/lib/kvm_util.c | 29 +++---------------- .../selftests/kvm/set_memory_region_test.c | 4 +-- .../selftests/kvm/x86_64/set_sregs_test.c | 2 +- .../selftests/kvm/x86_64/sev_migrate_tests.c | 8 ++--- 9 files changed, 22 insertions(+), 39 deletions(-) diff --git a/tools/testing/selftests/kvm/aarch64/get-reg-list.c b/tools/tes= ting/selftests/kvm/aarch64/get-reg-list.c index bb71ed81b37a..d647973aeb30 100644 --- a/tools/testing/selftests/kvm/aarch64/get-reg-list.c +++ b/tools/testing/selftests/kvm/aarch64/get-reg-list.c @@ -411,7 +411,7 @@ static void run_test(struct vcpu_config *c) =20 check_supported(c); =20 - vm =3D vm_create(DEFAULT_GUEST_PHY_PAGES); + vm =3D vm_create_barebones(); prepare_vcpu_init(c, &init); aarch64_vcpu_add_default(vm, 0, &init, NULL); finalize_vcpu(vm, 0, c); diff --git a/tools/testing/selftests/kvm/aarch64/vcpu_width_config.c b/tool= s/testing/selftests/kvm/aarch64/vcpu_width_config.c index 4145c28a245a..1757f44dd3e2 100644 --- a/tools/testing/selftests/kvm/aarch64/vcpu_width_config.c +++ b/tools/testing/selftests/kvm/aarch64/vcpu_width_config.c @@ -24,7 +24,7 @@ static int add_init_2vcpus(struct kvm_vcpu_init *init1, struct kvm_vm *vm; int ret; =20 - vm =3D vm_create(DEFAULT_GUEST_PHY_PAGES); + vm =3D vm_create_barebones(); =20 vm_vcpu_add(vm, 0); ret =3D __vcpu_ioctl(vm, 0, KVM_ARM_VCPU_INIT, init1); @@ -49,7 +49,7 @@ static int add_2vcpus_init_2vcpus(struct kvm_vcpu_init *i= nit1, struct kvm_vm *vm; int ret; =20 - vm =3D vm_create(DEFAULT_GUEST_PHY_PAGES); + vm =3D vm_create_barebones(); =20 vm_vcpu_add(vm, 0); vm_vcpu_add(vm, 1); @@ -86,7 +86,7 @@ int main(void) } =20 /* Get the preferred target type and copy that to init2 for later use */ - vm =3D vm_create(DEFAULT_GUEST_PHY_PAGES); + vm =3D vm_create_barebones(); vm_ioctl(vm, KVM_ARM_PREFERRED_TARGET, &init1); kvm_vm_free(vm); init2 =3D init1; diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index 07c453428e06..0110c415cd8c 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -240,7 +240,6 @@ void vm_enable_dirty_ring(struct kvm_vm *vm, uint32_t r= ing_size); const char *vm_guest_mode_string(uint32_t i); =20 struct kvm_vm *__vm_create(enum vm_guest_mode mode, uint64_t phy_pages); -struct kvm_vm *vm_create(uint64_t phy_pages); void kvm_vm_free(struct kvm_vm *vmp); void kvm_vm_restart(struct kvm_vm *vmp); void kvm_vm_release(struct kvm_vm *vmp); @@ -595,6 +594,11 @@ vm_paddr_t vm_phy_pages_alloc(struct kvm_vm *vm, size_= t num, vm_paddr_t paddr_min, uint32_t memslot); vm_paddr_t vm_alloc_page_table(struct kvm_vm *vm); =20 +static inline struct kvm_vm *vm_create_barebones(void) +{ + return __vm_create(VM_MODE_DEFAULT, 0); +} + /* * Create a VM with reasonable defaults * diff --git a/tools/testing/selftests/kvm/kvm_binary_stats_test.c b/tools/te= sting/selftests/kvm/kvm_binary_stats_test.c index 0a27b0f85009..edeb08239036 100644 --- a/tools/testing/selftests/kvm/kvm_binary_stats_test.c +++ b/tools/testing/selftests/kvm/kvm_binary_stats_test.c @@ -221,7 +221,7 @@ int main(int argc, char *argv[]) vms =3D malloc(sizeof(vms[0]) * max_vm); TEST_ASSERT(vms, "Allocate memory for storing VM pointers"); for (i =3D 0; i < max_vm; ++i) { - vms[i] =3D vm_create(DEFAULT_GUEST_PHY_PAGES); + vms[i] =3D vm_create_barebones(); for (j =3D 0; j < max_vcpu; ++j) vm_vcpu_add(vms[i], j); } diff --git a/tools/testing/selftests/kvm/kvm_create_max_vcpus.c b/tools/tes= ting/selftests/kvm/kvm_create_max_vcpus.c index 9de5e1376c49..acc92703f563 100644 --- a/tools/testing/selftests/kvm/kvm_create_max_vcpus.c +++ b/tools/testing/selftests/kvm/kvm_create_max_vcpus.c @@ -28,7 +28,7 @@ void test_vcpu_creation(int first_vcpu_id, int num_vcpus) pr_info("Testing creating %d vCPUs, with IDs %d...%d.\n", num_vcpus, first_vcpu_id, first_vcpu_id + num_vcpus - 1); =20 - vm =3D vm_create(DEFAULT_GUEST_PHY_PAGES); + vm =3D vm_create_barebones(); =20 for (i =3D first_vcpu_id; i < first_vcpu_id + num_vcpus; i++) /* This asserts that the vCPU was created. */ diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index 9a82d44e427d..aa93b37bc5cf 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -262,26 +262,6 @@ struct kvm_vm *__vm_create(enum vm_guest_mode mode, ui= nt64_t phy_pages) return vm; } =20 -/* - * VM Create - * - * Input Args: - * phy_pages - Physical memory pages - * - * Output Args: None - * - * Return: - * Pointer to opaque structure that describes the created VM. - * - * Creates a VM with the default physical/virtual address widths and page = size. - * When phy_pages is non-zero, a memory region of phy_pages physical pages - * is created and mapped starting at guest physical address 0. - */ -struct kvm_vm *vm_create(uint64_t phy_pages) -{ - return __vm_create(VM_MODE_DEFAULT, phy_pages); -} - struct kvm_vm *vm_create_without_vcpus(enum vm_guest_mode mode, uint64_t p= ages) { struct kvm_vm *vm; @@ -1425,11 +1405,10 @@ vm_paddr_t addr_hva2gpa(struct kvm_vm *vm, void *hv= a) * (without failing the test) if the guest memory is not shared (so * no alias exists). * - * When vm_create() and related functions are called with a shared memory - * src_type, we also create a writable, shared alias mapping of the - * underlying guest memory. This allows the host to manipulate guest memory - * without mapping that memory in the guest's address space. And, for - * userfaultfd-based demand paging, we can do so without triggering userfa= ults. + * Create a writable, shared virtual=3D>physical alias for the specific GP= A. + * The primary use case is to allow the host selftest to manipulate guest + * memory without mapping said memory in the guest's address space. And, f= or + * userfaultfd-based demand paging, to do so without triggering userfaults. */ void *addr_gpa2alias(struct kvm_vm *vm, vm_paddr_t gpa) { diff --git a/tools/testing/selftests/kvm/set_memory_region_test.c b/tools/t= esting/selftests/kvm/set_memory_region_test.c index e66deb8ba7e0..c33402ba7587 100644 --- a/tools/testing/selftests/kvm/set_memory_region_test.c +++ b/tools/testing/selftests/kvm/set_memory_region_test.c @@ -314,7 +314,7 @@ static void test_zero_memory_regions(void) =20 pr_info("Testing KVM_RUN with zero added memory regions\n"); =20 - vm =3D vm_create(0); + vm =3D vm_create_barebones(); vm_vcpu_add(vm, VCPU_ID); =20 vm_ioctl(vm, KVM_SET_NR_MMU_PAGES, (void *)64ul); @@ -353,7 +353,7 @@ static void test_add_max_memory_regions(void) "KVM_CAP_NR_MEMSLOTS should be greater than 0"); pr_info("Allowed number of memory slots: %i\n", max_mem_slots); =20 - vm =3D vm_create(0); + vm =3D vm_create_barebones(); =20 /* Check it can be added memory slots up to the maximum allowed */ pr_info("Adding slots 0..%i, each memory region with %dK size\n", diff --git a/tools/testing/selftests/kvm/x86_64/set_sregs_test.c b/tools/te= sting/selftests/kvm/x86_64/set_sregs_test.c index 4dc7fd925023..f5e65db9f451 100644 --- a/tools/testing/selftests/kvm/x86_64/set_sregs_test.c +++ b/tools/testing/selftests/kvm/x86_64/set_sregs_test.c @@ -95,7 +95,7 @@ int main(int argc, char *argv[]) * use it to verify all supported CR4 bits can be set prior to defining * the vCPU model, i.e. without doing KVM_SET_CPUID2. */ - vm =3D vm_create(DEFAULT_GUEST_PHY_PAGES); + vm =3D vm_create_barebones(); vm_vcpu_add(vm, VCPU_ID); =20 vcpu_sregs_get(vm, VCPU_ID, &sregs); diff --git a/tools/testing/selftests/kvm/x86_64/sev_migrate_tests.c b/tools= /testing/selftests/kvm/x86_64/sev_migrate_tests.c index 5b565aa11e32..8d4b5c2f699d 100644 --- a/tools/testing/selftests/kvm/x86_64/sev_migrate_tests.c +++ b/tools/testing/selftests/kvm/x86_64/sev_migrate_tests.c @@ -53,7 +53,7 @@ static struct kvm_vm *sev_vm_create(bool es) struct kvm_sev_launch_start start =3D { 0 }; int i; =20 - vm =3D vm_create(0); + vm =3D vm_create_barebones(); sev_ioctl(vm->fd, es ? KVM_SEV_ES_INIT : KVM_SEV_INIT, NULL); for (i =3D 0; i < NR_MIGRATE_TEST_VCPUS; ++i) vm_vcpu_add(vm, i); @@ -70,7 +70,7 @@ static struct kvm_vm *aux_vm_create(bool with_vcpus) struct kvm_vm *vm; int i; =20 - vm =3D vm_create(0); + vm =3D vm_create_barebones(); if (!with_vcpus) return vm; =20 @@ -173,7 +173,7 @@ static void test_sev_migrate_parameters(void) *sev_es_vm_no_vmsa; int ret; =20 - vm_no_vcpu =3D vm_create(0); + vm_no_vcpu =3D vm_create_barebones(); vm_no_sev =3D aux_vm_create(true); ret =3D __sev_migrate_from(vm_no_vcpu->fd, vm_no_sev->fd); TEST_ASSERT(ret =3D=3D -1 && errno =3D=3D EINVAL, @@ -185,7 +185,7 @@ static void test_sev_migrate_parameters(void) =20 sev_vm =3D sev_vm_create(/* es=3D */ false); sev_es_vm =3D sev_vm_create(/* es=3D */ true); - sev_es_vm_no_vmsa =3D vm_create(0); + sev_es_vm_no_vmsa =3D vm_create_barebones(); sev_ioctl(sev_es_vm_no_vmsa->fd, KVM_SEV_ES_INIT, NULL); vm_vcpu_add(sev_es_vm_no_vmsa, 1); =20 --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 AC37DC433EF for ; Wed, 4 May 2022 22:53:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1359805AbiEDW4c (ORCPT ); Wed, 4 May 2022 18:56:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43396 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379485AbiEDWyM (ORCPT ); Wed, 4 May 2022 18:54:12 -0400 Received: from mail-yw1-x1149.google.com (mail-yw1-x1149.google.com [IPv6:2607:f8b0:4864:20::1149]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8047264F6 for ; Wed, 4 May 2022 15:50:34 -0700 (PDT) Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-2f4dfd09d7fso24516417b3.0 for ; Wed, 04 May 2022 15:50:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=G2bckr8dzy/VpMTALQzDwVbtP/BZXFx63tXxVXAvLBY=; b=BrDqCBXd9hHHGusLXGgzJHeRY9VMkolLcSa6S05adud2BGld2gVU+AUIf0ootTyHxO eszMDj68mLaaQtjgew8B+zPep6hXxko491KqVS6rA4zLigv8SCuq6yWqUl0iKeHujp3b sGyeTFzoaFBnK6+u+8j1+CsuzZdAMM1Zpssh9Jd8D5bPzBJOgopWcg45+pRhpQQZvaq0 ZQAWBF+rFFwA/0PSIyExy/afq+3yf16J9zPiX04LulnFjyHncxZ+ZiRhpmSwd4m9FfrZ w2AUJn8SlvwXTFJR4Fdmv/JsvmoD9fBOhtfWrbUzTouee+tYGy/henU4Elr2zD44+oyr h/Tw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=G2bckr8dzy/VpMTALQzDwVbtP/BZXFx63tXxVXAvLBY=; b=kEzpSZle3pd7I6dCfY3VTo7q3EJzQtXUmlJOyQcbRxRK1yovctT1H+bLMoVmiFVD2L LIKkbBRedp4BO25GbeA0XHQ+bWNPsmqVf46f7jDnGG9RtYq0v1WozUD+OfvwHmb5RZm1 AkGy/0MEowD6VWK9YwC3ajpd6iruxSTZb+1Qfr82R2kIkFQDZg2WEh86RBAmlYqlVD92 L3zfDAsNtxqCwWErVWu3l/XxdqmfP6NOpLnOJx5R3OV9i0/RKno/us97vZaiBXV1T8Qr 22In9VpsO5orHlTUfj8pEGagwbU4zXv8R34cdDp80XCb/y+Ct0ks0X6t6fInF9w7SCnl TXUg== X-Gm-Message-State: AOAM5336tlEQdKc9yIfjvZA+hpAqOAeeS1kJd9QjitMO3rbdiRyGmhhu RLW1UUPuO8xid6TtXk8XMIjbuE7vHLE= X-Google-Smtp-Source: ABdhPJxT/tsWqHDDRzAP8Y4BfSRDxOHh7HCIH/9+qICwO8fydYXcrrSW0oAi7zbyVDQk2t6nuIUfESKFCNM= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a25:9f90:0:b0:624:521e:d4a5 with SMTP id u16-20020a259f90000000b00624521ed4a5mr19240052ybq.230.1651704633637; Wed, 04 May 2022 15:50:33 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:42 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-37-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 036/128] KVM: selftests: Rename vm_create_without_vcpus() => vm_create() From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Rename vm_create_without_vcpus() to vm_create() so that it's not misconstrued as helper that creates a VM that can never have vCPUs, as opposed to a helper that "just" creates a VM without vCPUs added at time zero. Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/aarch64/psci_cpu_on_test.c | 2 +- tools/testing/selftests/kvm/dirty_log_test.c | 2 +- tools/testing/selftests/kvm/hardware_disable_test.c | 2 +- tools/testing/selftests/kvm/include/kvm_util_base.h | 2 +- tools/testing/selftests/kvm/lib/kvm_util.c | 4 ++-- tools/testing/selftests/kvm/x86_64/pmu_event_filter_test.c | 2 +- tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/tools/testing/selftests/kvm/aarch64/psci_cpu_on_test.c b/tools= /testing/selftests/kvm/aarch64/psci_cpu_on_test.c index b4b0fa5d7c21..4dc04a12f527 100644 --- a/tools/testing/selftests/kvm/aarch64/psci_cpu_on_test.c +++ b/tools/testing/selftests/kvm/aarch64/psci_cpu_on_test.c @@ -76,7 +76,7 @@ int main(void) struct kvm_vm *vm; struct ucall uc; =20 - vm =3D vm_create_without_vcpus(VM_MODE_DEFAULT, DEFAULT_GUEST_PHY_PAGES); + vm =3D vm_create(VM_MODE_DEFAULT, DEFAULT_GUEST_PHY_PAGES); ucall_init(vm, NULL); =20 vm_ioctl(vm, KVM_ARM_PREFERRED_TARGET, &init); diff --git a/tools/testing/selftests/kvm/dirty_log_test.c b/tools/testing/s= elftests/kvm/dirty_log_test.c index 74dcac0c22c5..aa7eb01ad25f 100644 --- a/tools/testing/selftests/kvm/dirty_log_test.c +++ b/tools/testing/selftests/kvm/dirty_log_test.c @@ -677,7 +677,7 @@ static struct kvm_vm *create_vm(enum vm_guest_mode mode= , uint32_t vcpuid, =20 pr_info("Testing guest mode: %s\n", vm_guest_mode_string(mode)); =20 - vm =3D vm_create_without_vcpus(mode, DEFAULT_GUEST_PHY_PAGES + extra_pg_p= ages); + vm =3D vm_create(mode, DEFAULT_GUEST_PHY_PAGES + extra_pg_pages); =20 log_mode_create_vm_done(vm); vm_vcpu_add_default(vm, vcpuid, guest_code); diff --git a/tools/testing/selftests/kvm/hardware_disable_test.c b/tools/te= sting/selftests/kvm/hardware_disable_test.c index 32837207fe4e..299862a85b8d 100644 --- a/tools/testing/selftests/kvm/hardware_disable_test.c +++ b/tools/testing/selftests/kvm/hardware_disable_test.c @@ -104,7 +104,7 @@ static void run_test(uint32_t run) for (i =3D 0; i < VCPU_NUM; i++) CPU_SET(i, &cpu_set); =20 - vm =3D vm_create_without_vcpus(VM_MODE_DEFAULT, DEFAULT_GUEST_PHY_PAGES); + vm =3D vm_create(VM_MODE_DEFAULT, DEFAULT_GUEST_PHY_PAGES); =20 pr_debug("%s: [%d] start vcpus\n", __func__, run); for (i =3D 0; i < VCPU_NUM; ++i) { diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index 0110c415cd8c..48a4000222c1 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -629,7 +629,7 @@ struct kvm_vm *vm_create_with_vcpus(enum vm_guest_mode = mode, uint32_t nr_vcpus, uint32_t vcpuids[]); =20 /* Create a default VM without any vcpus. */ -struct kvm_vm *vm_create_without_vcpus(enum vm_guest_mode mode, uint64_t p= ages); +struct kvm_vm *vm_create(enum vm_guest_mode mode, uint64_t pages); =20 /* * Create a VM with a single vCPU with reasonable defaults and @extra_mem_= pages diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index aa93b37bc5cf..632912aeaeb9 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -262,7 +262,7 @@ struct kvm_vm *__vm_create(enum vm_guest_mode mode, uin= t64_t phy_pages) return vm; } =20 -struct kvm_vm *vm_create_without_vcpus(enum vm_guest_mode mode, uint64_t p= ages) +struct kvm_vm *vm_create(enum vm_guest_mode mode, uint64_t pages) { struct kvm_vm *vm; =20 @@ -327,7 +327,7 @@ struct kvm_vm *vm_create_with_vcpus(enum vm_guest_mode = mode, uint32_t nr_vcpus, "nr_vcpus =3D %d too large for host, max-vcpus =3D %d", nr_vcpus, kvm_check_cap(KVM_CAP_MAX_VCPUS)); =20 - vm =3D vm_create_without_vcpus(mode, pages); + vm =3D vm_create(mode, pages); =20 for (i =3D 0; i < nr_vcpus; ++i) { uint32_t vcpuid =3D vcpuids ? vcpuids[i] : i; diff --git a/tools/testing/selftests/kvm/x86_64/pmu_event_filter_test.c b/t= ools/testing/selftests/kvm/x86_64/pmu_event_filter_test.c index 269033af43ce..d80b0a408937 100644 --- a/tools/testing/selftests/kvm/x86_64/pmu_event_filter_test.c +++ b/tools/testing/selftests/kvm/x86_64/pmu_event_filter_test.c @@ -340,7 +340,7 @@ static void test_pmu_config_disable(void (*guest_code)(= void)) if (!(r & KVM_PMU_CAP_DISABLE)) return; =20 - vm =3D vm_create_without_vcpus(VM_MODE_DEFAULT, DEFAULT_GUEST_PHY_PAGES); + vm =3D vm_create(VM_MODE_DEFAULT, DEFAULT_GUEST_PHY_PAGES); =20 cap.cap =3D KVM_CAP_PMU_CAPABILITY; cap.args[0] =3D KVM_PMU_CAP_DISABLE; diff --git a/tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c b/tools/t= esting/selftests/kvm/x86_64/set_boot_cpu_id.c index 4c5775a8de6a..6bc13cf17220 100644 --- a/tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c +++ b/tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c @@ -86,7 +86,7 @@ static struct kvm_vm *create_vm(void) uint64_t extra_pg_pages =3D vcpu_pages / PTES_PER_MIN_PAGE * N_VCPU; uint64_t pages =3D DEFAULT_GUEST_PHY_PAGES + vcpu_pages + extra_pg_pages; =20 - return vm_create_without_vcpus(VM_MODE_DEFAULT, pages); + return vm_create(VM_MODE_DEFAULT, pages); } =20 static void add_x86_vcpu(struct kvm_vm *vm, uint32_t vcpuid, bool bsp_code) --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 AE5B6C433FE for ; Wed, 4 May 2022 22:53:05 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232144AbiEDW4k (ORCPT ); Wed, 4 May 2022 18:56:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43524 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379491AbiEDWyO (ORCPT ); Wed, 4 May 2022 18:54:14 -0400 Received: from mail-pl1-x64a.google.com (mail-pl1-x64a.google.com [IPv6:2607:f8b0:4864:20::64a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C29942C0 for ; Wed, 4 May 2022 15:50:35 -0700 (PDT) Received: by mail-pl1-x64a.google.com with SMTP id t14-20020a1709028c8e00b0015cf7e541feso1374468plo.1 for ; Wed, 04 May 2022 15:50:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=9jXKE0rUZ9kYyhb9BST26AERA1zvCEHsctDG79q5cW4=; b=ehV0EQzd7Mn7PTAoQXcuqVwKk1QUJjsyl6vxkjSb9ZFy2V9VsbqTeabBVDS0YXb4p9 Tl46g6Cej/wgmg+YDaTSaMmgT2AkbkfULqUJ/MJYztGI/OSO5GM/bHwsiCQGI6F84Ia7 BgMfd/h2+uiyYD125aQ56GrIDwAj95cOXJCEDSOcQlGtjDB0B74fWy6LDLROGfw7m7Ka fmSbOlGapGRQp/JzqKB/sNtJqEjn16uA6/33uunTLhAUJnb/MCLvTrn9jJemp0na+lwO faG2wxNw6xP9PxCbDRzX6c4LIXGL4pGpOn6BJiyT6yQok/2QI3BALFBdk8SOJhKjY3FS tgnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=9jXKE0rUZ9kYyhb9BST26AERA1zvCEHsctDG79q5cW4=; b=bZqlBWRxhAs5Siym2zDdvy12wsnhUpReHvqNry0Uas1lzKkUvre3X9mB5zeZz7RDbI BzhexvLtkui7WfTRCAg8zZ3EVot4bkpv+g7/hXQMfTHzigOY8Xs+sI+r/x7u/3XqFiQI bnLVb+FxufwMTYdPh0choCo4MZu/3llWS9/xHzkzhc0pwg9uIz3kgzjL7XrMO7P65yzI fFopVtXiwYS0UhLK3jBHP/Kj0YcTSmAAa2wKZziDvLvytWADmygPZE5v4uEHw0HtkAuC KnBDbhKToFNZvChfBzFU60P+V2PUoU9xlRkxPDeXRRE8eVvnyru+rCJQvqBu1pItc/Y3 DzcQ== X-Gm-Message-State: AOAM5301IOc93RhYQpALjsM9pDAOizl6yygvBtws7akIpOHvF6TC7R17 DzlUXHN0pKtzXAHhBah4XfskSxbv9h8= X-Google-Smtp-Source: ABdhPJxKrO6FhJD0GBjJ37zsGyDmHvQ1m4srx0cCKwqAQuGA6FjOI7CtuFKltlYmmrFu8a4Axbk9eSeViQM= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:2284:b0:50a:40b8:28ff with SMTP id f4-20020a056a00228400b0050a40b828ffmr23096615pfe.17.1651704635443; Wed, 04 May 2022 15:50:35 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:43 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-38-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 037/128] KVM: selftests: Make vm_create() a wrapper that specifies VM_MODE_DEFAULT From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add ____vm_create() to be the innermost helper, and turn vm_create() into a wrapper the specifies VM_MODE_DEFAULT. Most of the vm_create() callers just want the default mode, or more accurately, don't care about the mode. Signed-off-by: Sean Christopherson --- .../selftests/kvm/aarch64/psci_cpu_on_test.c | 2 +- tools/testing/selftests/kvm/dirty_log_test.c | 2 +- .../selftests/kvm/hardware_disable_test.c | 2 +- .../selftests/kvm/include/kvm_util_base.h | 18 +++++++++++++----- tools/testing/selftests/kvm/lib/kvm_util.c | 16 ++++++++-------- .../kvm/x86_64/pmu_event_filter_test.c | 2 +- .../selftests/kvm/x86_64/set_boot_cpu_id.c | 2 +- 7 files changed, 26 insertions(+), 18 deletions(-) diff --git a/tools/testing/selftests/kvm/aarch64/psci_cpu_on_test.c b/tools= /testing/selftests/kvm/aarch64/psci_cpu_on_test.c index 4dc04a12f527..d60c1ddf8870 100644 --- a/tools/testing/selftests/kvm/aarch64/psci_cpu_on_test.c +++ b/tools/testing/selftests/kvm/aarch64/psci_cpu_on_test.c @@ -76,7 +76,7 @@ int main(void) struct kvm_vm *vm; struct ucall uc; =20 - vm =3D vm_create(VM_MODE_DEFAULT, DEFAULT_GUEST_PHY_PAGES); + vm =3D vm_create(DEFAULT_GUEST_PHY_PAGES); ucall_init(vm, NULL); =20 vm_ioctl(vm, KVM_ARM_PREFERRED_TARGET, &init); diff --git a/tools/testing/selftests/kvm/dirty_log_test.c b/tools/testing/s= elftests/kvm/dirty_log_test.c index aa7eb01ad25f..66ee00b45847 100644 --- a/tools/testing/selftests/kvm/dirty_log_test.c +++ b/tools/testing/selftests/kvm/dirty_log_test.c @@ -677,7 +677,7 @@ static struct kvm_vm *create_vm(enum vm_guest_mode mode= , uint32_t vcpuid, =20 pr_info("Testing guest mode: %s\n", vm_guest_mode_string(mode)); =20 - vm =3D vm_create(mode, DEFAULT_GUEST_PHY_PAGES + extra_pg_pages); + vm =3D __vm_create(mode, DEFAULT_GUEST_PHY_PAGES + extra_pg_pages); =20 log_mode_create_vm_done(vm); vm_vcpu_add_default(vm, vcpuid, guest_code); diff --git a/tools/testing/selftests/kvm/hardware_disable_test.c b/tools/te= sting/selftests/kvm/hardware_disable_test.c index 299862a85b8d..ccbbf8783e2d 100644 --- a/tools/testing/selftests/kvm/hardware_disable_test.c +++ b/tools/testing/selftests/kvm/hardware_disable_test.c @@ -104,7 +104,7 @@ static void run_test(uint32_t run) for (i =3D 0; i < VCPU_NUM; i++) CPU_SET(i, &cpu_set); =20 - vm =3D vm_create(VM_MODE_DEFAULT, DEFAULT_GUEST_PHY_PAGES); + vm =3D vm_create(DEFAULT_GUEST_PHY_PAGES); =20 pr_debug("%s: [%d] start vcpus\n", __func__, run); for (i =3D 0; i < VCPU_NUM; ++i) { diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index 48a4000222c1..136b5428ae0e 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -239,7 +239,6 @@ static inline void vm_enable_cap(struct kvm_vm *vm, str= uct kvm_enable_cap *cap) void vm_enable_dirty_ring(struct kvm_vm *vm, uint32_t ring_size); const char *vm_guest_mode_string(uint32_t i); =20 -struct kvm_vm *__vm_create(enum vm_guest_mode mode, uint64_t phy_pages); void kvm_vm_free(struct kvm_vm *vmp); void kvm_vm_restart(struct kvm_vm *vmp); void kvm_vm_release(struct kvm_vm *vmp); @@ -594,9 +593,21 @@ vm_paddr_t vm_phy_pages_alloc(struct kvm_vm *vm, size_= t num, vm_paddr_t paddr_min, uint32_t memslot); vm_paddr_t vm_alloc_page_table(struct kvm_vm *vm); =20 +/* + * ____vm_create() does KVM_CREATE_VM and little else. __vm_create() also + * loads the test binary into guest memory and creates an IRQ chip (x86 on= ly). + */ +struct kvm_vm *____vm_create(enum vm_guest_mode mode, uint64_t nr_pages); +struct kvm_vm *__vm_create(enum vm_guest_mode mode, uint64_t nr_pages); + static inline struct kvm_vm *vm_create_barebones(void) { - return __vm_create(VM_MODE_DEFAULT, 0); + return ____vm_create(VM_MODE_DEFAULT, 0); +} + +static inline struct kvm_vm *vm_create(uint64_t nr_pages) +{ + return __vm_create(VM_MODE_DEFAULT, nr_pages); } =20 /* @@ -628,9 +639,6 @@ 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[]); =20 -/* Create a default VM without any vcpus. */ -struct kvm_vm *vm_create(enum vm_guest_mode mode, uint64_t pages); - /* * Create a VM with a single vCPU with reasonable defaults and @extra_mem_= pages * additional pages of guest memory. Returns the VM and vCPU (via out par= am). diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index 632912aeaeb9..73247afa7265 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -153,12 +153,12 @@ const struct vm_guest_mode_params vm_guest_mode_param= s[] =3D { _Static_assert(sizeof(vm_guest_mode_params)/sizeof(struct vm_guest_mode_pa= rams) =3D=3D NUM_VM_MODES, "Missing new mode params?"); =20 -struct kvm_vm *__vm_create(enum vm_guest_mode mode, uint64_t phy_pages) +struct kvm_vm *____vm_create(enum vm_guest_mode mode, uint64_t nr_pages) { struct kvm_vm *vm; =20 pr_debug("%s: mode=3D'%s' pages=3D'%ld'\n", __func__, - vm_guest_mode_string(mode), phy_pages); + vm_guest_mode_string(mode), nr_pages); =20 vm =3D calloc(1, sizeof(*vm)); TEST_ASSERT(vm !=3D NULL, "Insufficient Memory"); @@ -255,20 +255,20 @@ struct kvm_vm *__vm_create(enum vm_guest_mode mode, u= int64_t phy_pages) =20 /* Allocate and setup memory for guest. */ vm->vpages_mapped =3D sparsebit_alloc(); - if (phy_pages !=3D 0) + if (nr_pages !=3D 0) vm_userspace_mem_region_add(vm, VM_MEM_SRC_ANONYMOUS, - 0, 0, phy_pages, 0); + 0, 0, nr_pages, 0); =20 return vm; } =20 -struct kvm_vm *vm_create(enum vm_guest_mode mode, uint64_t pages) +struct kvm_vm *__vm_create(enum vm_guest_mode mode, uint64_t nr_pages) { struct kvm_vm *vm; =20 - pages =3D vm_adjust_num_guest_pages(VM_MODE_DEFAULT, pages); + nr_pages =3D vm_adjust_num_guest_pages(VM_MODE_DEFAULT, nr_pages); =20 - vm =3D __vm_create(mode, pages); + vm =3D ____vm_create(mode, nr_pages); =20 kvm_vm_elf_load(vm, program_invocation_name); =20 @@ -327,7 +327,7 @@ struct kvm_vm *vm_create_with_vcpus(enum vm_guest_mode = mode, uint32_t nr_vcpus, "nr_vcpus =3D %d too large for host, max-vcpus =3D %d", nr_vcpus, kvm_check_cap(KVM_CAP_MAX_VCPUS)); =20 - vm =3D vm_create(mode, pages); + vm =3D __vm_create(mode, pages); =20 for (i =3D 0; i < nr_vcpus; ++i) { uint32_t vcpuid =3D vcpuids ? vcpuids[i] : i; diff --git a/tools/testing/selftests/kvm/x86_64/pmu_event_filter_test.c b/t= ools/testing/selftests/kvm/x86_64/pmu_event_filter_test.c index d80b0a408937..93af4ad728d8 100644 --- a/tools/testing/selftests/kvm/x86_64/pmu_event_filter_test.c +++ b/tools/testing/selftests/kvm/x86_64/pmu_event_filter_test.c @@ -340,7 +340,7 @@ static void test_pmu_config_disable(void (*guest_code)(= void)) if (!(r & KVM_PMU_CAP_DISABLE)) return; =20 - vm =3D vm_create(VM_MODE_DEFAULT, DEFAULT_GUEST_PHY_PAGES); + vm =3D vm_create(DEFAULT_GUEST_PHY_PAGES); =20 cap.cap =3D KVM_CAP_PMU_CAPABILITY; cap.args[0] =3D KVM_PMU_CAP_DISABLE; diff --git a/tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c b/tools/t= esting/selftests/kvm/x86_64/set_boot_cpu_id.c index 6bc13cf17220..9ba3cd4e7f20 100644 --- a/tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c +++ b/tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c @@ -86,7 +86,7 @@ static struct kvm_vm *create_vm(void) uint64_t extra_pg_pages =3D vcpu_pages / PTES_PER_MIN_PAGE * N_VCPU; uint64_t pages =3D DEFAULT_GUEST_PHY_PAGES + vcpu_pages + extra_pg_pages; =20 - return vm_create(VM_MODE_DEFAULT, pages); + return vm_create(pages); } =20 static void add_x86_vcpu(struct kvm_vm *vm, uint32_t vcpuid, bool bsp_code) --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 DFC33C433FE for ; Wed, 4 May 2022 22:53:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379597AbiEDW4o (ORCPT ); Wed, 4 May 2022 18:56:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43556 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379495AbiEDWyO (ORCPT ); Wed, 4 May 2022 18:54:14 -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 B25461B7BF for ; Wed, 4 May 2022 15:50:37 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id i6-20020a17090a718600b001dc87aca289so1080614pjk.5 for ; Wed, 04 May 2022 15:50:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=ics5fKQO8hYOFNHtV6D8SXzwom3B/0Woppu9zPFokPE=; b=n6riCm3IAmq/UZOcFxQGvdC1OcCB6v0Ts/YtqCboYuFN+Fgci6lFBpkgwFHgYF38A4 SVcyWgFf/F4LGtlz14qoVNsAthZzzQxuJIlFYkSf+VWULBFfSU4ocUOnsMLTs3vBwxMa trUhLImFFbO/LIExgLu/adnqKp5YrCisYAqmMMdEJ1GkrmfBe5yv38c9VIx7c4cwOJJ3 /sl3Cp6Z79bC/G4O2UCG8+NTYqoIGeEEWME8jvPCHb/W+ndri+IWPZ5lBX16Dbknnx1z AkTqNlTQcSuZ+7y6aN0Ds0S6l9iUi2gUSLu0pUhslvSY/VxGo2sxYC7lVog4rY1UkR8S wprA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=ics5fKQO8hYOFNHtV6D8SXzwom3B/0Woppu9zPFokPE=; b=CP/6fW9+gQ+D9ws5pprniXpZ56WtfEiL3WyBDLHbchKA6xjqpo+SC0ekZBM6dn1/vy xnnMm8JGzQuB5IPG3yB0y9AvnNZKYcDPWTVf8t+C8UbVe72gBgz+BXJPMcez4Q16lr04 JlE4vFc3hnEt9vHLm2N5dPrVYVMJRvuDA/g1fBtG/tEX6aE7pUSPX1ac0L+XOgTO56vQ 6CEJvlekmvc8OwjEkpsUWKVUzDD4lNVLuncKk7Yb9J5h49lSolmhXHgHFARQ6PHa8V10 TgGMv4c5cDE0I9bkEQVjldsIh9UGsILV8ClZVQelLB2JxzvO5wKjkQ3O7B5kylFzBvtQ EFpw== X-Gm-Message-State: AOAM532jT/A09XvvD4Jqe/1a5rLnj0A2fP3f18auPDHJM8ypHvktCnI8 /eXBUsz7FEoHqqNLtgyYMA+/XqZgRLo= X-Google-Smtp-Source: ABdhPJyq9dcELUdCxvX0YR9FeHkBJppQMhPVNoV10ItN/sA0vbwtuzl0rtZBr+SBbfd3syl2+f5a0udgONE= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:d48d:b0:15e:c236:4fd3 with SMTP id c13-20020a170902d48d00b0015ec2364fd3mr6868487plg.113.1651704637188; Wed, 04 May 2022 15:50:37 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:44 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-39-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 038/128] KVM: selftests: Rename xAPIC state test's vcpu struct From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Rename xapic_state_test's kvm_vcpu struct to xapic_vcpu to avoid a collision when the common 'struct vcpu' is renamed to 'struct kvm_vcpu' in a future patch. Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/x86_64/xapic_state_test.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/xapic_state_test.c b/tools/= testing/selftests/kvm/x86_64/xapic_state_test.c index 0792334ba243..9d8393b6ec75 100644 --- a/tools/testing/selftests/kvm/x86_64/xapic_state_test.c +++ b/tools/testing/selftests/kvm/x86_64/xapic_state_test.c @@ -11,7 +11,7 @@ #include "processor.h" #include "test_util.h" =20 -struct kvm_vcpu { +struct xapic_vcpu { uint32_t id; bool is_x2apic; }; @@ -47,7 +47,7 @@ static void x2apic_guest_code(void) } while (1); } =20 -static void ____test_icr(struct kvm_vm *vm, struct kvm_vcpu *vcpu, uint64_= t val) +static void ____test_icr(struct kvm_vm *vm, struct xapic_vcpu *vcpu, uint6= 4_t val) { struct kvm_lapic_state xapic; struct ucall uc; @@ -75,13 +75,13 @@ static void ____test_icr(struct kvm_vm *vm, struct kvm_= vcpu *vcpu, uint64_t val) ASSERT_EQ(icr, val & ~APIC_ICR_BUSY); } =20 -static void __test_icr(struct kvm_vm *vm, struct kvm_vcpu *vcpu, uint64_t = val) +static void __test_icr(struct kvm_vm *vm, struct xapic_vcpu *vcpu, uint64_= t val) { ____test_icr(vm, vcpu, val | APIC_ICR_BUSY); ____test_icr(vm, vcpu, val & ~(u64)APIC_ICR_BUSY); } =20 -static void test_icr(struct kvm_vm *vm, struct kvm_vcpu *vcpu) +static void test_icr(struct kvm_vm *vm, struct xapic_vcpu *vcpu) { uint64_t icr, i, j; =20 @@ -116,7 +116,7 @@ static void test_icr(struct kvm_vm *vm, struct kvm_vcpu= *vcpu) =20 int main(int argc, char *argv[]) { - struct kvm_vcpu vcpu =3D { + struct xapic_vcpu vcpu =3D { .id =3D 0, .is_x2apic =3D true, }; --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 7C3F0C433FE for ; Wed, 4 May 2022 22:53:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379617AbiEDW4t (ORCPT ); Wed, 4 May 2022 18:56:49 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43682 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379500AbiEDWyQ (ORCPT ); Wed, 4 May 2022 18:54:16 -0400 Received: from mail-pl1-x64a.google.com (mail-pl1-x64a.google.com [IPv6:2607:f8b0:4864:20::64a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5DFBD46674 for ; Wed, 4 May 2022 15:50:39 -0700 (PDT) Received: by mail-pl1-x64a.google.com with SMTP id u9-20020a17090282c900b0015ea48078b7so1368788plz.10 for ; Wed, 04 May 2022 15:50:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=Jk9yX0/L/SZGLl/sjgO8qssUyxafpPIYsEjtaY9KLJw=; b=d3CxHrnwxlPFqFS4B2lK31TdZzCRwdUaZ0gM1SRSErh/p05O1p+7NSAhMlDoCDWQt8 YPSQZhPLR1lcHyftAChWvfnaLSO+Vv965NU5hgGicDC7tlURImgaU/NJMZtDQPUeNd7T /ABl61lWYjUh9NfVQlZoR1z+V8TmsIUu2LCIAjoT0BkUyoVCiqvozW7roc8BWD2Xq8l1 t7I4y/Y98HB1qt8SFb68+gz5F8IVsTzjqu8y3tccNQ82qWZCzT8bbke4+p9ai5iTNwO0 vF7MpkmASyJFi02UAiXueocTV30udmGWt81u2zJEJeg7vJx3rSUi6IXOsdUxBzACrIdv v3cg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=Jk9yX0/L/SZGLl/sjgO8qssUyxafpPIYsEjtaY9KLJw=; b=3nMb6moiwS5S8peDM+M7Pwr+O46Q9VoUlU0fZSxMvSwVZw7N7tjGvqREt1O6/TwDCV 4mA5F+c1/j14b7UCD/pkugVvzStbenurxW5b+XH0uz8lAITSYE63MgVCFGm4BbREHlTG 3U8Vqr1pgIN52bAzxBlJSDvZvoygfiH0gHgrkgkqRGKSBlW6NvXIgGGRdFTco4wCsLxs vKhkl/khlEYBsMGO+4irieXKy5O3mnYMXUWLo9Hd6+uPEra+EAySAjbVscaNMGOJxOkU /hKLBxZF1qlpGg+zE0I1Wo1nT8VRcMCpCBGIXrJNMhe544U89qnS8h7PNEeE61SN6o83 imEA== X-Gm-Message-State: AOAM531TwLAW5AT8O6vfOS2lkrDwHmD86kBrWBS68UU1rYjnc42IxEJ0 96kVzoAFKSTWJJaNgo0i15jGfes2mQs= X-Google-Smtp-Source: ABdhPJwfLHkCIOEwXQLPUjWO78s7ITeSa4Disk9Q2KtLmuN7M6HDs6WnFqD/s/32Cbgr7eyGeCrUULIAgAI= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:c986:b0:1d9:56e7:4e83 with SMTP id w6-20020a17090ac98600b001d956e74e83mr139674pjt.1.1651704638713; Wed, 04 May 2022 15:50:38 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:45 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-40-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 039/128] KVM: selftests: Rename vcpu.state => vcpu.run From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Rename the "state" field of 'struct vcpu' to "run". KVM calls it "run", the struct name is "kvm_run", etc... Signed-off-by: Sean Christopherson --- .../selftests/kvm/include/kvm_util_base.h | 2 +- tools/testing/selftests/kvm/lib/kvm_util.c | 24 +++++++------------ .../selftests/kvm/lib/s390x/processor.c | 2 +- 3 files changed, 11 insertions(+), 17 deletions(-) diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index 136b5428ae0e..96e08c9be013 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -48,7 +48,7 @@ struct vcpu { uint32_t id; int fd; struct kvm_vm *vm; - struct kvm_run *state; + struct kvm_run *run; struct kvm_dirty_gfn *dirty_gfns; uint32_t fetch_index; uint32_t dirty_gfns_count; diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index 73247afa7265..d31ac35a86f3 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -518,7 +518,7 @@ static void vm_vcpu_rm(struct kvm_vm *vm, struct vcpu *= vcpu) vcpu->dirty_gfns =3D NULL; } =20 - ret =3D munmap(vcpu->state, vcpu_mmap_sz()); + ret =3D munmap(vcpu->run, vcpu_mmap_sz()); TEST_ASSERT(!ret, __KVM_SYSCALL_ERROR("munmap()", ret)); =20 ret =3D close(vcpu->fd); @@ -1085,13 +1085,7 @@ void vm_vcpu_add(struct kvm_vm *vm, uint32_t vcpuid) struct vcpu *vcpu; =20 /* Confirm a vcpu with the specified id doesn't already exist. */ - vcpu =3D vcpu_find(vm, vcpuid); - if (vcpu !=3D NULL) - TEST_FAIL("vcpu with the specified id " - "already exists,\n" - " requested vcpuid: %u\n" - " existing vcpuid: %u state: %p", - vcpuid, vcpu->id, vcpu->state); + TEST_ASSERT(!vcpu_find(vm, vcpuid), "vCPU%d already exists\n", vcpuid); =20 /* Allocate and initialize new vcpu structure. */ vcpu =3D calloc(1, sizeof(*vcpu)); @@ -1102,12 +1096,12 @@ void vm_vcpu_add(struct kvm_vm *vm, uint32_t vcpuid) vcpu->fd =3D __vm_ioctl(vm, KVM_CREATE_VCPU, (void *)(unsigned long)vcpui= d); TEST_ASSERT(vcpu->fd >=3D 0, KVM_IOCTL_ERROR(KVM_CREATE_VCPU, vcpu->fd)); =20 - TEST_ASSERT(vcpu_mmap_sz() >=3D sizeof(*vcpu->state), "vcpu mmap size " + TEST_ASSERT(vcpu_mmap_sz() >=3D sizeof(*vcpu->run), "vcpu mmap size " "smaller than expected, vcpu_mmap_sz: %i expected_min: %zi", - vcpu_mmap_sz(), sizeof(*vcpu->state)); - vcpu->state =3D (struct kvm_run *) mmap(NULL, vcpu_mmap_sz(), + vcpu_mmap_sz(), sizeof(*vcpu->run)); + vcpu->run =3D (struct kvm_run *) mmap(NULL, vcpu_mmap_sz(), PROT_READ | PROT_WRITE, MAP_SHARED, vcpu->fd, 0); - TEST_ASSERT(vcpu->state !=3D MAP_FAILED, + TEST_ASSERT(vcpu->run !=3D MAP_FAILED, __KVM_SYSCALL_ERROR("mmap()", (int)(unsigned long)MAP_FAILED)); =20 /* Add to linked-list of VCPUs. */ @@ -1464,7 +1458,7 @@ struct kvm_run *vcpu_state(struct kvm_vm *vm, uint32_= t vcpuid) { struct vcpu *vcpu =3D vcpu_get(vm, vcpuid); =20 - return vcpu->state; + return vcpu->run; } =20 /* @@ -1506,9 +1500,9 @@ void vcpu_run_complete_io(struct kvm_vm *vm, uint32_t= vcpuid) struct vcpu *vcpu =3D vcpu_get(vm, vcpuid); int ret; =20 - vcpu->state->immediate_exit =3D 1; + vcpu->run->immediate_exit =3D 1; ret =3D __vcpu_run(vm, vcpuid); - vcpu->state->immediate_exit =3D 0; + vcpu->run->immediate_exit =3D 0; =20 TEST_ASSERT(ret =3D=3D -1 && errno =3D=3D EINTR, "KVM_RUN IOCTL didn't exit immediately, rc: %i, errno: %i", diff --git a/tools/testing/selftests/kvm/lib/s390x/processor.c b/tools/test= ing/selftests/kvm/lib/s390x/processor.c index 53c413932f64..df9d9650d916 100644 --- a/tools/testing/selftests/kvm/lib/s390x/processor.c +++ b/tools/testing/selftests/kvm/lib/s390x/processor.c @@ -210,7 +210,7 @@ void vcpu_dump(FILE *stream, struct kvm_vm *vm, uint32_= t vcpuid, uint8_t indent) struct vcpu *vcpu =3D vcpu_get(vm, vcpuid); =20 fprintf(stream, "%*spstate: psw: 0x%.16llx:0x%.16llx\n", - indent, "", vcpu->state->psw_mask, vcpu->state->psw_addr); + indent, "", vcpu->run->psw_mask, vcpu->run->psw_addr); } =20 void assert_on_unhandled_exception(struct kvm_vm *vm, uint32_t vcpuid) --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 6D2EEC433F5 for ; Wed, 4 May 2022 22:53:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379646AbiEDW46 (ORCPT ); Wed, 4 May 2022 18:56:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43938 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379511AbiEDWyT (ORCPT ); Wed, 4 May 2022 18:54:19 -0400 Received: from mail-pj1-x1049.google.com (mail-pj1-x1049.google.com [IPv6:2607:f8b0:4864:20::1049]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4F73A49F21 for ; Wed, 4 May 2022 15:50:41 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id m8-20020a17090aab0800b001cb1320ef6eso3572032pjq.3 for ; Wed, 04 May 2022 15:50:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=ztjnvpybo6qyJr4BCUQZplU60TknzqXz63x+EIsC6l4=; b=HEVRh7Qi/0VDYfBHYfpsJkhYsINB2+4swUPsCXzbh+ISGOSwGRPMape+yG7EB4u1HP smlhkd9XnBFtCVA+Y6W9RQiQILtcwy6J6In9Lc/U06e/LxkSGbtb2gv0gTwP1eKZhjwz Fa3OUF0LPi4fIvh+feElOnNdE/ydNIaVEIMU9CiFmJaORRE4HRLaR4r/EKJDs4ffKSOc dQ68r5nk/kiAFOdq12W+V59N3qLhlFypcWVp6lil4pVwBXuAwJpxEwLvjQ07EPjrqW8n hVCXbrfOfEpxTxPqZqAr1/6W6znhpAcOyU7Lp9V6OZzMOgehlQH89sa5k+VlAcjG6nsw +H8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=ztjnvpybo6qyJr4BCUQZplU60TknzqXz63x+EIsC6l4=; b=mdV1n1Z0xu+iN8e+Fq/9xPq82re7/u5JJewsvzA36USZGlzARp9Nr+0Fo+nNzEYyx6 uz9z0b8kFRrNU2KR0nF/T6HpLydjHBl6qFOMe6+ydhQBx5lR3N87ktl7myfX8OPpApn1 dLm9uKm7WNMsEPnhJj1xM2HKJsI9OZIWgaIbBxZIHz/gchytTYClXD8iOg4QeDQ3GPij LXFUhKEao5f0SKatnNOcgOSXqa3R+5vcRwdAf1cm81iflURuigmnjZznCOzOudj5LegQ 5dm7X4Ey+7UNWH2dEf6aOZjycQAazEGHyeO0ydpPD8f+0IQY8Uup49jqieYU99zVXVqv qcOg== X-Gm-Message-State: AOAM530OAEfZEiBkSRAL+tXnLiNip1Q6RKhifC56NqVA7e2Hf1FpPSOD 3dQ3B7gDQXPRM5tCmWTKNZmgNhL1HVY= X-Google-Smtp-Source: ABdhPJwnm6QCl8AXKbY5Y6wBKFPEVscShpEWXNkccFP3F3CbQjoBjoM6LK+D+BXDp5vX6jLW/1iGIZdXO+o= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:ec83:b0:15e:b5d2:a81b with SMTP id x3-20020a170902ec8300b0015eb5d2a81bmr10949310plg.64.1651704640674; Wed, 04 May 2022 15:50:40 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:46 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-41-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 040/128] KVM: selftests: Rename 'struct vcpu' to 'struct kvm_vcpu' From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Rename 'struct vcpu' to 'struct kvm_vcpu' to align with 'struct kvm_vm' in the selftest, and to give readers a hint that the struct is specific to KVM. Signed-off-by: Sean Christopherson --- .../selftests/kvm/include/kvm_util_base.h | 11 +++--- tools/testing/selftests/kvm/lib/kvm_util.c | 36 +++++++++---------- .../selftests/kvm/lib/s390x/processor.c | 2 +- .../selftests/kvm/lib/x86_64/processor.c | 6 ++-- 4 files changed, 27 insertions(+), 28 deletions(-) diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index 96e08c9be013..ca65771388e7 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -16,6 +16,7 @@ #include #include "linux/rbtree.h" =20 + #include =20 #include "sparsebit.h" @@ -43,7 +44,7 @@ struct userspace_mem_region { struct hlist_node slot_node; }; =20 -struct vcpu { +struct kvm_vcpu { struct list_head list; uint32_t id; int fd; @@ -92,7 +93,7 @@ struct kvm_vm { continue; \ else =20 -struct vcpu *vcpu_get(struct kvm_vm *vm, uint32_t vcpuid); +struct kvm_vcpu *vcpu_get(struct kvm_vm *vm, uint32_t vcpuid); =20 /* * Virtual Translation Tables Dump @@ -643,17 +644,17 @@ struct kvm_vm *vm_create_with_vcpus(enum vm_guest_mod= e mode, uint32_t nr_vcpus, * Create a VM with a single vCPU with reasonable defaults and @extra_mem_= pages * additional pages of guest memory. Returns the VM and vCPU (via out par= am). */ -struct kvm_vm *__vm_create_with_one_vcpu(struct vcpu **vcpu, +struct kvm_vm *__vm_create_with_one_vcpu(struct kvm_vcpu **vcpu, uint64_t extra_mem_pages, void *guest_code); =20 -static inline struct kvm_vm *vm_create_with_one_vcpu(struct vcpu **vcpu, +static inline struct kvm_vm *vm_create_with_one_vcpu(struct kvm_vcpu **vcp= u, void *guest_code) { return __vm_create_with_one_vcpu(vcpu, 0, guest_code); } =20 -struct vcpu *vm_recreate_with_one_vcpu(struct kvm_vm *vm); +struct kvm_vcpu *vm_recreate_with_one_vcpu(struct kvm_vm *vm); =20 /* * Adds a vCPU with reasonable defaults (e.g. a stack) diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index d31ac35a86f3..911869b350ea 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -353,7 +353,7 @@ struct kvm_vm *vm_create_default(uint32_t vcpuid, uint6= 4_t extra_mem_pages, (uint32_t []){ vcpuid }); } =20 -struct kvm_vm *__vm_create_with_one_vcpu(struct vcpu **vcpu, +struct kvm_vm *__vm_create_with_one_vcpu(struct kvm_vcpu **vcpu, uint64_t extra_mem_pages, void *guest_code) { @@ -397,7 +397,7 @@ void kvm_vm_restart(struct kvm_vm *vmp) } } =20 -struct vcpu *vm_recreate_with_one_vcpu(struct kvm_vm *vm) +struct kvm_vcpu *vm_recreate_with_one_vcpu(struct kvm_vm *vm) { kvm_vm_restart(vm); =20 @@ -476,23 +476,23 @@ kvm_userspace_memory_region_find(struct kvm_vm *vm, u= int64_t start, return ®ion->region; } =20 -static struct vcpu *vcpu_find(struct kvm_vm *vm, uint32_t vcpuid) +static struct kvm_vcpu *vcpu_find(struct kvm_vm *vm, uint32_t vcpu_id) { - struct vcpu *vcpu; + struct kvm_vcpu *vcpu; =20 list_for_each_entry(vcpu, &vm->vcpus, list) { - if (vcpu->id =3D=3D vcpuid) + if (vcpu->id =3D=3D vcpu_id) return vcpu; } =20 return NULL; } =20 -struct vcpu *vcpu_get(struct kvm_vm *vm, uint32_t vcpuid) +struct kvm_vcpu *vcpu_get(struct kvm_vm *vm, uint32_t vcpu_id) { - struct vcpu *vcpu =3D vcpu_find(vm, vcpuid); + struct kvm_vcpu *vcpu =3D vcpu_find(vm, vcpu_id); =20 - TEST_ASSERT(vcpu, "vCPU %d does not exist", vcpuid); + TEST_ASSERT(vcpu, "vCPU %d does not exist", vcpu_id); return vcpu; } =20 @@ -508,7 +508,7 @@ struct vcpu *vcpu_get(struct kvm_vm *vm, uint32_t vcpui= d) * * Removes a vCPU from a VM and frees its resources. */ -static void vm_vcpu_rm(struct kvm_vm *vm, struct vcpu *vcpu) +static void vm_vcpu_rm(struct kvm_vm *vm, struct kvm_vcpu *vcpu) { int ret; =20 @@ -530,7 +530,7 @@ static void vm_vcpu_rm(struct kvm_vm *vm, struct vcpu *= vcpu) =20 void kvm_vm_release(struct kvm_vm *vmp) { - struct vcpu *vcpu, *tmp; + struct kvm_vcpu *vcpu, *tmp; int ret; =20 list_for_each_entry_safe(vcpu, tmp, &vmp->vcpus, list) @@ -1082,7 +1082,7 @@ static int vcpu_mmap_sz(void) */ void vm_vcpu_add(struct kvm_vm *vm, uint32_t vcpuid) { - struct vcpu *vcpu; + struct kvm_vcpu *vcpu; =20 /* Confirm a vcpu with the specified id doesn't already exist. */ TEST_ASSERT(!vcpu_find(vm, vcpuid), "vCPU%d already exists\n", vcpuid); @@ -1456,7 +1456,7 @@ void vm_create_irqchip(struct kvm_vm *vm) */ struct kvm_run *vcpu_state(struct kvm_vm *vm, uint32_t vcpuid) { - struct vcpu *vcpu =3D vcpu_get(vm, vcpuid); + struct kvm_vcpu *vcpu =3D vcpu_get(vm, vcpuid); =20 return vcpu->run; } @@ -1497,7 +1497,7 @@ int _vcpu_run(struct kvm_vm *vm, uint32_t vcpuid) =20 void vcpu_run_complete_io(struct kvm_vm *vm, uint32_t vcpuid) { - struct vcpu *vcpu =3D vcpu_get(vm, vcpuid); + struct kvm_vcpu *vcpu =3D vcpu_get(vm, vcpuid); int ret; =20 vcpu->run->immediate_exit =3D 1; @@ -1541,7 +1541,7 @@ struct kvm_reg_list *vcpu_get_reg_list(struct kvm_vm = *vm, uint32_t vcpuid) int __vcpu_ioctl(struct kvm_vm *vm, uint32_t vcpuid, unsigned long cmd, void *arg) { - struct vcpu *vcpu =3D vcpu_get(vm, vcpuid); + struct kvm_vcpu *vcpu =3D vcpu_get(vm, vcpuid); =20 return ioctl(vcpu->fd, cmd, arg); } @@ -1556,7 +1556,7 @@ void _vcpu_ioctl(struct kvm_vm *vm, uint32_t vcpuid, = unsigned long cmd, =20 void *vcpu_map_dirty_ring(struct kvm_vm *vm, uint32_t vcpuid) { - struct vcpu *vcpu =3D vcpu_get(vm, vcpuid); + struct kvm_vcpu *vcpu =3D vcpu_get(vm, vcpuid); uint32_t size =3D vm->dirty_ring_size; =20 TEST_ASSERT(size > 0, "Should enable dirty ring first"); @@ -1677,9 +1677,7 @@ void vcpu_device_attr_set(struct kvm_vm *vm, uint32_t= vcpuid, uint32_t group, int __vcpu_has_device_attr(struct kvm_vm *vm, uint32_t vcpuid, uint32_t gr= oup, uint64_t attr) { - struct vcpu *vcpu =3D vcpu_get(vm, vcpuid); - - return __kvm_has_device_attr(vcpu->fd, group, attr); + return __kvm_has_device_attr(vcpu_get(vm, vcpuid)->fd, group, attr); } =20 /* @@ -1772,7 +1770,7 @@ void vm_dump(FILE *stream, struct kvm_vm *vm, uint8_t= indent) { int ctr; struct userspace_mem_region *region; - struct vcpu *vcpu; + struct kvm_vcpu *vcpu; =20 fprintf(stream, "%*smode: 0x%x\n", indent, "", vm->mode); fprintf(stream, "%*sfd: %i\n", indent, "", vm->fd); diff --git a/tools/testing/selftests/kvm/lib/s390x/processor.c b/tools/test= ing/selftests/kvm/lib/s390x/processor.c index df9d9650d916..aec15ca9d887 100644 --- a/tools/testing/selftests/kvm/lib/s390x/processor.c +++ b/tools/testing/selftests/kvm/lib/s390x/processor.c @@ -207,7 +207,7 @@ void vcpu_args_set(struct kvm_vm *vm, uint32_t vcpuid, = unsigned int num, ...) =20 void vcpu_dump(FILE *stream, struct kvm_vm *vm, uint32_t vcpuid, uint8_t i= ndent) { - struct vcpu *vcpu =3D vcpu_get(vm, vcpuid); + struct kvm_vcpu *vcpu =3D vcpu_get(vm, vcpuid); =20 fprintf(stream, "%*spstate: psw: 0x%.16llx:0x%.16llx\n", indent, "", vcpu->run->psw_mask, vcpu->run->psw_addr); diff --git a/tools/testing/selftests/kvm/lib/x86_64/processor.c b/tools/tes= ting/selftests/kvm/lib/x86_64/processor.c index 1e3d68bdfc7d..91b326cd43a2 100644 --- a/tools/testing/selftests/kvm/lib/x86_64/processor.c +++ b/tools/testing/selftests/kvm/lib/x86_64/processor.c @@ -938,7 +938,7 @@ struct kvm_msr_list *kvm_get_msr_index_list(void) return list; } =20 -static int vcpu_save_xsave_state(struct kvm_vm *vm, struct vcpu *vcpu, +static int vcpu_save_xsave_state(struct kvm_vm *vm, struct kvm_vcpu *vcpu, struct kvm_x86_state *state) { int size; @@ -956,7 +956,7 @@ static int vcpu_save_xsave_state(struct kvm_vm *vm, str= uct vcpu *vcpu, =20 struct kvm_x86_state *vcpu_save_state(struct kvm_vm *vm, uint32_t vcpuid) { - struct vcpu *vcpu =3D vcpu_get(vm, vcpuid); + struct kvm_vcpu *vcpu =3D vcpu_get(vm, vcpuid); struct kvm_msr_list *list; struct kvm_x86_state *state; int nmsrs, r, i; @@ -1037,7 +1037,7 @@ struct kvm_x86_state *vcpu_save_state(struct kvm_vm *= vm, uint32_t vcpuid) =20 void vcpu_load_state(struct kvm_vm *vm, uint32_t vcpuid, struct kvm_x86_st= ate *state) { - struct vcpu *vcpu =3D vcpu_get(vm, vcpuid); + struct kvm_vcpu *vcpu =3D vcpu_get(vm, vcpuid); int r; =20 r =3D ioctl(vcpu->fd, KVM_SET_SREGS, &state->sregs); --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 0CEACC433EF for ; Wed, 4 May 2022 22:53:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1356815AbiEDW4x (ORCPT ); Wed, 4 May 2022 18:56:53 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44006 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379516AbiEDWyU (ORCPT ); Wed, 4 May 2022 18:54:20 -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 34B9B4A3E5 for ; Wed, 4 May 2022 15:50:43 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id t15-20020a17090a3b4f00b001d67e27715dso3588987pjf.0 for ; Wed, 04 May 2022 15:50:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=G4ZX0Log93RwEpV4IdM/MtOoP7++p5/8Pg5nP4hU55M=; b=QPpmCUBQcK6yP8h9FvLVtqJgJb/X0s2qo2L0Kh45Ih4It/Skr0BY2GhjBAW75O8NZN XX3dfWEW2tq/ZrHL3uF/FXmc8R5DKKiVudOSKXSIgS8dEwWowUl8bnMBFrkVRAiX9gvH vaJRFFc0KUFCKeWahpDRxhrMRurgsmLFQJPTTjv/JqX5ON/agdL8tKjT5yumvjGcUOAN Jap13hAyqEYIustppUdlOXzU8+/4K8vLgVbsN6U8rbaUo+TAYVZ5An8DiyVqaWWHnVe2 Tc0oI7jNMSZhOofDCxxQM1es6it50122dRfEJKE1ff6Ng6PdwqDUkCrZXVrvFhjnwTlC jEjA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=G4ZX0Log93RwEpV4IdM/MtOoP7++p5/8Pg5nP4hU55M=; b=KtzefqTwUEFcSghvvbfTqy39TKWPiKzdGlfJrCBOWpSzxZc+XCc/nfVWrCEHCym4oJ VBkASoT16Y2W8x7zOBAumyvGWSLS3TDAD38jR7bl3DZiG0x8IBC6SsX+KgJV26DQMggU kaxyRuMAwsO0UYDAuSzWBFB3OHYipf9F9jE3OtVo050N97HdFcs1/+6s1eklCovuApce StWDvDfwMcUK3197zNJp7l3vhDhOhGjiq82uuIcVTAyBmP++RWy9FLrFS7Greuz6cj7R wqMVtRxLk6N4Sn5UahoGzDmfHHZD5leB3h3mCTWI0SvXMDS1b3SIFQZ7pSzknrooztFL UuMw== X-Gm-Message-State: AOAM532CwSHKl1i0if6+YueNEXooePNb+ObkLLjdNqSjrXQUbYDMdWni eST5jhMYOASOKtYJNo8w9dOVhQS+dh8= X-Google-Smtp-Source: ABdhPJzV/Sr5AKvdGnNLQnGkCIr2E+ofxQsaTO4t0RpI4gxFAYCWl97qDea0QZIIog8rPl2KxQTvCRwS2PA= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:c986:b0:1d9:56e7:4e83 with SMTP id w6-20020a17090ac98600b001d956e74e83mr139700pjt.1.1651704642439; Wed, 04 May 2022 15:50:42 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:47 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-42-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 041/128] KVM: selftests: Return the created vCPU from vm_vcpu_add() From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Return the created vCPU from vm_vcpu_add() so that callers don't need to manually retrieve the vCPU that was just added. Opportunistically drop the "heavy" function comment, it adds a lot of lines of "code" but not much value, e.g. it's pretty obvious that @vm is a virtual machine... Signed-off-by: Sean Christopherson --- .../selftests/kvm/include/kvm_util_base.h | 2 +- tools/testing/selftests/kvm/lib/kvm_util.c | 27 +++++++------------ 2 files changed, 10 insertions(+), 19 deletions(-) diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index ca65771388e7..4487d5bce9b4 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -316,7 +316,7 @@ void vm_userspace_mem_region_add(struct kvm_vm *vm, void vm_mem_region_set_flags(struct kvm_vm *vm, uint32_t slot, uint32_t fl= ags); 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); -void vm_vcpu_add(struct kvm_vm *vm, uint32_t vcpuid); +struct kvm_vcpu *vm_vcpu_add(struct kvm_vm *vm, uint32_t vcpuid); vm_vaddr_t vm_vaddr_alloc(struct kvm_vm *vm, size_t sz, vm_vaddr_t vaddr_m= in); 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/sel= ftests/kvm/lib/kvm_util.c index 911869b350ea..bcdc47289df3 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -401,8 +401,7 @@ struct kvm_vcpu *vm_recreate_with_one_vcpu(struct kvm_v= m *vm) { kvm_vm_restart(vm); =20 - vm_vcpu_add(vm, 0); - return vcpu_get(vm, 0); + return vm_vcpu_add(vm, 0); } =20 /* @@ -1067,33 +1066,23 @@ static int vcpu_mmap_sz(void) } =20 /* - * VM VCPU Add - * - * Input Args: - * vm - Virtual Machine - * vcpuid - VCPU ID - * - * Output Args: None - * - * Return: None - * - * Adds a virtual CPU to the VM specified by vm with the ID given by vcpui= d. - * No additional VCPU setup is done. + * Adds a virtual CPU to the VM specified by vm with the ID given by vcpu_= id. + * No additional vCPU setup is done. Returns the vCPU. */ -void vm_vcpu_add(struct kvm_vm *vm, uint32_t vcpuid) +struct kvm_vcpu *vm_vcpu_add(struct kvm_vm *vm, uint32_t vcpu_id) { struct kvm_vcpu *vcpu; =20 /* Confirm a vcpu with the specified id doesn't already exist. */ - TEST_ASSERT(!vcpu_find(vm, vcpuid), "vCPU%d already exists\n", vcpuid); + TEST_ASSERT(!vcpu_find(vm, vcpu_id), "vCPU%d already exists\n", vcpu_id); =20 /* Allocate and initialize new vcpu structure. */ vcpu =3D calloc(1, sizeof(*vcpu)); TEST_ASSERT(vcpu !=3D NULL, "Insufficient Memory"); =20 vcpu->vm =3D vm; - vcpu->id =3D vcpuid; - vcpu->fd =3D __vm_ioctl(vm, KVM_CREATE_VCPU, (void *)(unsigned long)vcpui= d); + vcpu->id =3D vcpu_id; + vcpu->fd =3D __vm_ioctl(vm, KVM_CREATE_VCPU, (void *)(unsigned long)vcpu_= id); TEST_ASSERT(vcpu->fd >=3D 0, KVM_IOCTL_ERROR(KVM_CREATE_VCPU, vcpu->fd)); =20 TEST_ASSERT(vcpu_mmap_sz() >=3D sizeof(*vcpu->run), "vcpu mmap size " @@ -1106,6 +1095,8 @@ void vm_vcpu_add(struct kvm_vm *vm, uint32_t vcpuid) =20 /* Add to linked-list of VCPUs. */ list_add(&vcpu->list, &vm->vcpus); + + return vcpu; } =20 /* --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 0D810C433F5 for ; Wed, 4 May 2022 22:53:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235039AbiEDW5D (ORCPT ); Wed, 4 May 2022 18:57:03 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44162 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379527AbiEDWyW (ORCPT ); Wed, 4 May 2022 18:54:22 -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 19B9C4AE08 for ; Wed, 4 May 2022 15:50:45 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id o16-20020a17090ab89000b001d84104fc2cso2393118pjr.1 for ; Wed, 04 May 2022 15:50:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=m+EPHltdynOdUR9+b1b8QS40GbbHNtfF/glWqdKc4L0=; b=CsTcsjOwkQ6IpTmdxWmzGO323RrXP7DtfRQIsGMpyUlMx3qZl3/869mwnr1zLw0XXK DrKJ6i7D1SRsGF4BYP0NtHtu08xYO74Ms+r+flzlS07PpJ6PAX4rusb5VlQt4dSzo0cV /swopcQtp6ewQ2XHtJ8jgUi7h9JLEVSGNlbTYBFkT1voho4Cmh7C0DAWh//uqq/AoE7R 2hyy+AGblY1qCoKEJ9VHuMbpmV/LU9jWiA4Wf2DRSx0QRrnCsU6/zGO5rgTZ9eBAgeyC 5ea3wXWJK5qwudLVmyr45gAb08UZPmRgavO0oowpqCNCqvrLU69loaEV8kH7N0oRdSFl 2vnw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=m+EPHltdynOdUR9+b1b8QS40GbbHNtfF/glWqdKc4L0=; b=AKzgfKbSZF+vtNXGUzrgzZMWjmpSsgTQ+3yqzYF3PTt2t2y5sKBalomcxMYATW9EMs a5oIcqy+se/Rwduz4uVOqDa8bsA4hsliEXl0a0l4lZdTYrVqZkY503FpBFYSm2oC2AQk wFQvk9K7rX7TpQgHU74KcrHCXkhVF28Sx/o14DHJ7uDsMwFAGGlL4igwt6E8QSM2CvKY VdAVdEJmWFrNXcpWeuMAobUFjR1qGoFX2ExU0m/xy/hZPfjPxBlJeOrMZ0ai9qqFpnDE /S4Y6P7UZrDsSzE7rdBiReiv46w4ExEaumxZu9I4aPi3NaaBgBQEknqRnpcag3HO4jIE bSDw== X-Gm-Message-State: AOAM532rBtZyFU8fINQRlLxdfkAek4q/ZvecjvM2AD3LkQw0igj0E2W2 7JJkmkYcwH5khdX65h9rgge2isT2APA= X-Google-Smtp-Source: ABdhPJz1adNbqMKVvf/fjqHzTk7Np3duENXUFtNKlfBxcgnPoWYBOCoH4jSBL6KA6eykdV5LrU8tsr+3iSw= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:690b:b0:159:65c:9044 with SMTP id j11-20020a170902690b00b00159065c9044mr24177158plk.47.1651704644594; Wed, 04 May 2022 15:50:44 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:48 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-43-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 042/128] KVM: selftests: Convert memslot_perf_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert memslot_perf_test to use __vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. This is the first of many, many steps towards eliminating VCPU_ID from all KVM selftests, and towards eventually purging the VM+vcpu_id mess. Signed-off-by: Sean Christopherson --- .../testing/selftests/kvm/memslot_perf_test.c | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/tools/testing/selftests/kvm/memslot_perf_test.c b/tools/testin= g/selftests/kvm/memslot_perf_test.c index 1727f75e0c2c..009eb19b28af 100644 --- a/tools/testing/selftests/kvm/memslot_perf_test.c +++ b/tools/testing/selftests/kvm/memslot_perf_test.c @@ -25,8 +25,6 @@ #include #include =20 -#define VCPU_ID 0 - #define MEM_SIZE ((512U << 20) + 4096) #define MEM_SIZE_PAGES (MEM_SIZE / 4096) #define MEM_GPA 0x10000000UL @@ -90,6 +88,7 @@ static_assert(MEM_TEST_MOVE_SIZE <=3D MEM_TEST_SIZE, =20 struct vm_data { struct kvm_vm *vm; + struct kvm_vcpu *vcpu; pthread_t vcpu_thread; uint32_t nslots; uint64_t npages; @@ -127,29 +126,29 @@ static bool verbose; pr_info(__VA_ARGS__); \ } while (0) =20 -static void check_mmio_access(struct vm_data *vm, struct kvm_run *run) +static void check_mmio_access(struct vm_data *data, struct kvm_run *run) { - TEST_ASSERT(vm->mmio_ok, "Unexpected mmio exit"); + TEST_ASSERT(data->mmio_ok, "Unexpected mmio exit"); TEST_ASSERT(run->mmio.is_write, "Unexpected mmio read"); TEST_ASSERT(run->mmio.len =3D=3D 8, "Unexpected exit mmio size =3D %u", run->mmio.len); - TEST_ASSERT(run->mmio.phys_addr >=3D vm->mmio_gpa_min && - run->mmio.phys_addr <=3D vm->mmio_gpa_max, + TEST_ASSERT(run->mmio.phys_addr >=3D data->mmio_gpa_min && + run->mmio.phys_addr <=3D data->mmio_gpa_max, "Unexpected exit mmio address =3D 0x%llx", run->mmio.phys_addr); } =20 -static void *vcpu_worker(void *data) +static void *vcpu_worker(void *__data) { - struct vm_data *vm =3D data; - struct kvm_run *run; + struct vm_data *data =3D __data; + struct kvm_vcpu *vcpu =3D data->vcpu; + struct kvm_run *run =3D vcpu->run; struct ucall uc; =20 - run =3D vcpu_state(vm->vm, VCPU_ID); while (1) { - vcpu_run(vm->vm, VCPU_ID); + vcpu_run(data->vm, vcpu->id); =20 - switch (get_ucall(vm->vm, VCPU_ID, &uc)) { + switch (get_ucall(data->vm, vcpu->id, &uc)) { case UCALL_SYNC: TEST_ASSERT(uc.args[1] =3D=3D 0, "Unexpected sync ucall, got %lx", @@ -158,7 +157,7 @@ static void *vcpu_worker(void *data) continue; case UCALL_NONE: if (run->exit_reason =3D=3D KVM_EXIT_MMIO) - check_mmio_access(vm, run); + check_mmio_access(data, run); else goto done; break; @@ -238,6 +237,7 @@ static struct vm_data *alloc_vm(void) TEST_ASSERT(data, "malloc(vmdata) failed"); =20 data->vm =3D NULL; + data->vcpu =3D NULL; data->hva_slots =3D NULL; =20 return data; @@ -278,7 +278,7 @@ static bool prepare_vm(struct vm_data *data, int nslots= , uint64_t *maxslots, data->hva_slots =3D malloc(sizeof(*data->hva_slots) * data->nslots); TEST_ASSERT(data->hva_slots, "malloc() fail"); =20 - data->vm =3D vm_create_default(VCPU_ID, mempages, guest_code); + data->vm =3D __vm_create_with_one_vcpu(&data->vcpu, mempages, guest_code); ucall_init(data->vm, NULL); =20 pr_info_v("Adding slots 1..%i, each slot with %"PRIu64" pages + %"PRIu64"= extra pages last\n", --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 2A0F3C433F5 for ; Wed, 4 May 2022 22:53:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379011AbiEDW5N (ORCPT ); Wed, 4 May 2022 18:57:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44282 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379536AbiEDWyY (ORCPT ); Wed, 4 May 2022 18:54:24 -0400 Received: from mail-pf1-x449.google.com (mail-pf1-x449.google.com [IPv6:2607:f8b0:4864:20::449]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8403E4AE38 for ; Wed, 4 May 2022 15:50:46 -0700 (PDT) Received: by mail-pf1-x449.google.com with SMTP id d6-20020aa78e46000000b0050cfcce2fefso816847pfr.18 for ; Wed, 04 May 2022 15:50:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=I70dsz4lXhruyCGWKJHDQVXM4bOs2OXTBNWCoVTLtu4=; b=gJMd+qSgUMP2fNtviqeq61J1UXjHROcATc2p2kBsajvUGU25w/b5dpLryu083CwI3/ AdFQkR8HF46BFheZsie3s5i7KMzyxlxnzLo5WOABbh24n43AuJzVJuw1BOI2tbKGFsDD uzVsoq6Y2N4SaEK6fgSTHoFgkHCUSDilTHpfLpw+8kMj81Fhn58Wk6SyyajqyVNAjrwI NeWEj9QUullZY4gZPxpMl3pCq6NI9TmgExHWE9iyxLdTsPjTgFJtPmqc9G76TuAvrcd2 x0I7NdilEtyM4iku3BX6Blejt7yrLEXt40/aSQ2yCRsKkioW9ZwKGoCPz9bdUONFXkQk RdXQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=I70dsz4lXhruyCGWKJHDQVXM4bOs2OXTBNWCoVTLtu4=; b=mfs3vLGcSDp06cjZBRb2xF6stoyylIIb5vam/9abuKnecWiQwap3Iz4JD5eG1YOxtw 7UtycgfXyK7sXLbc0aSTqAj1rVrbBiTOuf1nBO7piSQdHEfThs/7GZ7PwLvyYwvcitYl gC0oQFQX60CHQVfjYwwnmD/KNfzqVylghbj4f0poKxCYk1h+ZDzgOO+AoipMD4JNRkEo kd49JkKsUFO+TF665HoatVAUr/FgoGoXOWkdQztJT+lOqjm/by2Gvb3dhqXA61GOhMhF qwnzHV+Wq/8Kv2YsvWtYq4W21Y+egnjL1isYlvVGcDiovM0ILjcIxdyg458dWRk5ck/m YUeg== X-Gm-Message-State: AOAM532l2r0rDLEcfxbWQlEOvEPq0SlEnWPQcbIPGY6kn3hHj1o4xr/8 j2Jk8yTM3af20sdTtPbNBCKYbBjLvgo= X-Google-Smtp-Source: ABdhPJwDKoIN/l0wxQjqDQmmvLfZOGpdqa7hWMU5ZE40qii7kfzsm3HAu/xBBdhV9On+AO6BtaX7e/8hTm4= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:1a49:b0:505:7ab3:e5c7 with SMTP id h9-20020a056a001a4900b005057ab3e5c7mr22791383pfv.62.1651704646014; Wed, 04 May 2022 15:50:46 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:49 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-44-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 043/128] KVM: selftests: Convert rseq_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert rseq_test to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/rseq_test.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/tools/testing/selftests/kvm/rseq_test.c b/tools/testing/selfte= sts/kvm/rseq_test.c index 4158da0da2bb..fd754de0b74c 100644 --- a/tools/testing/selftests/kvm/rseq_test.c +++ b/tools/testing/selftests/kvm/rseq_test.c @@ -20,8 +20,6 @@ #include "processor.h" #include "test_util.h" =20 -#define VCPU_ID 0 - static __thread volatile struct rseq __rseq =3D { .cpu_id =3D RSEQ_CPU_ID_UNINITIALIZED, }; @@ -207,6 +205,7 @@ int main(int argc, char *argv[]) { int r, i, snapshot; struct kvm_vm *vm; + struct kvm_vcpu *vcpu; u32 cpu, rseq_cpu; =20 /* Tell stdout not to buffer its content */ @@ -228,14 +227,14 @@ int main(int argc, char *argv[]) * GUEST_SYNC, while concurrently migrating the process by setting its * CPU affinity. */ - vm =3D vm_create_default(VCPU_ID, 0, guest_code); + vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); ucall_init(vm, NULL); =20 pthread_create(&migration_thread, NULL, migration_worker, 0); =20 for (i =3D 0; !done; i++) { - vcpu_run(vm, VCPU_ID); - TEST_ASSERT(get_ucall(vm, VCPU_ID, NULL) =3D=3D UCALL_SYNC, + vcpu_run(vm, vcpu->id); + TEST_ASSERT(get_ucall(vm, vcpu->id, NULL) =3D=3D UCALL_SYNC, "Guest failed?"); =20 /* --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 5A9C2C433F5 for ; Wed, 4 May 2022 22:53:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379663AbiEDW5P (ORCPT ); Wed, 4 May 2022 18:57:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44358 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379544AbiEDWyZ (ORCPT ); Wed, 4 May 2022 18:54:25 -0400 Received: from mail-pg1-x54a.google.com (mail-pg1-x54a.google.com [IPv6:2607:f8b0:4864:20::54a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0BCAB4C43C for ; Wed, 4 May 2022 15:50:48 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id i188-20020a636dc5000000b003c143f97bc2so1342157pgc.11 for ; Wed, 04 May 2022 15:50:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=ptWOSYHzrTU7MJFi2fvY7/zIwBOxaD6Vf2Bdw3uHKKk=; b=KUe8HCAq6O3QNcnhA9v1kGE+Y6kKKZrWfBiV1a9o4tYJi02H+64BAKUBSIgVbo/KwG Tl4F9QhCdudF1MjPKFiNnoOMphte7KbcTKGzIVnNL20oRTqN+AEIoZYroo/lmSZG/m55 dLiXcj9BxysHLvVKodr+FPdY+bnyJbQJdLPY2Wm9BPuF2aj+s4oydVcXf4oS++ciAOIV WUu6kLPBSOuKq3k4uZohyL5atPRSHQCHEGufKDdsKOTQCk39y3hkfwfH39R9ryghVGx9 s3PDOe9X3DDklsR7qVU/+Hfb807ojPraaxPgP28uswHeBchSwJB54fdOolapGYC5wajP OT0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=ptWOSYHzrTU7MJFi2fvY7/zIwBOxaD6Vf2Bdw3uHKKk=; b=xcKMs0AEt7V2H0AVR/ixtv55CmjfIDEY+iu1xQ65nUK873POAtNbf42XVCElVZP/EL vX7lIOcWJgAbdPigPYKfnbbG18vNurElReKOc8aL31zt7dDgeJdihV9YuGnE5IzO4BQa KdEwMhBLlZ2SYS7UH0s9fowTN4/sksboOsYgOwTiKVv3WYRtGZXTbXTzwfrxKzWO7ZUl NvsmwqGbRDBRajmXxUDpVpAiQZJlOn9V0PIx9vmEGjgHMevK7i/u3j53FsLRAOKFqSn8 1rMAKjoaRaCHJqzfNhUHKzuubYW6RcghOvGP5l6NMWzGIHiegO/LE7JAuqFxgliPLpwx RrMQ== X-Gm-Message-State: AOAM531CnMFRMr1AX2MsMmNvHh1b6s6qdpeBHzub1Zl3GS2fisTiUAXl 5pN4GhMgFvcpPRXCjYg/uI3wNx8TO7U= X-Google-Smtp-Source: ABdhPJyO/YfL1S/F8SR1KX6H4Dvbn1ASMgETH9bl9hc1568+78A7gB6ODpKjdirnFHvLlTlj4JhUYGN06OA= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:903:22ce:b0:15e:bd57:5bec with SMTP id y14-20020a17090322ce00b0015ebd575becmr8645899plg.114.1651704647710; Wed, 04 May 2022 15:50:47 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:50 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-45-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 044/128] KVM: selftests: Convert xss_msr_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert xss_msr_test to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. Note, this is a "functional" change in the sense that the test now creates a vCPU with vcpu_id=3D=3D0 instead of vcpu_id=3D=3D1. The non-zero VCPU_ID was 10= 0% arbitrary and added little to no validation coverage. If testing non-zero vCPU IDs is desirable for generic tests, that can be done in the future by tweaking the VM creation helpers. Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/x86_64/xss_msr_test.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/xss_msr_test.c b/tools/test= ing/selftests/kvm/x86_64/xss_msr_test.c index 3529376747c2..c5672d2949db 100644 --- a/tools/testing/selftests/kvm/x86_64/xss_msr_test.c +++ b/tools/testing/selftests/kvm/x86_64/xss_msr_test.c @@ -12,7 +12,6 @@ #include "kvm_util.h" #include "vmx.h" =20 -#define VCPU_ID 1 #define MSR_BITS 64 =20 #define X86_FEATURE_XSAVES (1<<3) @@ -40,11 +39,12 @@ int main(int argc, char *argv[]) struct kvm_cpuid_entry2 *entry; bool xss_supported =3D false; struct kvm_vm *vm; + struct kvm_vcpu *vcpu; uint64_t xss_val; int i, r; =20 /* Create VM */ - vm =3D vm_create_default(VCPU_ID, 0, 0); + vm =3D vm_create_with_one_vcpu(&vcpu, NULL); =20 if (kvm_get_cpuid_max_basic() >=3D 0xd) { entry =3D kvm_get_supported_cpuid_index(0xd, 1); @@ -55,11 +55,11 @@ int main(int argc, char *argv[]) exit(KSFT_SKIP); } =20 - xss_val =3D vcpu_get_msr(vm, VCPU_ID, MSR_IA32_XSS); + xss_val =3D vcpu_get_msr(vm, vcpu->id, MSR_IA32_XSS); TEST_ASSERT(xss_val =3D=3D 0, "MSR_IA32_XSS should be initialized to zero\n"); =20 - vcpu_set_msr(vm, VCPU_ID, MSR_IA32_XSS, xss_val); + vcpu_set_msr(vm, vcpu->id, MSR_IA32_XSS, xss_val); /* * At present, KVM only supports a guest IA32_XSS value of 0. Verify * that trying to set the guest IA32_XSS to an unsupported value fails. @@ -67,7 +67,7 @@ int main(int argc, char *argv[]) * IA32_XSS is in the KVM_GET_MSR_INDEX_LIST. */ for (i =3D 0; i < MSR_BITS; ++i) { - r =3D _vcpu_set_msr(vm, VCPU_ID, MSR_IA32_XSS, 1ull << i); + r =3D _vcpu_set_msr(vm, vcpu->id, MSR_IA32_XSS, 1ull << i); TEST_ASSERT(r =3D=3D 0 || is_supported_msr(MSR_IA32_XSS), "IA32_XSS was able to be set, but was not found in KVM_GET_MSR_INDE= X_LIST.\n"); } --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 1843FC433FE for ; Wed, 4 May 2022 22:53:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1354592AbiEDW5U (ORCPT ); Wed, 4 May 2022 18:57:20 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44466 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379551AbiEDWy1 (ORCPT ); Wed, 4 May 2022 18:54:27 -0400 Received: from mail-pg1-x54a.google.com (mail-pg1-x54a.google.com [IPv6:2607:f8b0:4864:20::54a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id ABBA94C43C for ; Wed, 4 May 2022 15:50:49 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id h9-20020a631209000000b0039cc31b22aeso1345478pgl.9 for ; Wed, 04 May 2022 15:50:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=GQfPzPtdZfr3rPuoQKIQO/wdm3b/PW1yxF0crxQV5Zs=; b=kC4ouZvYCf46p3Y2P0o/cGpVwFOkvvoFMpskIQzIVlYFFIp2DI+jf+SPulbjsfbzon FJDgUnGIF44Q26D8Gp2pYnDYlvtrt4E/e4YOfvzmJdsYngbG14pEnbUbYGIylkgs0/di 9KwtE3LJBS+Z97eArW2mUF4kOIFVKZdjzVkzKYVLYYqnNbBdPVue7SZAMZq5qYinonyz b6HuhKr736F1cp4ZgFiaIPQZhUM7AHKFptNpaoVYYz7WIIRFt5NaOZcu0nWfaFV67KDp eg12SwnlpQqST7AkBL1qlxBlXSGxer/1B+DiY3x79IJFjixzhBH4Jy6lk09HYU/l2oZg eniA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=GQfPzPtdZfr3rPuoQKIQO/wdm3b/PW1yxF0crxQV5Zs=; b=Ohwd6pPvA9YggF65mme1y0CojnsJxV7sUUCxbkmT34eMQXL68BeGQbPjoae4H/jZXq qwXf1gZNgJZu4pNnt/YA2dEeCpmcKd8X6XuHX/CyJ9vcwaxfkPdoaI5AHr4KaizwcAPA qIb76AfhAhsIM9FRUXWox3fkfi+mCkh6HvsNv3+mbRD4yEYL+cJskYg4oouf9S7Pq38f TEgGYvv8sEnRTlDmwbXfe/KPM52jSGdzEMQ2WKkmzJ5l/ytpsz6Vk1Jsydk8gPwHP1S7 gKbVKxlVvINHTAWJJQcl7AbGCP2OUUETMjMM4jj7Gu1tdlftm3nrBYH/RxEc9+OCoGiS dtog== X-Gm-Message-State: AOAM533lAr40x+exbvQEGefU7vM4Z8KQSBsn78Upec0fXbzi2pRG2j34 yIjdDwFDizYxOTFF00K6+559LmkyGeo= X-Google-Smtp-Source: ABdhPJzjlJsIZtRISyX7XcoGaf2pPor2TUTf37ombDeCId1LYhgAoiVcsqmG+g1J+VBBehYaMPu8qWwu+DU= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:903:22cb:b0:15e:d715:1bd8 with SMTP id y11-20020a17090322cb00b0015ed7151bd8mr863353plg.159.1651704649219; Wed, 04 May 2022 15:50:49 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:51 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-46-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 045/128] KVM: selftests: Convert vmx_preemption_timer_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert vmx_preemption_timer_test to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. Note, this is a "functional" change in the sense that the test now creates a vCPU with vcpu_id=3D=3D0 instead of vcpu_id=3D=3D5. The non-zero VCPU_ID was 100% arbitrary and added little to no validation coverage. If testing non-zero vCPU IDs is desirable for generic tests, that can be done in the future by tweaking the VM creation helpers. Opportunistically use vcpu_run() instead of _vcpu_run(), the test expects KVM_RUN to succeed. Signed-off-by: Sean Christopherson --- .../kvm/x86_64/vmx_preemption_timer_test.c | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/vmx_preemption_timer_test.c= b/tools/testing/selftests/kvm/x86_64/vmx_preemption_timer_test.c index f5b4ae914131..168adc5b2272 100644 --- a/tools/testing/selftests/kvm/x86_64/vmx_preemption_timer_test.c +++ b/tools/testing/selftests/kvm/x86_64/vmx_preemption_timer_test.c @@ -22,7 +22,6 @@ #include "processor.h" #include "vmx.h" =20 -#define VCPU_ID 5 #define PREEMPTION_TIMER_VALUE 100000000ull #define PREEMPTION_TIMER_VALUE_THRESHOLD1 80000000ull =20 @@ -159,6 +158,7 @@ int main(int argc, char *argv[]) struct kvm_regs regs1, regs2; struct kvm_vm *vm; struct kvm_run *run; + struct kvm_vcpu *vcpu; struct kvm_x86_state *state; struct ucall uc; int stage; @@ -175,22 +175,22 @@ int main(int argc, char *argv[]) } =20 /* Create VM */ - vm =3D vm_create_default(VCPU_ID, 0, guest_code); - run =3D vcpu_state(vm, VCPU_ID); + vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); + run =3D vcpu->run; =20 - vcpu_regs_get(vm, VCPU_ID, ®s1); + vcpu_regs_get(vm, vcpu->id, ®s1); =20 vcpu_alloc_vmx(vm, &vmx_pages_gva); - vcpu_args_set(vm, VCPU_ID, 1, vmx_pages_gva); + vcpu_args_set(vm, vcpu->id, 1, vmx_pages_gva); =20 for (stage =3D 1;; stage++) { - _vcpu_run(vm, VCPU_ID); + vcpu_run(vm, vcpu->id); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Stage %d: unexpected exit reason: %u (%s),\n", stage, run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vm, VCPU_ID, &uc)) { + switch (get_ucall(vm, vcpu->id, &uc)) { case UCALL_ABORT: TEST_FAIL("%s at %s:%ld", (const char *)uc.args[0], __FILE__, uc.args[1]); @@ -232,22 +232,22 @@ int main(int argc, char *argv[]) stage, uc.args[4], uc.args[5]); } =20 - state =3D vcpu_save_state(vm, VCPU_ID); + state =3D vcpu_save_state(vm, vcpu->id); memset(®s1, 0, sizeof(regs1)); - vcpu_regs_get(vm, VCPU_ID, ®s1); + vcpu_regs_get(vm, vcpu->id, ®s1); =20 kvm_vm_release(vm); =20 /* Restore state in a new VM. */ - kvm_vm_restart(vm); - vm_vcpu_add(vm, VCPU_ID); - vcpu_set_cpuid(vm, VCPU_ID, kvm_get_supported_cpuid()); - vcpu_load_state(vm, VCPU_ID, state); - run =3D vcpu_state(vm, VCPU_ID); + vcpu =3D vm_recreate_with_one_vcpu(vm); + + vcpu_set_cpuid(vm, vcpu->id, kvm_get_supported_cpuid()); + vcpu_load_state(vm, vcpu->id, state); + run =3D vcpu->run; kvm_x86_state_cleanup(state); =20 memset(®s2, 0, sizeof(regs2)); - vcpu_regs_get(vm, VCPU_ID, ®s2); + vcpu_regs_get(vm, vcpu->id, ®s2); TEST_ASSERT(!memcmp(®s1, ®s2, sizeof(regs2)), "Unexpected register values after vcpu_load_state; rdi: %lx rsi: %l= x", (ulong) regs2.rdi, (ulong) regs2.rsi); --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 3178FC433FE for ; Wed, 4 May 2022 22:53:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379356AbiEDW53 (ORCPT ); Wed, 4 May 2022 18:57:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44550 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379554AbiEDWy3 (ORCPT ); Wed, 4 May 2022 18:54:29 -0400 Received: from mail-yb1-xb49.google.com (mail-yb1-xb49.google.com [IPv6:2607:f8b0:4864:20::b49]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D2B334C796 for ; Wed, 4 May 2022 15:50:51 -0700 (PDT) Received: by mail-yb1-xb49.google.com with SMTP id z15-20020a25bb0f000000b00613388c7d99so2313260ybg.8 for ; Wed, 04 May 2022 15:50:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=41MFWSn9Yl6hbCTo9P/xgE3nL1nRp5u5Ax8EGSNS3To=; b=mg+ni1fHQIFVdmOLrVP23CuhSqYN/GU3SofLUYcUynGXD3F8g73TVY9cUkwGxGXQ7X O7GAbNdcrLm7Jk43X+20FDzfi614UpDzJIf1PNlT0A4crnqswuzB0bis8u3la09kyrsK iF3nR9+xhJIdjt04plGyw0ppp4p4z5w6wSzJWy2aNrz59ZqytaoXgvpjcfXrRq7kW5Bb nYNjJ+jriFhbeDAOxSzPwtwH4/ZqEuM14uiBlc8/4d4nv+fLjJYK/MGfoGNTZJvasRTT RFA2wxGmOCK4kLEJ6CTaDbMZcmBKTZ8FKPrmpfGH0CZiNJ6i8NfWD+t/BnJRDSLj8I6L 9saQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=41MFWSn9Yl6hbCTo9P/xgE3nL1nRp5u5Ax8EGSNS3To=; b=BKfI5nlv0wP7OFob6O35O8ORzROOCQJgMIC46oFr+ALAwHSfUxno//9W9DJrSMGXgc hvHpZ8ekp77HNXguvkcjTx/T6beh/SG8MgEoirPJvg1DKFmwkySYMXgEUcpjZvGBkqd7 c226zyb/vBjUwR9ctf6tUkqV4Hw+84SYYV64HnrMwoULwGw9h1zHurN15lUDPQ6rhABD Lgq9yyEgZeUOQLau1zAD6e+r/xhNPkAfGXmnh4aCQ7Zf12Fqnmq2bdqdlmNYopICyehW cjHYP6uO0kpbT57oa4DFwURwQOzJVVB7VFMCZtE2eeDg2MNYZ3WpDMBdCwvyYoP3zJjJ J+JA== X-Gm-Message-State: AOAM531x3xkcrL3F1nz72ZGpcpDZGqGhwt4YYFPlqYUNmw1iemhII0E3 3xA5exPNIEMJ+HUisfnLKW8BejypA3o= X-Google-Smtp-Source: ABdhPJz1Prw8liqFr+rGy4gY22IlgUJjmHurkwiFzR31oUzeUrVWgVCxwsKeYrJnrxJmuUuZEYM/BhjTHMU= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6902:703:b0:649:3ed0:a132 with SMTP id k3-20020a056902070300b006493ed0a132mr22009656ybt.185.1651704651109; Wed, 04 May 2022 15:50:51 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:52 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-47-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 046/128] KVM: selftests: Convert vmx_pmu_msrs_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert vmx_pmu_msrs_test to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. Signed-off-by: Sean Christopherson --- .../selftests/kvm/x86_64/vmx_pmu_msrs_test.c | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/vmx_pmu_msrs_test.c b/tools= /testing/selftests/kvm/x86_64/vmx_pmu_msrs_test.c index 2454a1f2ca0c..7bb81b7a4825 100644 --- a/tools/testing/selftests/kvm/x86_64/vmx_pmu_msrs_test.c +++ b/tools/testing/selftests/kvm/x86_64/vmx_pmu_msrs_test.c @@ -18,8 +18,6 @@ #include "kvm_util.h" #include "vmx.h" =20 -#define VCPU_ID 0 - #define X86_FEATURE_PDCM (1<<15) #define PMU_CAP_FW_WRITES (1ULL << 13) #define PMU_CAP_LBR_FMT 0x3f @@ -62,6 +60,7 @@ int main(int argc, char *argv[]) struct kvm_cpuid_entry2 *entry_a_0; bool pdcm_supported =3D false; struct kvm_vm *vm; + struct kvm_vcpu *vcpu; int ret; union cpuid10_eax eax; union perf_capabilities host_cap; @@ -70,7 +69,7 @@ int main(int argc, char *argv[]) host_cap.capabilities &=3D (PMU_CAP_FW_WRITES | PMU_CAP_LBR_FMT); =20 /* Create VM */ - vm =3D vm_create_default(VCPU_ID, 0, guest_code); + vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); cpuid =3D kvm_get_supported_cpuid(); =20 if (kvm_get_cpuid_max_basic() >=3D 0xa) { @@ -89,25 +88,25 @@ int main(int argc, char *argv[]) } =20 /* testcase 1, set capabilities when we have PDCM bit */ - vcpu_set_cpuid(vm, VCPU_ID, cpuid); - vcpu_set_msr(vm, 0, MSR_IA32_PERF_CAPABILITIES, PMU_CAP_FW_WRITES); + vcpu_set_cpuid(vm, vcpu->id, cpuid); + vcpu_set_msr(vm, vcpu->id, MSR_IA32_PERF_CAPABILITIES, PMU_CAP_FW_WRITES); =20 /* check capabilities can be retrieved with KVM_GET_MSR */ - ASSERT_EQ(vcpu_get_msr(vm, VCPU_ID, MSR_IA32_PERF_CAPABILITIES), PMU_CAP_= FW_WRITES); + ASSERT_EQ(vcpu_get_msr(vm, vcpu->id, MSR_IA32_PERF_CAPABILITIES), PMU_CAP= _FW_WRITES); =20 /* check whatever we write with KVM_SET_MSR is _not_ modified */ - vcpu_run(vm, VCPU_ID); - ASSERT_EQ(vcpu_get_msr(vm, VCPU_ID, MSR_IA32_PERF_CAPABILITIES), PMU_CAP_= FW_WRITES); + vcpu_run(vm, vcpu->id); + ASSERT_EQ(vcpu_get_msr(vm, vcpu->id, MSR_IA32_PERF_CAPABILITIES), PMU_CAP= _FW_WRITES); =20 /* testcase 2, check valid LBR formats are accepted */ - vcpu_set_msr(vm, 0, MSR_IA32_PERF_CAPABILITIES, 0); - ASSERT_EQ(vcpu_get_msr(vm, VCPU_ID, MSR_IA32_PERF_CAPABILITIES), 0); + vcpu_set_msr(vm, vcpu->id, MSR_IA32_PERF_CAPABILITIES, 0); + ASSERT_EQ(vcpu_get_msr(vm, vcpu->id, MSR_IA32_PERF_CAPABILITIES), 0); =20 - vcpu_set_msr(vm, 0, MSR_IA32_PERF_CAPABILITIES, host_cap.lbr_format); - ASSERT_EQ(vcpu_get_msr(vm, VCPU_ID, MSR_IA32_PERF_CAPABILITIES), (u64)hos= t_cap.lbr_format); + vcpu_set_msr(vm, vcpu->id, MSR_IA32_PERF_CAPABILITIES, host_cap.lbr_forma= t); + ASSERT_EQ(vcpu_get_msr(vm, vcpu->id, MSR_IA32_PERF_CAPABILITIES), (u64)ho= st_cap.lbr_format); =20 /* testcase 3, check invalid LBR format is rejected */ - ret =3D _vcpu_set_msr(vm, 0, MSR_IA32_PERF_CAPABILITIES, PMU_CAP_LBR_FMT); + ret =3D _vcpu_set_msr(vm, vcpu->id, MSR_IA32_PERF_CAPABILITIES, PMU_CAP_L= BR_FMT); TEST_ASSERT(ret =3D=3D 0, "Bad PERF_CAPABILITIES didn't fail."); =20 kvm_vm_free(vm); --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 F411BC433EF for ; Wed, 4 May 2022 22:54:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379701AbiEDW5g (ORCPT ); Wed, 4 May 2022 18:57:36 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44590 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379193AbiEDWya (ORCPT ); Wed, 4 May 2022 18:54:30 -0400 Received: from mail-pg1-x54a.google.com (mail-pg1-x54a.google.com [IPv6:2607:f8b0:4864:20::54a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 329F053715 for ; Wed, 4 May 2022 15:50:53 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id i188-20020a636dc5000000b003c143f97bc2so1342157pgc.11 for ; Wed, 04 May 2022 15:50:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=80lkcYEfhoqxBfEcE++MP+Tb/U9E7Q9mS1AwyxFx1RE=; b=jdKLH6i/+ydHWjbGZ4lK78n6VmKx/qeL9PIwexsWsd0ZV5X/1tnvxnFP+Y2wNfUzAv qjWB/O/6/joiq4B8JUQ6BJN7qgIpKwcFRJSfayokXfR8yqkxN/5zffQOpVoy7GYpd58y JBbJqzJVFvxNGnpnyoTzfBHGhQyXlm8JqlrELphtfjZin+0zyx4iDQjrZedua824QciN YBeyjVtqNPIMpzSTclv07l2iCe17l6BJCP8YGFy6yijQAKm6c10XEnHb74uxS8r16k39 8+c7N7IowpTwWWw1ODQUfWC/UW5GrPDeX0Razzh2mIm3DA/NZmX4B0tK+ImlBc2/at+R lsgQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=80lkcYEfhoqxBfEcE++MP+Tb/U9E7Q9mS1AwyxFx1RE=; b=Aaw3EuajixNA47raX8CZqL0UN94igLyvpPjWTOartophlMpGQqP/G7ozUKGmtg9nRp 5TOxtZx/ebt63o3W0cr56UZRMDZdMPFU8MQsNOv0tphYozDZewylf5TLeaBZZsHe1uKq KuN6dpLuNPkcKSo8woweSI+tCIWR+OS+wnk0FC0TbsqEhLidRnqDNwmLEwXvV+eH/908 /9InQJIdxGUiYBf4CBU3RaUr7vScdxMoh1S8qGdSVd5UXrDrQXDIqP5sIPxg049pkIWC O0Tna7vBI18gNkQVUYKcTXbdjMicE2i/RJo2TDwby4+hy1QE2DU6AHaPu2bEqL0j2z48 SnpQ== X-Gm-Message-State: AOAM531+bdIhQrMLZU977mli5Juf5bc4tihSABAFWqj7xupWepeW1Y/o gp2Bq3n6jnykTqiClX1erNhPsRMG8p4= X-Google-Smtp-Source: ABdhPJxZdvuPX1tmsxCg2PwtDxpRY+9r0crHOamRUHJC+9pA/0PAJiDZcep7Ytgm/Tv3mBP2nHpv57DPYX4= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a65:6b92:0:b0:39c:c97b:1b57 with SMTP id d18-20020a656b92000000b0039cc97b1b57mr20036507pgw.517.1651704652858; Wed, 04 May 2022 15:50:52 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:53 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-48-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 047/128] KVM: selftests: Convert vmx_set_nested_state_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert vmx_set_nested_state_test to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. Note, this is a "functional" change in the sense that the test now creates a vCPU with vcpu_id=3D=3D0 instead of vcpu_id=3D=3D5. The non-zero VCPU_ID was 100% arbitrary and added little to no validation coverage. If testing non-zero vCPU IDs is desirable for generic tests, that can be done in the future by tweaking the VM creation helpers. Signed-off-by: Sean Christopherson --- .../kvm/x86_64/vmx_set_nested_state_test.c | 86 +++++++++---------- 1 file changed, 43 insertions(+), 43 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/vmx_set_nested_state_test.c= b/tools/testing/selftests/kvm/x86_64/vmx_set_nested_state_test.c index af3b60eb35ec..de38f0e68153 100644 --- a/tools/testing/selftests/kvm/x86_64/vmx_set_nested_state_test.c +++ b/tools/testing/selftests/kvm/x86_64/vmx_set_nested_state_test.c @@ -23,38 +23,37 @@ * changes this should be updated. */ #define VMCS12_REVISION 0x11e57ed0 -#define VCPU_ID 5 =20 bool have_evmcs; =20 -void test_nested_state(struct kvm_vm *vm, struct kvm_nested_state *state) +void test_nested_state(struct kvm_vcpu *vcpu, struct kvm_nested_state *sta= te) { - vcpu_nested_state_set(vm, VCPU_ID, state); + vcpu_nested_state_set(vcpu->vm, vcpu->id, state); } =20 -void test_nested_state_expect_errno(struct kvm_vm *vm, +void test_nested_state_expect_errno(struct kvm_vcpu *vcpu, struct kvm_nested_state *state, int expected_errno) { int rv; =20 - rv =3D __vcpu_nested_state_set(vm, VCPU_ID, state); + rv =3D __vcpu_nested_state_set(vcpu->vm, vcpu->id, state); TEST_ASSERT(rv =3D=3D -1 && errno =3D=3D expected_errno, "Expected %s (%d) from vcpu_nested_state_set but got rv: %i errno: %s (%= d)", strerror(expected_errno), expected_errno, rv, strerror(errno), errno); } =20 -void test_nested_state_expect_einval(struct kvm_vm *vm, +void test_nested_state_expect_einval(struct kvm_vcpu *vcpu, struct kvm_nested_state *state) { - test_nested_state_expect_errno(vm, state, EINVAL); + test_nested_state_expect_errno(vcpu, state, EINVAL); } =20 -void test_nested_state_expect_efault(struct kvm_vm *vm, +void test_nested_state_expect_efault(struct kvm_vcpu *vcpu, struct kvm_nested_state *state) { - test_nested_state_expect_errno(vm, state, EFAULT); + test_nested_state_expect_errno(vcpu, state, EFAULT); } =20 void set_revision_id_for_vmcs12(struct kvm_nested_state *state, @@ -86,7 +85,7 @@ void set_default_vmx_state(struct kvm_nested_state *state= , int size) set_revision_id_for_vmcs12(state, VMCS12_REVISION); } =20 -void test_vmx_nested_state(struct kvm_vm *vm) +void test_vmx_nested_state(struct kvm_vcpu *vcpu) { /* Add a page for VMCS12. */ const int state_sz =3D sizeof(struct kvm_nested_state) + getpagesize(); @@ -96,14 +95,14 @@ void test_vmx_nested_state(struct kvm_vm *vm) /* The format must be set to 0. 0 for VMX, 1 for SVM. */ set_default_vmx_state(state, state_sz); state->format =3D 1; - test_nested_state_expect_einval(vm, state); + test_nested_state_expect_einval(vcpu, state); =20 /* * We cannot virtualize anything if the guest does not have VMX * enabled. */ set_default_vmx_state(state, state_sz); - test_nested_state_expect_einval(vm, state); + test_nested_state_expect_einval(vcpu, state); =20 /* * We cannot virtualize anything if the guest does not have VMX @@ -112,17 +111,17 @@ void test_vmx_nested_state(struct kvm_vm *vm) */ set_default_vmx_state(state, state_sz); state->hdr.vmx.vmxon_pa =3D -1ull; - test_nested_state_expect_einval(vm, state); + test_nested_state_expect_einval(vcpu, state); =20 state->hdr.vmx.vmcs12_pa =3D -1ull; state->flags =3D KVM_STATE_NESTED_EVMCS; - test_nested_state_expect_einval(vm, state); + test_nested_state_expect_einval(vcpu, state); =20 state->flags =3D 0; - test_nested_state(vm, state); + test_nested_state(vcpu, state); =20 /* Enable VMX in the guest CPUID. */ - vcpu_set_cpuid(vm, VCPU_ID, kvm_get_supported_cpuid()); + vcpu_set_cpuid(vcpu->vm, vcpu->id, kvm_get_supported_cpuid()); =20 /* * Setting vmxon_pa =3D=3D -1ull and vmcs_pa =3D=3D -1ull exits early wit= hout @@ -133,34 +132,34 @@ void test_vmx_nested_state(struct kvm_vm *vm) set_default_vmx_state(state, state_sz); state->hdr.vmx.vmxon_pa =3D -1ull; state->hdr.vmx.vmcs12_pa =3D -1ull; - test_nested_state_expect_einval(vm, state); + test_nested_state_expect_einval(vcpu, state); =20 state->flags &=3D KVM_STATE_NESTED_EVMCS; if (have_evmcs) { - test_nested_state_expect_einval(vm, state); - vcpu_enable_evmcs(vm, VCPU_ID); + test_nested_state_expect_einval(vcpu, state); + vcpu_enable_evmcs(vcpu->vm, vcpu->id); } - test_nested_state(vm, state); + test_nested_state(vcpu, state); =20 /* It is invalid to have vmxon_pa =3D=3D -1ull and SMM flags non-zero. */ state->hdr.vmx.smm.flags =3D 1; - test_nested_state_expect_einval(vm, state); + test_nested_state_expect_einval(vcpu, state); =20 /* Invalid flags are rejected. */ set_default_vmx_state(state, state_sz); state->hdr.vmx.flags =3D ~0; - test_nested_state_expect_einval(vm, state); + test_nested_state_expect_einval(vcpu, state); =20 /* It is invalid to have vmxon_pa =3D=3D -1ull and vmcs_pa !=3D -1ull. */ set_default_vmx_state(state, state_sz); state->hdr.vmx.vmxon_pa =3D -1ull; state->flags =3D 0; - test_nested_state_expect_einval(vm, state); + test_nested_state_expect_einval(vcpu, state); =20 /* It is invalid to have vmxon_pa set to a non-page aligned address. */ set_default_vmx_state(state, state_sz); state->hdr.vmx.vmxon_pa =3D 1; - test_nested_state_expect_einval(vm, state); + test_nested_state_expect_einval(vcpu, state); =20 /* * It is invalid to have KVM_STATE_NESTED_SMM_GUEST_MODE and @@ -170,7 +169,7 @@ void test_vmx_nested_state(struct kvm_vm *vm) state->flags =3D KVM_STATE_NESTED_GUEST_MODE | KVM_STATE_NESTED_RUN_PENDING; state->hdr.vmx.smm.flags =3D KVM_STATE_NESTED_SMM_GUEST_MODE; - test_nested_state_expect_einval(vm, state); + test_nested_state_expect_einval(vcpu, state); =20 /* * It is invalid to have any of the SMM flags set besides: @@ -180,13 +179,13 @@ void test_vmx_nested_state(struct kvm_vm *vm) set_default_vmx_state(state, state_sz); state->hdr.vmx.smm.flags =3D ~(KVM_STATE_NESTED_SMM_GUEST_MODE | KVM_STATE_NESTED_SMM_VMXON); - test_nested_state_expect_einval(vm, state); + test_nested_state_expect_einval(vcpu, state); =20 /* Outside SMM, SMM flags must be zero. */ set_default_vmx_state(state, state_sz); state->flags =3D 0; state->hdr.vmx.smm.flags =3D KVM_STATE_NESTED_SMM_GUEST_MODE; - test_nested_state_expect_einval(vm, state); + test_nested_state_expect_einval(vcpu, state); =20 /* * Size must be large enough to fit kvm_nested_state and vmcs12 @@ -195,13 +194,13 @@ void test_vmx_nested_state(struct kvm_vm *vm) set_default_vmx_state(state, state_sz); state->size =3D sizeof(*state); state->flags =3D 0; - test_nested_state_expect_einval(vm, state); + test_nested_state_expect_einval(vcpu, state); =20 set_default_vmx_state(state, state_sz); state->size =3D sizeof(*state); state->flags =3D 0; state->hdr.vmx.vmcs12_pa =3D -1; - test_nested_state(vm, state); + test_nested_state(vcpu, state); =20 /* * KVM_SET_NESTED_STATE succeeds with invalid VMCS @@ -209,7 +208,7 @@ void test_vmx_nested_state(struct kvm_vm *vm) */ set_default_vmx_state(state, state_sz); state->flags =3D 0; - test_nested_state(vm, state); + test_nested_state(vcpu, state); =20 /* Invalid flags are rejected, even if no VMCS loaded. */ set_default_vmx_state(state, state_sz); @@ -217,13 +216,13 @@ void test_vmx_nested_state(struct kvm_vm *vm) state->flags =3D 0; state->hdr.vmx.vmcs12_pa =3D -1; state->hdr.vmx.flags =3D ~0; - test_nested_state_expect_einval(vm, state); + test_nested_state_expect_einval(vcpu, state); =20 /* vmxon_pa cannot be the same address as vmcs_pa. */ set_default_vmx_state(state, state_sz); state->hdr.vmx.vmxon_pa =3D 0; state->hdr.vmx.vmcs12_pa =3D 0; - test_nested_state_expect_einval(vm, state); + test_nested_state_expect_einval(vcpu, state); =20 /* * Test that if we leave nesting the state reflects that when we get @@ -233,8 +232,8 @@ void test_vmx_nested_state(struct kvm_vm *vm) state->hdr.vmx.vmxon_pa =3D -1ull; state->hdr.vmx.vmcs12_pa =3D -1ull; state->flags =3D 0; - test_nested_state(vm, state); - vcpu_nested_state_get(vm, VCPU_ID, state); + test_nested_state(vcpu, state); + vcpu_nested_state_get(vcpu->vm, vcpu->id, state); TEST_ASSERT(state->size >=3D sizeof(*state) && state->size <=3D state_sz, "Size must be between %ld and %d. The size returned was %d.", sizeof(*state), state_sz, state->size); @@ -244,7 +243,7 @@ void test_vmx_nested_state(struct kvm_vm *vm) free(state); } =20 -void disable_vmx(struct kvm_vm *vm) +void disable_vmx(struct kvm_vcpu *vcpu) { struct kvm_cpuid2 *cpuid =3D kvm_get_supported_cpuid(); int i; @@ -256,7 +255,7 @@ void disable_vmx(struct kvm_vm *vm) TEST_ASSERT(i !=3D cpuid->nent, "CPUID function 1 not found"); =20 cpuid->entries[i].ecx &=3D ~CPUID_VMX; - vcpu_set_cpuid(vm, VCPU_ID, cpuid); + vcpu_set_cpuid(vcpu->vm, vcpu->id, cpuid); cpuid->entries[i].ecx |=3D CPUID_VMX; } =20 @@ -264,6 +263,7 @@ int main(int argc, char *argv[]) { struct kvm_vm *vm; struct kvm_nested_state state; + struct kvm_vcpu *vcpu; =20 have_evmcs =3D kvm_check_cap(KVM_CAP_HYPERV_ENLIGHTENED_VMCS); =20 @@ -278,20 +278,20 @@ int main(int argc, char *argv[]) */ nested_vmx_check_supported(); =20 - vm =3D vm_create_default(VCPU_ID, 0, 0); + vm =3D vm_create_with_one_vcpu(&vcpu, NULL); =20 /* * First run tests with VMX disabled to check error handling. */ - disable_vmx(vm); + disable_vmx(vcpu); =20 /* Passing a NULL kvm_nested_state causes a EFAULT. */ - test_nested_state_expect_efault(vm, NULL); + test_nested_state_expect_efault(vcpu, NULL); =20 /* 'size' cannot be smaller than sizeof(kvm_nested_state). */ set_default_state(&state); state.size =3D 0; - test_nested_state_expect_einval(vm, &state); + test_nested_state_expect_einval(vcpu, &state); =20 /* * Setting the flags 0xf fails the flags check. The only flags that @@ -302,7 +302,7 @@ int main(int argc, char *argv[]) */ set_default_state(&state); state.flags =3D 0xf; - test_nested_state_expect_einval(vm, &state); + test_nested_state_expect_einval(vcpu, &state); =20 /* * If KVM_STATE_NESTED_RUN_PENDING is set then @@ -310,9 +310,9 @@ int main(int argc, char *argv[]) */ set_default_state(&state); state.flags =3D KVM_STATE_NESTED_RUN_PENDING; - test_nested_state_expect_einval(vm, &state); + test_nested_state_expect_einval(vcpu, &state); =20 - test_vmx_nested_state(vm); + test_vmx_nested_state(vcpu); =20 kvm_vm_free(vm); return 0; --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 9FAC1C433F5 for ; Wed, 4 May 2022 22:54:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379727AbiEDW5l (ORCPT ); Wed, 4 May 2022 18:57:41 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44658 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379161AbiEDWyc (ORCPT ); Wed, 4 May 2022 18:54:32 -0400 Received: from mail-pl1-x64a.google.com (mail-pl1-x64a.google.com [IPv6:2607:f8b0:4864:20::64a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 18D9B53722 for ; Wed, 4 May 2022 15:50:55 -0700 (PDT) Received: by mail-pl1-x64a.google.com with SMTP id y14-20020a1709027c8e00b0015906c1ea31so1363411pll.20 for ; Wed, 04 May 2022 15:50:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=n5OYPLxga2WxpiMrHoDu5Bg4CestG48JEuh/J9PdNW0=; b=Ft/ZM2zX1FPC/Db1m4EdNOLShY0cl4fvf2h6qxSswC7vLN5Xcg2QmEM0L+ZwvLy/A3 d4N/X8UU8cPoFCNao0OUwEf3/UFTQxgY9s5x+xEmwNosMKEuzeg9yObVibetC+WaGG4K WFgpDduIzOrY+4wb+doNb+Gxo6qzHZQZkiuEdAXu7cQXamssG9In7HegyVRjc/JGxXH6 3jQh75Ys3mRU5RJJSQlR2gAKvyjJvP71HpojdxMjGmV1bsRyahUyFJ968ZWjkK2ztgva lmmZ1Yv0BBRtpxihxL0kzQqbPRE/VpbdybPi3IWM3lVB1H9c/gQbrBDYlbTuXdG9jKcU huPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=n5OYPLxga2WxpiMrHoDu5Bg4CestG48JEuh/J9PdNW0=; b=ESzkKxJx5V5jASOF2BlJwTto9XLZIuOAdozO5SP5lYThYvqEm4UVs7S2b417t9PLtR Hz6vhnk9A1ljLXiDmENudLjFJmboFfJInglgmtPjtNJe+GmxwgodLFKtecA4AZ2RinlX fArInInCzIPWP0siK4qCX17MBlFTtDhABMRPBbNMMnseJ6v7YBSRjj3TdrXK5xqWjL8V OCa7/u0Q5Aj2dvAmG3yuUaud1HUu3EmwbAh8z0HOGR+B4lDLSCmkT962Uml+WzBaAWdK P/CxAm3CFZWWEqFwcT65MwTTBMyz96ZRPfDRbnTv+Mfis1SUoYcpCozAqH5MfbloBZ51 +bbA== X-Gm-Message-State: AOAM530Pk3XW8FNmnryp8amKKq6bBMaqDu/HcyBlQYnDrNxl8xGCV9eh kYbYx4PmZa0+qGnHF2E5oT2y6M3sJKg= X-Google-Smtp-Source: ABdhPJxW33i9KdZKEyKsXS1sguRbRjvVFjvS+WfQA2xbnn66YROjk0TWvV4lrkzSPoH54RIX/UA78ixPdaU= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a63:5551:0:b0:3ab:84c3:1a0 with SMTP id f17-20020a635551000000b003ab84c301a0mr20088916pgm.604.1651704654614; Wed, 04 May 2022 15:50:54 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:54 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-49-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 048/128] KVM: selftests: Convert vmx_tsc_adjust_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert vmx_tsc_adjust_test to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. Note, this is a "functional" change in the sense that the test now creates a vCPU with vcpu_id=3D=3D0 instead of vcpu_id=3D=3D5. The non-zero VCPU_ID was 100% arbitrary and added little to no validation coverage. If testing non-zero vCPU IDs is desirable for generic tests, that can be done in the future by tweaking the VM creation helpers. Signed-off-by: Sean Christopherson --- .../selftests/kvm/x86_64/vmx_tsc_adjust_test.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/vmx_tsc_adjust_test.c b/too= ls/testing/selftests/kvm/x86_64/vmx_tsc_adjust_test.c index 19b35c607dc6..29699d7c16c3 100644 --- a/tools/testing/selftests/kvm/x86_64/vmx_tsc_adjust_test.c +++ b/tools/testing/selftests/kvm/x86_64/vmx_tsc_adjust_test.c @@ -32,8 +32,6 @@ #define MSR_IA32_TSC_ADJUST 0x3b #endif =20 -#define VCPU_ID 5 - #define TSC_ADJUST_VALUE (1ll << 32) #define TSC_OFFSET_VALUE -(1ll << 48) =20 @@ -127,26 +125,27 @@ static void report(int64_t val) int main(int argc, char *argv[]) { vm_vaddr_t vmx_pages_gva; + struct kvm_vcpu *vcpu; =20 nested_vmx_check_supported(); =20 - vm =3D vm_create_default(VCPU_ID, 0, (void *) l1_guest_code); + vm =3D vm_create_with_one_vcpu(&vcpu, (void *) l1_guest_code); =20 /* Allocate VMX pages and shared descriptors (vmx_pages). */ vcpu_alloc_vmx(vm, &vmx_pages_gva); - vcpu_args_set(vm, VCPU_ID, 1, vmx_pages_gva); + vcpu_args_set(vm, vcpu->id, 1, vmx_pages_gva); =20 for (;;) { - volatile struct kvm_run *run =3D vcpu_state(vm, VCPU_ID); + volatile struct kvm_run *run =3D vcpu->run; struct ucall uc; =20 - vcpu_run(vm, VCPU_ID); + vcpu_run(vm, vcpu->id); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Got exit_reason other than KVM_EXIT_IO: %u (%s)\n", run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vm, VCPU_ID, &uc)) { + switch (get_ucall(vm, vcpu->id, &uc)) { case UCALL_ABORT: TEST_FAIL("%s", (const char *)uc.args[0]); /* NOT REACHED */ --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 1DF09C433F5 for ; Wed, 4 May 2022 22:56:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379410AbiEDW6y (ORCPT ); Wed, 4 May 2022 18:58:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44722 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379291AbiEDWye (ORCPT ); Wed, 4 May 2022 18:54:34 -0400 Received: from mail-pj1-x1049.google.com (mail-pj1-x1049.google.com [IPv6:2607:f8b0:4864:20::1049]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D148553A43 for ; Wed, 4 May 2022 15:50:56 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id m6-20020a17090a730600b001d9041534e4so1076854pjk.7 for ; Wed, 04 May 2022 15:50:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=4VVsw8gfnhvdeThEwym30ZhZrqw6wWwbkKDRVxddGiA=; b=o4K0N/Po8AFLVlNIvkHwSP+8V9VsuB5/At8BtBHc5xiUi+L+PG04DQlEfbmlu11Otr 6t7MhEKCevD9DGBe5b7NobwwDc2+sY7iy28t03UE6ObLba7HceXyh69nRc+mpLFdDj+T q4yOeP/0cmwTJKOa3XOYshChB+jgVuxi5tFqwPMdIZGDXf/8LH23qTPIikNpulnVUW12 fJTl1GfEDktdN2yB/18Ar3guGI5C1jo70512mO8pIjhocDCyEmEv48lUExGVW+DMdAFl mpWJd/hoLATzsa7IcSbp1FuUHnRKVOWi9JswsJYnjZIQ+wFD/h+UAU+Ah8O8ys0+E4Jp XGPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=4VVsw8gfnhvdeThEwym30ZhZrqw6wWwbkKDRVxddGiA=; b=nMwaMXu4sFhoRfeKgtuVLtHRnuNicKj6G63D9xJ39w0ezpD2yPADo5Gm5POqyxj+th kpSikuIhmjL0w5B2JJrGsg1zIsUJcyPuUzSmoEMhOSS3//mrLpoSb5HcUWO/Kv57Pkg1 XcVFtRg7YySa9gbxyXm4QiilxmkrCDLepfajNj9uABHfjSDIVuvACQkVfvjzrJietXnd 4mlfyS9PC0w8v4mjZKz2EMVxAoro/w54uR9m9bG+mpDzSqLZT7VLqB5Q5K/Rp1MYsI0f yaigpnthdT3fO+ns/vc5tzYVU5K1Bn3gMWrxIsXJhmXDANfEXe/qXtrlBFCBrRCA4RY0 mrAA== X-Gm-Message-State: AOAM530/OGxdfOdlZ7ksd4leS1VoIbtyT7jGvgalGqRDM6MuM+YG9OXw Do4X++gmvaon4GNlczRDAa2M958gg2Q= X-Google-Smtp-Source: ABdhPJwWSP17Q1MDgVqXdyDw1FJQj7E5Znkn48dx/DArZ7lMT/ah0bnj0Fo/My1FCnFK7+FozEtrv+q1XfA= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:1784:b0:50d:d8cb:7a4f with SMTP id s4-20020a056a00178400b0050dd8cb7a4fmr19712239pfg.23.1651704656268; Wed, 04 May 2022 15:50:56 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:55 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-50-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 049/128] KVM: selftests: Convert mmu_role_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert mmu_role_test to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. Note, this is a "functional" change in the sense that the test now creates a vCPU with vcpu_id=3D=3D0 instead of vcpu_id=3D=3D1. The non-zero VCPU_ID was 100% arbitrary and added little to no validation coverage. If testing non-zero vCPU IDs is desirable for generic tests, that can be done in the future by tweaking the VM creation helpers. Opportunistically use vcpu_run() instead of _vcpu_run() plus an open coded assert that KVM_RUN succeeded. Signed-off-by: Sean Christopherson --- .../selftests/kvm/x86_64/mmu_role_test.c | 20 ++++++++----------- 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/mmu_role_test.c b/tools/tes= ting/selftests/kvm/x86_64/mmu_role_test.c index da2325fcad87..809aa0153cee 100644 --- a/tools/testing/selftests/kvm/x86_64/mmu_role_test.c +++ b/tools/testing/selftests/kvm/x86_64/mmu_role_test.c @@ -3,8 +3,6 @@ #include "kvm_util.h" #include "processor.h" =20 -#define VCPU_ID 1 - #define MMIO_GPA 0x100000000ull =20 static void guest_code(void) @@ -25,22 +23,21 @@ static void guest_pf_handler(struct ex_regs *regs) static void mmu_role_test(u32 *cpuid_reg, u32 evil_cpuid_val) { u32 good_cpuid_val =3D *cpuid_reg; + struct kvm_vcpu *vcpu; struct kvm_run *run; struct kvm_vm *vm; uint64_t cmd; - int r; =20 /* Create VM */ - vm =3D vm_create_default(VCPU_ID, 0, guest_code); - run =3D vcpu_state(vm, VCPU_ID); + vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); + run =3D vcpu->run; =20 /* Map 1gb page without a backing memlot. */ __virt_pg_map(vm, MMIO_GPA, MMIO_GPA, X86_PAGE_SIZE_1G); =20 - r =3D _vcpu_run(vm, VCPU_ID); + vcpu_run(vm, vcpu->id); =20 /* Guest access to the 1gb page should trigger MMIO. */ - TEST_ASSERT(r =3D=3D 0, "vcpu_run failed: %d\n", r); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_MMIO, "Unexpected exit reason: %u (%s), expected MMIO exit (1gb page w/o m= emslot)\n", run->exit_reason, exit_reason_str(run->exit_reason)); @@ -57,7 +54,7 @@ static void mmu_role_test(u32 *cpuid_reg, u32 evil_cpuid_= val) * returns the struct that contains the entry being modified. Eww. */ *cpuid_reg =3D evil_cpuid_val; - vcpu_set_cpuid(vm, VCPU_ID, kvm_get_supported_cpuid()); + vcpu_set_cpuid(vm, vcpu->id, kvm_get_supported_cpuid()); =20 /* * Add a dummy memslot to coerce KVM into bumping the MMIO generation. @@ -70,13 +67,12 @@ static void mmu_role_test(u32 *cpuid_reg, u32 evil_cpui= d_val) =20 /* Set up a #PF handler to eat the RSVD #PF and signal all done! */ vm_init_descriptor_tables(vm); - vcpu_init_descriptor_tables(vm, VCPU_ID); + vcpu_init_descriptor_tables(vm, vcpu->id); vm_install_exception_handler(vm, PF_VECTOR, guest_pf_handler); =20 - r =3D _vcpu_run(vm, VCPU_ID); - TEST_ASSERT(r =3D=3D 0, "vcpu_run failed: %d\n", r); + vcpu_run(vm, vcpu->id); =20 - cmd =3D get_ucall(vm, VCPU_ID, NULL); + cmd =3D get_ucall(vm, vcpu->id, NULL); TEST_ASSERT(cmd =3D=3D UCALL_DONE, "Unexpected guest exit, exit_reason=3D%s, ucall.cmd =3D %lu\n", exit_reason_str(run->exit_reason), cmd); --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 6EB79C433EF for ; Wed, 4 May 2022 22:55:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379687AbiEDW6s (ORCPT ); Wed, 4 May 2022 18:58:48 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44754 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379293AbiEDWyf (ORCPT ); Wed, 4 May 2022 18:54:35 -0400 Received: from mail-pl1-x64a.google.com (mail-pl1-x64a.google.com [IPv6:2607:f8b0:4864:20::64a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3C13553722 for ; Wed, 4 May 2022 15:50:58 -0700 (PDT) Received: by mail-pl1-x64a.google.com with SMTP id u8-20020a170903124800b0015195a5826cso1375925plh.4 for ; Wed, 04 May 2022 15:50:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=mMUKfkcQC6L2kdy7xknNE50/OMw8bniryDEa4z4qs9I=; b=fdx3M/7h7rkKdXdafQub7PqbXrtTqfTizk3A2viNauhZy47P+qkfQ8R2DMgP9BcCSO ayKId/0ecnEfanpZXRo73yGeoyYJOa8n98JXTjiLspPc0bHLCu5owMfIlEBKfaESxvxV VgjmIRK2T9wqT4Cy+pnsos1VW3F+vQWrOpA5604jKuikkkCP7GwhN47gQJv+AjdANhBI bvEpVf8L8EcRK34TdKBhzjZk/gqpqpDf6KjcUbFLAhXsROeWapc6yc8VDL7VZHsv6vx1 NHtv0+PaCIV+qRnKjwPOv14GRNAZpCpXdtopryDdX9GSMn9zlBsFTk8EyrpmzutnkcPv Rujw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=mMUKfkcQC6L2kdy7xknNE50/OMw8bniryDEa4z4qs9I=; b=eDzgm/n61Aw7G/n7c1NBd9/LW27x6x5CKWJfzB8ZUpmEJTVwoFbEuFO8NMYKXhciTc ZIxWKQPSy29Ul9LxJsU+coo3DNIQpGr6OOUfXn+JULF54sdIIu1ChmZ6/WxgyUb/mZrV Eihcf4rXAE7wMn3nHp8oPrv1LQDLmrv/cBQetLzMYmxhsDA0hh5YSgfDN3AtteDraOYE y/TURymh/vHmJeI7EPvD6u/p18sRS8gKTH5Z50RUowT8sWKbXB20+Dko7KSvP+5OLL3H KFpsXMhlw1Oyteh+79UnIOE88MQmk7V57vroidNMe5rXshj7JFeqwyajPoUSg2MtMudD siEg== X-Gm-Message-State: AOAM5332MES8LIwfjkBo5XgwJhYIrVw+0Nlp+Fd4ZJZKnZVPqvQaO8bh sx7iYY1tlNqchjv0QJsKvL/EjL6Sdz4= X-Google-Smtp-Source: ABdhPJyFxNz4GZ9ZUvS+BVWwN7Twas5+Rzy0ZUqZiCQgzx8MTRo31AnX4dAZ616o1972u9HeX7D0wTFNVCo= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:903:1105:b0:154:c850:860b with SMTP id n5-20020a170903110500b00154c850860bmr24320747plh.12.1651704657767; Wed, 04 May 2022 15:50:57 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:56 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-51-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 050/128] KVM: selftests: Convert pmu_event_filter_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert pmu_event_filter_test to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. Rename run_vm_to_sync() to run_vcpu_to_sync() accordingly. Signed-off-by: Sean Christopherson --- .../kvm/x86_64/pmu_event_filter_test.c | 69 ++++++++++--------- 1 file changed, 36 insertions(+), 33 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/pmu_event_filter_test.c b/t= ools/testing/selftests/kvm/x86_64/pmu_event_filter_test.c index 93af4ad728d8..535af2d2ad59 100644 --- a/tools/testing/selftests/kvm/x86_64/pmu_event_filter_test.c +++ b/tools/testing/selftests/kvm/x86_64/pmu_event_filter_test.c @@ -49,7 +49,6 @@ union cpuid10_ebx { /* Oddly, this isn't in perf_event.h. */ #define ARCH_PERFMON_BRANCHES_RETIRED 5 =20 -#define VCPU_ID 0 #define NUM_BRANCHES 42 =20 /* @@ -173,17 +172,17 @@ static void amd_guest_code(void) * Run the VM to the next GUEST_SYNC(value), and return the value passed * to the sync. Any other exit from the guest is fatal. */ -static uint64_t run_vm_to_sync(struct kvm_vm *vm) +static uint64_t run_vcpu_to_sync(struct kvm_vcpu *vcpu) { - struct kvm_run *run =3D vcpu_state(vm, VCPU_ID); + struct kvm_run *run =3D vcpu->run; struct ucall uc; =20 - vcpu_run(vm, VCPU_ID); + vcpu_run(vcpu->vm, vcpu->id); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Exit_reason other than KVM_EXIT_IO: %u (%s)\n", run->exit_reason, exit_reason_str(run->exit_reason)); - get_ucall(vm, VCPU_ID, &uc); + get_ucall(vcpu->vm, vcpu->id, &uc); TEST_ASSERT(uc.cmd =3D=3D UCALL_SYNC, "Received ucall other than UCALL_SYNC: %lu", uc.cmd); return uc.args[1]; @@ -197,13 +196,13 @@ static uint64_t run_vm_to_sync(struct kvm_vm *vm) * a sanity check and then GUEST_SYNC(success). In the case of failure, * the behavior of the guest on resumption is undefined. */ -static bool sanity_check_pmu(struct kvm_vm *vm) +static bool sanity_check_pmu(struct kvm_vcpu *vcpu) { bool success; =20 - vm_install_exception_handler(vm, GP_VECTOR, guest_gp_handler); - success =3D run_vm_to_sync(vm); - vm_install_exception_handler(vm, GP_VECTOR, NULL); + vm_install_exception_handler(vcpu->vm, GP_VECTOR, guest_gp_handler); + success =3D run_vcpu_to_sync(vcpu); + vm_install_exception_handler(vcpu->vm, GP_VECTOR, NULL); =20 return success; } @@ -254,9 +253,9 @@ static struct kvm_pmu_event_filter *remove_event(struct= kvm_pmu_event_filter *f, return f; } =20 -static void test_without_filter(struct kvm_vm *vm) +static void test_without_filter(struct kvm_vcpu *vcpu) { - uint64_t count =3D run_vm_to_sync(vm); + uint64_t count =3D run_vcpu_to_sync(vcpu); =20 if (count !=3D NUM_BRANCHES) pr_info("%s: Branch instructions retired =3D %lu (expected %u)\n", @@ -264,17 +263,17 @@ static void test_without_filter(struct kvm_vm *vm) TEST_ASSERT(count, "Allowed PMU event is not counting"); } =20 -static uint64_t test_with_filter(struct kvm_vm *vm, +static uint64_t test_with_filter(struct kvm_vcpu *vcpu, struct kvm_pmu_event_filter *f) { - vm_ioctl(vm, KVM_SET_PMU_EVENT_FILTER, (void *)f); - return run_vm_to_sync(vm); + vm_ioctl(vcpu->vm, KVM_SET_PMU_EVENT_FILTER, (void *)f); + return run_vcpu_to_sync(vcpu); } =20 -static void test_member_deny_list(struct kvm_vm *vm) +static void test_member_deny_list(struct kvm_vcpu *vcpu) { struct kvm_pmu_event_filter *f =3D event_filter(KVM_PMU_EVENT_DENY); - uint64_t count =3D test_with_filter(vm, f); + uint64_t count =3D test_with_filter(vcpu, f); =20 free(f); if (count) @@ -283,10 +282,10 @@ static void test_member_deny_list(struct kvm_vm *vm) TEST_ASSERT(!count, "Disallowed PMU Event is counting"); } =20 -static void test_member_allow_list(struct kvm_vm *vm) +static void test_member_allow_list(struct kvm_vcpu *vcpu) { struct kvm_pmu_event_filter *f =3D event_filter(KVM_PMU_EVENT_ALLOW); - uint64_t count =3D test_with_filter(vm, f); + uint64_t count =3D test_with_filter(vcpu, f); =20 free(f); if (count !=3D NUM_BRANCHES) @@ -295,14 +294,14 @@ static void test_member_allow_list(struct kvm_vm *vm) TEST_ASSERT(count, "Allowed PMU event is not counting"); } =20 -static void test_not_member_deny_list(struct kvm_vm *vm) +static void test_not_member_deny_list(struct kvm_vcpu *vcpu) { struct kvm_pmu_event_filter *f =3D event_filter(KVM_PMU_EVENT_DENY); uint64_t count; =20 remove_event(f, INTEL_BR_RETIRED); remove_event(f, AMD_ZEN_BR_RETIRED); - count =3D test_with_filter(vm, f); + count =3D test_with_filter(vcpu, f); free(f); if (count !=3D NUM_BRANCHES) pr_info("%s: Branch instructions retired =3D %lu (expected %u)\n", @@ -310,14 +309,14 @@ static void test_not_member_deny_list(struct kvm_vm *= vm) TEST_ASSERT(count, "Allowed PMU event is not counting"); } =20 -static void test_not_member_allow_list(struct kvm_vm *vm) +static void test_not_member_allow_list(struct kvm_vcpu *vcpu) { struct kvm_pmu_event_filter *f =3D event_filter(KVM_PMU_EVENT_ALLOW); uint64_t count; =20 remove_event(f, INTEL_BR_RETIRED); remove_event(f, AMD_ZEN_BR_RETIRED); - count =3D test_with_filter(vm, f); + count =3D test_with_filter(vcpu, f); free(f); if (count) pr_info("%s: Branch instructions retired =3D %lu (expected 0)\n", @@ -332,6 +331,7 @@ static void test_not_member_allow_list(struct kvm_vm *v= m) */ static void test_pmu_config_disable(void (*guest_code)(void)) { + struct kvm_vcpu *vcpu; int r; struct kvm_vm *vm; struct kvm_enable_cap cap =3D { 0 }; @@ -346,11 +346,13 @@ static void test_pmu_config_disable(void (*guest_code= )(void)) cap.args[0] =3D KVM_PMU_CAP_DISABLE; vm_enable_cap(vm, &cap); =20 - vm_vcpu_add_default(vm, VCPU_ID, guest_code); + vm_vcpu_add_default(vm, 0, guest_code); vm_init_descriptor_tables(vm); - vcpu_init_descriptor_tables(vm, VCPU_ID); =20 - TEST_ASSERT(!sanity_check_pmu(vm), + vcpu =3D vcpu_get(vm, 0); + vcpu_init_descriptor_tables(vm, vcpu->id); + + TEST_ASSERT(!sanity_check_pmu(vcpu), "Guest should not be able to use disabled PMU."); =20 kvm_vm_free(vm); @@ -421,6 +423,7 @@ static bool use_amd_pmu(void) int main(int argc, char *argv[]) { void (*guest_code)(void) =3D NULL; + struct kvm_vcpu *vcpu; struct kvm_vm *vm; int r; =20 @@ -443,21 +446,21 @@ int main(int argc, char *argv[]) exit(KSFT_SKIP); } =20 - vm =3D vm_create_default(VCPU_ID, 0, guest_code); + vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); =20 vm_init_descriptor_tables(vm); - vcpu_init_descriptor_tables(vm, VCPU_ID); + vcpu_init_descriptor_tables(vm, vcpu->id); =20 - if (!sanity_check_pmu(vm)) { + if (!sanity_check_pmu(vcpu)) { print_skip("Guest PMU is not functional"); exit(KSFT_SKIP); } =20 - test_without_filter(vm); - test_member_deny_list(vm); - test_member_allow_list(vm); - test_not_member_deny_list(vm); - test_not_member_allow_list(vm); + test_without_filter(vcpu); + test_member_deny_list(vcpu); + test_member_allow_list(vcpu); + test_not_member_deny_list(vcpu); + test_not_member_allow_list(vcpu); =20 kvm_vm_free(vm); =20 --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 51638C433EF for ; Wed, 4 May 2022 22:55:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1353800AbiEDW6o (ORCPT ); Wed, 4 May 2022 18:58:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45360 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379381AbiEDWyy (ORCPT ); Wed, 4 May 2022 18:54:54 -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 A6AE153A67 for ; Wed, 4 May 2022 15:50:59 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id x23-20020a170902b41700b0015ea144789fso1368558plr.13 for ; Wed, 04 May 2022 15:50:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=lmx6VYDYlzO+No2WJfy7zjV6NsiyPkW+VRxJ/N9LEIo=; b=VBIw4luXJfro5fky397gWb1NvoeZfr0UzJj7OR3cncvthmWJZXRKeTfUHve+SVKzAV Guxn/l/fOUZOpMw74s4GVSK11cWSGRjhoh9w3mp5SxvMLxvmCABA4xVDraSQW06pxn/Y E6liVEpkWeGTq6C8QhUSICut5flo12TVHglm5FVPPWa3kUwAdNT24hoAcBvI26lC5/Cs s94NWqj7GgygPwH5Voj1lywUB2XTA2SayLQ7RRC3jG1p/I6CXEBV+8/ujQAUciDI7Pu9 bOSuWOatPYkeESwLA+LpCLbFG/w4otOpReSEWopjlJfEs5kufXKNcomTmNNrPq0IEb3t XAnw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=lmx6VYDYlzO+No2WJfy7zjV6NsiyPkW+VRxJ/N9LEIo=; b=6pzXoM6MG8W3jpWoqivAR9ArHgtZGL5CTc/iEp28EvCESybUtG8PFrH4lFjHu9A7LL yP3OZmd/0cXG5DwK39SZjDyjs4b+bJ/GbIkvgIA+PbFlXJylZi9qyEbEp8W9T+MyAiqm BXejAydosUL7QjEZZWdQDX1T4uWvzceBlzp+QN4/9Tw6Elo6JBHMApinIuny3x+9UJFf TVy1TyVzwSbRKornKEFiZQp2Kewz0QykL9PfaaY1QA2mUC/e5GXMGXAx2jr2QW/dVZN1 Zy6Atl43xebopVLbdt6mwPMLRiKJGab/JFSr9qmkZZI4KBO1+aiEGzUKcTGwB38JUyOG f7AQ== X-Gm-Message-State: AOAM530JSOTEFRXRxyN4qFnw+QDKyvr7P2FiKxnYYUUHCg8N1W4C30oZ Yj2U0lQG248Co1GGiZxgHGMtsMYe3es= X-Google-Smtp-Source: ABdhPJy+vA1SD/lT6UPFbleU26/wLUKvND0BfPKSK9HSk8J1bYwInODiVY7KpGMz8d+sYgfnEe+9E9w6XxQ= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90b:11d1:b0:1db:d99f:62cc with SMTP id gv17-20020a17090b11d100b001dbd99f62ccmr2230222pjb.200.1651704659207; Wed, 04 May 2022 15:50:59 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:57 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-52-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 051/128] KVM: selftests: Convert smm_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert smm_test to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. Note, this is a "functional" change in the sense that the test now creates a vCPU with vcpu_id=3D=3D0 instead of vcpu_id=3D=3D1. The non-zero VCPU_ID was 10= 0% arbitrary and added little to no validation coverage. If testing non-zero vCPU IDs is desirable for generic tests, that can be done in the future by tweaking the VM creation helpers. Opportunistically use vcpu_run() instead of _vcpu_run(), the test expects KVM_RUN to succeed. Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/x86_64/smm_test.c | 37 +++++++++---------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/smm_test.c b/tools/testing/= selftests/kvm/x86_64/smm_test.c index dd2c1522ab90..36165b774a28 100644 --- a/tools/testing/selftests/kvm/x86_64/smm_test.c +++ b/tools/testing/selftests/kvm/x86_64/smm_test.c @@ -19,8 +19,6 @@ #include "vmx.h" #include "svm_util.h" =20 -#define VCPU_ID 1 - #define SMRAM_SIZE 65536 #define SMRAM_MEMSLOT ((1 << 16) | 1) #define SMRAM_PAGES (SMRAM_SIZE / PAGE_SIZE) @@ -116,22 +114,23 @@ static void guest_code(void *arg) sync_with_host(DONE); } =20 -void inject_smi(struct kvm_vm *vm) +void inject_smi(struct kvm_vcpu *vcpu) { struct kvm_vcpu_events events; =20 - vcpu_events_get(vm, VCPU_ID, &events); + vcpu_events_get(vcpu->vm, vcpu->id, &events); =20 events.smi.pending =3D 1; events.flags |=3D KVM_VCPUEVENT_VALID_SMM; =20 - vcpu_events_set(vm, VCPU_ID, &events); + vcpu_events_set(vcpu->vm, vcpu->id, &events); } =20 int main(int argc, char *argv[]) { vm_vaddr_t nested_gva =3D 0; =20 + struct kvm_vcpu *vcpu; struct kvm_regs regs; struct kvm_vm *vm; struct kvm_run *run; @@ -139,9 +138,9 @@ int main(int argc, char *argv[]) int stage, stage_reported; =20 /* Create VM */ - vm =3D vm_create_default(VCPU_ID, 0, guest_code); + vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); =20 - run =3D vcpu_state(vm, VCPU_ID); + run =3D vcpu->run; =20 vm_userspace_mem_region_add(vm, VM_MEM_SRC_ANONYMOUS, SMRAM_GPA, SMRAM_MEMSLOT, SMRAM_PAGES, 0); @@ -152,7 +151,7 @@ int main(int argc, char *argv[]) memcpy(addr_gpa2hva(vm, SMRAM_GPA) + 0x8000, smi_handler, sizeof(smi_handler)); =20 - vcpu_set_msr(vm, VCPU_ID, MSR_IA32_SMBASE, SMRAM_GPA); + vcpu_set_msr(vm, vcpu->id, MSR_IA32_SMBASE, SMRAM_GPA); =20 if (kvm_check_cap(KVM_CAP_NESTED_STATE)) { if (nested_svm_supported()) @@ -164,17 +163,17 @@ int main(int argc, char *argv[]) if (!nested_gva) pr_info("will skip SMM test with VMX enabled\n"); =20 - vcpu_args_set(vm, VCPU_ID, 1, nested_gva); + vcpu_args_set(vm, vcpu->id, 1, nested_gva); =20 for (stage =3D 1;; stage++) { - _vcpu_run(vm, VCPU_ID); + vcpu_run(vm, vcpu->id); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Stage %d: unexpected exit reason: %u (%s),\n", stage, run->exit_reason, exit_reason_str(run->exit_reason)); =20 memset(®s, 0, sizeof(regs)); - vcpu_regs_get(vm, VCPU_ID, ®s); + vcpu_regs_get(vm, vcpu->id, ®s); =20 stage_reported =3D regs.rax & 0xff; =20 @@ -191,7 +190,7 @@ int main(int argc, char *argv[]) * return from it. Do not perform save/restore while in SMM yet. */ if (stage =3D=3D 8) { - inject_smi(vm); + inject_smi(vcpu); continue; } =20 @@ -200,15 +199,15 @@ int main(int argc, char *argv[]) * during L2 execution. */ if (stage =3D=3D 10) - inject_smi(vm); + inject_smi(vcpu); =20 - state =3D vcpu_save_state(vm, VCPU_ID); + state =3D vcpu_save_state(vm, vcpu->id); kvm_vm_release(vm); - kvm_vm_restart(vm); - vm_vcpu_add(vm, VCPU_ID); - vcpu_set_cpuid(vm, VCPU_ID, kvm_get_supported_cpuid()); - vcpu_load_state(vm, VCPU_ID, state); - run =3D vcpu_state(vm, VCPU_ID); + + vcpu =3D vm_recreate_with_one_vcpu(vm); + vcpu_set_cpuid(vm, vcpu->id, kvm_get_supported_cpuid()); + vcpu_load_state(vm, vcpu->id, state); + run =3D vcpu->run; kvm_x86_state_cleanup(state); } =20 --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 E6CCFC433FE for ; Wed, 4 May 2022 22:55:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379730AbiEDW6i (ORCPT ); Wed, 4 May 2022 18:58:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45364 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379387AbiEDWyy (ORCPT ); Wed, 4 May 2022 18:54:54 -0400 Received: from mail-pf1-x44a.google.com (mail-pf1-x44a.google.com [IPv6:2607:f8b0:4864:20::44a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5AA335373F for ; Wed, 4 May 2022 15:51:01 -0700 (PDT) Received: by mail-pf1-x44a.google.com with SMTP id h7-20020a628307000000b0050df7cb563cso815444pfe.20 for ; Wed, 04 May 2022 15:51:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=dCR7WcCtZnymTpZN40GNLyRhTKxieftGqfQaPMOMqE4=; b=C5KjEyEph7kGwQRtVcQNRkloCpNFqAL+EmDQS9Ts4wLm9bdGueEg2eiM3ik3uUdx2N 641BkOnEH4qYNuMXWxBZ8/EjC6XDb366hNBbvG80yMZL+fHNjN5SgFR4ynHfrN9+shgf iEtyO+DGoEMyRx+4b+4uKbSTDtH2qFBsdrVe9Ew+V7lkQQJ2c4+WkFRPGXDwlp8+xzHC zs4++l3oRIKYKnCvxD9geyJ/sTtWFtmo1qXcT1LLs6DUETSSDhgqs3uqjO6JYomxK533 0dkJ9S9gC4OmstnZfa7xsaSrD5ta4WVGjqMXDb1fiees0YSkiSDnHj8RoValXZOyd4pm 9jeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=dCR7WcCtZnymTpZN40GNLyRhTKxieftGqfQaPMOMqE4=; b=omdNoa4W9uJUPDbjqEC2yJEh7s/dB474NOAWf5wJ2TBVAzP3C46Adcm3KHkPevmGXz n36LiiyTTaWq/0y89zg7krr73lsKTWPP1+P6X+TIrVXY+oOJ/gwfnhsUZBy+PObbEKJ7 5y2B5aujzcOhnNovL4dkrGvy3vOS9voP45BvzY0SZwOswz3ebevdgwS9Q0OXtq+ckehW aYXN5T3y41lJJsru6MIyx2CDydNPjKRG27BgZ66/k3LoNVRQKkGKY93ppLYOpMoAgFvu cwIral2wDAvAa88xQA0+aYE9kdm8KhZitvDzRQZyMSc8DDiquFz1M+3ej24qrWluieya 3xNQ== X-Gm-Message-State: AOAM532m9ieqOd/8qjm6IsyWFc4kiqdrlX+yl+af9Kb4yHevhsg3scy9 03r8G/3D6ACvPsMpb1Q5OQAtAxtVHWE= X-Google-Smtp-Source: ABdhPJyO2XObGNQTqa1uA3YNLj++17/7eq8A1YBkCP/0wIHbRHj9VlptaOR0LTN2K52MZhyT7DFFzEvncas= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90b:1d90:b0:1dc:2e4b:37c3 with SMTP id pf16-20020a17090b1d9000b001dc2e4b37c3mr2197849pjb.117.1651704660852; Wed, 04 May 2022 15:51:00 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:58 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-53-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 052/128] KVM: selftests: Convert state_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert state_test to use vm_create_with_one_vcpu() and vm_recreate_with_one_vcpu(), and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. Note, this is a "functional" change in the sense that the test now creates a vCPU with vcpu_id=3D=3D0 instead of vcpu_id=3D=3D5. The non-zero VCPU_ID was 100% arbitrary and added little to no validation coverage. If testing non-zero vCPU IDs is desirable for generic tests, that can be done in the future by tweaking the VM creation helpers. Opportunistically use vcpu_run() instead of _vcpu_run(), the test expects KVM_RUN to succeed. Signed-off-by: Sean Christopherson --- .../testing/selftests/kvm/x86_64/state_test.c | 29 +++++++++---------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/state_test.c b/tools/testin= g/selftests/kvm/x86_64/state_test.c index 41f7faaef2ac..b7869efad22a 100644 --- a/tools/testing/selftests/kvm/x86_64/state_test.c +++ b/tools/testing/selftests/kvm/x86_64/state_test.c @@ -20,7 +20,6 @@ #include "vmx.h" #include "svm_util.h" =20 -#define VCPU_ID 5 #define L2_GUEST_STACK_SIZE 256 =20 void svm_l2_guest_code(void) @@ -157,6 +156,7 @@ int main(int argc, char *argv[]) vm_vaddr_t nested_gva =3D 0; =20 struct kvm_regs regs1, regs2; + struct kvm_vcpu *vcpu; struct kvm_vm *vm; struct kvm_run *run; struct kvm_x86_state *state; @@ -164,10 +164,10 @@ int main(int argc, char *argv[]) int stage; =20 /* Create VM */ - vm =3D vm_create_default(VCPU_ID, 0, guest_code); - run =3D vcpu_state(vm, VCPU_ID); + vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); + run =3D vcpu->run; =20 - vcpu_regs_get(vm, VCPU_ID, ®s1); + vcpu_regs_get(vm, vcpu->id, ®s1); =20 if (kvm_check_cap(KVM_CAP_NESTED_STATE)) { if (nested_svm_supported()) @@ -179,16 +179,16 @@ int main(int argc, char *argv[]) if (!nested_gva) pr_info("will skip nested state checks\n"); =20 - vcpu_args_set(vm, VCPU_ID, 1, nested_gva); + vcpu_args_set(vm, vcpu->id, 1, nested_gva); =20 for (stage =3D 1;; stage++) { - _vcpu_run(vm, VCPU_ID); + vcpu_run(vm, vcpu->id); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Stage %d: unexpected exit reason: %u (%s),\n", stage, run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vm, VCPU_ID, &uc)) { + switch (get_ucall(vm, vcpu->id, &uc)) { case UCALL_ABORT: TEST_FAIL("%s at %s:%ld", (const char *)uc.args[0], __FILE__, uc.args[1]); @@ -206,22 +206,21 @@ int main(int argc, char *argv[]) uc.args[1] =3D=3D stage, "Stage %d: Unexpected register values vmex= it, got %lx", stage, (ulong)uc.args[1]); =20 - state =3D vcpu_save_state(vm, VCPU_ID); + state =3D vcpu_save_state(vm, vcpu->id); memset(®s1, 0, sizeof(regs1)); - vcpu_regs_get(vm, VCPU_ID, ®s1); + vcpu_regs_get(vm, vcpu->id, ®s1); =20 kvm_vm_release(vm); =20 /* Restore state in a new VM. */ - kvm_vm_restart(vm); - vm_vcpu_add(vm, VCPU_ID); - vcpu_set_cpuid(vm, VCPU_ID, kvm_get_supported_cpuid()); - vcpu_load_state(vm, VCPU_ID, state); - run =3D vcpu_state(vm, VCPU_ID); + vcpu =3D vm_recreate_with_one_vcpu(vm); + vcpu_set_cpuid(vm, vcpu->id, kvm_get_supported_cpuid()); + vcpu_load_state(vm, vcpu->id, state); + run =3D vcpu->run; kvm_x86_state_cleanup(state); =20 memset(®s2, 0, sizeof(regs2)); - vcpu_regs_get(vm, VCPU_ID, ®s2); + vcpu_regs_get(vm, vcpu->id, ®s2); TEST_ASSERT(!memcmp(®s1, ®s2, sizeof(regs2)), "Unexpected register values after vcpu_load_state; rdi: %lx rsi: %l= x", (ulong) regs2.rdi, (ulong) regs2.rsi); --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 7AC10C433FE for ; Wed, 4 May 2022 22:54:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232457AbiEDW63 (ORCPT ); Wed, 4 May 2022 18:58:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45362 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379406AbiEDWyy (ORCPT ); Wed, 4 May 2022 18:54:54 -0400 Received: from mail-pj1-x1049.google.com (mail-pj1-x1049.google.com [IPv6:2607:f8b0:4864:20::1049]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B75FB53B40 for ; Wed, 4 May 2022 15:51:02 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id o7-20020a17090a0a0700b001d93c491131so3563038pjo.6 for ; Wed, 04 May 2022 15:51:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=bUwkxA0cdvDJSwzKR16x8oGgeZ9cJ1YyXWxtI8ySlZU=; b=Q9XMcbQSkXguTxWF3MEf4ku/OBqpn0w7sL1mKUfBb1uuig+w5KbUYaRtBp+aMlZVoL Vq6+rR9UQI9l6FJa5Ekrb+b7PdiwyE40Z90DyQtm7RdH93n7bK1c+4TmkvijW4f0Swup Wj5fOYLOPg/v2qdkyenLa3LET4wvIjzOMnE45hZCx1aSqrukltF+Iv5I4MFYUA5IUcuD /WMOle6itKS1HpE81y4qwu76lfMjDYJsZsAYdRGN6mbFxHyzd6d7GwHoH5Ku2EOiY/cw GQT2owanVlw9fCZGnoAijNm1xaSlxKxMB/rrGc8sQURIrE2HWr5S3yaGz6S9xVdfusbt Lmwg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=bUwkxA0cdvDJSwzKR16x8oGgeZ9cJ1YyXWxtI8ySlZU=; b=mzeI2kLdFsluThPjksmMPXBpUIs6TJDkxQ/oVIN8af6nyWWZblMF75QS4KThApdMny f9rgD75nU+dA2oGgopcxO1v0pLlEUrsyQsTKJo6/tcrkDYbrfYcdvwf/twj2IJhplQqL CzAu51bK3rNTxg+VUc9FLdBxeXLX32EmA3SQd8oDskO1Rx6TRujyAR9+5+QfNzfR0zRA jyfU04KBv1SvU/J5RtIpsNeiA5xQcqII318bviBhcoxFNjObPYW2Y7r4cBE4STcDUTao PfmJrKHf0G0F8fNELshantm1LhGzrI3eEcrxbq2M+xB0zY1NT7TP2DgIrfQ4kGVtl4E/ XO4Q== X-Gm-Message-State: AOAM53096qUOq1M+ogIEE6zRmJe7MQae1LtEBheNJJtely5DwBlHrI5h GjNxbQ3j8N+h/wAUDB3fjIGSbOO0eqw= X-Google-Smtp-Source: ABdhPJx7MafP7nNnGcOg7F3OHo3XPpNcCxjHCM4oo/LLKpFrGq+D4B5dLGmxoAB3xrfrRkmrh1M58PzHZww= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:aa7:8104:0:b0:50d:374b:4568 with SMTP id b4-20020aa78104000000b0050d374b4568mr23012688pfi.45.1651704662324; Wed, 04 May 2022 15:51:02 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:47:59 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-54-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 053/128] KVM: selftests: Convert svm_int_ctl_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert svm_int_ctl_test to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. Opportunistically make the "vm" variable a local function variable, there are no users outside of main(). Signed-off-by: Sean Christopherson --- .../selftests/kvm/x86_64/svm_int_ctl_test.c | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/svm_int_ctl_test.c b/tools/= testing/selftests/kvm/x86_64/svm_int_ctl_test.c index 30a81038df46..8e90e463895a 100644 --- a/tools/testing/selftests/kvm/x86_64/svm_int_ctl_test.c +++ b/tools/testing/selftests/kvm/x86_64/svm_int_ctl_test.c @@ -13,10 +13,6 @@ #include "svm_util.h" #include "apic.h" =20 -#define VCPU_ID 0 - -static struct kvm_vm *vm; - bool vintr_irq_called; bool intr_irq_called; =20 @@ -88,31 +84,34 @@ static void l1_guest_code(struct svm_test_data *svm) =20 int main(int argc, char *argv[]) { + struct kvm_vcpu *vcpu; + struct kvm_run *run; vm_vaddr_t svm_gva; + struct kvm_vm *vm; + struct ucall uc; =20 nested_svm_check_supported(); =20 - vm =3D vm_create_default(VCPU_ID, 0, (void *) l1_guest_code); + vm =3D vm_create_with_one_vcpu(&vcpu, l1_guest_code); =20 vm_init_descriptor_tables(vm); - vcpu_init_descriptor_tables(vm, VCPU_ID); + vcpu_init_descriptor_tables(vm, vcpu->id); =20 vm_install_exception_handler(vm, VINTR_IRQ_NUMBER, vintr_irq_handler); vm_install_exception_handler(vm, INTR_IRQ_NUMBER, intr_irq_handler); =20 vcpu_alloc_svm(vm, &svm_gva); - vcpu_args_set(vm, VCPU_ID, 1, svm_gva); + vcpu_args_set(vm, vcpu->id, 1, svm_gva); =20 - struct kvm_run *run =3D vcpu_state(vm, VCPU_ID); - struct ucall uc; + run =3D vcpu->run; =20 - vcpu_run(vm, VCPU_ID); + vcpu_run(vm, vcpu->id); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Got exit_reason other than KVM_EXIT_IO: %u (%s)\n", run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vm, VCPU_ID, &uc)) { + switch (get_ucall(vm, vcpu->id, &uc)) { case UCALL_ABORT: TEST_FAIL("%s", (const char *)uc.args[0]); break; --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 B906EC433F5 for ; Wed, 4 May 2022 22:54:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237266AbiEDW5v (ORCPT ); Wed, 4 May 2022 18:57:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45400 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379410AbiEDWyy (ORCPT ); Wed, 4 May 2022 18:54:54 -0400 Received: from mail-pg1-x54a.google.com (mail-pg1-x54a.google.com [IPv6:2607:f8b0:4864:20::54a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 51A4D53B55 for ; Wed, 4 May 2022 15:51:04 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id bj12-20020a056a02018c00b003a9eebaad34so1340284pgb.10 for ; Wed, 04 May 2022 15:51:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=XIDdXFOkDVy5SJapPAjtIumoXgEMA8drU4nFneUqcss=; b=sLIL62vkhfenMrg59N3qnvWrZAryk/gK47WQkWsS0G+8hkowjDz6YrsMpAxRFXVRB3 I7CJ9fcWsJ89ePfYse6I1jiGC5wwaZ6QAoOMlix1CuG1gZyFRdhGKrScdqIKM7AJyEk8 NGm4IiBoIRtMxU6n+r/QFGF4dgtzcHTaV1Zj1kylWAzBK/+EYedQ5Nr1jx9Gi+oPmCb6 fFzgpaWkZ3n5xLmpROsVeL46jU1ZjuNtrs1E9Xd65DoCeHpZGSpV4Rvur/8YVy0wD+D1 wkAWsHPflAOeKfWZgV/LfQf6/2zHiGk4PxV2zdDonvV8FR544Fi0C06iJkLJFd7GwBRo KX9g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=XIDdXFOkDVy5SJapPAjtIumoXgEMA8drU4nFneUqcss=; b=idyXXAKKBHUrezx79LEUkCjPi8shKCAglzljCi4DeiWxI/XqYHWDkxVcUik1GJi4B/ mitw0okNbZyQXR9Z9bHj3PySLivIf9zn0+fwNiHdSHJlzcFXomNsQ/mrjYkOzCyCuWCs qA25qneo+Imlzc+BRKlX5jCSJ/+9U6AXtV2D1hlN66SKtJqOjCVJcIurBJzUFomnT0Af JYEPDg6rKX8XOpLyIMGk3y47B+0jF3bgMWOANib2s+rcr7EYLgycbVgfK/cod/mQaZyO Akzy9G3q31WT9uZvvMZG6lyQD7aSo3WC/OBYoYhwHTzNk5Hz3S7zAqqxCa1VjLfX64PV wfYw== X-Gm-Message-State: AOAM532mEiW6FVQ5kgLKkuTlJw5ugsRrl7622jCAq7ESnzDZRZ0zaYmb hzJm0HDlK/zQGT1pglrLmetKaLkofuA= X-Google-Smtp-Source: ABdhPJwKYyiszUouLC8ehMlepVP+AHjsIot3+Ba+EfTpNiIXyVQb03gwDR0HOizSv/42P4iwcXt42WyW9JQ= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a62:dec4:0:b0:50f:70d1:41dd with SMTP id h187-20020a62dec4000000b0050f70d141ddmr7163473pfg.68.1651704664030; Wed, 04 May 2022 15:51:04 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:00 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-55-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 054/128] KVM: selftests: Convert svm_vmcall_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert svm_vmcall_test to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. Note, this is a "functional" change in the sense that the test now creates a vCPU with vcpu_id=3D=3D0 instead of vcpu_id=3D=3D5. The non-zero VCPU_ID was 10= 0% arbitrary and added little to no validation coverage. If testing non-zero vCPU IDs is desirable for generic tests, that can be done in the future by tweaking the VM creation helpers. Signed-off-by: Sean Christopherson --- .../selftests/kvm/x86_64/svm_vmcall_test.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/svm_vmcall_test.c b/tools/t= esting/selftests/kvm/x86_64/svm_vmcall_test.c index be2ca157485b..15e389a7cd31 100644 --- a/tools/testing/selftests/kvm/x86_64/svm_vmcall_test.c +++ b/tools/testing/selftests/kvm/x86_64/svm_vmcall_test.c @@ -12,10 +12,6 @@ #include "processor.h" #include "svm_util.h" =20 -#define VCPU_ID 5 - -static struct kvm_vm *vm; - static void l2_guest_code(struct svm_test_data *svm) { __asm__ __volatile__("vmcall"); @@ -39,26 +35,28 @@ static void l1_guest_code(struct svm_test_data *svm) =20 int main(int argc, char *argv[]) { + struct kvm_vcpu *vcpu; vm_vaddr_t svm_gva; + struct kvm_vm *vm; =20 nested_svm_check_supported(); =20 - vm =3D vm_create_default(VCPU_ID, 0, (void *) l1_guest_code); + vm =3D vm_create_with_one_vcpu(&vcpu, l1_guest_code); =20 vcpu_alloc_svm(vm, &svm_gva); - vcpu_args_set(vm, VCPU_ID, 1, svm_gva); + vcpu_args_set(vm, vcpu->id, 1, svm_gva); =20 for (;;) { - volatile struct kvm_run *run =3D vcpu_state(vm, VCPU_ID); + volatile struct kvm_run *run =3D vcpu->run; struct ucall uc; =20 - vcpu_run(vm, VCPU_ID); + vcpu_run(vm, vcpu->id); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Got exit_reason other than KVM_EXIT_IO: %u (%s)\n", run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vm, VCPU_ID, &uc)) { + switch (get_ucall(vm, vcpu->id, &uc)) { case UCALL_ABORT: TEST_FAIL("%s", (const char *)uc.args[0]); /* NOT REACHED */ --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 33687C433F5 for ; Wed, 4 May 2022 22:54:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379681AbiEDW6W (ORCPT ); Wed, 4 May 2022 18:58:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45364 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379447AbiEDWyz (ORCPT ); Wed, 4 May 2022 18:54:55 -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 3F9B353B79 for ; Wed, 4 May 2022 15:51:06 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id n4-20020a170902f60400b00158d1f2d442so1364458plg.18 for ; Wed, 04 May 2022 15:51:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=OWG5SLItV7LvwK0/+ikCwsRpvTwxCQso8sF2TQ8YEnM=; b=ZKmlmJzgZ4JzKhUTbhH/I23KY5Z5b9VMBKo2xMRFMz4DyZYFE1KeNik9OF9C1kIfOb C+wkpKW+2XJK1OpC6JaSAJO6mW3VZWzjjuyhBz/AmD6unr6E61RtFbMe0UI7Iz2QkXN+ LmD8WqRwtRxB1GK4S1OFQhAmIpkUWwsUDf1s2xN3P5+68+CUeVVsfCmBjOozHroon29H 1H+4vGaQn+fVH9X+1U/Niartr7vBgEcUKjLD8oy7Z/QSL0U3yTaLckillZxtgS4FukTD dJDGhsCJZzuwcX3CjlFQsca7aPq4I65JIb8V6lx7qdmNFC1XkrYlKQdmesliekVCi+tL iIGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=OWG5SLItV7LvwK0/+ikCwsRpvTwxCQso8sF2TQ8YEnM=; b=P6O53Sk3OkT1ndYdjDmZxgNZveGJ9gFoRr8AVZSE3UWdIP+w7C5U3F6Al9OB9OgDyb Vk8jQIimQmeUsNQqNT6NbzQoq7hYbNdxy2Ta8mtJHpFiZ922QFADnPqkUmDUa32Ge4BY 14TFc57Hpc9CSbnv9fs/Z+YqIevfaxM+vlm481VayVfyk1fYB/wHuWUcj+cekqdtWWZp Vd1H/n1vLAA7Ca7PrNkP25W/COJmxded4h8ZgQ0COEipYtSpyP96RXrEKHHEA0HUyD0K +Ew5J3jco5C/ZoWkn8sxGY6L68jUDMh4FA+LaV8zHv+rN5zetpJpY8otDsJhoJ3apx8H ba1w== X-Gm-Message-State: AOAM530FL0QrXatHHnatN3ET4pY9B7VDbJzbz0eF25qZFHVP4TFTZ7HH Jsjmxy2FV+Tg90ARq/SMIjbxQELneU4= X-Google-Smtp-Source: ABdhPJxQ8JxwciwXyutSnLiak0iPf/I4/7Pb7TMZbIng41hMdouKE1AZNzAS3U3i4cka2H01LwsrA/ZjdLs= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:aa7:8892:0:b0:50e:1463:3cd1 with SMTP id z18-20020aa78892000000b0050e14633cd1mr8550029pfe.13.1651704665764; Wed, 04 May 2022 15:51:05 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:01 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-56-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 055/128] KVM: selftests: Convert sync_regs_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert sync_regs_test to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. Note, this is a "functional" change in the sense that the test now creates a vCPU with vcpu_id=3D=3D0 instead of vcpu_id=3D=3D5. The non-zero VCPU_ID was 10= 0% arbitrary and added little to no validation coverage. If testing non-zero vCPU IDs is desirable for generic tests, that can be done in the future by tweaking the VM creation helpers. Signed-off-by: Sean Christopherson --- .../selftests/kvm/x86_64/sync_regs_test.c | 52 +++++++++---------- 1 file changed, 25 insertions(+), 27 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/sync_regs_test.c b/tools/te= sting/selftests/kvm/x86_64/sync_regs_test.c index fc03a150278d..c971706b49f5 100644 --- a/tools/testing/selftests/kvm/x86_64/sync_regs_test.c +++ b/tools/testing/selftests/kvm/x86_64/sync_regs_test.c @@ -20,8 +20,6 @@ #include "kvm_util.h" #include "processor.h" =20 -#define VCPU_ID 5 - #define UCALL_PIO_PORT ((uint16_t)0x1000) =20 struct ucall uc_none =3D { @@ -84,6 +82,7 @@ static void compare_vcpu_events(struct kvm_vcpu_events *l= eft, =20 int main(int argc, char *argv[]) { + struct kvm_vcpu *vcpu; struct kvm_vm *vm; struct kvm_run *run; struct kvm_regs regs; @@ -104,57 +103,56 @@ int main(int argc, char *argv[]) exit(KSFT_SKIP); } =20 - /* Create VM */ - vm =3D vm_create_default(VCPU_ID, 0, guest_code); + vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); =20 - run =3D vcpu_state(vm, VCPU_ID); + run =3D vcpu->run; =20 /* Request reading invalid register set from VCPU. */ run->kvm_valid_regs =3D INVALID_SYNC_FIELD; - rv =3D _vcpu_run(vm, VCPU_ID); + rv =3D _vcpu_run(vm, vcpu->id); TEST_ASSERT(rv < 0 && errno =3D=3D EINVAL, "Invalid kvm_valid_regs did not cause expected KVM_RUN error: %d\n", rv); - vcpu_state(vm, VCPU_ID)->kvm_valid_regs =3D 0; + run->kvm_valid_regs =3D 0; =20 run->kvm_valid_regs =3D INVALID_SYNC_FIELD | TEST_SYNC_FIELDS; - rv =3D _vcpu_run(vm, VCPU_ID); + rv =3D _vcpu_run(vm, vcpu->id); TEST_ASSERT(rv < 0 && errno =3D=3D EINVAL, "Invalid kvm_valid_regs did not cause expected KVM_RUN error: %d\n", rv); - vcpu_state(vm, VCPU_ID)->kvm_valid_regs =3D 0; + run->kvm_valid_regs =3D 0; =20 /* Request setting invalid register set into VCPU. */ run->kvm_dirty_regs =3D INVALID_SYNC_FIELD; - rv =3D _vcpu_run(vm, VCPU_ID); + rv =3D _vcpu_run(vm, vcpu->id); TEST_ASSERT(rv < 0 && errno =3D=3D EINVAL, "Invalid kvm_dirty_regs did not cause expected KVM_RUN error: %d\n", rv); - vcpu_state(vm, VCPU_ID)->kvm_dirty_regs =3D 0; + run->kvm_dirty_regs =3D 0; =20 run->kvm_dirty_regs =3D INVALID_SYNC_FIELD | TEST_SYNC_FIELDS; - rv =3D _vcpu_run(vm, VCPU_ID); + rv =3D _vcpu_run(vm, vcpu->id); TEST_ASSERT(rv < 0 && errno =3D=3D EINVAL, "Invalid kvm_dirty_regs did not cause expected KVM_RUN error: %d\n", rv); - vcpu_state(vm, VCPU_ID)->kvm_dirty_regs =3D 0; + run->kvm_dirty_regs =3D 0; =20 /* Request and verify all valid register sets. */ /* TODO: BUILD TIME CHECK: TEST_ASSERT(KVM_SYNC_X86_NUM_FIELDS !=3D 3); */ run->kvm_valid_regs =3D TEST_SYNC_FIELDS; - rv =3D _vcpu_run(vm, VCPU_ID); + rv =3D _vcpu_run(vm, vcpu->id); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Unexpected exit reason: %u (%s),\n", run->exit_reason, exit_reason_str(run->exit_reason)); =20 - vcpu_regs_get(vm, VCPU_ID, ®s); + vcpu_regs_get(vm, vcpu->id, ®s); compare_regs(®s, &run->s.regs.regs); =20 - vcpu_sregs_get(vm, VCPU_ID, &sregs); + vcpu_sregs_get(vm, vcpu->id, &sregs); compare_sregs(&sregs, &run->s.regs.sregs); =20 - vcpu_events_get(vm, VCPU_ID, &events); + vcpu_events_get(vm, vcpu->id, &events); compare_vcpu_events(&events, &run->s.regs.events); =20 /* Set and verify various register values. */ @@ -164,7 +162,7 @@ int main(int argc, char *argv[]) =20 run->kvm_valid_regs =3D TEST_SYNC_FIELDS; run->kvm_dirty_regs =3D KVM_SYNC_X86_REGS | KVM_SYNC_X86_SREGS; - rv =3D _vcpu_run(vm, VCPU_ID); + rv =3D _vcpu_run(vm, vcpu->id); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Unexpected exit reason: %u (%s),\n", run->exit_reason, @@ -176,13 +174,13 @@ int main(int argc, char *argv[]) "apic_base sync regs value incorrect 0x%llx.", run->s.regs.sregs.apic_base); =20 - vcpu_regs_get(vm, VCPU_ID, ®s); + vcpu_regs_get(vm, vcpu->id, ®s); compare_regs(®s, &run->s.regs.regs); =20 - vcpu_sregs_get(vm, VCPU_ID, &sregs); + vcpu_sregs_get(vm, vcpu->id, &sregs); compare_sregs(&sregs, &run->s.regs.sregs); =20 - vcpu_events_get(vm, VCPU_ID, &events); + vcpu_events_get(vm, vcpu->id, &events); compare_vcpu_events(&events, &run->s.regs.events); =20 /* Clear kvm_dirty_regs bits, verify new s.regs values are @@ -191,7 +189,7 @@ int main(int argc, char *argv[]) run->kvm_valid_regs =3D TEST_SYNC_FIELDS; run->kvm_dirty_regs =3D 0; run->s.regs.regs.rbx =3D 0xDEADBEEF; - rv =3D _vcpu_run(vm, VCPU_ID); + rv =3D _vcpu_run(vm, vcpu->id); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Unexpected exit reason: %u (%s),\n", run->exit_reason, @@ -208,8 +206,8 @@ int main(int argc, char *argv[]) run->kvm_dirty_regs =3D 0; run->s.regs.regs.rbx =3D 0xAAAA; regs.rbx =3D 0xBAC0; - vcpu_regs_set(vm, VCPU_ID, ®s); - rv =3D _vcpu_run(vm, VCPU_ID); + vcpu_regs_set(vm, vcpu->id, ®s); + rv =3D _vcpu_run(vm, vcpu->id); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Unexpected exit reason: %u (%s),\n", run->exit_reason, @@ -217,7 +215,7 @@ int main(int argc, char *argv[]) TEST_ASSERT(run->s.regs.regs.rbx =3D=3D 0xAAAA, "rbx sync regs value incorrect 0x%llx.", run->s.regs.regs.rbx); - vcpu_regs_get(vm, VCPU_ID, ®s); + vcpu_regs_get(vm, vcpu->id, ®s); TEST_ASSERT(regs.rbx =3D=3D 0xBAC0 + 1, "rbx guest value incorrect 0x%llx.", regs.rbx); @@ -229,7 +227,7 @@ int main(int argc, char *argv[]) run->kvm_valid_regs =3D 0; run->kvm_dirty_regs =3D TEST_SYNC_FIELDS; run->s.regs.regs.rbx =3D 0xBBBB; - rv =3D _vcpu_run(vm, VCPU_ID); + rv =3D _vcpu_run(vm, vcpu->id); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Unexpected exit reason: %u (%s),\n", run->exit_reason, @@ -237,7 +235,7 @@ int main(int argc, char *argv[]) TEST_ASSERT(run->s.regs.regs.rbx =3D=3D 0xBBBB, "rbx sync regs value incorrect 0x%llx.", run->s.regs.regs.rbx); - vcpu_regs_get(vm, VCPU_ID, ®s); + vcpu_regs_get(vm, vcpu->id, ®s); TEST_ASSERT(regs.rbx =3D=3D 0xBBBB + 1, "rbx guest value incorrect 0x%llx.", regs.rbx); --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 6E94FC433EF for ; Wed, 4 May 2022 22:54:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237434AbiEDW6Q (ORCPT ); Wed, 4 May 2022 18:58:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45440 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379451AbiEDWyz (ORCPT ); Wed, 4 May 2022 18:54:55 -0400 Received: from mail-pl1-x64a.google.com (mail-pl1-x64a.google.com [IPv6:2607:f8b0:4864:20::64a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3B7B953E1B for ; Wed, 4 May 2022 15:51:08 -0700 (PDT) Received: by mail-pl1-x64a.google.com with SMTP id b10-20020a170902bd4a00b0015e7ee90842so1371218plx.8 for ; Wed, 04 May 2022 15:51:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=5K5Fz1ePxPdVaX17bcThUb5uJeS3vgOUejHN3idcjYI=; b=Su+AFXd8gVSwgOvXwJ4uI0nhENW7VzSvc0XkctPnu5pI0EFXFtJOeIZkStTB2yC4Hq g/P14AqlA5PL1q1zHb7mqAR00HVv9us0K5/rKiegN+dwaVr43BbvGAhSoB//JEZL1c95 DNx+YI6HJoEwfTxKvmkPLm253B++QeFX9/nKM+cdXICIbnfK3CfTSXH0R5EPs+b6yTuQ m2A8Gt8ROmO2FMduOilZBaagj9pUzjsaj+z9m48Nlx+zg0qR3LjaPD4GTJTzBG3pDWFz qdYw2jq/QZtXRJEOg2A7HaP9udIRMOWP9zrcXlZEBBx74mA2pxhQvSWBCbthAVZbkpEv 13Kw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=5K5Fz1ePxPdVaX17bcThUb5uJeS3vgOUejHN3idcjYI=; b=Da4e1wlM6V5T/PoLDXkqSk4pvNSQdnWZElWQLtcwHe/60ejqBSIUfUCiHitFE2G1PX WBk14vwb5AM3qduRnAIQ/9JPnO0U50XQSYR+QM2QbW2iwP4U0jk/n9G+JUoJD/iDQd/E L8pUJo82zX9Zz26tkGXRjbk1E04zxEeHeGRDtbalmNS9JCzy5lOzUztyzken3LnRiraA c2sv8BhIFRFHVSC6BFbMBS6hdRujY+vYyoqniDjDOHDnHCnJUFZe3Zhs3cqVia9SbCrk fsKAFzpB4YRo8DFyuenO2RoBYkelQtdzUW7Xf4ky5tKwPkQQowhxg6k/YqqeE1VSvP4w LLHg== X-Gm-Message-State: AOAM532LheiDkUH1yY7ioNjSUSMM7vtDR7StbSkJPpMdk5OEUboSKkCw 6JXfyrA3ZKolaZIaMVkvbqE4rZnB6Zo= X-Google-Smtp-Source: ABdhPJwKxLZnwu6EdPiTHuTrtlHJYOb3zcL1SaTBUa69e0oYWwN1fY1BmhDI6P3isuiTAiVokRsUo2N/YMY= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90b:1b0d:b0:1dc:672e:c913 with SMTP id nu13-20020a17090b1b0d00b001dc672ec913mr2232357pjb.102.1651704667489; Wed, 04 May 2022 15:51:07 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:02 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-57-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 056/128] KVM: selftests: Convert hyperv_cpuid away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert hyperv_cpuid to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. Signed-off-by: Sean Christopherson --- .../selftests/kvm/x86_64/hyperv_cpuid.c | 23 +++++++++---------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/hyperv_cpuid.c b/tools/test= ing/selftests/kvm/x86_64/hyperv_cpuid.c index 896e1e7c1df7..d1a22ee98cf3 100644 --- a/tools/testing/selftests/kvm/x86_64/hyperv_cpuid.c +++ b/tools/testing/selftests/kvm/x86_64/hyperv_cpuid.c @@ -20,8 +20,6 @@ #include "processor.h" #include "vmx.h" =20 -#define VCPU_ID 0 - static void guest_code(void) { } @@ -115,25 +113,26 @@ static void test_hv_cpuid(struct kvm_cpuid2 *hv_cpuid= _entries, } } =20 -void test_hv_cpuid_e2big(struct kvm_vm *vm, bool system) +void test_hv_cpuid_e2big(struct kvm_vm *vm, struct kvm_vcpu *vcpu) { static struct kvm_cpuid2 cpuid =3D {.nent =3D 0}; int ret; =20 - if (!system) - ret =3D __vcpu_ioctl(vm, VCPU_ID, KVM_GET_SUPPORTED_HV_CPUID, &cpuid); + if (vcpu) + ret =3D __vcpu_ioctl(vm, vcpu->id, KVM_GET_SUPPORTED_HV_CPUID, &cpuid); else ret =3D __kvm_ioctl(vm_get_kvm_fd(vm), KVM_GET_SUPPORTED_HV_CPUID, &cpui= d); =20 TEST_ASSERT(ret =3D=3D -1 && errno =3D=3D E2BIG, "%s KVM_GET_SUPPORTED_HV_CPUID didn't fail with -E2BIG when" - " it should have: %d %d", system ? "KVM" : "vCPU", ret, errno); + " it should have: %d %d", !vcpu ? "KVM" : "vCPU", ret, errno); } =20 int main(int argc, char *argv[]) { struct kvm_vm *vm; struct kvm_cpuid2 *hv_cpuid_entries; + struct kvm_vcpu *vcpu; =20 /* Tell stdout not to buffer its content */ setbuf(stdout, NULL); @@ -143,12 +142,12 @@ int main(int argc, char *argv[]) exit(KSFT_SKIP); } =20 - vm =3D vm_create_default(VCPU_ID, 0, guest_code); + vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); =20 /* Test vCPU ioctl version */ - test_hv_cpuid_e2big(vm, false); + test_hv_cpuid_e2big(vm, vcpu); =20 - hv_cpuid_entries =3D vcpu_get_supported_hv_cpuid(vm, VCPU_ID); + hv_cpuid_entries =3D vcpu_get_supported_hv_cpuid(vm, vcpu->id); test_hv_cpuid(hv_cpuid_entries, false); free(hv_cpuid_entries); =20 @@ -157,8 +156,8 @@ int main(int argc, char *argv[]) print_skip("Enlightened VMCS is unsupported"); goto do_sys; } - vcpu_enable_evmcs(vm, VCPU_ID); - hv_cpuid_entries =3D vcpu_get_supported_hv_cpuid(vm, VCPU_ID); + vcpu_enable_evmcs(vm, vcpu->id); + hv_cpuid_entries =3D vcpu_get_supported_hv_cpuid(vm, vcpu->id); test_hv_cpuid(hv_cpuid_entries, true); free(hv_cpuid_entries); =20 @@ -169,7 +168,7 @@ int main(int argc, char *argv[]) goto out; } =20 - test_hv_cpuid_e2big(vm, true); + test_hv_cpuid_e2big(vm, NULL); =20 hv_cpuid_entries =3D kvm_get_supported_hv_cpuid(); test_hv_cpuid(hv_cpuid_entries, nested_vmx_supported()); --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 E9646C433EF for ; Wed, 4 May 2022 22:54:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379464AbiEDW57 (ORCPT ); Wed, 4 May 2022 18:57:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45464 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379473AbiEDWyz (ORCPT ); Wed, 4 May 2022 18:54:55 -0400 Received: from mail-pl1-x64a.google.com (mail-pl1-x64a.google.com [IPv6:2607:f8b0:4864:20::64a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CB02853E28 for ; Wed, 4 May 2022 15:51:09 -0700 (PDT) Received: by mail-pl1-x64a.google.com with SMTP id k2-20020a170902ba8200b0015613b12004so1366949pls.22 for ; Wed, 04 May 2022 15:51:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=bMvlXr4HK274DGrq7E1ZqyuDr7AgFq7Bi5INTr4PZKw=; b=YK+tS9LfZmGLA7Bho21OiBw8rKzeNiEj4sY+1i0gx0vFeikcRT8pP7zPEWgDb2YpNB 8p4wE9suyOi9romXiKEPfSalzjTia7IWT2d8bLR1gmIJof3ldvg08j6HGJSi46HjG28+ NiBdYv3hO4Gc8l8HMmt3XPK05j3JUqUd6oRzB9cqJfoOAq3P2eM3HdeRm/K3e1ECMDbk wDDk7Y9r/VWn+oRBivt27nvLky444c5npoefpgCRL7HcuBjYrLRKLOVMwpfn95KZNROZ 0E3q/8WEcn9QhnyTxg+SjQ40A6BIoWe/FfzgYiAxc69Jabm/qyfAFZHj82usnvh3py7z ANMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=bMvlXr4HK274DGrq7E1ZqyuDr7AgFq7Bi5INTr4PZKw=; b=TptZma/NJw0PmTlWAVDDxtuJFX28jjhAQuaKYwg/CK+xHRW7tEMLi8FDLXf2joII0N WfCFuhHj6zP7CIxuCmz+/0S4U2o2rZFszNP+mUV0Ixnn8t+5egIuc2ISF1xCS6bgnjRQ GRohOL4Awzv4f9vSBFKxj1f4SiwMJqf/vMZdXk7h64Tl49yr99Gy6XAR0uBI+D6TBesU GGYCiio07JDYktqMBq+v4AKWlrg2PG3QSVYgYi1UK6SwC05QA/FiyNevwTJZUqY8xEi4 vtRLDZyXmtIjYYc3PxpcwoCf0Gnermtdv5UhX7BsO3vPLRZ46TcQNFPyoSE9ad8lwlti Weug== X-Gm-Message-State: AOAM530De3rUT2fDhedn+qvD7AxLOvFmPx1Sm/wiI5JU4qZJXqM+g+QE IV+HFH/VA9NPnBtsX3TfvcUwG0TNWqg= X-Google-Smtp-Source: ABdhPJy68rQWjft05zs1OiHxG8HTloycRQW5Q0CXSL/URVnTP56SDUr26ibFxiI58mHhF1NMcPx5QxlWvlM= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a62:3848:0:b0:50d:376e:57ed with SMTP id f69-20020a623848000000b0050d376e57edmr22824042pfa.71.1651704669140; Wed, 04 May 2022 15:51:09 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:03 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-58-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 057/128] KVM: selftests: Convert kvm_pv_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert kvm_pv_test to use vm_create_with_one_vcpu() and pass arounda 'struct kvm_vcpu' object instead of using a global VCPU_ID. Opportunistically use vcpu_run() instead of _vcpu_run() with an open coded assert that KVM_RUN succeeded. Signed-off-by: Sean Christopherson --- .../selftests/kvm/x86_64/kvm_pv_test.c | 25 ++++++++----------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/kvm_pv_test.c b/tools/testi= ng/selftests/kvm/x86_64/kvm_pv_test.c index 04ed975662c9..cce9016e31a7 100644 --- a/tools/testing/selftests/kvm/x86_64/kvm_pv_test.c +++ b/tools/testing/selftests/kvm/x86_64/kvm_pv_test.c @@ -171,24 +171,18 @@ static void handle_abort(struct ucall *uc) __FILE__, uc->args[1]); } =20 -#define VCPU_ID 0 - -static void enter_guest(struct kvm_vm *vm) +static void enter_guest(struct kvm_vcpu *vcpu) { - struct kvm_run *run; + struct kvm_run *run =3D vcpu->run; struct ucall uc; - int r; - - run =3D vcpu_state(vm, VCPU_ID); =20 while (true) { - r =3D _vcpu_run(vm, VCPU_ID); - TEST_ASSERT(!r, "vcpu_run failed: %d\n", r); + vcpu_run(vcpu->vm, vcpu->id); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "unexpected exit reason: %u (%s)", run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vm, VCPU_ID, &uc)) { + switch (get_ucall(vcpu->vm, vcpu->id, &uc)) { case UCALL_PR_MSR: pr_msr(&uc); break; @@ -208,6 +202,7 @@ int main(void) { struct kvm_enable_cap cap =3D {0}; struct kvm_cpuid2 *best; + struct kvm_vcpu *vcpu; struct kvm_vm *vm; =20 if (!kvm_check_cap(KVM_CAP_ENFORCE_PV_FEATURE_CPUID)) { @@ -215,20 +210,20 @@ int main(void) exit(KSFT_SKIP); } =20 - vm =3D vm_create_default(VCPU_ID, 0, guest_main); + vm =3D vm_create_with_one_vcpu(&vcpu, guest_main); =20 cap.cap =3D KVM_CAP_ENFORCE_PV_FEATURE_CPUID; cap.args[0] =3D 1; - vcpu_enable_cap(vm, VCPU_ID, &cap); + vcpu_enable_cap(vm, vcpu->id, &cap); =20 best =3D kvm_get_supported_cpuid(); clear_kvm_cpuid_features(best); - vcpu_set_cpuid(vm, VCPU_ID, best); + vcpu_set_cpuid(vm, vcpu->id, best); =20 vm_init_descriptor_tables(vm); - vcpu_init_descriptor_tables(vm, VCPU_ID); + vcpu_init_descriptor_tables(vm, vcpu->id); vm_install_exception_handler(vm, GP_VECTOR, guest_gp_handler); =20 - enter_guest(vm); + enter_guest(vcpu); kvm_vm_free(vm); } --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 61E7AC433EF for ; Wed, 4 May 2022 22:54:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379493AbiEDW6F (ORCPT ); Wed, 4 May 2022 18:58:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45496 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379513AbiEDWy4 (ORCPT ); Wed, 4 May 2022 18:54:56 -0400 Received: from mail-pj1-x1049.google.com (mail-pj1-x1049.google.com [IPv6:2607:f8b0:4864:20::1049]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BB0B954186 for ; Wed, 4 May 2022 15:51:11 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id s5-20020a17090aa10500b001d9a8e99e3aso1318121pjp.2 for ; Wed, 04 May 2022 15:51:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=2uFSjC+RNcw6nw5QfKWzA8S+fTB7FlXQ6IXnxoZIo4w=; b=bRB8VWN5qm2Q7xyr6rDQpeCd+Zog8FCLGQ9KMdsVnSbrWLabQgYVt/9q9kheH+oPMq 0WryY7yKnwq576NBlLgPwPtvSlYMDM29lXn8mhvtMKLfiluip8mFJDMxDX4knUvb27Ug fFlr4FwuART21oHyTbeyed8cNEQUuAoHMbuIqjHkzWe4OTK4HRtWhwmqZ50+jsMfJBSj kdzKmmHYim2To0kZNUspeREqa/bUfCOg6rUa860OD91hsE12AUTAoC1CS6r2vCzZXFbb H3BBuiY5SIOHNKtcExvwDBl5l2P+42T9y90SIUyQ/Bbzv6B2gYrd2ZOIeeyNH2wr6MNW XYKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=2uFSjC+RNcw6nw5QfKWzA8S+fTB7FlXQ6IXnxoZIo4w=; b=nL7sK5bcUJ2/1pSsHVs26rhrfzumaMojIVdfXGSme1NGlh8arB2CyL9xeNpQuPSpUL wpOzYzNgOixHjj5p4d8Rn7mjP0C9tgI/V7BVf4csKzatzBRh2aYT0ck6DY/3l+syGoka cLf0hfda8CxjDuhYJ2pRXWJ6TzMpBF2n6TF1aGy1+pBWWwYpt6XxVYY8PiXosJKUSpbs qzZ+lfxfkfufaW4Ei9Rx/aHlQfF4E16oPn6XYmgiBSi4/2azDm8Aetk65+eE2mYRwOw+ jyKWVIbGB7rcgaShkuoiRDWCgxDZsxaBMeNUhaTy9S55uCZzOTAlstctplsTrcOmgOOC cDZA== X-Gm-Message-State: AOAM533s4xUnUB8MplfVPJg009Qidkdtggr34Pc9TRXC3L6Igf9b/SaQ CsTiYVRCqzDp5xhcGpzBQBA/uzhCSfI= X-Google-Smtp-Source: ABdhPJyBlWtmtc4tl96/FN9hhh/0EGQw76vblNNqdgrvXQ9ASlbsBrmA1sjs37FQIR6PSr0lSTj0kmI75Eg= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:e5c8:b0:15e:c2e2:bff6 with SMTP id u8-20020a170902e5c800b0015ec2e2bff6mr6495658plf.74.1651704670974; Wed, 04 May 2022 15:51:10 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:04 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-59-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 058/128] KVM: selftests: Convert platform_info_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert platform_info_test to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. Signed-off-by: Sean Christopherson --- .../selftests/kvm/x86_64/platform_info_test.c | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/platform_info_test.c b/tool= s/testing/selftests/kvm/x86_64/platform_info_test.c index 1e89688cbbbf..0468a51c05f6 100644 --- a/tools/testing/selftests/kvm/x86_64/platform_info_test.c +++ b/tools/testing/selftests/kvm/x86_64/platform_info_test.c @@ -21,7 +21,6 @@ #include "kvm_util.h" #include "processor.h" =20 -#define VCPU_ID 0 #define MSR_PLATFORM_INFO_MAX_TURBO_RATIO 0xff00 =20 static void guest_code(void) @@ -45,18 +44,18 @@ static void set_msr_platform_info_enabled(struct kvm_vm= *vm, bool enable) vm_enable_cap(vm, &cap); } =20 -static void test_msr_platform_info_enabled(struct kvm_vm *vm) +static void test_msr_platform_info_enabled(struct kvm_vcpu *vcpu) { - struct kvm_run *run =3D vcpu_state(vm, VCPU_ID); + struct kvm_run *run =3D vcpu->run; struct ucall uc; =20 - set_msr_platform_info_enabled(vm, true); - vcpu_run(vm, VCPU_ID); + set_msr_platform_info_enabled(vcpu->vm, true); + vcpu_run(vcpu->vm, vcpu->id); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Exit_reason other than KVM_EXIT_IO: %u (%s),\n", run->exit_reason, exit_reason_str(run->exit_reason)); - get_ucall(vm, VCPU_ID, &uc); + get_ucall(vcpu->vm, vcpu->id, &uc); TEST_ASSERT(uc.cmd =3D=3D UCALL_SYNC, "Received ucall other than UCALL_SYNC: %lu\n", uc.cmd); TEST_ASSERT((uc.args[1] & MSR_PLATFORM_INFO_MAX_TURBO_RATIO) =3D=3D @@ -65,12 +64,12 @@ static void test_msr_platform_info_enabled(struct kvm_v= m *vm) MSR_PLATFORM_INFO_MAX_TURBO_RATIO); } =20 -static void test_msr_platform_info_disabled(struct kvm_vm *vm) +static void test_msr_platform_info_disabled(struct kvm_vcpu *vcpu) { - struct kvm_run *run =3D vcpu_state(vm, VCPU_ID); + struct kvm_run *run =3D vcpu->run; =20 - set_msr_platform_info_enabled(vm, false); - vcpu_run(vm, VCPU_ID); + set_msr_platform_info_enabled(vcpu->vm, false); + vcpu_run(vcpu->vm, vcpu->id); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_SHUTDOWN, "Exit_reason other than KVM_EXIT_SHUTDOWN: %u (%s)\n", run->exit_reason, @@ -79,6 +78,7 @@ static void test_msr_platform_info_disabled(struct kvm_vm= *vm) =20 int main(int argc, char *argv[]) { + struct kvm_vcpu *vcpu; struct kvm_vm *vm; int rv; uint64_t msr_platform_info; @@ -92,14 +92,14 @@ int main(int argc, char *argv[]) exit(KSFT_SKIP); } =20 - vm =3D vm_create_default(VCPU_ID, 0, guest_code); + vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); =20 - msr_platform_info =3D vcpu_get_msr(vm, VCPU_ID, MSR_PLATFORM_INFO); - vcpu_set_msr(vm, VCPU_ID, MSR_PLATFORM_INFO, + msr_platform_info =3D vcpu_get_msr(vm, vcpu->id, MSR_PLATFORM_INFO); + vcpu_set_msr(vm, vcpu->id, MSR_PLATFORM_INFO, msr_platform_info | MSR_PLATFORM_INFO_MAX_TURBO_RATIO); - test_msr_platform_info_enabled(vm); - test_msr_platform_info_disabled(vm); - vcpu_set_msr(vm, VCPU_ID, MSR_PLATFORM_INFO, msr_platform_info); + test_msr_platform_info_enabled(vcpu); + test_msr_platform_info_disabled(vcpu); + vcpu_set_msr(vm, vcpu->id, MSR_PLATFORM_INFO, msr_platform_info); =20 kvm_vm_free(vm); =20 --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 E084FC433EF for ; Wed, 4 May 2022 22:54:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379278AbiEDW6L (ORCPT ); Wed, 4 May 2022 18:58:11 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45412 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379572AbiEDWy5 (ORCPT ); Wed, 4 May 2022 18:54:57 -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 380A353E2E for ; Wed, 4 May 2022 15:51:13 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id q14-20020a17090a178e00b001dc970bf587so1943841pja.1 for ; Wed, 04 May 2022 15:51:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=KStJxbQXxEW7Z2FlFuAOa9BN6coGSiFbzvl2Gq1jN2A=; b=RNWe0l2kZGk/kFvcdyuQ07vf5mKrt91fj7IDzGGEeR6I0vwlWCLP3/rpyg5lhqL5HF bLOy2cYQ9yJ2Bh+d28jACVLlQBb9bdZlyq6W6deya+151Y0s+8w+fTAWW9GlIbB2GcYU jcQ4cAGpwQSVzX17ZbhWGp1PFtYU/BvMHXkrGUl71ejYC1UA2o8btqp2JD+DfPXjTtXQ izMgY2OuM00z7nr6WdwhusgS/TV9E7NhS4SbV1z6bDk/HY2HPA00jy0w6lCa2zg9JmeN C+SrOqcq2gSd+EVDZMjqcTj5kzIES7thFUr3dNhD4uonM0Rkmuss/ajk1pxxQedAzjqW DEeg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=KStJxbQXxEW7Z2FlFuAOa9BN6coGSiFbzvl2Gq1jN2A=; b=n1jvEN6L6/z+RoaGWYbSngJiBjMsaW9DwsjlCO7+ci9NLa5dj2uFfrIOrcbVtcsul/ Y3J5hFQR/BgtiNUbUv239BK4Ik/yTAGRA8QMFpCHtCYXDoAHJDTOfx9V63mb5OfBo0hl ePKb7J9DGcEk4gRIBRYo6WQ742HyBZeCd+0aKytIMb/1JwL1HiuXPdoadiZgB1uQRmh/ e/+iBJPGAKctPDyQfGqKe9DA212XXwuWKFFJ6GWqO8dBMwQ9buFM57n9vYx4W9VF8qjR 4kHFfX+cR8YDLkZJoHtSefxXeLYojvKKExMfArnyulaRuygA3pdLCJIOPE+6UHvVa43q Z14w== X-Gm-Message-State: AOAM532dVC3FtVo/fOXkLXVeIBr4G5vsP4O5I5xOaBJui15epTvK9FHc 0Y/4G+3NI/s2OzkXH0L6szIYDI9EPB4= X-Google-Smtp-Source: ABdhPJzEtY/7+wJ/MQgg8J1pYdbI3+lPeKCc+mHMAIUN6USXpmz0DNrEs9cuBBszzAbI6MsLHGVgKP+UgUw= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:c7d2:b0:1d9:34fe:10dc with SMTP id gf18-20020a17090ac7d200b001d934fe10dcmr2214850pjb.109.1651704672704; Wed, 04 May 2022 15:51:12 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:05 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-60-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 059/128] KVM: selftests: Convert vmx_nested_tsc_scaling_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert vmx_nested_tsc_scaling_test to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. Signed-off-by: Sean Christopherson --- .../kvm/x86_64/vmx_nested_tsc_scaling_test.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/vmx_nested_tsc_scaling_test= .c b/tools/testing/selftests/kvm/x86_64/vmx_nested_tsc_scaling_test.c index c35ada9f7f9c..c9cb29f06244 100644 --- a/tools/testing/selftests/kvm/x86_64/vmx_nested_tsc_scaling_test.c +++ b/tools/testing/selftests/kvm/x86_64/vmx_nested_tsc_scaling_test.c @@ -15,9 +15,6 @@ #include "vmx.h" #include "kselftest.h" =20 - -#define VCPU_ID 0 - /* L2 is scaled up (from L1's perspective) by this factor */ #define L2_SCALE_FACTOR 4ULL =20 @@ -150,6 +147,7 @@ static void stable_tsc_check_supported(void) =20 int main(int argc, char *argv[]) { + struct kvm_vcpu *vcpu; struct kvm_vm *vm; vm_vaddr_t vmx_pages_gva; =20 @@ -182,28 +180,28 @@ int main(int argc, char *argv[]) l0_tsc_freq =3D tsc_end - tsc_start; printf("real TSC frequency is around: %"PRIu64"\n", l0_tsc_freq); =20 - vm =3D vm_create_default(VCPU_ID, 0, (void *) l1_guest_code); + vm =3D vm_create_with_one_vcpu(&vcpu, l1_guest_code); vcpu_alloc_vmx(vm, &vmx_pages_gva); - vcpu_args_set(vm, VCPU_ID, 1, vmx_pages_gva); + vcpu_args_set(vm, vcpu->id, 1, vmx_pages_gva); =20 - tsc_khz =3D __vcpu_ioctl(vm, VCPU_ID, KVM_GET_TSC_KHZ, NULL); + tsc_khz =3D __vcpu_ioctl(vm, vcpu->id, KVM_GET_TSC_KHZ, NULL); TEST_ASSERT(tsc_khz !=3D -1, "vcpu ioctl KVM_GET_TSC_KHZ failed"); =20 /* scale down L1's TSC frequency */ - vcpu_ioctl(vm, VCPU_ID, KVM_SET_TSC_KHZ, + vcpu_ioctl(vm, vcpu->id, KVM_SET_TSC_KHZ, (void *) (tsc_khz / l1_scale_factor)); =20 for (;;) { - volatile struct kvm_run *run =3D vcpu_state(vm, VCPU_ID); + volatile struct kvm_run *run =3D vcpu->run; struct ucall uc; =20 - vcpu_run(vm, VCPU_ID); + vcpu_run(vm, vcpu->id); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Got exit_reason other than KVM_EXIT_IO: %u (%s)\n", run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vm, VCPU_ID, &uc)) { + switch (get_ucall(vm, vcpu->id, &uc)) { case UCALL_ABORT: TEST_FAIL("%s", (const char *) uc.args[0]); case UCALL_SYNC: --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 66F9FC4332F for ; Wed, 4 May 2022 22:56:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379838AbiEDW7E (ORCPT ); Wed, 4 May 2022 18:59:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45530 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379584AbiEDWy5 (ORCPT ); Wed, 4 May 2022 18:54:57 -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 42B8B54688 for ; Wed, 4 May 2022 15:51:15 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id gn21-20020a17090ac79500b001dc8a800410so1838566pjb.0 for ; Wed, 04 May 2022 15:51:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=l7RgxgcK25oFGZcZ40Qv2L/Egvma3T9JIfWOW4W25YI=; b=rvNJETqAvCr/W6REjHrnOcHJA0PIx/dBkgIKqtND9WeyY2wzNBFpS0RkwCm6Q1WxMP 69LYkKPydVsVb9dDSkORXNW/4ZtRl9xlNB0HiTl+HJ48QHJP/eYEX9F36dopMl1TJvjc VAwcTSC6eQ2iXk3JzJaNxU4Ia5QfybfsObsAnvk30cFrFx0401uRFeM7S4342ddTNfpe AKFVdMB2JNJNC0ispzq1thswx7uohAe4s69+lfykjDyhhycs9aqhhbrxeEKQFUyKLuCR ZdVlVltRyopoOVq5E1EvzPu93JCG1HR3CG0ZJKqRPojZhgFq/4sfGnd7xdElyPxiiMtO Q0xQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=l7RgxgcK25oFGZcZ40Qv2L/Egvma3T9JIfWOW4W25YI=; b=VeieOnIZ3bW8dZZT5oIoUAyBqfkdcZRguqzJO7fx1dqTFqedT0UPm++aRQErLxgK9V EJxRf6e3EHR0eLOmrVfeN5Ydmh2Qk6mECj9AuAsHCJZUUh96IiPNsEwzxtFSFVrqsCdZ k3KO7O7PCVeAAW3sBdkQtYsV3iyjzRKourAf/YSb7YoqrZa1jjL9rGOcakMNT+BkMqe/ SeTpXs5Qy33Ft6wWXjuGL2CftPtMtqY0lRc/YAm152N6YeCEMQfIlFvUZ0ita/iURX6u OPUwHypGuarVvlmsH51kPKnZNv1LuvhRlF7MTTbh9WM33qEWOSz8/LXHLArS+lxgJDVo ppvA== X-Gm-Message-State: AOAM532bPryEn/kJa7cDDB3VUBnS3QCsslEbDfKTi6PgObqHibpMLCzR hUadF8soCyTur4lYSwFZxST6iv4QWZA= X-Google-Smtp-Source: ABdhPJzAzczJf3PuYGvXg6q7ed5A7KZ4mIFwaUf4tasOkcS+rW9K3tQI8j/lhHCJAbyo4cMxOqOv1wX3Ei4= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90b:38d2:b0:1dc:9636:ad29 with SMTP id nn18-20020a17090b38d200b001dc9636ad29mr2194907pjb.193.1651704674553; Wed, 04 May 2022 15:51:14 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:06 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-61-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 060/128] KVM: selftests: Convert set_sregs_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert set_sregs_test to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. Note, this is a "functional" change in the sense that the test now creates a vCPU with vcpu_id=3D=3D0 instead of vcpu_id=3D=3D5. The non-zero VCPU_ID was 10= 0% arbitrary and added little to no validation coverage. If testing non-zero vCPU IDs is desirable for generic tests, that can be done in the future by tweaking the VM creation helpers. Signed-off-by: Sean Christopherson --- .../selftests/kvm/x86_64/set_sregs_test.c | 45 +++++++++---------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/set_sregs_test.c b/tools/te= sting/selftests/kvm/x86_64/set_sregs_test.c index f5e65db9f451..8a5c1f76287c 100644 --- a/tools/testing/selftests/kvm/x86_64/set_sregs_test.c +++ b/tools/testing/selftests/kvm/x86_64/set_sregs_test.c @@ -22,9 +22,7 @@ #include "kvm_util.h" #include "processor.h" =20 -#define VCPU_ID 5 - -static void test_cr4_feature_bit(struct kvm_vm *vm, struct kvm_sregs *orig, +static void test_cr4_feature_bit(struct kvm_vcpu *vcpu, struct kvm_sregs *= orig, uint64_t feature_bit) { struct kvm_sregs sregs; @@ -37,11 +35,11 @@ static void test_cr4_feature_bit(struct kvm_vm *vm, str= uct kvm_sregs *orig, memcpy(&sregs, orig, sizeof(sregs)); sregs.cr4 |=3D feature_bit; =20 - rc =3D _vcpu_sregs_set(vm, VCPU_ID, &sregs); + rc =3D _vcpu_sregs_set(vcpu->vm, vcpu->id, &sregs); TEST_ASSERT(rc, "KVM allowed unsupported CR4 bit (0x%lx)", feature_bit); =20 /* Sanity check that KVM didn't change anything. */ - vcpu_sregs_get(vm, VCPU_ID, &sregs); + vcpu_sregs_get(vcpu->vm, vcpu->id, &sregs); TEST_ASSERT(!memcmp(&sregs, orig, sizeof(sregs)), "KVM modified sregs"); } =20 @@ -83,6 +81,7 @@ static uint64_t calc_cr4_feature_bits(struct kvm_vm *vm) int main(int argc, char *argv[]) { struct kvm_sregs sregs; + struct kvm_vcpu *vcpu; struct kvm_vm *vm; uint64_t cr4; int rc; @@ -96,43 +95,43 @@ int main(int argc, char *argv[]) * the vCPU model, i.e. without doing KVM_SET_CPUID2. */ vm =3D vm_create_barebones(); - vm_vcpu_add(vm, VCPU_ID); + vcpu =3D vm_vcpu_add(vm, 0); =20 - vcpu_sregs_get(vm, VCPU_ID, &sregs); + vcpu_sregs_get(vm, vcpu->id, &sregs); =20 sregs.cr4 |=3D calc_cr4_feature_bits(vm); cr4 =3D sregs.cr4; =20 - rc =3D _vcpu_sregs_set(vm, VCPU_ID, &sregs); + rc =3D _vcpu_sregs_set(vm, vcpu->id, &sregs); TEST_ASSERT(!rc, "Failed to set supported CR4 bits (0x%lx)", cr4); =20 - vcpu_sregs_get(vm, VCPU_ID, &sregs); + vcpu_sregs_get(vm, vcpu->id, &sregs); TEST_ASSERT(sregs.cr4 =3D=3D cr4, "sregs.CR4 (0x%llx) !=3D CR4 (0x%lx)", sregs.cr4, cr4); =20 /* Verify all unsupported features are rejected by KVM. */ - test_cr4_feature_bit(vm, &sregs, X86_CR4_UMIP); - test_cr4_feature_bit(vm, &sregs, X86_CR4_LA57); - test_cr4_feature_bit(vm, &sregs, X86_CR4_VMXE); - test_cr4_feature_bit(vm, &sregs, X86_CR4_SMXE); - test_cr4_feature_bit(vm, &sregs, X86_CR4_FSGSBASE); - test_cr4_feature_bit(vm, &sregs, X86_CR4_PCIDE); - test_cr4_feature_bit(vm, &sregs, X86_CR4_OSXSAVE); - test_cr4_feature_bit(vm, &sregs, X86_CR4_SMEP); - test_cr4_feature_bit(vm, &sregs, X86_CR4_SMAP); - test_cr4_feature_bit(vm, &sregs, X86_CR4_PKE); + test_cr4_feature_bit(vcpu, &sregs, X86_CR4_UMIP); + test_cr4_feature_bit(vcpu, &sregs, X86_CR4_LA57); + test_cr4_feature_bit(vcpu, &sregs, X86_CR4_VMXE); + test_cr4_feature_bit(vcpu, &sregs, X86_CR4_SMXE); + test_cr4_feature_bit(vcpu, &sregs, X86_CR4_FSGSBASE); + test_cr4_feature_bit(vcpu, &sregs, X86_CR4_PCIDE); + test_cr4_feature_bit(vcpu, &sregs, X86_CR4_OSXSAVE); + test_cr4_feature_bit(vcpu, &sregs, X86_CR4_SMEP); + test_cr4_feature_bit(vcpu, &sregs, X86_CR4_SMAP); + test_cr4_feature_bit(vcpu, &sregs, X86_CR4_PKE); kvm_vm_free(vm); =20 /* Create a "real" VM and verify APIC_BASE can be set. */ - vm =3D vm_create_default(VCPU_ID, 0, NULL); + vm =3D vm_create_with_one_vcpu(&vcpu, NULL); =20 - vcpu_sregs_get(vm, VCPU_ID, &sregs); + vcpu_sregs_get(vm, vcpu->id, &sregs); sregs.apic_base =3D 1 << 10; - rc =3D _vcpu_sregs_set(vm, VCPU_ID, &sregs); + rc =3D _vcpu_sregs_set(vm, vcpu->id, &sregs); TEST_ASSERT(rc, "Set IA32_APIC_BASE to %llx (invalid)", sregs.apic_base); sregs.apic_base =3D 1 << 11; - rc =3D _vcpu_sregs_set(vm, VCPU_ID, &sregs); + rc =3D _vcpu_sregs_set(vm, vcpu->id, &sregs); TEST_ASSERT(!rc, "Couldn't set IA32_APIC_BASE to %llx (valid)", sregs.apic_base); =20 --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 77AEEC43217 for ; Wed, 4 May 2022 22:56:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379860AbiEDW7M (ORCPT ); Wed, 4 May 2022 18:59:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45444 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379588AbiEDWy6 (ORCPT ); Wed, 4 May 2022 18:54:58 -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 3BB695469F for ; Wed, 4 May 2022 15:51:16 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id z16-20020a17090a015000b001dbc8da29a1so1316766pje.7 for ; Wed, 04 May 2022 15:51:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=2DvNe/lVFNyApVfFfANOn9Tl2eup4/lMIPjudKEr87E=; b=o69HCDL7L9y8N0yXFyFpmsfEDs+XjEl+RqsLX0QxYAyFgoQ/gQpxJJwCaGcrOwnrJV /pnkDNL6od9ie1odmUGrQ/GAa4VUq9PP5qGq1ZFH3VWyFFImb7RCVE6fxVzSDek89Tzj ytHWpZxsOTYtrUpgOG6rmkFI7Gpi4+k0RtqJTzvqSbpnqBoXL5+64l2u+fBVqwPpYGIZ nBrMn9gsmJXWwltJVhYyCKazDyY5z2kG9U7Y+nz9S5vv3xBel+PYnD+aVVnX621qBxt9 83IJqZu4XNgo/OdwXzYT59EdMkbFc87T+XEM2wdg6IkA3OV5JVil+mE1THBIjQa31D87 fPHg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=2DvNe/lVFNyApVfFfANOn9Tl2eup4/lMIPjudKEr87E=; b=LT/Z3T6A0ioWdr7loQp5ua7gqJv5E11zXREre9dnaxp0sLDxAsy3y8Y2swxAyFxngP sXg+l14sHO50Pt2PhyulrxhLtggrRaRmqB2vysfJbKrosLfaIQwyBeOt12TU8nWK50WR Fy/bg3Y6mMWA60+82u8CTVhc5ReoJ0L4jtOqKOv3SXfhKCNLa/I44h/3aOJmxfqRZJdC 9+oz/uSSGZiX+47dpKxDGiItBDfHVhwqJFRCi82261+/7SooFsVKqIYuSGOt5mbWZdcb ZWnwJDoBRLREad/dmTlKaQquR34VcfpSAt45FRjpPbT00sKiqxw5CumwIYCDFnB2NwRY 5dgQ== X-Gm-Message-State: AOAM5321L/fp53e+ahUcOGdunzR4Igen9E/F9kK7CDmvV2t2/1YZG414 88biYMC5dDxpP4zaUNmrZ9yJ/ZuRciY= X-Google-Smtp-Source: ABdhPJyNGDBltd8Z8uN43eEbGfNYndtoCa9UZqGXdEKkkrOadszA3VyIwWBnMf044pzFX7FW/IspsToka/g= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:aa7:8893:0:b0:4fb:10e1:8976 with SMTP id z19-20020aa78893000000b004fb10e18976mr22726077pfe.36.1651704676317; Wed, 04 May 2022 15:51:16 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:07 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-62-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 061/128] KVM: selftests: Convert vmx_dirty_log_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert vmx_dirty_log_test to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. Note, this is a "functional" change in the sense that the test now creates a vCPU with vcpu_id=3D=3D0 instead of vcpu_id=3D=3D1. The non-zero VCPU_ID was 100% arbitrary and added little to no validation coverage. If testing non-zero vCPU IDs is desirable for generic tests, that can be done in the future by tweaking the VM creation helpers. Signed-off-by: Sean Christopherson --- .../selftests/kvm/x86_64/vmx_dirty_log_test.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/vmx_dirty_log_test.c b/tool= s/testing/selftests/kvm/x86_64/vmx_dirty_log_test.c index 68f26a8b4f42..fb8c7f7236f7 100644 --- a/tools/testing/selftests/kvm/x86_64/vmx_dirty_log_test.c +++ b/tools/testing/selftests/kvm/x86_64/vmx_dirty_log_test.c @@ -17,8 +17,6 @@ #include "processor.h" #include "vmx.h" =20 -#define VCPU_ID 1 - /* The memory slot index to track dirty pages */ #define TEST_MEM_SLOT_INDEX 1 #define TEST_MEM_PAGES 3 @@ -73,6 +71,7 @@ int main(int argc, char *argv[]) unsigned long *bmap; uint64_t *host_test_mem; =20 + struct kvm_vcpu *vcpu; struct kvm_vm *vm; struct kvm_run *run; struct ucall uc; @@ -81,10 +80,10 @@ int main(int argc, char *argv[]) nested_vmx_check_supported(); =20 /* Create VM */ - vm =3D vm_create_default(VCPU_ID, 0, l1_guest_code); + vm =3D vm_create_with_one_vcpu(&vcpu, l1_guest_code); vmx =3D vcpu_alloc_vmx(vm, &vmx_pages_gva); - vcpu_args_set(vm, VCPU_ID, 1, vmx_pages_gva); - run =3D vcpu_state(vm, VCPU_ID); + vcpu_args_set(vm, vcpu->id, 1, vmx_pages_gva); + run =3D vcpu->run; =20 /* Add an extra memory slot for testing dirty logging */ vm_userspace_mem_region_add(vm, VM_MEM_SRC_ANONYMOUS, @@ -116,13 +115,13 @@ int main(int argc, char *argv[]) =20 while (!done) { memset(host_test_mem, 0xaa, TEST_MEM_PAGES * 4096); - _vcpu_run(vm, VCPU_ID); + vcpu_run(vm, vcpu->id); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Unexpected exit reason: %u (%s),\n", run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vm, VCPU_ID, &uc)) { + switch (get_ucall(vm, vcpu->id, &uc)) { case UCALL_ABORT: TEST_FAIL("%s at %s:%ld", (const char *)uc.args[0], __FILE__, uc.args[1]); --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 C8E72C43217 for ; Wed, 4 May 2022 22:56:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234550AbiEDXAN (ORCPT ); Wed, 4 May 2022 19:00:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45330 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379601AbiEDWy6 (ORCPT ); Wed, 4 May 2022 18:54:58 -0400 Received: from mail-pl1-x64a.google.com (mail-pl1-x64a.google.com [IPv6:2607:f8b0:4864:20::64a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 184D053A43 for ; Wed, 4 May 2022 15:51:18 -0700 (PDT) Received: by mail-pl1-x64a.google.com with SMTP id x23-20020a170902b41700b0015ea144789fso1368881plr.13 for ; Wed, 04 May 2022 15:51:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=IrbcZ5mK2QD6IysigFqMLPTajcE5FF9g9KheO2xv8m0=; b=YnMTDmxgYPnGsWFuFaJ8/FOjCIpHIdCcI/0q37AwInmD7Zqq5l1weYR6KI8fpjMNWP NkyoRT8Vo9AJI4sXIwV6DDpkU5HhbhIFX2Qjd7S1LXXei+Zb9L+dYv6PgtiSR/TZkSqT E+IP58uXcp2MSxf8rBwNMGvT59xyCzOksnBPX22AYhJmiHfAIfvy+YNaxltfhdg50GOn uyqmGcAZ6ukrU6JwDDwnwQ0tBKplZgnGLaqWoaO75Tp0bWcWqTfOdbXfUCe916VdMPRS w0vUinHuO8ApvlyIrF3CnOq1ntobyBFhR9yb7ljfk7a6voGWVTkKLwz/eu11zWV4XBJT +wjA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=IrbcZ5mK2QD6IysigFqMLPTajcE5FF9g9KheO2xv8m0=; b=szI2XUypYZ3PSiF+x9fX2N9GXyvWoqc7OL/vSArjQspsYQacTfQC01VF3wwpOT2SNN KR8hEmUmO0orvdz3N9oJZv4nE0GOm6GSiExEfdJznQ/puhUyn5tn31jVaXCJlX2Ce2Lk onvMY9DiesWsKrQ3xc8ETOOEdboRPtotgkhzctujO78VPzNVnMmJTxuSYVlF015snHoe 9Jhbs5W0ISp5ekpAPLoPCZo8p/IM9gF6FUt2NbkUaB9YEIOHqgf0gL51BQ/H0gYdXv43 EZvkHe5OI8MZ9BIgm3hxuwdq/kHlHQXIoXshkXYMJThkVQZwHug8ZpPXn2yj/p8W98Xy W/tA== X-Gm-Message-State: AOAM5328PlElEKS09jLMv6nOZrSLzWfWbST6x6DfLpWN7WC8SDQsxt/i NfpogJA6onhwAPmLdlD9RcgVY5AW5mQ= X-Google-Smtp-Source: ABdhPJyDaRiGLOPTKEcAwhXlU1mIU+dh9loJlSRJj1hWcmfLKoiW3BjbwwlrcWXd1NqX+1vTT4EbVHydFME= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:e510:b0:1d9:ee23:9fa1 with SMTP id t16-20020a17090ae51000b001d9ee239fa1mr140241pjy.0.1651704678082; Wed, 04 May 2022 15:51:18 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:08 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-63-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 062/128] KVM: selftests: Convert vmx_close_while_nested_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert vmx_close_while_nested_test to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. Note, this is a "functional" change in the sense that the test now creates a vCPU with vcpu_id=3D=3D0 instead of vcpu_id=3D=3D5. The non-zero VCPU_ID was 100% arbitrary and added little to no validation coverage. If testing non-zero vCPU IDs is desirable for generic tests, that can be done in the future by tweaking the VM creation helpers. Opportunistically make the "vm" variable local, it is unused outside of main(). Signed-off-by: Sean Christopherson --- .../kvm/x86_64/vmx_close_while_nested_test.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/vmx_close_while_nested_test= .c b/tools/testing/selftests/kvm/x86_64/vmx_close_while_nested_test.c index edac8839e717..da0363076fba 100644 --- a/tools/testing/selftests/kvm/x86_64/vmx_close_while_nested_test.c +++ b/tools/testing/selftests/kvm/x86_64/vmx_close_while_nested_test.c @@ -18,15 +18,10 @@ =20 #include "kselftest.h" =20 -#define VCPU_ID 5 - enum { PORT_L0_EXIT =3D 0x2000, }; =20 -/* The virtual machine object. */ -static struct kvm_vm *vm; - static void l2_guest_code(void) { /* Exit to L0 */ @@ -53,20 +48,22 @@ static void l1_guest_code(struct vmx_pages *vmx_pages) int main(int argc, char *argv[]) { vm_vaddr_t vmx_pages_gva; + struct kvm_vcpu *vcpu; + struct kvm_vm *vm; =20 nested_vmx_check_supported(); =20 - vm =3D vm_create_default(VCPU_ID, 0, (void *) l1_guest_code); + vm =3D vm_create_with_one_vcpu(&vcpu, l1_guest_code); =20 /* Allocate VMX pages and shared descriptors (vmx_pages). */ vcpu_alloc_vmx(vm, &vmx_pages_gva); - vcpu_args_set(vm, VCPU_ID, 1, vmx_pages_gva); + vcpu_args_set(vm, vcpu->id, 1, vmx_pages_gva); =20 for (;;) { - volatile struct kvm_run *run =3D vcpu_state(vm, VCPU_ID); + volatile struct kvm_run *run =3D vcpu->run; struct ucall uc; =20 - vcpu_run(vm, VCPU_ID); + vcpu_run(vm, vcpu->id); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Got exit_reason other than KVM_EXIT_IO: %u (%s)\n", run->exit_reason, @@ -75,7 +72,7 @@ int main(int argc, char *argv[]) if (run->io.port =3D=3D PORT_L0_EXIT) break; =20 - switch (get_ucall(vm, VCPU_ID, &uc)) { + switch (get_ucall(vm, vcpu->id, &uc)) { case UCALL_ABORT: TEST_FAIL("%s", (const char *)uc.args[0]); /* NOT REACHED */ --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 38847C3527C for ; Wed, 4 May 2022 22:56:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1380507AbiEDXAE (ORCPT ); Wed, 4 May 2022 19:00:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45628 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379604AbiEDWy6 (ORCPT ); Wed, 4 May 2022 18:54:58 -0400 Received: from mail-pj1-x1049.google.com (mail-pj1-x1049.google.com [IPv6:2607:f8b0:4864:20::1049]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 83C1D53B44 for ; Wed, 4 May 2022 15:51:20 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id s5-20020a17090aa10500b001d9a8e99e3aso1318121pjp.2 for ; Wed, 04 May 2022 15:51:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=osVuhXRP0WpbN1nCJPDkaCVv1O6gRN/LXAvmrR54Xzk=; b=T681/jwu9yBl3Lym18iRwfxu/mvlBunXjcSO1k+a3QFwhoro9nstBRk0JzsgFmntby qgtMHN9idy4eGluc5UTVM6hJgvz84vMuhEuIMlXBU1Cp1op16zF5TqUDm+7iTosArlwK WzsyemWuXAcDvTbpJXhCWWsYy7y0rkUCakqEC85+9fgb/HYdtRlOkSGYCuqqEEc+N+hw +uBJqpz3cyxxrb2IWA/pfCi1qPjJjvBUvJQMI6Ic9fx3n4s8nTkBp7iNzfUKqmZG+i+O TsMOkLBdVsNjWs7YD5sinq+JcHP2Wv7vI6juusGO9QDrk86p73l3MuMkIbq/fIHv7Zlh 5aqQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=osVuhXRP0WpbN1nCJPDkaCVv1O6gRN/LXAvmrR54Xzk=; b=MSu/KTAcQ4UuStPcMzCIz2c/3JSftyvhd//1+tASJ18ISNzt9XJvGETKjiTvDSft/S 0ycixO6whj6GpK9vSni/OC5BsWy5W5trDePSVfs/rPFr/RC3NDiP2dwVqLGHhqiID7J2 gUgVGrmKgd4Lujw/iMvZzVc8rFibGxFB4YiBIoDv13pkTjrKJnmYZvH0abszqLJAyqMM ElI+880l6CjTy/fn70orSVsZk5hX7aPKkRMQi2rOWa3V5KlSX9NcCE0Ho2uU7eAQb9Rb MFBmH8mJPTRY1hwolAH3s/n65Z5rknfRXxza0sAs5mqSEYGndRdpA8LOToAnFLUcHFA/ dNPA== X-Gm-Message-State: AOAM532HrZtIAOmBL11NXco9v7359tj+ovDz/c8Z2f3ItOZcY0teI/tk QvAnJQa10doOY/K493EgJDlzgCPinWA= X-Google-Smtp-Source: ABdhPJzCCE6NHESL4hS1WDVmKh8WJJnLzejWEqNTuaDbovLT34EI9rHfFn8/t+LKl0cgDc9BQxwJSUUq7gY= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:2353:b0:50e:15cf:268c with SMTP id j19-20020a056a00235300b0050e15cf268cmr8643657pfj.5.1651704680191; Wed, 04 May 2022 15:51:20 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:09 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-64-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 063/128] KVM: selftests: Convert vmx_apic_access_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert vmx_apic_access_test to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. Opportunistically make the "vm" variable local, it is unused outside of main(). Signed-off-by: Sean Christopherson --- .../kvm/x86_64/vmx_apic_access_test.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/vmx_apic_access_test.c b/to= ols/testing/selftests/kvm/x86_64/vmx_apic_access_test.c index d438c4d3228a..10f9c86029e6 100644 --- a/tools/testing/selftests/kvm/x86_64/vmx_apic_access_test.c +++ b/tools/testing/selftests/kvm/x86_64/vmx_apic_access_test.c @@ -28,11 +28,6 @@ =20 #include "kselftest.h" =20 -#define VCPU_ID 0 - -/* The virtual machine object. */ -static struct kvm_vm *vm; - static void l2_guest_code(void) { /* Exit to L1 */ @@ -84,9 +79,12 @@ int main(int argc, char *argv[]) struct vmx_pages *vmx; bool done =3D false; =20 + struct kvm_vcpu *vcpu; + struct kvm_vm *vm; + nested_vmx_check_supported(); =20 - vm =3D vm_create_default(VCPU_ID, 0, (void *) l1_guest_code); + vm =3D vm_create_with_one_vcpu(&vcpu, l1_guest_code); =20 kvm_get_cpu_address_width(&paddr_width, &vaddr_width); high_gpa =3D (1ul << paddr_width) - getpagesize(); @@ -97,13 +95,13 @@ int main(int argc, char *argv[]) =20 vmx =3D vcpu_alloc_vmx(vm, &vmx_pages_gva); prepare_virtualize_apic_accesses(vmx, vm); - vcpu_args_set(vm, VCPU_ID, 2, vmx_pages_gva, high_gpa); + vcpu_args_set(vm, vcpu->id, 2, vmx_pages_gva, high_gpa); =20 while (!done) { - volatile struct kvm_run *run =3D vcpu_state(vm, VCPU_ID); + volatile struct kvm_run *run =3D vcpu->run; struct ucall uc; =20 - vcpu_run(vm, VCPU_ID); + vcpu_run(vm, vcpu->id); if (apic_access_addr =3D=3D high_gpa) { TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_INTERNAL_ERROR, @@ -121,7 +119,7 @@ int main(int argc, char *argv[]) run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vm, VCPU_ID, &uc)) { + switch (get_ucall(vm, vcpu->id, &uc)) { case UCALL_ABORT: TEST_FAIL("%s at %s:%ld", (const char *)uc.args[0], __FILE__, uc.args[1]); --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 9B313C43219 for ; Wed, 4 May 2022 22:56:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379880AbiEDW7Y (ORCPT ); Wed, 4 May 2022 18:59:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45806 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379620AbiEDWzC (ORCPT ); Wed, 4 May 2022 18:55:02 -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 5D83F53E01 for ; Wed, 4 May 2022 15:51:22 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id z16-20020a17090a015000b001dbc8da29a1so1316766pje.7 for ; Wed, 04 May 2022 15:51:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=qKw4Ti9nW07pbD2l/E1MeddYDwfHdD7IGfce1L1a7hk=; b=iJ8wwoUr9PEQS6y/cOFupgX34pu04rHoH/DloUUTlZtbRyLiksG+ldd56yze90AZA/ IjBBIQbsn73D+Pg+w4RCXsGAJurXb+LNgg2pqGGSUKe4nZFvyxmmCk/bPPMvMar0KZVu MNxnm1UGyLLlLAj3NBCV9YvarFIQRMdD4F3rk6BLXe4t2IgDBJ7J4aCPDJAMJ3YdIb6/ YEyo06tWgBEfIkkAbLMRRorBzmB/A3ZIT3U2Ml5Nv81mOxcAVttp4j6mvCuq4hKgomW2 +gKxN7TBggBpdLud3XItly4Jsa0M2rPMRYwINbY5yEtR/JTrkbfeN0OUz+xGxHTIE9Wg HnyA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=qKw4Ti9nW07pbD2l/E1MeddYDwfHdD7IGfce1L1a7hk=; b=kiq+8BgYPCyUxKJ0CWS0TLLHeZyCjL2mzxdQWWuQXXNV8FVNupklSPsbtbXXBHZRrp rSJ+bjEY9wcbYVvJU94hmmTaz2UPjnrKdRx+Eurpp5NDlSuRNTTV0ApK16sR6+bFRikr 7o8y2kpsFYpWji7hrlcVm4GchUiXpz0FXjxusUL7oDfTpn+XQTrxTT+oxK1tIUwoFbcJ 2QMtMrGYlNu/cXATVYjURyXLqn0Aw5jgWt6YF9Yg1uYwjXsTEd6sSbKmOqDDaqCaAAhK u+6JDOSk8mNe2e7oGMO4g26RKME0OMS9J8GK6f40sYxjuHSFNlYT2+ML8pEXmRCx5rWN 7R/w== X-Gm-Message-State: AOAM533+Ts6LCT/bBNh9vZ81DueFseikyq0wb/+JjJAI2cwxt7LpCruO OfqPRqenCiDAVdJbIyUiCUPCou7+dkw= X-Google-Smtp-Source: ABdhPJxZagYHjZNGBe5UXGJ8JD83FWCEHpdVseszlfDm2OJSVXfvmDQYowKrpmmZjf+WdGxH3Sh4lXRVHbg= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:1145:b0:4f6:3ebc:a79b with SMTP id b5-20020a056a00114500b004f63ebca79bmr22737083pfm.41.1651704681996; Wed, 04 May 2022 15:51:21 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:10 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-65-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 064/128] KVM: selftests: Convert userspace_msr_exit_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert userspace_msr_exit_test to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. Note, this is a "functional" change in the sense that the test now creates a vCPU with vcpu_id=3D=3D0 instead of vcpu_id=3D=3D1. The non-zero VCPU_ID was 100% arbitrary and added little to no validation coverage. If testing non-zero vCPU IDs is desirable for generic tests, that can be done in the future by tweaking the VM creation helpers. Opportunistically use vcpu_run() instead of _vcpu_run() with an open coded assert that KVM_RUN succeeded. Fix minor coding style violations too. Signed-off-by: Sean Christopherson --- .../kvm/x86_64/userspace_msr_exit_test.c | 165 +++++++++--------- 1 file changed, 78 insertions(+), 87 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/userspace_msr_exit_test.c b= /tools/testing/selftests/kvm/x86_64/userspace_msr_exit_test.c index e3e20e8848d0..e261c50fac5c 100644 --- a/tools/testing/selftests/kvm/x86_64/userspace_msr_exit_test.c +++ b/tools/testing/selftests/kvm/x86_64/userspace_msr_exit_test.c @@ -17,7 +17,6 @@ #define KVM_FEP_LENGTH 5 static int fep_available =3D 1; =20 -#define VCPU_ID 1 #define MSR_NON_EXISTENT 0x474f4f00 =20 static u64 deny_bits =3D 0; @@ -395,31 +394,22 @@ static void guest_ud_handler(struct ex_regs *regs) regs->rip +=3D KVM_FEP_LENGTH; } =20 -static void run_guest(struct kvm_vm *vm) +static void check_for_guest_assert(struct kvm_vcpu *vcpu) { - int rc; - - rc =3D _vcpu_run(vm, VCPU_ID); - TEST_ASSERT(rc =3D=3D 0, "vcpu_run failed: %d\n", rc); -} - -static void check_for_guest_assert(struct kvm_vm *vm) -{ - struct kvm_run *run =3D vcpu_state(vm, VCPU_ID); struct ucall uc; =20 - if (run->exit_reason =3D=3D KVM_EXIT_IO && - get_ucall(vm, VCPU_ID, &uc) =3D=3D UCALL_ABORT) { - TEST_FAIL("%s at %s:%ld", (const char *)uc.args[0], - __FILE__, uc.args[1]); + if (vcpu->run->exit_reason =3D=3D KVM_EXIT_IO && + get_ucall(vcpu->vm, vcpu->id, &uc) =3D=3D UCALL_ABORT) { + TEST_FAIL("%s at %s:%ld", + (const char *)uc.args[0], __FILE__, uc.args[1]); } } =20 -static void process_rdmsr(struct kvm_vm *vm, uint32_t msr_index) +static void process_rdmsr(struct kvm_vcpu *vcpu, uint32_t msr_index) { - struct kvm_run *run =3D vcpu_state(vm, VCPU_ID); + struct kvm_run *run =3D vcpu->run; =20 - check_for_guest_assert(vm); + check_for_guest_assert(vcpu); =20 TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_X86_RDMSR, "Unexpected exit reason: %u (%s),\n", @@ -450,11 +440,11 @@ static void process_rdmsr(struct kvm_vm *vm, uint32_t= msr_index) } } =20 -static void process_wrmsr(struct kvm_vm *vm, uint32_t msr_index) +static void process_wrmsr(struct kvm_vcpu *vcpu, uint32_t msr_index) { - struct kvm_run *run =3D vcpu_state(vm, VCPU_ID); + struct kvm_run *run =3D vcpu->run; =20 - check_for_guest_assert(vm); + check_for_guest_assert(vcpu); =20 TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_X86_WRMSR, "Unexpected exit reason: %u (%s),\n", @@ -481,43 +471,43 @@ static void process_wrmsr(struct kvm_vm *vm, uint32_t= msr_index) } } =20 -static void process_ucall_done(struct kvm_vm *vm) +static void process_ucall_done(struct kvm_vcpu *vcpu) { - struct kvm_run *run =3D vcpu_state(vm, VCPU_ID); + struct kvm_run *run =3D vcpu->run; struct ucall uc; =20 - check_for_guest_assert(vm); + check_for_guest_assert(vcpu); =20 TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Unexpected exit reason: %u (%s)", run->exit_reason, exit_reason_str(run->exit_reason)); =20 - TEST_ASSERT(get_ucall(vm, VCPU_ID, &uc) =3D=3D UCALL_DONE, + TEST_ASSERT(get_ucall(vcpu->vm, vcpu->id, &uc) =3D=3D UCALL_DONE, "Unexpected ucall command: %lu, expected UCALL_DONE (%d)", uc.cmd, UCALL_DONE); } =20 -static uint64_t process_ucall(struct kvm_vm *vm) +static uint64_t process_ucall(struct kvm_vcpu *vcpu) { - struct kvm_run *run =3D vcpu_state(vm, VCPU_ID); + struct kvm_run *run =3D vcpu->run; struct ucall uc =3D {}; =20 - check_for_guest_assert(vm); + check_for_guest_assert(vcpu); =20 TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Unexpected exit reason: %u (%s)", run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vm, VCPU_ID, &uc)) { + switch (get_ucall(vcpu->vm, vcpu->id, &uc)) { case UCALL_SYNC: break; case UCALL_ABORT: - check_for_guest_assert(vm); + check_for_guest_assert(vcpu); break; case UCALL_DONE: - process_ucall_done(vm); + process_ucall_done(vcpu); break; default: TEST_ASSERT(false, "Unexpected ucall"); @@ -526,41 +516,43 @@ static uint64_t process_ucall(struct kvm_vm *vm) return uc.cmd; } =20 -static void run_guest_then_process_rdmsr(struct kvm_vm *vm, uint32_t msr_i= ndex) +static void run_guest_then_process_rdmsr(struct kvm_vcpu *vcpu, + uint32_t msr_index) { - run_guest(vm); - process_rdmsr(vm, msr_index); + vcpu_run(vcpu->vm, vcpu->id); + process_rdmsr(vcpu, msr_index); } =20 -static void run_guest_then_process_wrmsr(struct kvm_vm *vm, uint32_t msr_i= ndex) +static void run_guest_then_process_wrmsr(struct kvm_vcpu *vcpu, + uint32_t msr_index) { - run_guest(vm); - process_wrmsr(vm, msr_index); + vcpu_run(vcpu->vm, vcpu->id); + process_wrmsr(vcpu, msr_index); } =20 -static uint64_t run_guest_then_process_ucall(struct kvm_vm *vm) +static uint64_t run_guest_then_process_ucall(struct kvm_vcpu *vcpu) { - run_guest(vm); - return process_ucall(vm); + vcpu_run(vcpu->vm, vcpu->id); + return process_ucall(vcpu); } =20 -static void run_guest_then_process_ucall_done(struct kvm_vm *vm) +static void run_guest_then_process_ucall_done(struct kvm_vcpu *vcpu) { - run_guest(vm); - process_ucall_done(vm); + vcpu_run(vcpu->vm, vcpu->id); + process_ucall_done(vcpu); } =20 -static void test_msr_filter_allow(void) { +static void test_msr_filter_allow(void) +{ struct kvm_enable_cap cap =3D { .cap =3D KVM_CAP_X86_USER_SPACE_MSR, .args[0] =3D KVM_MSR_EXIT_REASON_FILTER, }; + struct kvm_vcpu *vcpu; struct kvm_vm *vm; int rc; =20 - /* Create VM */ - vm =3D vm_create_default(VCPU_ID, 0, guest_code_filter_allow); - vcpu_set_cpuid(vm, VCPU_ID, kvm_get_supported_cpuid()); + vm =3D vm_create_with_one_vcpu(&vcpu, guest_code_filter_allow); =20 rc =3D kvm_check_cap(KVM_CAP_X86_USER_SPACE_MSR); TEST_ASSERT(rc, "KVM_CAP_X86_USER_SPACE_MSR is available"); @@ -572,43 +564,43 @@ static void test_msr_filter_allow(void) { vm_ioctl(vm, KVM_X86_SET_MSR_FILTER, &filter_allow); =20 vm_init_descriptor_tables(vm); - vcpu_init_descriptor_tables(vm, VCPU_ID); + vcpu_init_descriptor_tables(vm, vcpu->id); =20 vm_install_exception_handler(vm, GP_VECTOR, guest_gp_handler); =20 /* Process guest code userspace exits. */ - run_guest_then_process_rdmsr(vm, MSR_IA32_XSS); - run_guest_then_process_wrmsr(vm, MSR_IA32_XSS); - run_guest_then_process_wrmsr(vm, MSR_IA32_XSS); + run_guest_then_process_rdmsr(vcpu, MSR_IA32_XSS); + run_guest_then_process_wrmsr(vcpu, MSR_IA32_XSS); + run_guest_then_process_wrmsr(vcpu, MSR_IA32_XSS); =20 - run_guest_then_process_rdmsr(vm, MSR_IA32_FLUSH_CMD); - run_guest_then_process_wrmsr(vm, MSR_IA32_FLUSH_CMD); - run_guest_then_process_wrmsr(vm, MSR_IA32_FLUSH_CMD); + run_guest_then_process_rdmsr(vcpu, MSR_IA32_FLUSH_CMD); + run_guest_then_process_wrmsr(vcpu, MSR_IA32_FLUSH_CMD); + run_guest_then_process_wrmsr(vcpu, MSR_IA32_FLUSH_CMD); =20 - run_guest_then_process_wrmsr(vm, MSR_NON_EXISTENT); - run_guest_then_process_rdmsr(vm, MSR_NON_EXISTENT); + run_guest_then_process_wrmsr(vcpu, MSR_NON_EXISTENT); + run_guest_then_process_rdmsr(vcpu, MSR_NON_EXISTENT); =20 vm_install_exception_handler(vm, UD_VECTOR, guest_ud_handler); - run_guest(vm); + vcpu_run(vm, vcpu->id); vm_install_exception_handler(vm, UD_VECTOR, NULL); =20 - if (process_ucall(vm) !=3D UCALL_DONE) { + if (process_ucall(vcpu) !=3D UCALL_DONE) { vm_install_exception_handler(vm, GP_VECTOR, guest_fep_gp_handler); =20 /* Process emulated rdmsr and wrmsr instructions. */ - run_guest_then_process_rdmsr(vm, MSR_IA32_XSS); - run_guest_then_process_wrmsr(vm, MSR_IA32_XSS); - run_guest_then_process_wrmsr(vm, MSR_IA32_XSS); + run_guest_then_process_rdmsr(vcpu, MSR_IA32_XSS); + run_guest_then_process_wrmsr(vcpu, MSR_IA32_XSS); + run_guest_then_process_wrmsr(vcpu, MSR_IA32_XSS); =20 - run_guest_then_process_rdmsr(vm, MSR_IA32_FLUSH_CMD); - run_guest_then_process_wrmsr(vm, MSR_IA32_FLUSH_CMD); - run_guest_then_process_wrmsr(vm, MSR_IA32_FLUSH_CMD); + run_guest_then_process_rdmsr(vcpu, MSR_IA32_FLUSH_CMD); + run_guest_then_process_wrmsr(vcpu, MSR_IA32_FLUSH_CMD); + run_guest_then_process_wrmsr(vcpu, MSR_IA32_FLUSH_CMD); =20 - run_guest_then_process_wrmsr(vm, MSR_NON_EXISTENT); - run_guest_then_process_rdmsr(vm, MSR_NON_EXISTENT); + run_guest_then_process_wrmsr(vcpu, MSR_NON_EXISTENT); + run_guest_then_process_rdmsr(vcpu, MSR_NON_EXISTENT); =20 /* Confirm the guest completed without issues. */ - run_guest_then_process_ucall_done(vm); + run_guest_then_process_ucall_done(vcpu); } else { printf("To run the instruction emulated tests set the module parameter '= kvm.force_emulation_prefix=3D1'\n"); } @@ -616,16 +608,16 @@ static void test_msr_filter_allow(void) { kvm_vm_free(vm); } =20 -static int handle_ucall(struct kvm_vm *vm) +static int handle_ucall(struct kvm_vcpu *vcpu) { struct ucall uc; =20 - switch (get_ucall(vm, VCPU_ID, &uc)) { + switch (get_ucall(vcpu->vm, vcpu->id, &uc)) { case UCALL_ABORT: TEST_FAIL("Guest assertion not met"); break; case UCALL_SYNC: - vm_ioctl(vm, KVM_X86_SET_MSR_FILTER, &no_filter_deny); + vm_ioctl(vcpu->vm, KVM_X86_SET_MSR_FILTER, &no_filter_deny); break; case UCALL_DONE: return 1; @@ -673,21 +665,21 @@ static void handle_wrmsr(struct kvm_run *run) } } =20 -static void test_msr_filter_deny(void) { +static void test_msr_filter_deny(void) +{ struct kvm_enable_cap cap =3D { .cap =3D KVM_CAP_X86_USER_SPACE_MSR, .args[0] =3D KVM_MSR_EXIT_REASON_INVAL | KVM_MSR_EXIT_REASON_UNKNOWN | KVM_MSR_EXIT_REASON_FILTER, }; + struct kvm_vcpu *vcpu; struct kvm_vm *vm; struct kvm_run *run; int rc; =20 - /* Create VM */ - vm =3D vm_create_default(VCPU_ID, 0, guest_code_filter_deny); - vcpu_set_cpuid(vm, VCPU_ID, kvm_get_supported_cpuid()); - run =3D vcpu_state(vm, VCPU_ID); + vm =3D vm_create_with_one_vcpu(&vcpu, guest_code_filter_deny); + run =3D vcpu->run; =20 rc =3D kvm_check_cap(KVM_CAP_X86_USER_SPACE_MSR); TEST_ASSERT(rc, "KVM_CAP_X86_USER_SPACE_MSR is available"); @@ -700,9 +692,7 @@ static void test_msr_filter_deny(void) { vm_ioctl(vm, KVM_X86_SET_MSR_FILTER, &filter_deny); =20 while (1) { - rc =3D _vcpu_run(vm, VCPU_ID); - - TEST_ASSERT(rc =3D=3D 0, "vcpu_run failed: %d\n", rc); + vcpu_run(vm, vcpu->id); =20 switch (run->exit_reason) { case KVM_EXIT_X86_RDMSR: @@ -712,7 +702,7 @@ static void test_msr_filter_deny(void) { handle_wrmsr(run); break; case KVM_EXIT_IO: - if (handle_ucall(vm)) + if (handle_ucall(vcpu)) goto done; break; } @@ -726,17 +716,17 @@ static void test_msr_filter_deny(void) { kvm_vm_free(vm); } =20 -static void test_msr_permission_bitmap(void) { +static void test_msr_permission_bitmap(void) +{ struct kvm_enable_cap cap =3D { .cap =3D KVM_CAP_X86_USER_SPACE_MSR, .args[0] =3D KVM_MSR_EXIT_REASON_FILTER, }; + struct kvm_vcpu *vcpu; struct kvm_vm *vm; int rc; =20 - /* Create VM */ - vm =3D vm_create_default(VCPU_ID, 0, guest_code_permission_bitmap); - vcpu_set_cpuid(vm, VCPU_ID, kvm_get_supported_cpuid()); + vm =3D vm_create_with_one_vcpu(&vcpu, guest_code_permission_bitmap); =20 rc =3D kvm_check_cap(KVM_CAP_X86_USER_SPACE_MSR); TEST_ASSERT(rc, "KVM_CAP_X86_USER_SPACE_MSR is available"); @@ -746,11 +736,12 @@ static void test_msr_permission_bitmap(void) { TEST_ASSERT(rc, "KVM_CAP_X86_MSR_FILTER is available"); =20 vm_ioctl(vm, KVM_X86_SET_MSR_FILTER, &filter_fs); - run_guest_then_process_rdmsr(vm, MSR_FS_BASE); - TEST_ASSERT(run_guest_then_process_ucall(vm) =3D=3D UCALL_SYNC, "Expected= ucall state to be UCALL_SYNC."); + run_guest_then_process_rdmsr(vcpu, MSR_FS_BASE); + TEST_ASSERT(run_guest_then_process_ucall(vcpu) =3D=3D UCALL_SYNC, + "Expected ucall state to be UCALL_SYNC."); vm_ioctl(vm, KVM_X86_SET_MSR_FILTER, &filter_gs); - run_guest_then_process_rdmsr(vm, MSR_GS_BASE); - run_guest_then_process_ucall_done(vm); + run_guest_then_process_rdmsr(vcpu, MSR_GS_BASE); + run_guest_then_process_ucall_done(vcpu); =20 kvm_vm_free(vm); } --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 F3EA5C433F5 for ; Wed, 4 May 2022 22:57:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240153AbiEDXBG (ORCPT ); Wed, 4 May 2022 19:01:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45362 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379475AbiEDWzP (ORCPT ); Wed, 4 May 2022 18:55:15 -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 1A13254180 for ; Wed, 4 May 2022 15:51:24 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id q14-20020a17090a178e00b001dc970bf587so1943841pja.1 for ; Wed, 04 May 2022 15:51:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=VfF+qu4NBn2WU10IrpaRgWEMCJ3uSkBYIlbisDqeCTU=; b=BQQwTh22N5a2BCrol9MzuIpKxSzSmRgbQYgoefbnNP4rkxJeOiiWuGT06a1BmPtNN/ niiSCabObYe6G3aRLzILXi4N1AA5oiDng7zAVBuJ9HMuxha6Mj01SB7G8MJz05muJ9o0 U9JJDULdoUElIaRGGxOrtw750C4UxOzhK6FnWBggAo4XKaMhtfYwf6lvfb/pGu3fnS5t HRZ/IkIaqvaf7CzLLDkLEy8tKLXnfTpCnwYdrfKTtbUR1sJtcUun9dYcm6wIUL93M2xc AkQ2Sa+ykLx+rggE8FLD2tv7LhioLZNXS5aBR/VG6EWgUVEzfC/utW3Kc6z0lLOTAjb+ GIng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=VfF+qu4NBn2WU10IrpaRgWEMCJ3uSkBYIlbisDqeCTU=; b=Ki1k1gIWt+t2Q20XUN+lW7tkOfxkFFzNrC2yVgvPTARKc/nGizO/ASl6MkH8W4y2Fe OC+HsCMT5ZHwkUFi5OyKQC8plGz3uPoIrXQncUWEB+Pakjkoh02D0ucDDTMh1R7EGJdU 3FF9zGzVGNfz4JuH78yOr5BU+E6VsN+/MpJKCraS5rwRKQ4eNbRCej+p+75XIdgVp4bP vZ/6Nn3oq57MGHyp8pBPB5U5YTM1ozEwgUDGqDUHdJB6MTaf7UOz0c/WtMWcTye1Q+hB /DGe2yP9uHG3tYy8YA1h21GCFzvDDexYzhccCRp6zLcw4zRm9O7WcCJyovaRiKeB+u/v ZPRQ== X-Gm-Message-State: AOAM531V1zTxDscFPGsoe7/9niRkZb/4RO8N4rJzr2H5uYBPjLkZ3ION cYbEMsePEpg64deIniTZHOkTMTjwDF0= X-Google-Smtp-Source: ABdhPJwKAjHvkXGwDJzSyVYavQh0IQUj+ob3hyNrc9umVOEUOPHulxsMvBFzbEQpHscz5PDAnt1WXXF5Xd0= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:aa7:88d2:0:b0:50a:cf7d:6ff1 with SMTP id k18-20020aa788d2000000b0050acf7d6ff1mr23417886pff.67.1651704683611; Wed, 04 May 2022 15:51:23 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:11 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-66-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 065/128] KVM: selftests: Convert vmx_exception_with_invalid_guest_state away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert vmx_exception_with_invalid_guest_state to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. Signed-off-by: Sean Christopherson --- .../vmx_exception_with_invalid_guest_state.c | 62 +++++++++++-------- 1 file changed, 36 insertions(+), 26 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/vmx_exception_with_invalid_= guest_state.c b/tools/testing/selftests/kvm/x86_64/vmx_exception_with_inval= id_guest_state.c index 27a850f3d7ce..70b30583e50d 100644 --- a/tools/testing/selftests/kvm/x86_64/vmx_exception_with_invalid_guest_s= tate.c +++ b/tools/testing/selftests/kvm/x86_64/vmx_exception_with_invalid_guest_s= tate.c @@ -10,10 +10,6 @@ =20 #include "kselftest.h" =20 -#define VCPU_ID 0 - -static struct kvm_vm *vm; - static void guest_ud_handler(struct ex_regs *regs) { /* Loop on the ud2 until guest state is made invalid. */ @@ -24,11 +20,11 @@ static void guest_code(void) asm volatile("ud2"); } =20 -static void __run_vcpu_with_invalid_state(void) +static void __run_vcpu_with_invalid_state(struct kvm_vcpu *vcpu) { - struct kvm_run *run =3D vcpu_state(vm, VCPU_ID); + struct kvm_run *run =3D vcpu->run; =20 - vcpu_run(vm, VCPU_ID); + vcpu_run(vcpu->vm, vcpu->id); =20 TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_INTERNAL_ERROR, "Expected KVM_EXIT_INTERNAL_ERROR, got %d (%s)\n", @@ -38,15 +34,15 @@ static void __run_vcpu_with_invalid_state(void) run->emulation_failure.suberror); } =20 -static void run_vcpu_with_invalid_state(void) +static void run_vcpu_with_invalid_state(struct kvm_vcpu *vcpu) { /* * Always run twice to verify KVM handles the case where _KVM_ queues * an exception with invalid state and then exits to userspace, i.e. * that KVM doesn't explode if userspace ignores the initial error. */ - __run_vcpu_with_invalid_state(); - __run_vcpu_with_invalid_state(); + __run_vcpu_with_invalid_state(vcpu); + __run_vcpu_with_invalid_state(vcpu); } =20 static void set_timer(void) @@ -59,33 +55,43 @@ static void set_timer(void) ASSERT_EQ(setitimer(ITIMER_REAL, &timer, NULL), 0); } =20 -static void set_or_clear_invalid_guest_state(bool set) +static void set_or_clear_invalid_guest_state(struct kvm_vcpu *vcpu, bool s= et) { static struct kvm_sregs sregs; =20 if (!sregs.cr0) - vcpu_sregs_get(vm, VCPU_ID, &sregs); + vcpu_sregs_get(vcpu->vm, vcpu->id, &sregs); sregs.tr.unusable =3D !!set; - vcpu_sregs_set(vm, VCPU_ID, &sregs); + vcpu_sregs_set(vcpu->vm, vcpu->id, &sregs); } =20 -static void set_invalid_guest_state(void) +static void set_invalid_guest_state(struct kvm_vcpu *vcpu) { - set_or_clear_invalid_guest_state(true); + set_or_clear_invalid_guest_state(vcpu, true); } =20 -static void clear_invalid_guest_state(void) +static void clear_invalid_guest_state(struct kvm_vcpu *vcpu) { - set_or_clear_invalid_guest_state(false); + set_or_clear_invalid_guest_state(vcpu, false); +} + +static struct kvm_vcpu *get_set_sigalrm_vcpu(struct kvm_vcpu *__vcpu) +{ + static struct kvm_vcpu *vcpu =3D NULL; + + if (__vcpu) + vcpu =3D __vcpu; + return vcpu; } =20 static void sigalrm_handler(int sig) { + struct kvm_vcpu *vcpu =3D get_set_sigalrm_vcpu(NULL); struct kvm_vcpu_events events; =20 TEST_ASSERT(sig =3D=3D SIGALRM, "Unexpected signal =3D %d", sig); =20 - vcpu_events_get(vm, VCPU_ID, &events); + vcpu_events_get(vcpu->vm, vcpu->id, &events); =20 /* * If an exception is pending, attempt KVM_RUN with invalid guest, @@ -93,8 +99,8 @@ static void sigalrm_handler(int sig) * between KVM queueing an exception and re-entering the guest. */ if (events.exception.pending) { - set_invalid_guest_state(); - run_vcpu_with_invalid_state(); + set_invalid_guest_state(vcpu); + run_vcpu_with_invalid_state(vcpu); } else { set_timer(); } @@ -102,15 +108,19 @@ static void sigalrm_handler(int sig) =20 int main(int argc, char *argv[]) { + struct kvm_vcpu *vcpu; + struct kvm_vm *vm; + if (!is_intel_cpu() || vm_is_unrestricted_guest(NULL)) { print_skip("Must be run with kvm_intel.unrestricted_guest=3D0"); exit(KSFT_SKIP); } =20 - vm =3D vm_create_default(VCPU_ID, 0, (void *)guest_code); + vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); + get_set_sigalrm_vcpu(vcpu); =20 vm_init_descriptor_tables(vm); - vcpu_init_descriptor_tables(vm, VCPU_ID); + vcpu_init_descriptor_tables(vm, vcpu->id); =20 vm_install_exception_handler(vm, UD_VECTOR, guest_ud_handler); =20 @@ -119,8 +129,8 @@ int main(int argc, char *argv[]) * KVM_RUN should induce a TRIPLE_FAULT in L2 as KVM doesn't support * emulating invalid guest state for L2. */ - set_invalid_guest_state(); - run_vcpu_with_invalid_state(); + set_invalid_guest_state(vcpu); + run_vcpu_with_invalid_state(vcpu); =20 /* * Verify KVM also handles the case where userspace gains control while @@ -129,11 +139,11 @@ int main(int argc, char *argv[]) * guest with invalid state when the handler interrupts KVM with an * exception pending. */ - clear_invalid_guest_state(); + clear_invalid_guest_state(vcpu); TEST_ASSERT(signal(SIGALRM, sigalrm_handler) !=3D SIG_ERR, "Failed to register SIGALRM handler, errno =3D %d (%s)", errno, strerror(errno)); =20 set_timer(); - run_vcpu_with_invalid_state(); + run_vcpu_with_invalid_state(vcpu); } --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 89B62C4332F for ; Wed, 4 May 2022 22:56:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379819AbiEDXAT (ORCPT ); Wed, 4 May 2022 19:00:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46978 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379524AbiEDWzf (ORCPT ); Wed, 4 May 2022 18:55:35 -0400 Received: from mail-oa1-x4a.google.com (mail-oa1-x4a.google.com [IPv6:2001:4860:4864:20::4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C2D8A546B8 for ; Wed, 4 May 2022 15:51:26 -0700 (PDT) Received: by mail-oa1-x4a.google.com with SMTP id 586e51a60fabf-e998961411so1264505fac.18 for ; Wed, 04 May 2022 15:51:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=ZaWha1EeyIL7FKB60EXSRNFE0pV0CvjL4PHx9TUFww4=; b=G6+q6mLGs0V5pDzrmeYwzNADY5R5yeTtkZhWA9zQFnWZQOv+QtZxKiGDselDXmPZFF PHATl+/DIKHmAIZukeY1hsRx86WJ6ZgVo1TVGIs8A0MiWwYCcl8Nc7bdCfFq67h4QU5r W3xCS4PmJf9hJ1P0YYaZcOIP6dAWGILzAxe9te7KinFM8Rk75Tz+yRGPaaGibjzKofzM EHDlGR9VFRamWJFhQ8GeGIvihBCh8M+zAH7Wl39x6cknAeJ/zfrehEC9ouat2thwc5Lu lv+7A+EIZp6CyRy0Qjyp7buZwqWSVo8ZluNnsJdsRB0ReSxfGH+s7zNrSdWWlPZBdbSq NxOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=ZaWha1EeyIL7FKB60EXSRNFE0pV0CvjL4PHx9TUFww4=; b=m1sva5zdqpZqQ5geuVP9obsm39IlVZ1LFvhKVyWxV9j6Osg/EOo1Ehg+LxdBjXrFTn aRf+L1hVSzJsq0N4QVN7ji/X96e+0WGMepV4BCNkVYQPqMb+UJTU1ERYqfK2CZqPxxSS ZNK8eeszc4Sd+PReBJqFrxn4VEAjZmB38SqyansaAX8MMClPATM+ztcoU0U+tErBX1Ac cGW1BSHiXzMGnfTnRn55aDc3bO0MV5Qb6kmE/kQp/1G8pNDsbODUw2834KLXOu/xfubK ceBpzoUIxkdWvXtrvnZ31bF+0KjiMYWWqv/z99+O2T3VOXVOBj/C2hHMMihpUVySqSFO 9LGA== X-Gm-Message-State: AOAM530Ez/WuOpscEAlTeqHNZVgMa0Jt0YHNPLiJR64Vd+gs3qLfzkVF Xnsgho8REeSky+uQStfy7/a0Qg7mfH4= X-Google-Smtp-Source: ABdhPJzXF1RYIs3qoiLVIRYCjDd3Km64DqLTYRgtHgx1klEeVTnlbuMQtP+HYBWBTsHu4NVgTVGiWRnn2yE= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6870:d18e:b0:e9:76ac:988b with SMTP id a14-20020a056870d18e00b000e976ac988bmr918839oac.290.1651704685452; Wed, 04 May 2022 15:51:25 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:12 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-67-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 066/128] KVM: selftests: Convert tsc_msrs_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert tsc_msrs_test to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. Signed-off-by: Sean Christopherson --- .../selftests/kvm/x86_64/tsc_msrs_test.c | 35 +++++++++---------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/tsc_msrs_test.c b/tools/tes= ting/selftests/kvm/x86_64/tsc_msrs_test.c index a426078b16a3..3b7bf660eced 100644 --- a/tools/testing/selftests/kvm/x86_64/tsc_msrs_test.c +++ b/tools/testing/selftests/kvm/x86_64/tsc_msrs_test.c @@ -9,14 +9,12 @@ #include "kvm_util.h" #include "processor.h" =20 -#define VCPU_ID 0 - #define UNITY (1ull << 30) #define HOST_ADJUST (UNITY * 64) #define GUEST_STEP (UNITY * 4) #define ROUND(x) ((x + UNITY / 2) & -UNITY) #define rounded_rdmsr(x) ROUND(rdmsr(x)) -#define rounded_host_rdmsr(x) ROUND(vcpu_get_msr(vm, 0, x)) +#define rounded_host_rdmsr(x) ROUND(vcpu_get_msr(vm, vcpu->id, x)) =20 static void guest_code(void) { @@ -66,15 +64,13 @@ static void guest_code(void) GUEST_DONE(); } =20 -static void run_vcpu(struct kvm_vm *vm, uint32_t vcpuid, int stage) +static void run_vcpu(struct kvm_vcpu *vcpu, int stage) { struct ucall uc; =20 - vcpu_args_set(vm, vcpuid, 1, vcpuid); + vcpu_run(vcpu->vm, vcpu->id); =20 - vcpu_ioctl(vm, vcpuid, KVM_RUN, NULL); - - switch (get_ucall(vm, vcpuid, &uc)) { + switch (get_ucall(vcpu->vm, vcpu->id, &uc)) { case UCALL_SYNC: TEST_ASSERT(!strcmp((const char *)uc.args[0], "hello") && uc.args[1] =3D=3D stage + 1, "Stage %d: Unexpected register values = vmexit, got %lx", @@ -88,29 +84,30 @@ static void run_vcpu(struct kvm_vm *vm, uint32_t vcpuid= , int stage) __FILE__, uc.args[1], uc.args[2], uc.args[3]); default: TEST_ASSERT(false, "Unexpected exit: %s", - exit_reason_str(vcpu_state(vm, vcpuid)->exit_reason)); + exit_reason_str(vcpu->run->exit_reason)); } } =20 int main(void) { + struct kvm_vcpu *vcpu; struct kvm_vm *vm; uint64_t val; =20 - vm =3D vm_create_default(VCPU_ID, 0, guest_code); + vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); =20 val =3D 0; ASSERT_EQ(rounded_host_rdmsr(MSR_IA32_TSC), val); ASSERT_EQ(rounded_host_rdmsr(MSR_IA32_TSC_ADJUST), val); =20 /* Guest: writes to MSR_IA32_TSC affect both MSRs. */ - run_vcpu(vm, VCPU_ID, 1); + run_vcpu(vcpu, 1); val =3D 1ull * GUEST_STEP; ASSERT_EQ(rounded_host_rdmsr(MSR_IA32_TSC), val); ASSERT_EQ(rounded_host_rdmsr(MSR_IA32_TSC_ADJUST), val); =20 /* Guest: writes to MSR_IA32_TSC_ADJUST affect both MSRs. */ - run_vcpu(vm, VCPU_ID, 2); + run_vcpu(vcpu, 2); val =3D 2ull * GUEST_STEP; ASSERT_EQ(rounded_host_rdmsr(MSR_IA32_TSC), val); ASSERT_EQ(rounded_host_rdmsr(MSR_IA32_TSC_ADJUST), val); @@ -119,18 +116,18 @@ int main(void) * Host: writes to MSR_IA32_TSC set the host-side offset * and therefore do not change MSR_IA32_TSC_ADJUST. */ - vcpu_set_msr(vm, 0, MSR_IA32_TSC, HOST_ADJUST + val); + vcpu_set_msr(vm, vcpu->id, MSR_IA32_TSC, HOST_ADJUST + val); ASSERT_EQ(rounded_host_rdmsr(MSR_IA32_TSC), HOST_ADJUST + val); ASSERT_EQ(rounded_host_rdmsr(MSR_IA32_TSC_ADJUST), val); - run_vcpu(vm, VCPU_ID, 3); + run_vcpu(vcpu, 3); =20 /* Host: writes to MSR_IA32_TSC_ADJUST do not modify the TSC. */ - vcpu_set_msr(vm, 0, MSR_IA32_TSC_ADJUST, UNITY * 123456); + vcpu_set_msr(vm, vcpu->id, MSR_IA32_TSC_ADJUST, UNITY * 123456); ASSERT_EQ(rounded_host_rdmsr(MSR_IA32_TSC), HOST_ADJUST + val); - ASSERT_EQ(vcpu_get_msr(vm, 0, MSR_IA32_TSC_ADJUST), UNITY * 123456); + ASSERT_EQ(vcpu_get_msr(vm, vcpu->id, MSR_IA32_TSC_ADJUST), UNITY * 123456= ); =20 /* Restore previous value. */ - vcpu_set_msr(vm, 0, MSR_IA32_TSC_ADJUST, val); + vcpu_set_msr(vm, vcpu->id, MSR_IA32_TSC_ADJUST, val); ASSERT_EQ(rounded_host_rdmsr(MSR_IA32_TSC), HOST_ADJUST + val); ASSERT_EQ(rounded_host_rdmsr(MSR_IA32_TSC_ADJUST), val); =20 @@ -138,7 +135,7 @@ int main(void) * Guest: writes to MSR_IA32_TSC_ADJUST do not destroy the * host-side offset and affect both MSRs. */ - run_vcpu(vm, VCPU_ID, 4); + run_vcpu(vcpu, 4); val =3D 3ull * GUEST_STEP; ASSERT_EQ(rounded_host_rdmsr(MSR_IA32_TSC), HOST_ADJUST + val); ASSERT_EQ(rounded_host_rdmsr(MSR_IA32_TSC_ADJUST), val); @@ -147,7 +144,7 @@ int main(void) * Guest: writes to MSR_IA32_TSC affect both MSRs, so the host-side * offset is now visible in MSR_IA32_TSC_ADJUST. */ - run_vcpu(vm, VCPU_ID, 5); + run_vcpu(vcpu, 5); val =3D 4ull * GUEST_STEP; ASSERT_EQ(rounded_host_rdmsr(MSR_IA32_TSC), val); ASSERT_EQ(rounded_host_rdmsr(MSR_IA32_TSC_ADJUST), val - HOST_ADJUST); --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 C93C9C433EF for ; Wed, 4 May 2022 22:56:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379831AbiEDXAW (ORCPT ); Wed, 4 May 2022 19:00:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45600 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379537AbiEDWzg (ORCPT ); Wed, 4 May 2022 18:55:36 -0400 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 BBE1A54BC1 for ; Wed, 4 May 2022 15:51:27 -0700 (PDT) Received: by mail-pg1-x549.google.com with SMTP id j187-20020a638bc4000000b003c1922b0f1bso1353729pge.3 for ; Wed, 04 May 2022 15:51:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=OyZawrHkB4Z1N2cxiek0my2DAY1E9NQHyY0gINLAZhw=; b=OtSny6q9CPRr97Jn/768DavVUouBNGMVjZRpUscVrG+5KoLy/r8xjYR1Un6VtrrgVa /gpweVLcC8w+etsaQG4CaXGuBqqtG49zHluS1T6yNgSXgxonBQura3UVeB0NugETiYI9 /FwWASUxjb2t78lUTWPoEGs8lEc2vm7NbCPyPEhBBMqRoSRcAIX3ynEjDDGuylGYukuN VPmsoQgdrxcK9SEc9uzCF4UxJJ16elIzYaOYVeIUIqMIOuBE5HfCnR592j5NWIi/g0Sc ZF8R4d0G1Cbr/R/GII5VbcA/r3n/IjbudTNYWoloczykb5xDxtHY3SlF6fvbajeYwscx DS6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=OyZawrHkB4Z1N2cxiek0my2DAY1E9NQHyY0gINLAZhw=; b=TM+rmt1OgTEE04tLTVhdPx1rBqVIvNGOse2Q1+Sn5NDQtCYhqQiBDchChFGIcmA9Mj +GPCCuMSGBuSvYHHT36xVAjgTFt7WWOt7fDE0mnAunF854FJ/UWVkoVLzYpEbObjSaDw /5p7kRHZBDN4Lj1EMgwgxzGoPk5KgGHszXbL4XIW7QTbSX7EOI5TgenLLVLZHcJF7ElQ M/geVGDxxRUlFnwNtQC/xC8U0gFShOjJjw4CVBs7rtRptQR9JpQhy4EKyxn33H3DPBee 8pjssLBX4VSSvEPPT5Fg8S7LqzZVI0N2uPGRz4lo8cCLkJGTDXrQN8HRs5SRq7zpFINH S3+w== X-Gm-Message-State: AOAM530sNIbGPuSStDKwXRh1ZvpNuVzJrpLB2hwiNs9zlAY3EQHsWTRw yFi8By0H3S0uMbqCGyErfs3DaQJJQb0= X-Google-Smtp-Source: ABdhPJxjHSM5iKU537POweSOw5OS/WhBTYMax96BB/QEERx4ih/jHAEBTKQ8DivcIZPZUjPYhRG9xosj1FE= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:b7ca:b0:15c:df6a:be86 with SMTP id v10-20020a170902b7ca00b0015cdf6abe86mr23607641plz.70.1651704687081; Wed, 04 May 2022 15:51:27 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:13 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-68-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 067/128] KVM: selftests: Convert kvm_clock_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert kvm_clock_test to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. Opportunistically use vcpu_run() instead of _vcpu_run() with an open coded assert that KVM_RUN succeeded. Signed-off-by: Sean Christopherson --- .../selftests/kvm/x86_64/kvm_clock_test.c | 23 ++++++++----------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/kvm_clock_test.c b/tools/te= sting/selftests/kvm/x86_64/kvm_clock_test.c index 97731454f3f3..2c1f850c4053 100644 --- a/tools/testing/selftests/kvm/x86_64/kvm_clock_test.c +++ b/tools/testing/selftests/kvm/x86_64/kvm_clock_test.c @@ -16,8 +16,6 @@ #include "kvm_util.h" #include "processor.h" =20 -#define VCPU_ID 0 - struct test_case { uint64_t kvmclock_base; int64_t realtime_offset; @@ -105,29 +103,27 @@ static void setup_clock(struct kvm_vm *vm, struct tes= t_case *test_case) vm_ioctl(vm, KVM_SET_CLOCK, &data); } =20 -static void enter_guest(struct kvm_vm *vm) +static void enter_guest(struct kvm_vcpu *vcpu) { struct kvm_clock_data start, end; - struct kvm_run *run; + struct kvm_run *run =3D vcpu->run; + struct kvm_vm *vm =3D vcpu->vm; struct ucall uc; - int i, r; - - run =3D vcpu_state(vm, VCPU_ID); + int i; =20 for (i =3D 0; i < ARRAY_SIZE(test_cases); i++) { setup_clock(vm, &test_cases[i]); =20 vm_ioctl(vm, KVM_GET_CLOCK, &start); =20 - r =3D _vcpu_run(vm, VCPU_ID); + vcpu_run(vcpu->vm, vcpu->id); vm_ioctl(vm, KVM_GET_CLOCK, &end); =20 - TEST_ASSERT(!r, "vcpu_run failed: %d\n", r); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "unexpected exit reason: %u (%s)", run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vm, VCPU_ID, &uc)) { + switch (get_ucall(vcpu->vm, vcpu->id, &uc)) { case UCALL_SYNC: handle_sync(&uc, &start, &end); break; @@ -178,6 +174,7 @@ static void check_clocksource(void) =20 int main(void) { + struct kvm_vcpu *vcpu; vm_vaddr_t pvti_gva; vm_paddr_t pvti_gpa; struct kvm_vm *vm; @@ -192,12 +189,12 @@ int main(void) =20 check_clocksource(); =20 - vm =3D vm_create_default(VCPU_ID, 0, guest_main); + vm =3D vm_create_with_one_vcpu(&vcpu, guest_main); =20 pvti_gva =3D vm_vaddr_alloc(vm, getpagesize(), 0x10000); pvti_gpa =3D addr_gva2gpa(vm, pvti_gva); - vcpu_args_set(vm, VCPU_ID, 2, pvti_gpa, pvti_gva); + vcpu_args_set(vm, vcpu->id, 2, pvti_gpa, pvti_gva); =20 - enter_guest(vm); + enter_guest(vcpu); kvm_vm_free(vm); } --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 0D956C433F5 for ; Wed, 4 May 2022 22:56:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1348083AbiEDXAa (ORCPT ); Wed, 4 May 2022 19:00:30 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45712 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379577AbiEDWzg (ORCPT ); Wed, 4 May 2022 18:55:36 -0400 Received: from mail-pg1-x54a.google.com (mail-pg1-x54a.google.com [IPv6:2607:f8b0:4864:20::54a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 80AAE54BE2 for ; Wed, 4 May 2022 15:51:29 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id h9-20020a631209000000b0039cc31b22aeso1346089pgl.9 for ; Wed, 04 May 2022 15:51:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=v4jxCMZ0K6gzSQh9bGw6pr0cWCX+xzECczrOEjrAb+o=; b=QlLiKRByOEV+/iSjQQTHPQcznnnwxPBDsE7LVVNLZGKV65Atw0rSJMpWwmtMYNCCu4 7/nOSPQ9v6MdIFKK3yU3sd58VZSeJy7uNMsz9i2koSRQrgNLeaDlyQANiC5UnM1az0wn 3S1qP9raDCg+y7xad3W+bpdni5WGKio7i7VEoobpkEyfnww/GVAMsGb9SdT/4LB2kmmX K8AvhUXnS0Q+Ydss03TJx6eCLnY331gxuaQzleJXoVEKNjrH1dt8Bc+G7Eomn1GWOw86 ZKrJZ95/LkC1PyoUniKqvB57Xog/ECoM/e2vJBHDCCsyHnLCHQTHZrmQCq8FsoS2WKtx dBuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=v4jxCMZ0K6gzSQh9bGw6pr0cWCX+xzECczrOEjrAb+o=; b=Xx2NLIqBy5OlTbL90ynNS+3/DkhIoAjc4R/EfGp8FHwh5MWRE2E6J8GFkhlDSVa+bs 97U7ZTP+2Q0URc9UTkD7MAZXO5eDUvd+EXAB6cnkFafujnUVm+p2N8sBpKWMN52lMLRj xrHe8XhBjo4oo7YBm3RM+oD/M6VR9WFLV3ZNE0ILxt5qTK0/28bUmISL3tS80cPFz5Cj raBjR/hToTg6ySN9sL0R4lzN546fnSqBHpdfpkIT81o/Dju3r5/8JuTsWzF9VGqWVkT4 ta6uEjwYJlWOa7ISUH5Hr6rX3dXZyVFc1c4LdzBavw+wP0DjimrJ4ToM7KRr11ZXY7iA nDXg== X-Gm-Message-State: AOAM533TRO/P+2WYEh0tEswp3IoGD1gI8lxN/t6ysmagoLJ7mfE5UFNh 6MWpzMp5OkK1hWsErlDoShEaplhmr2o= X-Google-Smtp-Source: ABdhPJzLVK+oMUWihBqCsnyFjWZDSgs7VDqx9YXrqhkn2dKNnpHQeycbe7lJzkU6QBFIITJ1BUNJux2kg4Y= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a62:ed0e:0:b0:4fa:11ed:2ad1 with SMTP id u14-20020a62ed0e000000b004fa11ed2ad1mr22813058pfh.34.1651704688940; Wed, 04 May 2022 15:51:28 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:14 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-69-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 068/128] KVM: selftests: Convert hyperv_svm_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert hyperv_svm_test to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. Note, this is a "functional" change in the sense that the test now creates a vCPU with vcpu_id=3D=3D0 instead of vcpu_id=3D=3D1. The non-zero VCPU_ID was 100% ar= bitrary and added little to no validation coverage. If testing non-zero vCPU IDs is desirable for generic tests, that can be done in the future by tweaking the VM creation helpers. Opportunistically use vcpu_run() instead of _vcpu_run(), the test expects KVM_RUN to succeed. Signed-off-by: Sean Christopherson --- .../testing/selftests/kvm/x86_64/hyperv_svm_test.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/hyperv_svm_test.c b/tools/t= esting/selftests/kvm/x86_64/hyperv_svm_test.c index 21f5ca9197da..46f1070e7297 100644 --- a/tools/testing/selftests/kvm/x86_64/hyperv_svm_test.c +++ b/tools/testing/selftests/kvm/x86_64/hyperv_svm_test.c @@ -21,7 +21,6 @@ #include "svm_util.h" #include "hyperv.h" =20 -#define VCPU_ID 1 #define L2_GUEST_STACK_SIZE 256 =20 struct hv_enlightenments { @@ -127,6 +126,7 @@ int main(int argc, char *argv[]) { vm_vaddr_t nested_gva =3D 0; =20 + struct kvm_vcpu *vcpu; struct kvm_vm *vm; struct kvm_run *run; struct ucall uc; @@ -137,20 +137,20 @@ int main(int argc, char *argv[]) exit(KSFT_SKIP); } /* Create VM */ - vm =3D vm_create_default(VCPU_ID, 0, guest_code); - vcpu_set_hv_cpuid(vm, VCPU_ID); - run =3D vcpu_state(vm, VCPU_ID); + vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); + vcpu_set_hv_cpuid(vm, vcpu->id); + run =3D vcpu->run; vcpu_alloc_svm(vm, &nested_gva); - vcpu_args_set(vm, VCPU_ID, 1, nested_gva); + vcpu_args_set(vm, vcpu->id, 1, nested_gva); =20 for (stage =3D 1;; stage++) { - _vcpu_run(vm, VCPU_ID); + vcpu_run(vm, vcpu->id); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Stage %d: unexpected exit reason: %u (%s),\n", stage, run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vm, VCPU_ID, &uc)) { + switch (get_ucall(vm, vcpu->id, &uc)) { case UCALL_ABORT: TEST_FAIL("%s at %s:%ld", (const char *)uc.args[0], __FILE__, uc.args[1]); --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 0E477C433FE for ; Wed, 4 May 2022 22:57:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240092AbiEDXAx (ORCPT ); Wed, 4 May 2022 19:00:53 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45762 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379594AbiEDWzh (ORCPT ); Wed, 4 May 2022 18:55:37 -0400 Received: from mail-pj1-x1049.google.com (mail-pj1-x1049.google.com [IPv6:2607:f8b0:4864:20::1049]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2722654BF0 for ; Wed, 4 May 2022 15:51:31 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id m6-20020a17090a730600b001d9041534e4so1077371pjk.7 for ; Wed, 04 May 2022 15:51:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=1MqmxGCi6E4xHxLpDPlYFabKR9MThqQQ1rORZfrgMkQ=; b=BqPiKgoWIZ53RzL5+VcOl/nKnPxkmUt/nKmc1Nwfk+cxabydo3KAsNPSdoN3OV4Cr5 meVgkdBZ5gdRYn2axjzQyhH68vSO3c/xQLGqIhSBPnHQUj/x32/QpRvjvWdzPn/n+HDd ejjqlXpJKBG5Wwy17Xj/7UTh43+77UMlVx5GV1NhhixlefXvMlhy7tguGMoM2RhuU5D/ wqandrMGtthHywGOfoRg7Ml7H5IwmU51vexY5zCZumm1NIvnX2xoWtUSzQREG7LojUHk uxOtveUHuR0P0f/IyElbjHFXlSsny3czzMxzI0Xl7mfKY+xhtPdBdv6UID/GYc9ZbU5a EgMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=1MqmxGCi6E4xHxLpDPlYFabKR9MThqQQ1rORZfrgMkQ=; b=cM0Bzf4LD1pG8u9ODqTe29AqscZneFIk0sVzHGpon1finQcij/4ZkUubzDAzDlBhRO 7MEb5QFGllvJu+yrlQpw0LJthreXQj6r+wAMcIVGvuaNX9wwRt1lz8M0jMbMvb/n0EXs MF8Dy/+/sHtL4SAe2/y+hJaYULWi8UNFCE9z8M5+AyVI3G7/mxs/MzaG8gFfayY93m8v iemsGcDD/7YV5rN5t6334m4DiciWjLZNE6eeJw8qIJH/RGvqOVMrZW8Vl3y6uELhY8E1 VfcG3q6/7p5UKyWF3xQwteXil2O2uwc61ASUR5FlGqHxiiORmVWurKD1mrtmGmKqjGnP rafQ== X-Gm-Message-State: AOAM533iW0kCh+04uPl8+A+n41ZKzT/CLfBuO7X1Jw7oYN40g0+hFH9k JPacyd2bNAylSCcMIPXcKoVBntJRMGs= X-Google-Smtp-Source: ABdhPJxU3wAoTfaqWZDjnh36CxycWYsjQg2yJVjpqxhyL9OTePbK4i9hCOf98mt2BQsPiAvmZ4kePX6Lok4= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:21c2:b0:4fe:81f:46c7 with SMTP id t2-20020a056a0021c200b004fe081f46c7mr22975752pfj.5.1651704690634; Wed, 04 May 2022 15:51:30 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:15 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-70-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 069/128] KVM: selftests: Convert hyperv_features away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert hyperv_features to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. Opportunistically use vcpu_run() instead of _vcpu_run() with an open coded assert that KVM_RUN succeeded. Signed-off-by: Sean Christopherson --- .../selftests/kvm/x86_64/hyperv_features.c | 51 +++++++++---------- 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/hyperv_features.c b/tools/t= esting/selftests/kvm/x86_64/hyperv_features.c index 672915ce73d8..52686e2f8d53 100644 --- a/tools/testing/selftests/kvm/x86_64/hyperv_features.c +++ b/tools/testing/selftests/kvm/x86_64/hyperv_features.c @@ -13,7 +13,6 @@ #include "processor.h" #include "hyperv.h" =20 -#define VCPU_ID 0 #define LINUX_OS_ID ((u64)0x8100 << 48) =20 extern unsigned char rdmsr_start; @@ -151,7 +150,7 @@ static void guest_hcall(vm_vaddr_t pgs_gpa, struct hcal= l_data *hcall) GUEST_DONE(); } =20 -static void hv_set_cpuid(struct kvm_vm *vm, struct kvm_cpuid2 *cpuid, +static void hv_set_cpuid(struct kvm_vcpu *vcpu, struct kvm_cpuid2 *cpuid, struct kvm_cpuid_entry2 *feat, struct kvm_cpuid_entry2 *recomm, struct kvm_cpuid_entry2 *dbg) @@ -162,15 +161,16 @@ static void hv_set_cpuid(struct kvm_vm *vm, struct kv= m_cpuid2 *cpuid, "failed to set HYPERV_CPUID_ENLIGHTMENT_INFO leaf"); TEST_ASSERT(set_cpuid(cpuid, dbg), "failed to set HYPERV_CPUID_SYNDBG_PLATFORM_CAPABILITIES leaf"); - vcpu_set_cpuid(vm, VCPU_ID, cpuid); + vcpu_set_cpuid(vcpu->vm, vcpu->id, cpuid); } =20 static void guest_test_msrs_access(void) { + struct kvm_vcpu *vcpu; struct kvm_run *run; struct kvm_vm *vm; struct ucall uc; - int stage =3D 0, r; + int stage =3D 0; struct kvm_cpuid_entry2 feat =3D { .function =3D HYPERV_CPUID_FEATURES }; @@ -189,24 +189,24 @@ static void guest_test_msrs_access(void) struct msr_data *msr; =20 while (true) { - vm =3D vm_create_default(VCPU_ID, 0, guest_msr); + vm =3D vm_create_with_one_vcpu(&vcpu, guest_msr); =20 msr_gva =3D vm_vaddr_alloc_page(vm); memset(addr_gva2hva(vm, msr_gva), 0x0, getpagesize()); msr =3D addr_gva2hva(vm, msr_gva); =20 - vcpu_args_set(vm, VCPU_ID, 1, msr_gva); - vcpu_enable_cap(vm, VCPU_ID, &cap); + vcpu_args_set(vm, vcpu->id, 1, msr_gva); + vcpu_enable_cap(vm, vcpu->id, &cap); =20 - vcpu_set_hv_cpuid(vm, VCPU_ID); + vcpu_set_hv_cpuid(vm, vcpu->id); =20 best =3D kvm_get_supported_hv_cpuid(); =20 vm_init_descriptor_tables(vm); - vcpu_init_descriptor_tables(vm, VCPU_ID); + vcpu_init_descriptor_tables(vm, vcpu->id); vm_install_exception_handler(vm, GP_VECTOR, guest_gp_handler); =20 - run =3D vcpu_state(vm, VCPU_ID); + run =3D vcpu->run; =20 switch (stage) { case 0: @@ -339,7 +339,7 @@ static void guest_test_msrs_access(void) */ cap.cap =3D KVM_CAP_HYPERV_SYNIC2; cap.args[0] =3D 0; - vcpu_enable_cap(vm, VCPU_ID, &cap); + vcpu_enable_cap(vm, vcpu->id, &cap); break; case 22: feat.eax |=3D HV_MSR_SYNIC_AVAILABLE; @@ -469,7 +469,7 @@ static void guest_test_msrs_access(void) break; } =20 - hv_set_cpuid(vm, best, &feat, &recomm, &dbg); + hv_set_cpuid(vcpu, best, &feat, &recomm, &dbg); =20 if (msr->idx) pr_debug("Stage %d: testing msr: 0x%x for %s\n", stage, @@ -477,13 +477,12 @@ static void guest_test_msrs_access(void) else pr_debug("Stage %d: finish\n", stage); =20 - r =3D _vcpu_run(vm, VCPU_ID); - TEST_ASSERT(!r, "vcpu_run failed: %d\n", r); + vcpu_run(vm, vcpu->id); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "unexpected exit reason: %u (%s)", run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vm, VCPU_ID, &uc)) { + switch (get_ucall(vm, vcpu->id, &uc)) { case UCALL_SYNC: TEST_ASSERT(uc.args[1] =3D=3D 0, "Unexpected stage: %ld (0 expected)\n", @@ -504,10 +503,11 @@ static void guest_test_msrs_access(void) =20 static void guest_test_hcalls_access(void) { + struct kvm_vcpu *vcpu; struct kvm_run *run; struct kvm_vm *vm; struct ucall uc; - int stage =3D 0, r; + int stage =3D 0; struct kvm_cpuid_entry2 feat =3D { .function =3D HYPERV_CPUID_FEATURES, .eax =3D HV_MSR_HYPERCALL_AVAILABLE @@ -527,10 +527,10 @@ static void guest_test_hcalls_access(void) struct kvm_cpuid2 *best; =20 while (true) { - vm =3D vm_create_default(VCPU_ID, 0, guest_hcall); + vm =3D vm_create_with_one_vcpu(&vcpu, guest_hcall); =20 vm_init_descriptor_tables(vm); - vcpu_init_descriptor_tables(vm, VCPU_ID); + vcpu_init_descriptor_tables(vm, vcpu->id); vm_install_exception_handler(vm, UD_VECTOR, guest_ud_handler); =20 /* Hypercall input/output */ @@ -541,14 +541,14 @@ static void guest_test_hcalls_access(void) hcall_params =3D vm_vaddr_alloc_page(vm); memset(addr_gva2hva(vm, hcall_params), 0x0, getpagesize()); =20 - vcpu_args_set(vm, VCPU_ID, 2, addr_gva2gpa(vm, hcall_page), hcall_params= ); - vcpu_enable_cap(vm, VCPU_ID, &cap); + vcpu_args_set(vm, vcpu->id, 2, addr_gva2gpa(vm, hcall_page), hcall_param= s); + vcpu_enable_cap(vm, vcpu->id, &cap); =20 - vcpu_set_hv_cpuid(vm, VCPU_ID); + vcpu_set_hv_cpuid(vm, vcpu->id); =20 best =3D kvm_get_supported_hv_cpuid(); =20 - run =3D vcpu_state(vm, VCPU_ID); + run =3D vcpu->run; =20 switch (stage) { case 0: @@ -643,7 +643,7 @@ static void guest_test_hcalls_access(void) break; } =20 - hv_set_cpuid(vm, best, &feat, &recomm, &dbg); + hv_set_cpuid(vcpu, best, &feat, &recomm, &dbg); =20 if (hcall->control) pr_debug("Stage %d: testing hcall: 0x%lx\n", stage, @@ -651,13 +651,12 @@ static void guest_test_hcalls_access(void) else pr_debug("Stage %d: finish\n", stage); =20 - r =3D _vcpu_run(vm, VCPU_ID); - TEST_ASSERT(!r, "vcpu_run failed: %d\n", r); + vcpu_run(vm, vcpu->id); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "unexpected exit reason: %u (%s)", run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vm, VCPU_ID, &uc)) { + switch (get_ucall(vm, vcpu->id, &uc)) { case UCALL_SYNC: TEST_ASSERT(uc.args[1] =3D=3D 0, "Unexpected stage: %ld (0 expected)\n", --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 A8542C433FE for ; Wed, 4 May 2022 22:57:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1359567AbiEDXBP (ORCPT ); Wed, 4 May 2022 19:01:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46150 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379623AbiEDWzh (ORCPT ); Wed, 4 May 2022 18:55:37 -0400 Received: from mail-ot1-x34a.google.com (mail-ot1-x34a.google.com [IPv6:2607:f8b0:4864:20::34a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 18ED554BFB for ; Wed, 4 May 2022 15:51:33 -0700 (PDT) Received: by mail-ot1-x34a.google.com with SMTP id q21-20020a056830233500b00605db4a91a0so979824otg.17 for ; Wed, 04 May 2022 15:51:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=KiE9VficpCeN1xBVdUN8xYll0C4HLuJFd4x1wesa6do=; b=RR06S68mHbetxo2/DFm9fevn41ldDuSZzFIqQLw3luNwdEAeyVrZbWkd4295+phqwo zuWTiWktZRYLy1NzIDnkeeQNPvRmX/dihUUNC3FybgUvKuRkBaoSDI83eMKomc2MQOrO TFVKi7CcYGQ9Oe25D7B26dz9I8/odtVhXmuNRho0rQHGz5LiB+6xmZS3+4WNsDq0tTfY ZinvBHjG2Hv4w7Wk0WSeTR4yOOrBoUyAXOF7knimUSprtXe1wtpvx3Fk00t7kqiG6o+N i6yalRzQjGKAFffYBMmVfB+7i2QC0DBm9REMmycPmq29wbOBv8u9C0jUawysWhu04qVC VdCg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=KiE9VficpCeN1xBVdUN8xYll0C4HLuJFd4x1wesa6do=; b=pdeos36yooRHcm2OE82qLsfZIs/YpFrC+gVgp+PsrAxZP3wSpuOapNw1OxIzhwKVY7 NDU57yy2RZBd0i0n8j78aT9FEc9E4iITgThz5Wc1faemrlBvUVK+/FY84BdO99pbz0UC sBm3zngeofRyVzjjlvLUfRtK6H1KVbQ8zDY8e+E+SfcXWz2UtOLgiVpBMd6//P2wY6lR vLLdJCVLQubdM8rr5T+HD7q8DpCTHM1LEZtg0rj3YKtduMmyMGywSSUlEBdtSGtH2c2r 3bY52QOA4a13q2wxnUX4fKQFdqSnaTvkNpamkxe/EH3FiWBkKr1k2a1T+0AOTCz6N91k FiLA== X-Gm-Message-State: AOAM5324B3HRYQ940L1MLzQM6Bvdo4GYwmM17ka8n360vTcSzQmTtBhf VuFrvZ92SO1kBUm+NV6FKnGtRruJCZQ= X-Google-Smtp-Source: ABdhPJxnrpq5WxtjmZ6u+D0kWIimk3PB8r/vORqJp7aU2tk7sgFX4X0l+1lPevztzsqswm3eWOEIXvXDCdQ= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6870:32d6:b0:e3:6e1a:e56b with SMTP id r22-20020a05687032d600b000e36e1ae56bmr904389oac.206.1651704692371; Wed, 04 May 2022 15:51:32 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:16 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-71-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 070/128] KVM: selftests: Convert hyperv_clock away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert hyperv_clock to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. Opportunistically use vcpu_run() instead of _vcpu_run() with an open coded assert that KVM_RUN succeeded. Signed-off-by: Sean Christopherson --- .../selftests/kvm/x86_64/hyperv_clock.c | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/hyperv_clock.c b/tools/test= ing/selftests/kvm/x86_64/hyperv_clock.c index e0b2bb1339b1..43584ddc4de0 100644 --- a/tools/testing/selftests/kvm/x86_64/hyperv_clock.c +++ b/tools/testing/selftests/kvm/x86_64/hyperv_clock.c @@ -171,22 +171,20 @@ static void guest_main(struct ms_hyperv_tsc_page *tsc= _page, vm_paddr_t tsc_page_ GUEST_DONE(); } =20 -#define VCPU_ID 0 - -static void host_check_tsc_msr_rdtsc(struct kvm_vm *vm) +static void host_check_tsc_msr_rdtsc(struct kvm_vcpu *vcpu) { u64 tsc_freq, r1, r2, t1, t2; s64 delta_ns; =20 - tsc_freq =3D vcpu_get_msr(vm, VCPU_ID, HV_X64_MSR_TSC_FREQUENCY); + tsc_freq =3D vcpu_get_msr(vcpu->vm, vcpu->id, HV_X64_MSR_TSC_FREQUENCY); TEST_ASSERT(tsc_freq > 0, "TSC frequency must be nonzero"); =20 /* First, check MSR-based clocksource */ r1 =3D rdtsc(); - t1 =3D vcpu_get_msr(vm, VCPU_ID, HV_X64_MSR_TIME_REF_COUNT); + t1 =3D vcpu_get_msr(vcpu->vm, vcpu->id, HV_X64_MSR_TIME_REF_COUNT); nop_loop(); r2 =3D rdtsc(); - t2 =3D vcpu_get_msr(vm, VCPU_ID, HV_X64_MSR_TIME_REF_COUNT); + t2 =3D vcpu_get_msr(vcpu->vm, vcpu->id, HV_X64_MSR_TIME_REF_COUNT); =20 TEST_ASSERT(t2 > t1, "Time reference MSR is not monotonic (%ld <=3D %ld)"= , t1, t2); =20 @@ -203,33 +201,34 @@ static void host_check_tsc_msr_rdtsc(struct kvm_vm *v= m) =20 int main(void) { + struct kvm_vcpu *vcpu; struct kvm_vm *vm; struct kvm_run *run; struct ucall uc; vm_vaddr_t tsc_page_gva; int stage; =20 - vm =3D vm_create_default(VCPU_ID, 0, guest_main); - run =3D vcpu_state(vm, VCPU_ID); + vm =3D vm_create_with_one_vcpu(&vcpu, guest_main); + run =3D vcpu->run; =20 - vcpu_set_hv_cpuid(vm, VCPU_ID); + vcpu_set_hv_cpuid(vm, vcpu->id); =20 tsc_page_gva =3D vm_vaddr_alloc_page(vm); memset(addr_gva2hva(vm, tsc_page_gva), 0x0, getpagesize()); TEST_ASSERT((addr_gva2gpa(vm, tsc_page_gva) & (getpagesize() - 1)) =3D=3D= 0, "TSC page has to be page aligned\n"); - vcpu_args_set(vm, VCPU_ID, 2, tsc_page_gva, addr_gva2gpa(vm, tsc_page_gva= )); + vcpu_args_set(vm, vcpu->id, 2, tsc_page_gva, addr_gva2gpa(vm, tsc_page_gv= a)); =20 - host_check_tsc_msr_rdtsc(vm); + host_check_tsc_msr_rdtsc(vcpu); =20 for (stage =3D 1;; stage++) { - _vcpu_run(vm, VCPU_ID); + vcpu_run(vm, vcpu->id); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Stage %d: unexpected exit reason: %u (%s),\n", stage, run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vm, VCPU_ID, &uc)) { + switch (get_ucall(vm, vcpu->id, &uc)) { case UCALL_ABORT: TEST_FAIL("%s at %s:%ld", (const char *)uc.args[0], __FILE__, uc.args[1]); --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 C6507C433F5 for ; Wed, 4 May 2022 23:01:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379588AbiEDXBU (ORCPT ); Wed, 4 May 2022 19:01:20 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46168 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379243AbiEDW4A (ORCPT ); Wed, 4 May 2022 18:56:00 -0400 Received: from mail-pg1-x54a.google.com (mail-pg1-x54a.google.com [IPv6:2607:f8b0:4864:20::54a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9388054F8A for ; Wed, 4 May 2022 15:51:34 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id h17-20020a656391000000b003c606ca1b47so620648pgv.19 for ; Wed, 04 May 2022 15:51:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=A3AngictKVCvOwccmzZdCyAVvTQR9sel/WEjdnxWuGM=; b=AbcuypW/Sf0dQg3F4xR9puemy2Zvz1DZeotDpKdc1E2uGEYbJ5YlMiLOWv5nk8IeMd mNF5kivTTbz2v4iC3DV+ODXPYdDs+PzPqm0hJPxgGhL1BOrxCRkrfsQJOFZf4UbF/q0P Az9AXxWoKsfMq3jKPA/Ikm+Fhazx4ptNjqPLu7DcmHkGGSuZ1DNsOp1fSRLyX7xpqSYX OAKG8QIMZBTCGuERkTv3zFus4j2bTeGwsULKHNQZ5lwmqrdQNU6x3E2+hidxIT9Lvm6p g0Sj4tXvwNQTcYnWp0JVLAI1MNKCb8Gg/XMxJ0yV/XFJ5TJ2Zy4kj7f02OiLTML1Z6ef Yshg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=A3AngictKVCvOwccmzZdCyAVvTQR9sel/WEjdnxWuGM=; b=Y1zKxXJNL0j1YevMLVG4R8aULmSpcxaDnxEnAiIxb7aN184LXS+D0wir2l/1eje8wE Sv/QeUmNlckOoWpQJB+IzDKeZwHge67C32ipWUErkaH0Vyfpw/k+aos59m4Y1zesAWbD ZT5e5sscp4MHyiE33gR9m9yMWaZJW5RxRdZXUYq8Hb986ezFqw03sfwUmQ9HRRjeC8Aj 68UG2EBOngcWYxwAYw3tV9pYep2i5D5N6aBfYKhJMFZ8jvlbIevsWPCfXwUdUl3a+vnU OJ2v/WJoOgKwCQeuKulnzVNv38XtetdYZGqRxcZgwTlRya9MMf4lq05n0nFHdkv+7Gfr lzjA== X-Gm-Message-State: AOAM532UiRNtX4f8BSv671Wk8WeAWjXbmSwGB2Akj0atpuOnU1n1h3/j y2Nncgdw27FpS0qVdwjCYf1M5rWG4Co= X-Google-Smtp-Source: ABdhPJzrYOpXDXFYlTupvnVAOy1TTDL8jI+oMwN0m8tn+IOMKEV+CUobGCbvB1IuPYwysjf3uxZamH3aWvM= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:eb87:b0:15e:be95:a3f3 with SMTP id q7-20020a170902eb8700b0015ebe95a3f3mr8264578plg.38.1651704694112; Wed, 04 May 2022 15:51:34 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:17 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-72-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 071/128] KVM: selftests: Convert evmcs_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert evmcs_test to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. Note, this is a "functional" change in the sense that the test now creates a vCPU with vcpu_id=3D=3D0 instead of vcpu_id=3D=3D5. The non-zero VCPU_ID was 100% ar= bitrary and added little to no validation coverage. If testing non-zero vCPU IDs is desirable for generic tests, that can be done in the future by tweaking the VM creation helpers. Opportunistically use vcpu_run() instead of _vcpu_run(), the test expects KVM_RUN to succeed. Signed-off-by: Sean Christopherson --- .../testing/selftests/kvm/x86_64/evmcs_test.c | 51 ++++++++++--------- 1 file changed, 26 insertions(+), 25 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/evmcs_test.c b/tools/testin= g/selftests/kvm/x86_64/evmcs_test.c index f97049ab045f..dc7c1eb28fd4 100644 --- a/tools/testing/selftests/kvm/x86_64/evmcs_test.c +++ b/tools/testing/selftests/kvm/x86_64/evmcs_test.c @@ -18,7 +18,6 @@ =20 #include "vmx.h" =20 -#define VCPU_ID 5 #define NMI_VECTOR 2 =20 static int ud_count; @@ -160,55 +159,56 @@ void guest_code(struct vmx_pages *vmx_pages) GUEST_DONE(); } =20 -void inject_nmi(struct kvm_vm *vm) +void inject_nmi(struct kvm_vcpu *vcpu) { struct kvm_vcpu_events events; =20 - vcpu_events_get(vm, VCPU_ID, &events); + vcpu_events_get(vcpu->vm, vcpu->id, &events); =20 events.nmi.pending =3D 1; events.flags |=3D KVM_VCPUEVENT_VALID_NMI_PENDING; =20 - vcpu_events_set(vm, VCPU_ID, &events); + vcpu_events_set(vcpu->vm, vcpu->id, &events); } =20 -static void save_restore_vm(struct kvm_vm *vm) +static struct kvm_vcpu *save_restore_vm(struct kvm_vm *vm, + struct kvm_vcpu *vcpu) { struct kvm_regs regs1, regs2; struct kvm_x86_state *state; =20 - state =3D vcpu_save_state(vm, VCPU_ID); + state =3D vcpu_save_state(vm, vcpu->id); memset(®s1, 0, sizeof(regs1)); - vcpu_regs_get(vm, VCPU_ID, ®s1); + vcpu_regs_get(vm, vcpu->id, ®s1); =20 kvm_vm_release(vm); =20 /* Restore state in a new VM. */ - kvm_vm_restart(vm); - vm_vcpu_add(vm, VCPU_ID); - vcpu_set_hv_cpuid(vm, VCPU_ID); - vcpu_enable_evmcs(vm, VCPU_ID); - vcpu_load_state(vm, VCPU_ID, state); + vcpu =3D vm_recreate_with_one_vcpu(vm); + vcpu_set_hv_cpuid(vm, vcpu->id); + vcpu_enable_evmcs(vm, vcpu->id); + vcpu_load_state(vm, vcpu->id, state); kvm_x86_state_cleanup(state); =20 memset(®s2, 0, sizeof(regs2)); - vcpu_regs_get(vm, VCPU_ID, ®s2); + vcpu_regs_get(vm, vcpu->id, ®s2); TEST_ASSERT(!memcmp(®s1, ®s2, sizeof(regs2)), "Unexpected register values after vcpu_load_state; rdi: %lx rsi: %lx= ", (ulong) regs2.rdi, (ulong) regs2.rsi); + return vcpu; } =20 int main(int argc, char *argv[]) { vm_vaddr_t vmx_pages_gva =3D 0; =20 + struct kvm_vcpu *vcpu; struct kvm_vm *vm; struct kvm_run *run; struct ucall uc; int stage; =20 - /* Create VM */ - vm =3D vm_create_default(VCPU_ID, 0, guest_code); + vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); =20 if (!nested_vmx_supported() || !kvm_check_cap(KVM_CAP_NESTED_STATE) || @@ -217,28 +217,29 @@ int main(int argc, char *argv[]) exit(KSFT_SKIP); } =20 - vcpu_set_hv_cpuid(vm, VCPU_ID); - vcpu_enable_evmcs(vm, VCPU_ID); + vcpu_set_hv_cpuid(vm, vcpu->id); + vcpu_enable_evmcs(vm, vcpu->id); =20 vcpu_alloc_vmx(vm, &vmx_pages_gva); - vcpu_args_set(vm, VCPU_ID, 1, vmx_pages_gva); + vcpu_args_set(vm, vcpu->id, 1, vmx_pages_gva); =20 vm_init_descriptor_tables(vm); - vcpu_init_descriptor_tables(vm, VCPU_ID); + vcpu_init_descriptor_tables(vm, vcpu->id); vm_install_exception_handler(vm, UD_VECTOR, guest_ud_handler); vm_install_exception_handler(vm, NMI_VECTOR, guest_nmi_handler); =20 pr_info("Running L1 which uses EVMCS to run L2\n"); =20 for (stage =3D 1;; stage++) { - run =3D vcpu_state(vm, VCPU_ID); - _vcpu_run(vm, VCPU_ID); + run =3D vcpu->run; + + vcpu_run(vm, vcpu->id); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Stage %d: unexpected exit reason: %u (%s),\n", stage, run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vm, VCPU_ID, &uc)) { + switch (get_ucall(vm, vcpu->id, &uc)) { case UCALL_ABORT: TEST_FAIL("%s at %s:%ld", (const char *)uc.args[0], __FILE__, uc.args[1]); @@ -256,12 +257,12 @@ int main(int argc, char *argv[]) uc.args[1] =3D=3D stage, "Stage %d: Unexpected register values vmex= it, got %lx", stage, (ulong)uc.args[1]); =20 - save_restore_vm(vm); + vcpu =3D save_restore_vm(vm, vcpu); =20 /* Force immediate L2->L1 exit before resuming */ if (stage =3D=3D 8) { pr_info("Injecting NMI into L1 before L2 had a chance to run after rest= ore\n"); - inject_nmi(vm); + inject_nmi(vcpu); } =20 /* @@ -271,7 +272,7 @@ int main(int argc, char *argv[]) */ if (stage =3D=3D 9) { pr_info("Trying extra KVM_GET_NESTED_STATE/KVM_SET_NESTED_STATE cycle\n= "); - save_restore_vm(vm); + vcpu =3D save_restore_vm(vm, vcpu); } } =20 --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 13694C433FE for ; Wed, 4 May 2022 23:01:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379949AbiEDXBc (ORCPT ); Wed, 4 May 2022 19:01:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46190 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379253AbiEDW4B (ORCPT ); Wed, 4 May 2022 18:56:01 -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 0897254F95 for ; Wed, 4 May 2022 15:51:36 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id z16-20020a17090a015000b001dbc8da29a1so1316766pje.7 for ; Wed, 04 May 2022 15:51:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=4UqXgJ1N+O1732nnCut9eGm50c3LOJFUuzGS5VTvzCc=; b=g75Qc+5tT+ipq0g/KauZR/B1NDrpklqnfhqaZrVa2vgIeQjGoJaa7F4MuA5M8rZeS5 czb1gtYVKItmCQOXBjrAuAeUWgyh+XCGgTLxZOkEWh5/0/ya0OX7nIchqfd8iJp4uqj1 tvAlsGWW3xSC+TX6FZ+WVT9DP1UIsmrjxUVwOE6TtwxEL/Re9GesrUxthi2QF2/zpkQ1 UgdlgqvfEg7heIHF7URGwDurl2hanXgx6kJwsEZ5c3GMeUo9m7FWvWwY9xh/nnpliVN+ HeIdayhkpuvVr8ysS35XKa5DNMvupGs/ey8CiAG2h6nU9RA/H56xKnlz7ekeVUBTsRwV 4TCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=4UqXgJ1N+O1732nnCut9eGm50c3LOJFUuzGS5VTvzCc=; b=saFnEPNbPqnT0SF1pbFRrDO79dENWRCT8b4I1IP0evVQmuMGCchiiw9eyt1YpG3EGP ligALOWQtyUBa0Ni19KD350IjWp7F0L41wdEps0fSvTblQ5SISS+Q18ssLqyGErYUyuR GDmqjIM0QXgfZ7mXGmZQ16wqMGzCaSoNzCXrpRl+xhNBh/ukSbrNYhzVZodzu++g+PBy bDltdjnNs3+qxRiSODRiCSWt9md6o4nk+Fuk9vI9oYuJ2Z0NrjD/y1Eg1YIiYsmIjac1 U0NLglHE7l1RnDUGPP3VOhLBLIBQhKDGdJUbDAzEagGGLXngvdgCHy0DgFzpoCH6dxo7 /ixg== X-Gm-Message-State: AOAM532T+s/8CCA2Ds1NKEMn8Pi3pCBLkLEHW2To4WdN8P6b/O1joyN9 vPXc/6oJaUbsJEbqe+g6Oq94ebhvwdA= X-Google-Smtp-Source: ABdhPJweA+Hj9/FvBFSO6zYznM6oDXf9XycZChPUCiQgs3V1loXdm6AGHTuTyeJ7VOAT2dZB6UXBxSjv+t0= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:10d0:b0:4f7:5af4:47b6 with SMTP id d16-20020a056a0010d000b004f75af447b6mr23392004pfu.6.1651704695696; Wed, 04 May 2022 15:51:35 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:18 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-73-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 072/128] KVM: selftests: Convert emulator_error_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert emulator_error_test to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. Note, this is a "functional" change in the sense that the test now creates a vCPU with vcpu_id=3D=3D0 instead of vcpu_id=3D=3D5. The non-zero VCPU_ID was 10= 0% arbitrary and added little to no validation coverage. If testing non-zero vCPU IDs is desirable for generic tests, that can be done in the future by tweaking the VM creation helpers. Opportunistically use vcpu_run() instead of _vcpu_run() with an open coded assert that KVM_RUN succeeded. Signed-off-by: Sean Christopherson --- .../kvm/x86_64/emulator_error_test.c | 65 ++++++++----------- 1 file changed, 28 insertions(+), 37 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/emulator_error_test.c b/too= ls/testing/selftests/kvm/x86_64/emulator_error_test.c index aeb3850f81bd..6a2fe7a9f4a6 100644 --- a/tools/testing/selftests/kvm/x86_64/emulator_error_test.c +++ b/tools/testing/selftests/kvm/x86_64/emulator_error_test.c @@ -11,7 +11,6 @@ #include "kvm_util.h" #include "vmx.h" =20 -#define VCPU_ID 1 #define MAXPHYADDR 36 =20 #define MEM_REGION_GVA 0x0000123456789000 @@ -27,14 +26,6 @@ static void guest_code(void) GUEST_DONE(); } =20 -static void run_guest(struct kvm_vm *vm) -{ - int rc; - - rc =3D _vcpu_run(vm, VCPU_ID); - TEST_ASSERT(rc =3D=3D 0, "vcpu_run failed: %d\n", rc); -} - /* * Accessors to get R/M, REG, and Mod bits described in the SDM vol 2, * figure 2-2 "Table Interpretation of ModR/M Byte (C8H)". @@ -56,9 +47,9 @@ static bool is_flds(uint8_t *insn_bytes, uint8_t insn_siz= e) GET_RM(insn_bytes[1]) !=3D 0x5; } =20 -static void process_exit_on_emulation_error(struct kvm_vm *vm) +static void process_exit_on_emulation_error(struct kvm_vcpu *vcpu) { - struct kvm_run *run =3D vcpu_state(vm, VCPU_ID); + struct kvm_run *run =3D vcpu->run; struct kvm_regs regs; uint8_t *insn_bytes; uint8_t insn_size; @@ -92,50 +83,49 @@ static void process_exit_on_emulation_error(struct kvm_= vm *vm) * contained an flds instruction that is 2-bytes in * length (ie: no prefix, no SIB, no displacement). */ - vcpu_regs_get(vm, VCPU_ID, ®s); + vcpu_regs_get(vcpu->vm, vcpu->id, ®s); regs.rip +=3D 2; - vcpu_regs_set(vm, VCPU_ID, ®s); + vcpu_regs_set(vcpu->vm, vcpu->id, ®s); } } } =20 -static void do_guest_assert(struct kvm_vm *vm, struct ucall *uc) +static void do_guest_assert(struct ucall *uc) { TEST_FAIL("%s at %s:%ld", (const char *)uc->args[0], __FILE__, uc->args[1]); } =20 -static void check_for_guest_assert(struct kvm_vm *vm) +static void check_for_guest_assert(struct kvm_vcpu *vcpu) { - struct kvm_run *run =3D vcpu_state(vm, VCPU_ID); struct ucall uc; =20 - if (run->exit_reason =3D=3D KVM_EXIT_IO && - get_ucall(vm, VCPU_ID, &uc) =3D=3D UCALL_ABORT) { - do_guest_assert(vm, &uc); + if (vcpu->run->exit_reason =3D=3D KVM_EXIT_IO && + get_ucall(vcpu->vm, vcpu->id, &uc) =3D=3D UCALL_ABORT) { + do_guest_assert(&uc); } } =20 -static void process_ucall_done(struct kvm_vm *vm) +static void process_ucall_done(struct kvm_vcpu *vcpu) { - struct kvm_run *run =3D vcpu_state(vm, VCPU_ID); + struct kvm_run *run =3D vcpu->run; struct ucall uc; =20 - check_for_guest_assert(vm); + check_for_guest_assert(vcpu); =20 TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Unexpected exit reason: %u (%s)", run->exit_reason, exit_reason_str(run->exit_reason)); =20 - TEST_ASSERT(get_ucall(vm, VCPU_ID, &uc) =3D=3D UCALL_DONE, + TEST_ASSERT(get_ucall(vcpu->vm, vcpu->id, &uc) =3D=3D UCALL_DONE, "Unexpected ucall command: %lu, expected UCALL_DONE (%d)", uc.cmd, UCALL_DONE); } =20 -static uint64_t process_ucall(struct kvm_vm *vm) +static uint64_t process_ucall(struct kvm_vcpu *vcpu) { - struct kvm_run *run =3D vcpu_state(vm, VCPU_ID); + struct kvm_run *run =3D vcpu->run; struct ucall uc; =20 TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, @@ -143,14 +133,14 @@ static uint64_t process_ucall(struct kvm_vm *vm) run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vm, VCPU_ID, &uc)) { + switch (get_ucall(vcpu->vm, vcpu->id, &uc)) { case UCALL_SYNC: break; case UCALL_ABORT: - do_guest_assert(vm, &uc); + do_guest_assert(&uc); break; case UCALL_DONE: - process_ucall_done(vm); + process_ucall_done(vcpu); break; default: TEST_ASSERT(false, "Unexpected ucall"); @@ -167,6 +157,7 @@ int main(int argc, char *argv[]) }; struct kvm_cpuid_entry2 *entry; struct kvm_cpuid2 *cpuid; + struct kvm_vcpu *vcpu; struct kvm_vm *vm; uint64_t gpa, pte; uint64_t *hva; @@ -175,20 +166,20 @@ int main(int argc, char *argv[]) /* Tell stdout not to buffer its content */ setbuf(stdout, NULL); =20 - vm =3D vm_create_default(VCPU_ID, 0, guest_code); - if (!kvm_check_cap(KVM_CAP_SMALLER_MAXPHYADDR)) { printf("module parameter 'allow_smaller_maxphyaddr' is not set. Skippin= g test.\n"); return 0; } =20 + vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); + cpuid =3D kvm_get_supported_cpuid(); =20 entry =3D kvm_get_supported_cpuid_index(0x80000008, 0); entry->eax =3D (entry->eax & 0xffffff00) | MAXPHYADDR; set_cpuid(cpuid, entry); =20 - vcpu_set_cpuid(vm, VCPU_ID, cpuid); + vcpu_set_cpuid(vm, vcpu->id, cpuid); =20 rc =3D kvm_check_cap(KVM_CAP_EXIT_ON_EMULATION_FAILURE); TEST_ASSERT(rc, "KVM_CAP_EXIT_ON_EMULATION_FAILURE is unavailable"); @@ -203,14 +194,14 @@ int main(int argc, char *argv[]) virt_map(vm, MEM_REGION_GVA, MEM_REGION_GPA, 1); hva =3D addr_gpa2hva(vm, MEM_REGION_GPA); memset(hva, 0, PAGE_SIZE); - pte =3D vm_get_page_table_entry(vm, VCPU_ID, MEM_REGION_GVA); - vm_set_page_table_entry(vm, VCPU_ID, MEM_REGION_GVA, pte | (1ull << 36)); + pte =3D vm_get_page_table_entry(vm, vcpu->id, MEM_REGION_GVA); + vm_set_page_table_entry(vm, vcpu->id, MEM_REGION_GVA, pte | (1ull << 36)); =20 - run_guest(vm); - process_exit_on_emulation_error(vm); - run_guest(vm); + vcpu_run(vm, vcpu->id); + process_exit_on_emulation_error(vcpu); + vcpu_run(vm, vcpu->id); =20 - TEST_ASSERT(process_ucall(vm) =3D=3D UCALL_DONE, "Expected UCALL_DONE"); + TEST_ASSERT(process_ucall(vcpu) =3D=3D UCALL_DONE, "Expected UCALL_DONE"); =20 kvm_vm_free(vm); =20 --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 8BCB9C433F5 for ; Wed, 4 May 2022 23:06:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S244300AbiEDXDk (ORCPT ); Wed, 4 May 2022 19:03:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45588 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379263AbiEDW4E (ORCPT ); Wed, 4 May 2022 18:56:04 -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 C8FB054FA9 for ; Wed, 4 May 2022 15:51:37 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id q14-20020a17090a178e00b001dc970bf587so1944186pja.1 for ; Wed, 04 May 2022 15:51:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=E8bGK5PVBFzhrYg0aSqyNIfNbUg8lebD5YMo3ihXQFw=; b=ju6DgO2ll2SfG1Q2SHpR1TiItryw2hgtmZj/p0en6P3uzs2vdVd/ZPdjPEc8lOpjZU sI+Za/opR98R/IdVTxXW1okhIWA+Xk4hYlG0O+9SJ+aLU8BXMH1CTvbGl3NXPjhp3O+b sN9sjF8LPvr1hcGz8srPPMzHkUfN2gG2PK5j4lTpbMRG/dy87D8AVQcwgP9/UT1CclfQ r5ocz15hhAhDWHbgRceohMTnb4XzMVTnjt0rlrr5lXoBc9bBsC4xJKDrAEmRKv2t/dqQ seqx5pCTcwThNcFNGHqdRrfQW+v0+dCG1aTeaROOvz7Ps/rv6M0XJd6TVa8VbC0fk7mG xbWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=E8bGK5PVBFzhrYg0aSqyNIfNbUg8lebD5YMo3ihXQFw=; b=YvZCQuD+T0wlrp3qKDr0c9O290Q8snXnMd8c6N9XtTlUejbSqp9x4sm/JiiMkF5yzd jzR7X6OxmpE7EV1g90382dAGUOTyVeuiKmtjuttCEPjgwkexYGvCo9WtBoVDWT7gj2GW cwBnPoxnBM0SODyXzIK8F7NW/KyYBtFUWBhRmXuJclEgkwaVNGJmcUpMzaJ5slyy3kTA wFJbPbu+D4jnswJkSof65crnAG1Q5UCz6L9LPRQBIQRHbgxgYPPD9ZYZHDu9XYBk9b8V szZLYHaDSD+uwwLZ9L9fe1c9XJu8qNOGEyvfYqr8l651XKBBj3NNjaYZ3tHTQNtHTGwL KKVQ== X-Gm-Message-State: AOAM533oIHA+IdwuHu0nVNTm2Phqu/EGUyBwXHCtduOUkLyHEQKgSztw f6rDFViyVa5rGYcU9DgBUFrYFWELuUE= X-Google-Smtp-Source: ABdhPJyVv2gHDUooRrhrjR1Cxdy1ukNh4vqDHRZo5cApp1oPleS+KQOPaPD88ELcqjP5znH58I0nVn+c+n8= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:1a06:b0:4fc:d6c5:f3d7 with SMTP id g6-20020a056a001a0600b004fcd6c5f3d7mr22897547pfv.53.1651704697249; Wed, 04 May 2022 15:51:37 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:19 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-74-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 073/128] KVM: selftests: Convert debug_regs away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert debug_regs to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. Opportunstically drop the CLEAR_DEBUG/APPLY_DEBUG macros as they only obfuscate the code, e.g. operating on local variables not "passed" to the macro is all kinds of confusing. Signed-off-by: Sean Christopherson --- .../testing/selftests/kvm/x86_64/debug_regs.c | 53 +++++++++---------- 1 file changed, 25 insertions(+), 28 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/debug_regs.c b/tools/testin= g/selftests/kvm/x86_64/debug_regs.c index 5f078db1bcba..b999c9753fc3 100644 --- a/tools/testing/selftests/kvm/x86_64/debug_regs.c +++ b/tools/testing/selftests/kvm/x86_64/debug_regs.c @@ -10,8 +10,6 @@ #include "processor.h" #include "apic.h" =20 -#define VCPU_ID 0 - #define DR6_BD (1 << 13) #define DR7_GD (1 << 13) =20 @@ -66,13 +64,11 @@ static void guest_code(void) GUEST_DONE(); } =20 -#define CLEAR_DEBUG() memset(&debug, 0, sizeof(debug)) -#define APPLY_DEBUG() vcpu_set_guest_debug(vm, VCPU_ID, &debug) #define CAST_TO_RIP(v) ((unsigned long long)&(v)) #define SET_RIP(v) do { \ - vcpu_regs_get(vm, VCPU_ID, ®s); \ + vcpu_regs_get(vm, vcpu->id, ®s); \ regs.rip =3D (v); \ - vcpu_regs_set(vm, VCPU_ID, ®s); \ + vcpu_regs_set(vm, vcpu->id, ®s); \ } while (0) #define MOVE_RIP(v) SET_RIP(regs.rip + (v)); =20 @@ -80,6 +76,7 @@ int main(void) { struct kvm_guest_debug debug; unsigned long long target_dr6, target_rip; + struct kvm_vcpu *vcpu; struct kvm_regs regs; struct kvm_run *run; struct kvm_vm *vm; @@ -101,14 +98,14 @@ int main(void) return 0; } =20 - vm =3D vm_create_default(VCPU_ID, 0, guest_code); - run =3D vcpu_state(vm, VCPU_ID); + vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); + run =3D vcpu->run; =20 /* Test software BPs - int3 */ - CLEAR_DEBUG(); + memset(&debug, 0, sizeof(debug)); debug.control =3D KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_USE_SW_BP; - APPLY_DEBUG(); - vcpu_run(vm, VCPU_ID); + vcpu_set_guest_debug(vm, vcpu->id, &debug); + vcpu_run(vm, vcpu->id); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_DEBUG && run->debug.arch.exception =3D=3D BP_VECTOR && run->debug.arch.pc =3D=3D CAST_TO_RIP(sw_bp), @@ -119,12 +116,12 @@ int main(void) =20 /* Test instruction HW BP over DR[0-3] */ for (i =3D 0; i < 4; i++) { - CLEAR_DEBUG(); + memset(&debug, 0, sizeof(debug)); debug.control =3D KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_USE_HW_BP; debug.arch.debugreg[i] =3D CAST_TO_RIP(hw_bp); debug.arch.debugreg[7] =3D 0x400 | (1UL << (2*i+1)); - APPLY_DEBUG(); - vcpu_run(vm, VCPU_ID); + vcpu_set_guest_debug(vm, vcpu->id, &debug); + vcpu_run(vm, vcpu->id); target_dr6 =3D 0xffff0ff0 | (1UL << i); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_DEBUG && run->debug.arch.exception =3D=3D DB_VECTOR && @@ -141,13 +138,13 @@ int main(void) =20 /* Test data access HW BP over DR[0-3] */ for (i =3D 0; i < 4; i++) { - CLEAR_DEBUG(); + memset(&debug, 0, sizeof(debug)); debug.control =3D KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_USE_HW_BP; debug.arch.debugreg[i] =3D CAST_TO_RIP(guest_value); debug.arch.debugreg[7] =3D 0x00000400 | (1UL << (2*i+1)) | (0x000d0000UL << (4*i)); - APPLY_DEBUG(); - vcpu_run(vm, VCPU_ID); + vcpu_set_guest_debug(vm, vcpu->id, &debug); + vcpu_run(vm, vcpu->id); target_dr6 =3D 0xffff0ff0 | (1UL << i); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_DEBUG && run->debug.arch.exception =3D=3D DB_VECTOR && @@ -167,15 +164,15 @@ int main(void) /* Test single step */ target_rip =3D CAST_TO_RIP(ss_start); target_dr6 =3D 0xffff4ff0ULL; - vcpu_regs_get(vm, VCPU_ID, ®s); + vcpu_regs_get(vm, vcpu->id, ®s); for (i =3D 0; i < (sizeof(ss_size) / sizeof(ss_size[0])); i++) { target_rip +=3D ss_size[i]; - CLEAR_DEBUG(); + memset(&debug, 0, sizeof(debug)); debug.control =3D KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_SINGLESTEP | KVM_GUESTDBG_BLOCKIRQ; debug.arch.debugreg[7] =3D 0x00000400; - APPLY_DEBUG(); - vcpu_run(vm, VCPU_ID); + vcpu_set_guest_debug(vm, vcpu->id, &debug); + vcpu_run(vm, vcpu->id); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_DEBUG && run->debug.arch.exception =3D=3D DB_VECTOR && run->debug.arch.pc =3D=3D target_rip && @@ -188,11 +185,11 @@ int main(void) } =20 /* Finally test global disable */ - CLEAR_DEBUG(); + memset(&debug, 0, sizeof(debug)); debug.control =3D KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_USE_HW_BP; debug.arch.debugreg[7] =3D 0x400 | DR7_GD; - APPLY_DEBUG(); - vcpu_run(vm, VCPU_ID); + vcpu_set_guest_debug(vm, vcpu->id, &debug); + vcpu_run(vm, vcpu->id); target_dr6 =3D 0xffff0ff0 | DR6_BD; TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_DEBUG && run->debug.arch.exception =3D=3D DB_VECTOR && @@ -205,12 +202,12 @@ int main(void) target_dr6); =20 /* Disable all debug controls, run to the end */ - CLEAR_DEBUG(); - APPLY_DEBUG(); + memset(&debug, 0, sizeof(debug)); + vcpu_set_guest_debug(vm, vcpu->id, &debug); =20 - vcpu_run(vm, VCPU_ID); + vcpu_run(vm, vcpu->id); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "KVM_EXIT_IO"); - cmd =3D get_ucall(vm, VCPU_ID, &uc); + cmd =3D get_ucall(vm, vcpu->id, &uc); TEST_ASSERT(cmd =3D=3D UCALL_DONE, "UCALL_DONE"); =20 kvm_vm_free(vm); --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 A0018C433EF for ; Wed, 4 May 2022 23:06:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1352409AbiEDXDs (ORCPT ); Wed, 4 May 2022 19:03:48 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45464 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379411AbiEDW4E (ORCPT ); Wed, 4 May 2022 18:56:04 -0400 Received: from mail-pj1-x1049.google.com (mail-pj1-x1049.google.com [IPv6:2607:f8b0:4864:20::1049]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4ACD054FAE for ; Wed, 4 May 2022 15:51:39 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id oo16-20020a17090b1c9000b001c6d21e8c04so3570433pjb.4 for ; Wed, 04 May 2022 15:51:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=DA/fDPR7FY+ZNY50Im1yQgf+ht5FfAkOTNmE+ScZpZM=; b=ZeeKreHJWVQz2m2UB7s7FHMq/p8SocWocBELKqSTgZxWUdVZH9FiVQC6OEUi4YzDsE o7tBI44bdbRq2Syko+zPNST2pAXBZyhPKJUiMw1+7LMddY1EtWlstB7Ed+Ya22VFQllv 12kpynBaSIJVhJE58RFo2jeuFMLsRaXxKx2sKIBF9qByUxSF5X7Sv+jVN82lIMDzVZ2A MVb+i2MAIf78Xc68hUkpheLlgxcYjWgKLLw7c7zlHIUvdPBuCbwkYOf+Nj0sm2g1FWEW 2OG9VQ1m2Oo38e3tamfFz+aCFUD0wOuRjR7HdSHYhp6n94vuU0d6DrvryyLEPCWntLn3 WJZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=DA/fDPR7FY+ZNY50Im1yQgf+ht5FfAkOTNmE+ScZpZM=; b=sT4hY0/EXPDSogp3jFb2TisGetCc7TohEmMVZqqpPAq3eLpIe7DOrDwj1GRihuO4Oc iCNVdQrE08H/74KzIbbMVP654EJ+TB2jBV3BmUo28VDw4l1AO39LlczbVIAW6Jp2mwuT 6J2syIVYUEm/DoZAoQJHBzsXbQfQYAtg8i7ke2SWD6ROBzCKrVy4KyvJADa8pBIskwdv UFhhM6UesDuG8clr9LG/kkhCJBdZIDhVX0BnhfGVB7LUFt2i1Sv/0iMB3UG7hLL2gF4J VLzl6wKu4sagvlvDG0x4Q4PDWNBMSmtBKvIsL3Blbb0EOjcfpLwpjaLVQZV8RK9t9TWX vDVw== X-Gm-Message-State: AOAM5304VDNiAL/MV2YZ7yvKRxrz0Pyx8bPurgU0N6bmMNDb6YO4HMi1 fc9Qw18Z1a4U9bZNHVJLVzLpcFTESXs= X-Google-Smtp-Source: ABdhPJwsV64fqomnb3OF++XujEXwHIhvLv6CB3KXiPLjrWBUdu4SQX7+zwuxGApPxUwaO81GXGIRJY5BHHc= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:cf0a:b0:156:39c9:4c44 with SMTP id i10-20020a170902cf0a00b0015639c94c44mr23849018plg.124.1651704698816; Wed, 04 May 2022 15:51:38 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:20 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-75-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 074/128] KVM: selftests: Add proper helper for advancing RIP in debug_regs From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Replace MOVE_RIP+SET_RIP with a proper helper, vcpu_skip_insn(), that is more descriptive, doesn't subtly access local variables, and provides type safety. Signed-off-by: Sean Christopherson --- .../testing/selftests/kvm/x86_64/debug_regs.c | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/debug_regs.c b/tools/testin= g/selftests/kvm/x86_64/debug_regs.c index b999c9753fc3..487d0ae3e75f 100644 --- a/tools/testing/selftests/kvm/x86_64/debug_regs.c +++ b/tools/testing/selftests/kvm/x86_64/debug_regs.c @@ -65,19 +65,21 @@ static void guest_code(void) } =20 #define CAST_TO_RIP(v) ((unsigned long long)&(v)) -#define SET_RIP(v) do { \ - vcpu_regs_get(vm, vcpu->id, ®s); \ - regs.rip =3D (v); \ - vcpu_regs_set(vm, vcpu->id, ®s); \ - } while (0) -#define MOVE_RIP(v) SET_RIP(regs.rip + (v)); + +static void vcpu_skip_insn(struct kvm_vcpu *vcpu, int insn_len) +{ + struct kvm_regs regs; + + vcpu_regs_get(vcpu->vm, vcpu->id, ®s); + regs.rip +=3D insn_len; + vcpu_regs_set(vcpu->vm, vcpu->id, ®s); +} =20 int main(void) { struct kvm_guest_debug debug; unsigned long long target_dr6, target_rip; struct kvm_vcpu *vcpu; - struct kvm_regs regs; struct kvm_run *run; struct kvm_vm *vm; struct ucall uc; @@ -112,7 +114,7 @@ int main(void) "INT3: exit %d exception %d rip 0x%llx (should be 0x%llx)", run->exit_reason, run->debug.arch.exception, run->debug.arch.pc, CAST_TO_RIP(sw_bp)); - MOVE_RIP(1); + vcpu_skip_insn(vcpu, 1); =20 /* Test instruction HW BP over DR[0-3] */ for (i =3D 0; i < 4; i++) { @@ -134,7 +136,7 @@ int main(void) run->debug.arch.dr6, target_dr6); } /* Skip "nop" */ - MOVE_RIP(1); + vcpu_skip_insn(vcpu, 1); =20 /* Test data access HW BP over DR[0-3] */ for (i =3D 0; i < 4; i++) { @@ -156,15 +158,14 @@ int main(void) run->debug.arch.pc, CAST_TO_RIP(write_data), run->debug.arch.dr6, target_dr6); /* Rollback the 4-bytes "mov" */ - MOVE_RIP(-7); + vcpu_skip_insn(vcpu, -7); } /* Skip the 4-bytes "mov" */ - MOVE_RIP(7); + vcpu_skip_insn(vcpu, 7); =20 /* Test single step */ target_rip =3D CAST_TO_RIP(ss_start); target_dr6 =3D 0xffff4ff0ULL; - vcpu_regs_get(vm, vcpu->id, ®s); for (i =3D 0; i < (sizeof(ss_size) / sizeof(ss_size[0])); i++) { target_rip +=3D ss_size[i]; memset(&debug, 0, sizeof(debug)); --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 C22B6C433FE for ; Wed, 4 May 2022 23:06:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1380890AbiEDXDw (ORCPT ); Wed, 4 May 2022 19:03:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47000 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379455AbiEDW4F (ORCPT ); Wed, 4 May 2022 18:56:05 -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 E273954FBA for ; Wed, 4 May 2022 15:51:40 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id o16-20020a17090ab89000b001d84104fc2cso2393772pjr.1 for ; Wed, 04 May 2022 15:51:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=Cc4J6i9fQqsf9PEcQ2aqKfhVhnlneBcoWg904bFOlIk=; b=RICS/+YLRLgXa9sejev5VMnYQdOTUMhmWYPp1u7x36wuWtNgelxFYFIUGxFLmktpPL IEIXIFUX146ZPdiroBTy8KCDYjTKq+nT7MybmErCJqwAdZVhxGQ4gZzB2j7xeqJEeAtH j4cGOPXqR2pq4Of7gKQEYkL3qBKlExMN4LHxYVpMk/pZ7b+7HWJpbhy81/Iy5dSwd9kd Nk+fsg7E78B16HdPUbKeZPYu8YNcHnXnpoxPxaONiRJE8sTnEnLe/cdxK9Oy6xejNJXF M5LS6TpW1MIEV8XLL+vLxMbgibeVt+JDz3AlmLTMY48GOqtdtw5Ku7xDRjnFbXNcMz95 7mAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=Cc4J6i9fQqsf9PEcQ2aqKfhVhnlneBcoWg904bFOlIk=; b=A85de8RgHfsR6Acomaf5yXEq4K8pWnR2RGIXCtZRLVHmWsj6pl5rjEjsbD7HTfK12q S9YJhiNCM6pfeYtA90qmmb5m6eKmPc0GmRIjbtvknzpYCkclxUZjrBnr8K3i0GxDV38x L52xXSN0pR+sZYsssibCLi0TsB7L+GmMShuuepMD5Fi+/rGoUx/Itb4f6QdpP64Ru/82 UV6mK7VU3vD25XTjaqk+MHXA8o49rWFjhC8iLz+PYlQVgJF4/xpbSMx7tYv78heLvbq/ JDZzYMxeI5IFKKfahKlj68cXOj1VSOsxhXrq1tP0EcN0PB9KbFbX6dj7mwlCGM8QaJIT D2rg== X-Gm-Message-State: AOAM532LPAM7EUuPxoPRzWMxXO8mRll1uXez6kQY4D/vrm/DvrF1BxC5 cH83/1euJnq+hA2elPMq5ZIfZ0QzkKc= X-Google-Smtp-Source: ABdhPJx5QjtYlYVFRAR7oQtm+mWtkE95fcKSe8vNH+X3mK9TSN8yw9YmHnvq/TyLMiotoHYP5uWPkgkUcJ0= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:1f0b:b0:50a:8181:fecb with SMTP id be11-20020a056a001f0b00b0050a8181fecbmr22839456pfb.12.1651704700406; Wed, 04 May 2022 15:51:40 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:21 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-76-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 075/128] KVM: selftests: Convert amx_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert amx_test to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID.o Opportunistically use vcpu_run() instead of _vcpu_run(), the test expects KVM_RUN to succeed. Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/x86_64/amx_test.c | 33 +++++++++---------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/amx_test.c b/tools/testing/= selftests/kvm/x86_64/amx_test.c index 2f01247da0b5..7755fe8fcffb 100644 --- a/tools/testing/selftests/kvm/x86_64/amx_test.c +++ b/tools/testing/selftests/kvm/x86_64/amx_test.c @@ -25,7 +25,6 @@ # error This test is 64-bit only #endif =20 -#define VCPU_ID 0 #define X86_FEATURE_XSAVE (1 << 26) #define X86_FEATURE_OSXSAVE (1 << 27) =20 @@ -319,6 +318,7 @@ int main(int argc, char *argv[]) struct kvm_cpuid_entry2 *entry; struct kvm_regs regs1, regs2; bool amx_supported =3D false; + struct kvm_vcpu *vcpu; struct kvm_vm *vm; struct kvm_run *run; struct kvm_x86_state *state; @@ -331,7 +331,7 @@ int main(int argc, char *argv[]) vm_xsave_req_perm(XSTATE_XTILE_DATA_BIT); =20 /* Create VM */ - vm =3D vm_create_default(VCPU_ID, 0, guest_code); + vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); =20 entry =3D kvm_get_supported_cpuid_entry(1); if (!(entry->ecx & X86_FEATURE_XSAVE)) { @@ -350,12 +350,12 @@ int main(int argc, char *argv[]) xsave_restore_size =3D entry->ecx; } =20 - run =3D vcpu_state(vm, VCPU_ID); - vcpu_regs_get(vm, VCPU_ID, ®s1); + run =3D vcpu->run; + vcpu_regs_get(vm, vcpu->id, ®s1); =20 /* Register #NM handler */ vm_init_descriptor_tables(vm); - vcpu_init_descriptor_tables(vm, VCPU_ID); + vcpu_init_descriptor_tables(vm, vcpu->id); vm_install_exception_handler(vm, NM_VECTOR, guest_nm_handler); =20 /* amx cfg for guest_code */ @@ -369,16 +369,16 @@ int main(int argc, char *argv[]) /* xsave data for guest_code */ xsavedata =3D vm_vaddr_alloc_pages(vm, 3); memset(addr_gva2hva(vm, xsavedata), 0, 3 * getpagesize()); - vcpu_args_set(vm, VCPU_ID, 3, amx_cfg, tiledata, xsavedata); + vcpu_args_set(vm, vcpu->id, 3, amx_cfg, tiledata, xsavedata); =20 for (stage =3D 1; ; stage++) { - _vcpu_run(vm, VCPU_ID); + vcpu_run(vm, vcpu->id); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Stage %d: unexpected exit reason: %u (%s),\n", stage, run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vm, VCPU_ID, &uc)) { + switch (get_ucall(vm, vcpu->id, &uc)) { case UCALL_ABORT: TEST_FAIL("%s at %s:%ld", (const char *)uc.args[0], __FILE__, uc.args[1]); @@ -403,7 +403,7 @@ int main(int argc, char *argv[]) * size subtract 8K amx size. */ amx_offset =3D xsave_restore_size - NUM_TILES*TILE_SIZE; - state =3D vcpu_save_state(vm, VCPU_ID); + state =3D vcpu_save_state(vm, vcpu->id); void *amx_start =3D (void *)state->xsave + amx_offset; void *tiles_data =3D (void *)addr_gva2hva(vm, tiledata); /* Only check TMM0 register, 1 tile */ @@ -424,22 +424,21 @@ int main(int argc, char *argv[]) TEST_FAIL("Unknown ucall %lu", uc.cmd); } =20 - state =3D vcpu_save_state(vm, VCPU_ID); + state =3D vcpu_save_state(vm, vcpu->id); memset(®s1, 0, sizeof(regs1)); - vcpu_regs_get(vm, VCPU_ID, ®s1); + vcpu_regs_get(vm, vcpu->id, ®s1); =20 kvm_vm_release(vm); =20 /* Restore state in a new VM. */ - kvm_vm_restart(vm); - vm_vcpu_add(vm, VCPU_ID); - vcpu_set_cpuid(vm, VCPU_ID, kvm_get_supported_cpuid()); - vcpu_load_state(vm, VCPU_ID, state); - run =3D vcpu_state(vm, VCPU_ID); + vcpu =3D vm_recreate_with_one_vcpu(vm); + vcpu_set_cpuid(vm, vcpu->id, kvm_get_supported_cpuid()); + vcpu_load_state(vm, vcpu->id, state); + run =3D vcpu->run; kvm_x86_state_cleanup(state); =20 memset(®s2, 0, sizeof(regs2)); - vcpu_regs_get(vm, VCPU_ID, ®s2); + vcpu_regs_get(vm, vcpu->id, ®s2); TEST_ASSERT(!memcmp(®s1, ®s2, sizeof(regs2)), "Unexpected register values after vcpu_load_state; rdi: %lx rsi: %l= x", (ulong) regs2.rdi, (ulong) regs2.rsi); --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 D9D14C4332F for ; Wed, 4 May 2022 23:06:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1380971AbiEDXEC (ORCPT ); Wed, 4 May 2022 19:04:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45378 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379517AbiEDW4G (ORCPT ); Wed, 4 May 2022 18:56:06 -0400 Received: from mail-pj1-x1049.google.com (mail-pj1-x1049.google.com [IPv6:2607:f8b0:4864:20::1049]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A9F3A55212 for ; Wed, 4 May 2022 15:51:42 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id u1-20020a17090a2b8100b001d9325a862fso1080416pjd.6 for ; Wed, 04 May 2022 15:51:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=qqoAeeErdsEhij0HQ/LNwRXxgCZ0knSRj2MksVXFRSA=; b=OO7xyAOZSwHZe3gwe1S/Px+5Qm/+w1z7XgGiIAWzmAO/YPyFEk8tL0+eZstmFYWtHb y3rbY/pEPtWfZlD4ekeQ9SDCXYR+qOoQqHdnObzQUIkTyYdu/TIIriVRC6GpLU4W9pUv jAFLvtw66xokP3ffnhVOSsyO2IswMHbAwTEZd3DJdvoL8iLo9WjOp6fijFMbAiq/8Jxu 5uh9b4MonmsIFP9G+oUnjNiEQwLp2IWPp+kUSm/k1Ac4fl0Lt15UjyWDY/po/HwsQA65 vItoskaiqVKc62gBiEHikOAYKxbYtgoHbVB6Aq9HBou4uyq9zBC/3VVyCQDXagZF8fO9 yiSw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=qqoAeeErdsEhij0HQ/LNwRXxgCZ0knSRj2MksVXFRSA=; b=RsZFSnG7MAtmMspfllBdHLHHPeWXHBardel9rDClo7NvQvOA1483eWkFiiG6JcSG9+ r+aqQWNYqhWCpE1Fs6ot5125Zm3+6DKghlp3F7YERqocvjB0jQbWfaCOTWRjTJDDMWcI k+050/8j65Sv93PB+NYycGhh4ka5kBiBuGnk9uRoIU4b/mBVeGNRLPUZH+XM1UIYMuAD G043vcql6RHOgwLZQykUWp9ca2tDBDL2N1DaY2zAOEaQ6SDxM5Kb4BkPKLvSDwOrJZhG neTtNyLUjjA9iKmF5wME9d7npFEqFN8XvT7hh1nwKMPC6FIo/TV5F60klY61qzWz6Ocg AEBA== X-Gm-Message-State: AOAM531RjPQSgwH1FYU20aGLecFOx/d6f9yMIS+ak1TLj2gQy32M5p2G oWgZxHxC5mU+MEXL4W1dgDMnkUfMWNY= X-Google-Smtp-Source: ABdhPJyfA+4PQaBNp1bqa3kM6KRVv2I33LLNv9lu4lg/WAN/JXYMWLW25+dHX0/mRv51r5L3jsCPxGnUpxY= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a63:f307:0:b0:3c5:74b3:1b72 with SMTP id l7-20020a63f307000000b003c574b31b72mr5359471pgh.120.1651704702065; Wed, 04 May 2022 15:51:42 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:22 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-77-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 076/128] KVM: selftests: Convert cr4_cpuid_sync_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert cr4_cpuid_sync_test to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. Note, this is a "functional" change in the sense that the test now creates a vCPU with vcpu_id=3D=3D0 instead of vcpu_id=3D=3D1. The non-zero VCPU_ID was 10= 0% arbitrary and added little to no validation coverage. If testing non-zero vCPU IDs is desirable for generic tests, that can be done in the future by tweaking the VM creation helpers. Opportunistically use vcpu_run() instead of _vcpu_run() with an open coded assert that KVM_RUN succeeded. Signed-off-by: Sean Christopherson --- .../selftests/kvm/x86_64/cr4_cpuid_sync_test.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/cr4_cpuid_sync_test.c b/too= ls/testing/selftests/kvm/x86_64/cr4_cpuid_sync_test.c index 6f6fd189dda3..d5615cd0b81b 100644 --- a/tools/testing/selftests/kvm/x86_64/cr4_cpuid_sync_test.c +++ b/tools/testing/selftests/kvm/x86_64/cr4_cpuid_sync_test.c @@ -21,7 +21,6 @@ =20 #define X86_FEATURE_XSAVE (1<<26) #define X86_FEATURE_OSXSAVE (1<<27) -#define VCPU_ID 1 =20 static inline bool cr4_cpuid_is_sync(void) { @@ -63,12 +62,12 @@ static void guest_code(void) =20 int main(int argc, char *argv[]) { + struct kvm_vcpu *vcpu; struct kvm_run *run; struct kvm_vm *vm; struct kvm_sregs sregs; struct kvm_cpuid_entry2 *entry; struct ucall uc; - int rc; =20 entry =3D kvm_get_supported_cpuid_entry(1); if (!(entry->ecx & X86_FEATURE_XSAVE)) { @@ -79,25 +78,23 @@ int main(int argc, char *argv[]) /* Tell stdout not to buffer its content */ setbuf(stdout, NULL); =20 - /* Create VM */ - vm =3D vm_create_default(VCPU_ID, 0, guest_code); - run =3D vcpu_state(vm, VCPU_ID); + vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); + run =3D vcpu->run; =20 while (1) { - rc =3D _vcpu_run(vm, VCPU_ID); + vcpu_run(vm, vcpu->id); =20 - TEST_ASSERT(rc =3D=3D 0, "vcpu_run failed: %d\n", rc); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Unexpected exit reason: %u (%s),\n", run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vm, VCPU_ID, &uc)) { + switch (get_ucall(vm, vcpu->id, &uc)) { case UCALL_SYNC: /* emulate hypervisor clearing CR4.OSXSAVE */ - vcpu_sregs_get(vm, VCPU_ID, &sregs); + vcpu_sregs_get(vm, vcpu->id, &sregs); sregs.cr4 &=3D ~X86_CR4_OSXSAVE; - vcpu_sregs_set(vm, VCPU_ID, &sregs); + vcpu_sregs_set(vm, vcpu->id, &sregs); break; case UCALL_ABORT: TEST_FAIL("Guest CR4 bit (OSXSAVE) unsynchronized with CPUID bit."); --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 E961CC43217 for ; Wed, 4 May 2022 23:06:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1381071AbiEDXEH (ORCPT ); Wed, 4 May 2022 19:04:07 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45790 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1376439AbiEDW4U (ORCPT ); Wed, 4 May 2022 18:56:20 -0400 Received: from mail-yb1-xb49.google.com (mail-yb1-xb49.google.com [IPv6:2607:f8b0:4864:20::b49]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F20355522D for ; Wed, 4 May 2022 15:51:44 -0700 (PDT) Received: by mail-yb1-xb49.google.com with SMTP id r14-20020a25844e000000b00648bdf7491bso2321266ybm.1 for ; Wed, 04 May 2022 15:51:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=YDkhuD1tFveY1Cr6YZonD42KIh1P5gqeU9XwbNgB5as=; b=MlFD/eduoV76Petw58QkIbmSLj8MGKYaxEizrcED6ibzh5AkLLDmITURZ7CcQ+3Fnr 39JcQTP6IvuPEoypiIYs1LgRDR5CwGTrTkwfyvH/mddjfrjKBz/y4NQgYc1GRdLEcamG zKWcpLWxxbmLn0YZld5sihVMbhHVFhBxodUnahm4tJbL08Zn4N2NZisk/4aLayvqKoE1 uw4VPH2uGIcNS9n1RhE2BGo4b0qXBY2YOc+BuuwCsM3BTeXKCF2t0qGJgKeRxftpbYz6 MEabaDJ7xCpcu7DXlekuAMrk5bXyigmWoEXl2NTvHkZxhoomwfaJihhUFhFebEU4sS4x CGRA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=YDkhuD1tFveY1Cr6YZonD42KIh1P5gqeU9XwbNgB5as=; b=QcsPED1YVY156+PimjKbM9grHpbzaOx5gaN0xQgnacHpRqpKyXwciFO8Av56Tj9o/T P9cqAxfPefElar13QpipLws5k1zvztiQQJHr/0NwCkCzRO2dw2bZILWP9xrrbO4jMm04 4FHzpk0Yt1RKHKc3JwvL3TxB2K8TR6WaZ1kH/L/Z9HJsc7/OIF6UauhM+NCZ3iamR7G9 KHkLt/8HQrZ/xkV17PEIIOs7O4LnBCRghdCXYo/zOzXcOUUxpjYWvwX1WCy8cwbK5y0o 69W+fsAzDuVReD8MbBE9pyUw18DDp1Uoc//9dcMmNJiwBTQCEorEZFzawa2HMxtcr8yn TM6A== X-Gm-Message-State: AOAM530qDZ1XaTTk6BSHPoRwD19XkVSkJZK1T4vxo7ry3Nh01lyalHei FCvg+r8R6CkPFJy/1iEljO/Nlwglwzw= X-Google-Smtp-Source: ABdhPJxX9UoaDQsOrATTVVBZXQnxE+0nAJP4PFl/N1BeuX1eAuqaZY8tlLrR2KDi+DRcUDfUhmJ61RVz4DI= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a25:84c8:0:b0:645:6f45:3854 with SMTP id x8-20020a2584c8000000b006456f453854mr18427962ybm.608.1651704703893; Wed, 04 May 2022 15:51:43 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:23 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-78-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 077/128] KVM: selftests: Convert cpuid_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert cpuid_test to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. Opportunistically use vcpu_run() instead of _vcpu_run(), the test expects KVM_RUN to succeed. Signed-off-by: Sean Christopherson --- .../testing/selftests/kvm/x86_64/cpuid_test.c | 29 +++++++++---------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/cpuid_test.c b/tools/testin= g/selftests/kvm/x86_64/cpuid_test.c index 16d2465c5634..76cdd0d10757 100644 --- a/tools/testing/selftests/kvm/x86_64/cpuid_test.c +++ b/tools/testing/selftests/kvm/x86_64/cpuid_test.c @@ -12,8 +12,6 @@ #include "kvm_util.h" #include "processor.h" =20 -#define VCPU_ID 0 - /* CPUIDs known to differ */ struct { u32 function; @@ -118,13 +116,13 @@ static void compare_cpuids(struct kvm_cpuid2 *cpuid1,= struct kvm_cpuid2 *cpuid2) check_cpuid(cpuid1, &cpuid2->entries[i]); } =20 -static void run_vcpu(struct kvm_vm *vm, uint32_t vcpuid, int stage) +static void run_vcpu(struct kvm_vcpu *vcpu, int stage) { struct ucall uc; =20 - _vcpu_run(vm, vcpuid); + vcpu_run(vcpu->vm, vcpu->id); =20 - switch (get_ucall(vm, vcpuid, &uc)) { + switch (get_ucall(vcpu->vm, vcpu->id, &uc)) { case UCALL_SYNC: TEST_ASSERT(!strcmp((const char *)uc.args[0], "hello") && uc.args[1] =3D=3D stage + 1, @@ -138,7 +136,7 @@ static void run_vcpu(struct kvm_vm *vm, uint32_t vcpuid= , int stage) __FILE__, uc.args[1], uc.args[2], uc.args[3]); default: TEST_ASSERT(false, "Unexpected exit: %s", - exit_reason_str(vcpu_state(vm, vcpuid)->exit_reason)); + exit_reason_str(vcpu->run->exit_reason)); } } =20 @@ -154,21 +152,21 @@ struct kvm_cpuid2 *vcpu_alloc_cpuid(struct kvm_vm *vm= , vm_vaddr_t *p_gva, struct return guest_cpuids; } =20 -static void set_cpuid_after_run(struct kvm_vm *vm, struct kvm_cpuid2 *cpui= d) +static void set_cpuid_after_run(struct kvm_vcpu *vcpu, struct kvm_cpuid2 *= cpuid) { struct kvm_cpuid_entry2 *ent; int rc; u32 eax, ebx, x; =20 /* Setting unmodified CPUID is allowed */ - rc =3D __vcpu_set_cpuid(vm, VCPU_ID, cpuid); + rc =3D __vcpu_set_cpuid(vcpu->vm, vcpu->id, cpuid); TEST_ASSERT(!rc, "Setting unmodified CPUID after KVM_RUN failed: %d", rc); =20 /* Changing CPU features is forbidden */ ent =3D get_cpuid(cpuid, 0x7, 0); ebx =3D ent->ebx; ent->ebx--; - rc =3D __vcpu_set_cpuid(vm, VCPU_ID, cpuid); + rc =3D __vcpu_set_cpuid(vcpu->vm, vcpu->id, cpuid); TEST_ASSERT(rc, "Changing CPU features should fail"); ent->ebx =3D ebx; =20 @@ -177,7 +175,7 @@ static void set_cpuid_after_run(struct kvm_vm *vm, stru= ct kvm_cpuid2 *cpuid) eax =3D ent->eax; x =3D eax & 0xff; ent->eax =3D (eax & ~0xffu) | (x - 1); - rc =3D __vcpu_set_cpuid(vm, VCPU_ID, cpuid); + rc =3D __vcpu_set_cpuid(vcpu->vm, vcpu->id, cpuid); TEST_ASSERT(rc, "Changing MAXPHYADDR should fail"); ent->eax =3D eax; } @@ -185,25 +183,26 @@ static void set_cpuid_after_run(struct kvm_vm *vm, st= ruct kvm_cpuid2 *cpuid) int main(void) { struct kvm_cpuid2 *supp_cpuid, *cpuid2; + struct kvm_vcpu *vcpu; vm_vaddr_t cpuid_gva; struct kvm_vm *vm; int stage; =20 - vm =3D vm_create_default(VCPU_ID, 0, guest_main); + vm =3D vm_create_with_one_vcpu(&vcpu, guest_main); =20 supp_cpuid =3D kvm_get_supported_cpuid(); - cpuid2 =3D vcpu_get_cpuid(vm, VCPU_ID); + cpuid2 =3D vcpu_get_cpuid(vm, vcpu->id); =20 compare_cpuids(supp_cpuid, cpuid2); =20 vcpu_alloc_cpuid(vm, &cpuid_gva, cpuid2); =20 - vcpu_args_set(vm, VCPU_ID, 1, cpuid_gva); + vcpu_args_set(vm, vcpu->id, 1, cpuid_gva); =20 for (stage =3D 0; stage < 3; stage++) - run_vcpu(vm, VCPU_ID, stage); + run_vcpu(vcpu, stage); =20 - set_cpuid_after_run(vm, cpuid2); + set_cpuid_after_run(vcpu, cpuid2); =20 kvm_vm_free(vm); } --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 1438AC43219 for ; Wed, 4 May 2022 23:06:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1381176AbiEDXEQ (ORCPT ); Wed, 4 May 2022 19:04:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46246 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379683AbiEDW5W (ORCPT ); Wed, 4 May 2022 18:57:22 -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 BFBE25534E for ; Wed, 4 May 2022 15:51:48 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id k2-20020a170902ba8200b0015613b12004so1367564pls.22 for ; Wed, 04 May 2022 15:51:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=xEQbxUARELbhHSYHXmNFvwMBvlzdLsgmj19ArJnkrhs=; b=swamEmeh4M9RkQH2dqPuBEZMrLwQkEUgIzTDIzHEIXE7sci6ETIUGi6xs8QCOdqcl+ 6bcgNnECJXfui4mKHFlsJ/gqZ9F3Cfy/j21tel3kFYM0Wd7pK0j44KqQ7VPpEJPjOwX1 SlMPm0rTzsDBPkGwVw4JRiKp9q95EZSUM0FYv1AMg/MTT0aTQWbi/3VbBP9uPTWZ6LEJ wYVWRX6oCqNp5PFOWWRWToX2lppaM8Y/pbAu+T1/AywU2FJNARY3NSPgqFzVKT87ZTRs on3ChcI8Mv8zAQDF/WlIZdQEh50F1Ue5Qva0yR27GrGCJ5ZeXalBT3DTPG9qfoe21DNr a45w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=xEQbxUARELbhHSYHXmNFvwMBvlzdLsgmj19ArJnkrhs=; b=PJuBMnZBcQv9pELxQBKUuE6HbB3gxqUajBFpRcq7o7A1A7ZlNksa/sagWGtkDbQ9h9 ABnk4FjX0CkKMR+z0Q+sWBbFhQc1jc4VkMDDJ9fB5NL9+1gEG/LJTo1Iy+nl/ZWJdl4J 2w4ijBE1H1C2fbcVFfTCxdG+mBWkBDcoEB/AGbBWe8EC56A4iTIF0Pngel8Mu4PjhQge vIoTCOt2lSY66izpYoqrjShojULS/sHIaqdKO0qzMSVFFt/aVqMQ1sU393rLtgz51BeY OM9bzLzkBgili7qlhIQZrUUm8wkzwBrU7ggs58tgehQz3zwUF34G2P6Mw49NqRR64RHv dRNw== X-Gm-Message-State: AOAM533vVuDuXQqEXfZVss7vqZKYlyKqs4NweFnAGdlb/EGUXI0dK8Qm oR1ZLhXAxq0I5nN/6VmGa1OmgYg31+Y= X-Google-Smtp-Source: ABdhPJz/a/GixBSxg9PMmZsWQEbfe02Yez+gKML1QUIpFmNDrgQT3JBowT5Mvl7INjkoSltq/FwX55LqTgs= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:c986:b0:1d9:56e7:4e83 with SMTP id w6-20020a17090ac98600b001d956e74e83mr140044pjt.1.1651704705684; Wed, 04 May 2022 15:51:45 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:24 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-79-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 078/128] KVM: selftests: Convert userspace_io_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert userspace_io_test to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. Note, this is a "functional" change in the sense that the test now creates a vCPU with vcpu_id=3D=3D0 instead of vcpu_id=3D=3D1. The non-zero VCPU_ID was 10= 0% arbitrary and added little to no validation coverage. If testing non-zero vCPU IDs is desirable for generic tests, that can be done in the future by tweaking the VM creation helpers. Opportunistically use vcpu_run() instead of _vcpu_run() with an open coded assert that KVM_RUN succeeded. Signed-off-by: Sean Christopherson --- .../selftests/kvm/x86_64/userspace_io_test.c | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/userspace_io_test.c b/tools= /testing/selftests/kvm/x86_64/userspace_io_test.c index e4bef2e05686..0ba774ed6476 100644 --- a/tools/testing/selftests/kvm/x86_64/userspace_io_test.c +++ b/tools/testing/selftests/kvm/x86_64/userspace_io_test.c @@ -10,8 +10,6 @@ #include "kvm_util.h" #include "processor.h" =20 -#define VCPU_ID 1 - static void guest_ins_port80(uint8_t *buffer, unsigned int count) { unsigned long end; @@ -52,31 +50,29 @@ static void guest_code(void) =20 int main(int argc, char *argv[]) { + struct kvm_vcpu *vcpu; struct kvm_regs regs; struct kvm_run *run; struct kvm_vm *vm; struct ucall uc; - int rc; =20 /* Tell stdout not to buffer its content */ setbuf(stdout, NULL); =20 - /* Create VM */ - vm =3D vm_create_default(VCPU_ID, 0, guest_code); - run =3D vcpu_state(vm, VCPU_ID); + vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); + run =3D vcpu->run; =20 memset(®s, 0, sizeof(regs)); =20 while (1) { - rc =3D _vcpu_run(vm, VCPU_ID); + vcpu_run(vm, vcpu->id); =20 - TEST_ASSERT(rc =3D=3D 0, "vcpu_run failed: %d\n", rc); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Unexpected exit reason: %u (%s),\n", run->exit_reason, exit_reason_str(run->exit_reason)); =20 - if (get_ucall(vm, VCPU_ID, &uc)) + if (get_ucall(vm, vcpu->id, &uc)) break; =20 TEST_ASSERT(run->io.port =3D=3D 0x80, @@ -89,13 +85,13 @@ int main(int argc, char *argv[]) * scope from a testing perspective as it's not ABI in any way, * i.e. it really is abusing internal KVM knowledge. */ - vcpu_regs_get(vm, VCPU_ID, ®s); + vcpu_regs_get(vm, vcpu->id, ®s); if (regs.rcx =3D=3D 2) regs.rcx =3D 1; if (regs.rcx =3D=3D 3) regs.rcx =3D 8192; memset((void *)run + run->io.data_offset, 0xaa, 4096); - vcpu_regs_set(vm, VCPU_ID, ®s); + vcpu_regs_set(vm, vcpu->id, ®s); } =20 switch (uc.cmd) { --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 04F34C4321E for ; Wed, 4 May 2022 23:06:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1381135AbiEDXEM (ORCPT ); Wed, 4 May 2022 19:04:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45440 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379689AbiEDW5X (ORCPT ); Wed, 4 May 2022 18:57:23 -0400 Received: from mail-pj1-x1049.google.com (mail-pj1-x1049.google.com [IPv6:2607:f8b0:4864:20::1049]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AE66E55362 for ; Wed, 4 May 2022 15:51:50 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id d64-20020a17090a6f4600b001da3937032fso3565788pjk.5 for ; Wed, 04 May 2022 15:51:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=BtuOPa2+k7Wo3nV0FJhhIgH2qpNxvRgndKjG9WXxzYQ=; b=VMGEiHS3xBPCXWfXcPrjsMNoeAlmKvj0asLdht4GlUHodnv9MsN8xgauJ5WCROHHgU 1Oax3gri3vcpmNDYKyswNkolPIfL3xWmhqU7pCUZ4CPaxgbfRYe5mDN0J+ey/7P7qBqb Ftggu/yYDb1/vZIzyL0M2j3KqI+jfekwCokfQozDhTDKrPG0dj3SxL8LctmVSpesoWaW BtHLgwwiPagCvSav0PdelWZDduiwOrYdrxZn3+d692HewW9deimy0vRJ3FYwLL5xLiAn 0gzLNWlQQtK9JxI5Xe3A7JZ4gCpRAwVdpId8U6V0w/Op8bDE91xSbSeAMS8bWBDaA6dF 8AZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=BtuOPa2+k7Wo3nV0FJhhIgH2qpNxvRgndKjG9WXxzYQ=; b=zOSF3VTXp5nwo2Sx4POUDal2qtfh5sVEGQGt1K+DlwHYrZrcsO1d7aUSXsUqRJWnb/ yX0JNFiCeqYlfEAev/82wO8LV+bYXEHbs9ehpoQLmI5svKMPcAAvg+1y0To49nkokluO WELckHEYvwNL0CBynrVkV1Kei5qQxAz+Qqh3iXuipnHeaV2lKmw2Oqpk2s95eJ4xDpU+ Nz9Fh9x/2gIvVYGlGmjL1jEnaMHeyF75NMBStuo6kfNWmxYoe8miaN9Q/Du/DEI5K54S JkRL1Fatiz+nLr9pecG8cNjJ0dykhjXk9HUZrCBLQceJ3bfjYtuC1ajogDf02E1bd8rI FOig== X-Gm-Message-State: AOAM5304+yJ4Vq6i0Y6skNQTt/RBgW+2Lte0lc7TuOLJz7UudqFSDo/d 9fnY5xgECsim+/HlJBVPMa43qx9gm2Y= X-Google-Smtp-Source: ABdhPJx0ucgXAkqwO4kd29UJnogFXX6Noi6zVd9SuhPOMjt3ehAuQHJxlogE7Nlpu40ayYJ9pAPQeStnJlM= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a62:170b:0:b0:50a:6901:b633 with SMTP id 11-20020a62170b000000b0050a6901b633mr23213764pfx.34.1651704707413; Wed, 04 May 2022 15:51:47 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:25 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-80-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 079/128] KVM: selftests: Convert vmx_invalid_nested_guest_state away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert vmx_invalid_nested_guest_state to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. Signed-off-by: Sean Christopherson --- .../x86_64/vmx_invalid_nested_guest_state.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/vmx_invalid_nested_guest_st= ate.c b/tools/testing/selftests/kvm/x86_64/vmx_invalid_nested_guest_state.c index 489fbed4ca6f..ba534be498f9 100644 --- a/tools/testing/selftests/kvm/x86_64/vmx_invalid_nested_guest_state.c +++ b/tools/testing/selftests/kvm/x86_64/vmx_invalid_nested_guest_state.c @@ -9,7 +9,6 @@ =20 #include "kselftest.h" =20 -#define VCPU_ID 0 #define ARBITRARY_IO_PORT 0x2000 =20 static struct kvm_vm *vm; @@ -55,20 +54,21 @@ int main(int argc, char *argv[]) { vm_vaddr_t vmx_pages_gva; struct kvm_sregs sregs; + struct kvm_vcpu *vcpu; struct kvm_run *run; struct ucall uc; =20 nested_vmx_check_supported(); =20 - vm =3D vm_create_default(VCPU_ID, 0, (void *) l1_guest_code); + vm =3D vm_create_with_one_vcpu(&vcpu, l1_guest_code); =20 /* Allocate VMX pages and shared descriptors (vmx_pages). */ vcpu_alloc_vmx(vm, &vmx_pages_gva); - vcpu_args_set(vm, VCPU_ID, 1, vmx_pages_gva); + vcpu_args_set(vm, vcpu->id, 1, vmx_pages_gva); =20 - vcpu_run(vm, VCPU_ID); + vcpu_run(vm, vcpu->id); =20 - run =3D vcpu_state(vm, VCPU_ID); + run =3D vcpu->run; =20 /* * The first exit to L0 userspace should be an I/O access from L2. @@ -88,13 +88,13 @@ int main(int argc, char *argv[]) * emulating invalid guest state for L2. */ memset(&sregs, 0, sizeof(sregs)); - vcpu_sregs_get(vm, VCPU_ID, &sregs); + vcpu_sregs_get(vm, vcpu->id, &sregs); sregs.tr.unusable =3D 1; - vcpu_sregs_set(vm, VCPU_ID, &sregs); + vcpu_sregs_set(vm, vcpu->id, &sregs); =20 - vcpu_run(vm, VCPU_ID); + vcpu_run(vm, vcpu->id); =20 - switch (get_ucall(vm, VCPU_ID, &uc)) { + switch (get_ucall(vm, vcpu->id, &uc)) { case UCALL_DONE: break; case UCALL_ABORT: --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 C643CC433F5 for ; Wed, 4 May 2022 23:07:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1381226AbiEDXEV (ORCPT ); Wed, 4 May 2022 19:04:21 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45464 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379696AbiEDW52 (ORCPT ); Wed, 4 May 2022 18:57:28 -0400 Received: from mail-pg1-x54a.google.com (mail-pg1-x54a.google.com [IPv6:2607:f8b0:4864:20::54a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 004BD5536F for ; Wed, 4 May 2022 15:51:51 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id 23-20020a630117000000b003c5ea4365a1so1345614pgb.6 for ; Wed, 04 May 2022 15:51:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=ZW3w9xofgltN1neo0tjqm25A7AFY7+GoNG7TSvd2coE=; b=lzlYTUTL0Ftpdhwl2RRfG2+gvphI+IRrYXzHKvc5W9nY4Rf6Pz+ht4zScOf0lCunPG zJOaiFBKUk4BPf3fws16j4DRLYXLTBokezqVSzqBf98cOLJTbg9PIqz5c1MkcLK0ZwJw Frk7g1K1Gq0YAAGB5K+Ahqyh2mwcUgqf1B3rZpz+/4yIFrt0WJOkjADxUAG/QOYhbw9s wqeQnWoo6WCtXlIpCHdPCueQUbjjjDXaONuunq/8TkxTGH2DJf7YhNIXbZV0S+M+QuQI YFj1s7LfMQYCiWSziKghOSt0XzmHOeV3yF8N10bRtJrP2JFHkAGAs2/sZupMRIDBP4Nw XR2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=ZW3w9xofgltN1neo0tjqm25A7AFY7+GoNG7TSvd2coE=; b=lRUIKasi5qyUTHqfiMyviUJGgqjQ9VGtMDc2FRenjMWCZ4Xxu8iDRxauXjz3/IDuNa MDa9TUP231jwx+xYCAeiY4Ua775dwKKieS6lOWxezr/pRmPfX8psbMCsApBQf10xlT/F VrG1F5ao8aBO8Z/dVoVyiCKr5P0+4E5/ngqVxShAITWOXlCT7V15nh/Vy6munjsKrCyQ ZWGQW3mz8EzimHMjMLESuNbI01k3KmFut5/5YIFNbEOsLp+/vcTHku2Rb4xpf0IoVcIP kSGw1ba248NSenhiCt0gdIH7HBbrL4SS9zNaETYk/wTfkSP7UJqC2a4Git83TH5R5FIL aJEA== X-Gm-Message-State: AOAM531QiLRBRbORqf3UU4/v/88gbCX0mWg0UdHLP9nyc5ZkV7tyr+Eb jERub5um7uDhFdOQfEjINO5pdRfOuhU= X-Google-Smtp-Source: ABdhPJweO1jeaf/s+FxYi79dpsM67S4Y8HecNdtHDW/Z3aKONSylH47HtCpMaOCyFByJU33x8S0GaHK1D0w= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:b94:b0:50f:2255:ae03 with SMTP id g20-20020a056a000b9400b0050f2255ae03mr7547957pfj.74.1651704709118; Wed, 04 May 2022 15:51:49 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:26 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-81-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 080/128] KVM: selftests: Convert xen_vmcall_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert xen_vmcall_test to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. Note, this is a "functional" change in the sense that the test now creates a vCPU with vcpu_id=3D=3D0 instead of vcpu_id=3D=3D5. The non-zero VCPU_ID was 100% ar= bitrary and added little to no validation coverage. If testing non-zero vCPU IDs is desirable for generic tests, that can be done in the future by tweaking the VM creation helpers. Opportunistically make the "vm" variable local, it is unused outside of main(). Signed-off-by: Sean Christopherson --- .../selftests/kvm/x86_64/xen_vmcall_test.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/xen_vmcall_test.c b/tools/t= esting/selftests/kvm/x86_64/xen_vmcall_test.c index b30fe9de1d4f..1411ead620fe 100644 --- a/tools/testing/selftests/kvm/x86_64/xen_vmcall_test.c +++ b/tools/testing/selftests/kvm/x86_64/xen_vmcall_test.c @@ -11,13 +11,9 @@ #include "kvm_util.h" #include "processor.h" =20 -#define VCPU_ID 5 - #define HCALL_REGION_GPA 0xc0000000ULL #define HCALL_REGION_SLOT 10 =20 -static struct kvm_vm *vm; - #define INPUTVALUE 17 #define ARGVALUE(x) (0xdeadbeef5a5a0000UL + x) #define RETVALUE 0xcafef00dfbfbffffUL @@ -84,14 +80,17 @@ static void guest_code(void) =20 int main(int argc, char *argv[]) { + struct kvm_vcpu *vcpu; + struct kvm_vm *vm; + if (!(kvm_check_cap(KVM_CAP_XEN_HVM) & KVM_XEN_HVM_CONFIG_INTERCEPT_HCALL) ) { print_skip("KVM_XEN_HVM_CONFIG_INTERCEPT_HCALL not available"); exit(KSFT_SKIP); } =20 - vm =3D vm_create_default(VCPU_ID, 0, (void *) guest_code); - vcpu_set_hv_cpuid(vm, VCPU_ID); + vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); + vcpu_set_hv_cpuid(vm, vcpu->id); =20 struct kvm_xen_hvm_config hvmc =3D { .flags =3D KVM_XEN_HVM_CONFIG_INTERCEPT_HCALL, @@ -105,10 +104,10 @@ int main(int argc, char *argv[]) virt_map(vm, HCALL_REGION_GPA, HCALL_REGION_GPA, 2); =20 for (;;) { - volatile struct kvm_run *run =3D vcpu_state(vm, VCPU_ID); + volatile struct kvm_run *run =3D vcpu->run; struct ucall uc; =20 - vcpu_run(vm, VCPU_ID); + vcpu_run(vm, vcpu->id); =20 if (run->exit_reason =3D=3D KVM_EXIT_XEN) { ASSERT_EQ(run->xen.type, KVM_EXIT_XEN_HCALL); @@ -130,7 +129,7 @@ int main(int argc, char *argv[]) run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vm, VCPU_ID, &uc)) { + switch (get_ucall(vm, vcpu->id, &uc)) { case UCALL_ABORT: TEST_FAIL("%s", (const char *)uc.args[0]); /* NOT REACHED */ --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 04415C433EF for ; Wed, 4 May 2022 23:07:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1381357AbiEDXEe (ORCPT ); Wed, 4 May 2022 19:04:34 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45714 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379719AbiEDW5k (ORCPT ); Wed, 4 May 2022 18:57:40 -0400 Received: from mail-pl1-x64a.google.com (mail-pl1-x64a.google.com [IPv6:2607:f8b0:4864:20::64a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EF11F5537E for ; Wed, 4 May 2022 15:51:53 -0700 (PDT) Received: by mail-pl1-x64a.google.com with SMTP id n4-20020a170902f60400b00158d1f2d442so1365146plg.18 for ; Wed, 04 May 2022 15:51:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=4rcSeFaLUFiKNGXAyBePckU7LxVMoPAgrt8h+IIa4c8=; b=Sp4z/2UsxeKuobPA4wvdYSRlAGUlOeh9LGV2BGcrwXmGFPhYHKudr8XzPrURVYzjey hw6e9NQO70KwdkeTZr3XgNLD2TydQu0lU4TaQsEzdsoLsWiHJGy4aE85vWj0lhdq5YiH AYzq6FbE5FW39C2Z8sar8P6qTguqksTfIpuoJ0I+NklBY3QaBlP+WFRxDRF4aItUKSZ9 9uYisaiX0PPh7fU170zGcBAy6MCit8l5iaQHoSyYyyXoCBQepzkyYNMR987vpZUJANjq 0Hd3gbtwBOm5pgmrltygem8lbxGE7kW489nn/Kq+vl5KckQvcl/GlOkEeiCvNedvfeAB TsIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=4rcSeFaLUFiKNGXAyBePckU7LxVMoPAgrt8h+IIa4c8=; b=PKyTYIqr9JLjSgQKGHMxO7Vgawi0SmtQgkRTOxzI2WdcSy8LWzXGjsDbYk2QoOHza0 pROhi1EB6ebVB7ILCWi7s8EP84FoleduGukNhRlO/jDIv8fsvK6258jus4L2C0lN1F1Y rNIYLvWOXk0aZsA7E2M0yeI1BAAUmuW7oKultlEknOY0o7TmLo4FefHWotUm0KNZx+Tp lOFGNpd5dBnBafOa97BEV96AYrHAJMR/GovAGLsrC2UFdOQ5mYJNSrygie6UaoqItoR1 Vulkp9pZ189bcawB3SvyLMbf7rXHAKILyV+8UEob7WngahBKc0RFwFsjc56jy6twqDS2 j7Zw== X-Gm-Message-State: AOAM533hvOhMjPuJMSdUJz7jl3+BBhDlMlIeW4I0jj6rKKTmU873Qxp8 CHiWYMwmJ1ePw9XaIRn2eIhFP5NZVKQ= X-Google-Smtp-Source: ABdhPJxL9PFu6I9MwqTlkGSOipUpnPvOot4CaaQQdXFuhXHwjOxLj6rJ35YN6BWRk2UoN0UIkwEtkwv8pfc= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:1acf:b0:50e:1872:c6b1 with SMTP id f15-20020a056a001acf00b0050e1872c6b1mr8205872pfv.76.1651704710524; Wed, 04 May 2022 15:51:50 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:27 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-82-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 081/128] KVM: selftests: Convert xen_shinfo_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert xen_shinfo_test to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. Note, this is a "functional" change in the sense that the test now creates a vCPU with vcpu_id=3D=3D0 instead of vcpu_id=3D=3D5. The non-zero VCPU_ID was 100% ar= bitrary and added little to no validation coverage. If testing non-zero vCPU IDs is desirable for generic tests, that can be done in the future by tweaking the VM creation helpers. Signed-off-by: Sean Christopherson --- .../selftests/kvm/x86_64/xen_shinfo_test.c | 62 +++++++++---------- 1 file changed, 30 insertions(+), 32 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/xen_shinfo_test.c b/tools/t= esting/selftests/kvm/x86_64/xen_shinfo_test.c index 7a51bb648fbb..5c0abaf0eb60 100644 --- a/tools/testing/selftests/kvm/x86_64/xen_shinfo_test.c +++ b/tools/testing/selftests/kvm/x86_64/xen_shinfo_test.c @@ -18,8 +18,6 @@ =20 #include =20 -#define VCPU_ID 5 - #define SHINFO_REGION_GVA 0xc0000000ULL #define SHINFO_REGION_GPA 0xc0000000ULL #define SHINFO_REGION_SLOT 10 @@ -42,8 +40,6 @@ #define EVTCHN_TEST2 66 #define EVTCHN_TIMER 13 =20 -static struct kvm_vm *vm; - #define XEN_HYPERCALL_MSR 0x40000000 =20 #define MIN_STEAL_TIME 50000 @@ -344,19 +340,22 @@ static int cmp_timespec(struct timespec *a, struct ti= mespec *b) else return 0; } -struct vcpu_info *vinfo; + +static struct vcpu_info *vinfo; +static struct kvm_vcpu *vcpu; =20 static void handle_alrm(int sig) { if (vinfo) printf("evtchn_upcall_pending 0x%x\n", vinfo->evtchn_upcall_pending); - vcpu_dump(stdout, vm, VCPU_ID, 0); + vcpu_dump(stdout, vcpu->vm, vcpu->id, 0); TEST_FAIL("IRQ delivery timed out"); } =20 int main(int argc, char *argv[]) { struct timespec min_ts, max_ts, vm_ts; + struct kvm_vm *vm; bool verbose; =20 verbose =3D argc > 1 && (!strncmp(argv[1], "-v", 3) || @@ -374,8 +373,7 @@ int main(int argc, char *argv[]) =20 clock_gettime(CLOCK_REALTIME, &min_ts); =20 - vm =3D vm_create_default(VCPU_ID, 0, (void *) guest_code); - vcpu_set_cpuid(vm, VCPU_ID, kvm_get_supported_cpuid()); + vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); =20 /* Map a region for the shared_info page */ vm_userspace_mem_region_add(vm, VM_MEM_SRC_ANONYMOUS, @@ -425,13 +423,13 @@ int main(int argc, char *argv[]) .type =3D KVM_XEN_VCPU_ATTR_TYPE_VCPU_INFO, .u.gpa =3D VCPU_INFO_ADDR, }; - vcpu_ioctl(vm, VCPU_ID, KVM_XEN_VCPU_SET_ATTR, &vi); + vcpu_ioctl(vm, vcpu->id, KVM_XEN_VCPU_SET_ATTR, &vi); =20 struct kvm_xen_vcpu_attr pvclock =3D { .type =3D KVM_XEN_VCPU_ATTR_TYPE_VCPU_TIME_INFO, .u.gpa =3D PVTIME_ADDR, }; - vcpu_ioctl(vm, VCPU_ID, KVM_XEN_VCPU_SET_ATTR, &pvclock); + vcpu_ioctl(vm, vcpu->id, KVM_XEN_VCPU_SET_ATTR, &pvclock); =20 struct kvm_xen_hvm_attr vec =3D { .type =3D KVM_XEN_ATTR_TYPE_UPCALL_VECTOR, @@ -440,7 +438,7 @@ int main(int argc, char *argv[]) vm_ioctl(vm, KVM_XEN_HVM_SET_ATTR, &vec); =20 vm_init_descriptor_tables(vm); - vcpu_init_descriptor_tables(vm, VCPU_ID); + vcpu_init_descriptor_tables(vm, vcpu->id); vm_install_exception_handler(vm, EVTCHN_VECTOR, evtchn_handler); =20 if (do_runstate_tests) { @@ -448,7 +446,7 @@ int main(int argc, char *argv[]) .type =3D KVM_XEN_VCPU_ATTR_TYPE_RUNSTATE_ADDR, .u.gpa =3D RUNSTATE_ADDR, }; - vcpu_ioctl(vm, VCPU_ID, KVM_XEN_VCPU_SET_ATTR, &st); + vcpu_ioctl(vm, vcpu->id, KVM_XEN_VCPU_SET_ATTR, &st); } =20 int irq_fd[2] =3D { -1, -1 }; @@ -468,13 +466,13 @@ int main(int argc, char *argv[]) irq_routes.entries[0].gsi =3D 32; irq_routes.entries[0].type =3D KVM_IRQ_ROUTING_XEN_EVTCHN; irq_routes.entries[0].u.xen_evtchn.port =3D EVTCHN_TEST1; - irq_routes.entries[0].u.xen_evtchn.vcpu =3D VCPU_ID; + irq_routes.entries[0].u.xen_evtchn.vcpu =3D vcpu->id; irq_routes.entries[0].u.xen_evtchn.priority =3D KVM_IRQ_ROUTING_XEN_EVTC= HN_PRIO_2LEVEL; =20 irq_routes.entries[1].gsi =3D 33; irq_routes.entries[1].type =3D KVM_IRQ_ROUTING_XEN_EVTCHN; irq_routes.entries[1].u.xen_evtchn.port =3D EVTCHN_TEST2; - irq_routes.entries[1].u.xen_evtchn.vcpu =3D VCPU_ID; + irq_routes.entries[1].u.xen_evtchn.vcpu =3D vcpu->id; irq_routes.entries[1].u.xen_evtchn.priority =3D KVM_IRQ_ROUTING_XEN_EVTC= HN_PRIO_2LEVEL; =20 vm_ioctl(vm, KVM_SET_GSI_ROUTING, &irq_routes); @@ -508,14 +506,14 @@ int main(int argc, char *argv[]) .u.evtchn.type =3D EVTCHNSTAT_interdomain, .u.evtchn.flags =3D 0, .u.evtchn.deliver.port.port =3D EVTCHN_TEST1, - .u.evtchn.deliver.port.vcpu =3D VCPU_ID + 1, + .u.evtchn.deliver.port.vcpu =3D vcpu->id + 1, .u.evtchn.deliver.port.priority =3D KVM_IRQ_ROUTING_XEN_EVTCHN_PRIO_2LE= VEL, }; vm_ioctl(vm, KVM_XEN_HVM_SET_ATTR, &inj); =20 /* Test migration to a different vCPU */ inj.u.evtchn.flags =3D KVM_XEN_EVTCHN_UPDATE; - inj.u.evtchn.deliver.port.vcpu =3D VCPU_ID; + inj.u.evtchn.deliver.port.vcpu =3D vcpu->id; vm_ioctl(vm, KVM_XEN_HVM_SET_ATTR, &inj); =20 inj.u.evtchn.send_port =3D 197; @@ -524,7 +522,7 @@ int main(int argc, char *argv[]) inj.u.evtchn.flags =3D 0; vm_ioctl(vm, KVM_XEN_HVM_SET_ATTR, &inj); =20 - vcpu_ioctl(vm, VCPU_ID, KVM_XEN_VCPU_SET_ATTR, &tmr); + vcpu_ioctl(vm, vcpu->id, KVM_XEN_VCPU_SET_ATTR, &tmr); } vinfo =3D addr_gpa2hva(vm, VCPU_INFO_VADDR); vinfo->evtchn_upcall_pending =3D 0; @@ -535,17 +533,17 @@ int main(int argc, char *argv[]) bool evtchn_irq_expected =3D false; =20 for (;;) { - volatile struct kvm_run *run =3D vcpu_state(vm, VCPU_ID); + volatile struct kvm_run *run =3D vcpu->run; struct ucall uc; =20 - vcpu_run(vm, VCPU_ID); + vcpu_run(vm, vcpu->id); =20 TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Got exit_reason other than KVM_EXIT_IO: %u (%s)\n", run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vm, VCPU_ID, &uc)) { + switch (get_ucall(vm, vcpu->id, &uc)) { case UCALL_ABORT: TEST_FAIL("%s", (const char *)uc.args[0]); /* NOT REACHED */ @@ -574,7 +572,7 @@ int main(int argc, char *argv[]) printf("Testing runstate %s\n", runstate_names[uc.args[1]]); rst.type =3D KVM_XEN_VCPU_ATTR_TYPE_RUNSTATE_CURRENT; rst.u.runstate.state =3D uc.args[1]; - vcpu_ioctl(vm, VCPU_ID, KVM_XEN_VCPU_SET_ATTR, &rst); + vcpu_ioctl(vm, vcpu->id, KVM_XEN_VCPU_SET_ATTR, &rst); break; =20 case 4: @@ -589,7 +587,7 @@ int main(int argc, char *argv[]) 0x6b6b - rs->time[RUNSTATE_offline]; rst.u.runstate.time_runnable =3D -rst.u.runstate.time_blocked - rst.u.runstate.time_offline; - vcpu_ioctl(vm, VCPU_ID, KVM_XEN_VCPU_SET_ATTR, &rst); + vcpu_ioctl(vm, vcpu->id, KVM_XEN_VCPU_SET_ATTR, &rst); break; =20 case 5: @@ -601,7 +599,7 @@ int main(int argc, char *argv[]) rst.u.runstate.state_entry_time =3D 0x6b6b + 0x5a; rst.u.runstate.time_blocked =3D 0x6b6b; rst.u.runstate.time_offline =3D 0x5a; - vcpu_ioctl(vm, VCPU_ID, KVM_XEN_VCPU_SET_ATTR, &rst); + vcpu_ioctl(vm, vcpu->id, KVM_XEN_VCPU_SET_ATTR, &rst); break; =20 case 6: @@ -660,7 +658,7 @@ int main(int argc, char *argv[]) =20 struct kvm_irq_routing_xen_evtchn e; e.port =3D EVTCHN_TEST2; - e.vcpu =3D VCPU_ID; + e.vcpu =3D vcpu->id; e.priority =3D KVM_IRQ_ROUTING_XEN_EVTCHN_PRIO_2LEVEL; =20 vm_ioctl(vm, KVM_XEN_HVM_EVTCHN_SEND, &e); @@ -702,7 +700,7 @@ int main(int argc, char *argv[]) case 14: memset(&tmr, 0, sizeof(tmr)); tmr.type =3D KVM_XEN_VCPU_ATTR_TYPE_TIMER; - vcpu_ioctl(vm, VCPU_ID, KVM_XEN_VCPU_GET_ATTR, &tmr); + vcpu_ioctl(vm, vcpu->id, KVM_XEN_VCPU_GET_ATTR, &tmr); TEST_ASSERT(tmr.u.timer.port =3D=3D EVTCHN_TIMER, "Timer port not returned"); TEST_ASSERT(tmr.u.timer.priority =3D=3D KVM_IRQ_ROUTING_XEN_EVTCHN_PRI= O_2LEVEL, @@ -722,7 +720,7 @@ int main(int argc, char *argv[]) printf("Testing restored oneshot timer\n"); =20 tmr.u.timer.expires_ns =3D rs->state_entry_time + 100000000, - vcpu_ioctl(vm, VCPU_ID, KVM_XEN_VCPU_SET_ATTR, &tmr); + vcpu_ioctl(vm, vcpu->id, KVM_XEN_VCPU_SET_ATTR, &tmr); evtchn_irq_expected =3D true; alarm(1); break; @@ -749,7 +747,7 @@ int main(int argc, char *argv[]) printf("Testing SCHEDOP_poll wake on masked event\n"); =20 tmr.u.timer.expires_ns =3D rs->state_entry_time + 100000000, - vcpu_ioctl(vm, VCPU_ID, KVM_XEN_VCPU_SET_ATTR, &tmr); + vcpu_ioctl(vm, vcpu->id, KVM_XEN_VCPU_SET_ATTR, &tmr); alarm(1); break; =20 @@ -760,11 +758,11 @@ int main(int argc, char *argv[]) =20 evtchn_irq_expected =3D true; tmr.u.timer.expires_ns =3D rs->state_entry_time + 100000000; - vcpu_ioctl(vm, VCPU_ID, KVM_XEN_VCPU_SET_ATTR, &tmr); + vcpu_ioctl(vm, vcpu->id, KVM_XEN_VCPU_SET_ATTR, &tmr); =20 /* Read it back and check the pending time is reported correctly */ tmr.u.timer.expires_ns =3D 0; - vcpu_ioctl(vm, VCPU_ID, KVM_XEN_VCPU_GET_ATTR, &tmr); + vcpu_ioctl(vm, vcpu->id, KVM_XEN_VCPU_GET_ATTR, &tmr); TEST_ASSERT(tmr.u.timer.expires_ns =3D=3D rs->state_entry_time + 10000= 0000, "Timer not reported pending"); alarm(1); @@ -774,7 +772,7 @@ int main(int argc, char *argv[]) TEST_ASSERT(!evtchn_irq_expected, "Expected event channel IRQ but it didn't happen"); /* Read timer and check it is no longer pending */ - vcpu_ioctl(vm, VCPU_ID, KVM_XEN_VCPU_GET_ATTR, &tmr); + vcpu_ioctl(vm, vcpu->id, KVM_XEN_VCPU_GET_ATTR, &tmr); TEST_ASSERT(!tmr.u.timer.expires_ns, "Timer still reported pending"); =20 shinfo->evtchn_pending[0] =3D 0; @@ -783,7 +781,7 @@ int main(int argc, char *argv[]) =20 evtchn_irq_expected =3D true; tmr.u.timer.expires_ns =3D rs->state_entry_time - 100000000ULL; - vcpu_ioctl(vm, VCPU_ID, KVM_XEN_VCPU_SET_ATTR, &tmr); + vcpu_ioctl(vm, vcpu->id, KVM_XEN_VCPU_SET_ATTR, &tmr); alarm(1); break; =20 @@ -853,7 +851,7 @@ int main(int argc, char *argv[]) struct kvm_xen_vcpu_attr rst =3D { .type =3D KVM_XEN_VCPU_ATTR_TYPE_RUNSTATE_DATA, }; - vcpu_ioctl(vm, VCPU_ID, KVM_XEN_VCPU_GET_ATTR, &rst); + vcpu_ioctl(vm, vcpu->id, KVM_XEN_VCPU_GET_ATTR, &rst); =20 if (verbose) { printf("Runstate: %s(%d), entry %" PRIu64 " ns\n", --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 3461CC43217 for ; Wed, 4 May 2022 23:07:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1381528AbiEDXEp (ORCPT ); Wed, 4 May 2022 19:04:45 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45598 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242056AbiEDW5k (ORCPT ); Wed, 4 May 2022 18:57:40 -0400 Received: from mail-pj1-x1049.google.com (mail-pj1-x1049.google.com [IPv6:2607:f8b0:4864:20::1049]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F390255481 for ; Wed, 4 May 2022 15:51:53 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id r16-20020a17090b051000b001db302efed7so1089195pjz.2 for ; Wed, 04 May 2022 15:51:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=IBWGYxUey2I8ldSFhy55LOM29O+VOqL8t4FobkLYAfU=; b=BJ9i0xp/gN+o5CwY9um1yS6QOAHftIitP2QmGb41hkxADGJq/wc3kNJgo/RDBQoQxc JXC/DEdzKwghsKqKCDfnPj0SFKJRuNqIgGLzEZrrqgAAq9vtsT3Ng7TYcxZ7RcsXkunW cgq5dbF9oiLpceNItgH34aLKb/WK4AAItonXdx4t28SbZo5jKxcgYQlbjhIxNb9wF0/o ZCmsy0D8c7+JoDdltUcT/VwN/t2Ok2YUgcdHHSk+Bxp1tNH+SmQhHat+o4eTqQoBVyTU Hed/iE6ovddK7+96ux5uM23ybxs8TdxdwvfxlNlHX294F1iqvyOBsPnTZylhhSW1LSTT LwHg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=IBWGYxUey2I8ldSFhy55LOM29O+VOqL8t4FobkLYAfU=; b=2CzX+X+2mzpyimzesfDtvPGGPwMiIb4kwZN8X89nl2Ux1ju2/PIW5cGM0U1xUbPgAj DQq4QIE1yR3OwdIL41S9Vimb1zgvUj7D+uoTqL2A2qN9XejmnER8kyMKhwiG4Yt+X/mD iCSfjiukEOqQSA7mlH22AVmf3RevefvNgqolY7icpxZKDuPe2wDrVYNOKZY0GBbqzlSs t5Y8aY7sleVva2Sl3rH3V3VjRnGWxZlJzD4qn0Q5Q4afUvDbL3uVEjJhsktkyrZo9Haz F6XUprWXyQXyT3yWs9YJnSDyvLZlmUotjM0nDNdGs96H0Vps+ZDb5Ne3b/+ZsnwR1DgZ RHEw== X-Gm-Message-State: AOAM531DQ+FroVO+TN1ZsNl0qioXb1pnUYLmAysaaKV14AH+YZQTEf7K 5UtOFMxsxMYoq2+3AqSv0eI/UNb8vxw= X-Google-Smtp-Source: ABdhPJxKB5wP//IZe9NAXgdFqndTUEsQ1r4qVUX+woXv7sHIPatDlhGVsejODlWbsfSSyGtJG1oEKZ3a+7o= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90b:3b42:b0:1dc:5cdf:5649 with SMTP id ot2-20020a17090b3b4200b001dc5cdf5649mr2164707pjb.239.1651704712346; Wed, 04 May 2022 15:51:52 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:28 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-83-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 082/128] KVM: selftests: Convert dirty_log_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert dirty_log_test to pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. Note, this is a "functional" change in the sense that the test now creates a vCPU with vcpu_id=3D=3D0 instead of vcpu_id=3D=3D5. The non-zero VCPU_ID was 100% arbitrary and added little to no validation coverage. If testing non-zero vCPU IDs is desirable for generic tests, that can be done in the future by tweaking the VM creation helpers. The test still hardcodes usage of vcpu_id=3D=3D0, but only for a few lines. That wart will be removed in the not-too-distant future. Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/dirty_log_test.c | 59 ++++++++++---------- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/tools/testing/selftests/kvm/dirty_log_test.c b/tools/testing/s= elftests/kvm/dirty_log_test.c index 66ee00b45847..ff3bd4c941a4 100644 --- a/tools/testing/selftests/kvm/dirty_log_test.c +++ b/tools/testing/selftests/kvm/dirty_log_test.c @@ -23,8 +23,6 @@ #include "guest_modes.h" #include "processor.h" =20 -#define VCPU_ID 1 - /* The memory slot index to track dirty pages */ #define TEST_MEM_SLOT_INDEX 1 =20 @@ -229,17 +227,17 @@ static void clear_log_create_vm_done(struct kvm_vm *v= m) vm_enable_cap(vm, &cap); } =20 -static void dirty_log_collect_dirty_pages(struct kvm_vm *vm, int slot, +static void dirty_log_collect_dirty_pages(struct kvm_vcpu *vcpu, int slot, void *bitmap, uint32_t num_pages) { - kvm_vm_get_dirty_log(vm, slot, bitmap); + kvm_vm_get_dirty_log(vcpu->vm, slot, bitmap); } =20 -static void clear_log_collect_dirty_pages(struct kvm_vm *vm, int slot, +static void clear_log_collect_dirty_pages(struct kvm_vcpu *vcpu, int slot, void *bitmap, uint32_t num_pages) { - kvm_vm_get_dirty_log(vm, slot, bitmap); - kvm_vm_clear_dirty_log(vm, slot, bitmap, 0, num_pages); + kvm_vm_get_dirty_log(vcpu->vm, slot, bitmap); + kvm_vm_clear_dirty_log(vcpu->vm, slot, bitmap, 0, num_pages); } =20 /* Should only be called after a GUEST_SYNC */ @@ -253,14 +251,14 @@ static void vcpu_handle_sync_stop(void) } } =20 -static void default_after_vcpu_run(struct kvm_vm *vm, int ret, int err) +static void default_after_vcpu_run(struct kvm_vcpu *vcpu, int ret, int err) { - struct kvm_run *run =3D vcpu_state(vm, VCPU_ID); + struct kvm_run *run =3D vcpu->run; =20 TEST_ASSERT(ret =3D=3D 0 || (ret =3D=3D -1 && err =3D=3D EINTR), "vcpu run failed: errno=3D%d", err); =20 - TEST_ASSERT(get_ucall(vm, VCPU_ID, NULL) =3D=3D UCALL_SYNC, + TEST_ASSERT(get_ucall(vcpu->vm, vcpu->id, NULL) =3D=3D UCALL_SYNC, "Invalid guest sync status: exit_reason=3D%s\n", exit_reason_str(run->exit_reason)); =20 @@ -331,7 +329,7 @@ static void dirty_ring_continue_vcpu(void) sem_post(&sem_vcpu_cont); } =20 -static void dirty_ring_collect_dirty_pages(struct kvm_vm *vm, int slot, +static void dirty_ring_collect_dirty_pages(struct kvm_vcpu *vcpu, int slot, void *bitmap, uint32_t num_pages) { /* We only have one vcpu */ @@ -351,10 +349,10 @@ static void dirty_ring_collect_dirty_pages(struct kvm= _vm *vm, int slot, } =20 /* Only have one vcpu */ - count =3D dirty_ring_collect_one(vcpu_map_dirty_ring(vm, VCPU_ID), + count =3D dirty_ring_collect_one(vcpu_map_dirty_ring(vcpu->vm, vcpu->id), slot, bitmap, num_pages, &fetch_index); =20 - cleared =3D kvm_vm_reset_dirty_ring(vm); + cleared =3D kvm_vm_reset_dirty_ring(vcpu->vm); =20 /* Cleared pages should be the same as collected */ TEST_ASSERT(cleared =3D=3D count, "Reset dirty pages (%u) mismatch " @@ -369,12 +367,12 @@ static void dirty_ring_collect_dirty_pages(struct kvm= _vm *vm, int slot, pr_info("Iteration %ld collected %u pages\n", iteration, count); } =20 -static void dirty_ring_after_vcpu_run(struct kvm_vm *vm, int ret, int err) +static void dirty_ring_after_vcpu_run(struct kvm_vcpu *vcpu, int ret, int = err) { - struct kvm_run *run =3D vcpu_state(vm, VCPU_ID); + struct kvm_run *run =3D vcpu->run; =20 /* A ucall-sync or ring-full event is allowed */ - if (get_ucall(vm, VCPU_ID, NULL) =3D=3D UCALL_SYNC) { + if (get_ucall(vcpu->vm, vcpu->id, NULL) =3D=3D UCALL_SYNC) { /* We should allow this to continue */ ; } else if (run->exit_reason =3D=3D KVM_EXIT_DIRTY_RING_FULL || @@ -408,10 +406,10 @@ struct log_mode { /* Hook when the vm creation is done (before vcpu creation) */ void (*create_vm_done)(struct kvm_vm *vm); /* Hook to collect the dirty pages into the bitmap provided */ - void (*collect_dirty_pages) (struct kvm_vm *vm, int slot, + void (*collect_dirty_pages) (struct kvm_vcpu *vcpu, int slot, void *bitmap, uint32_t num_pages); /* Hook to call when after each vcpu run */ - void (*after_vcpu_run)(struct kvm_vm *vm, int ret, int err); + void (*after_vcpu_run)(struct kvm_vcpu *vcpu, int ret, int err); void (*before_vcpu_join) (void); } log_modes[LOG_MODE_NUM] =3D { { @@ -473,22 +471,22 @@ static void log_mode_create_vm_done(struct kvm_vm *vm) mode->create_vm_done(vm); } =20 -static void log_mode_collect_dirty_pages(struct kvm_vm *vm, int slot, +static void log_mode_collect_dirty_pages(struct kvm_vcpu *vcpu, int slot, void *bitmap, uint32_t num_pages) { struct log_mode *mode =3D &log_modes[host_log_mode]; =20 TEST_ASSERT(mode->collect_dirty_pages !=3D NULL, "collect_dirty_pages() is required for any log mode!"); - mode->collect_dirty_pages(vm, slot, bitmap, num_pages); + mode->collect_dirty_pages(vcpu, slot, bitmap, num_pages); } =20 -static void log_mode_after_vcpu_run(struct kvm_vm *vm, int ret, int err) +static void log_mode_after_vcpu_run(struct kvm_vcpu *vcpu, int ret, int er= r) { struct log_mode *mode =3D &log_modes[host_log_mode]; =20 if (mode->after_vcpu_run) - mode->after_vcpu_run(vm, ret, err); + mode->after_vcpu_run(vcpu, ret, err); } =20 static void log_mode_before_vcpu_join(void) @@ -510,7 +508,8 @@ static void generate_random_array(uint64_t *guest_array= , uint64_t size) static void *vcpu_worker(void *data) { int ret; - struct kvm_vm *vm =3D data; + struct kvm_vcpu *vcpu =3D data; + struct kvm_vm *vm =3D vcpu->vm; uint64_t *guest_array; uint64_t pages_count =3D 0; struct kvm_signal_mask *sigmask =3D alloca(offsetof(struct kvm_signal_mas= k, sigset) @@ -525,7 +524,7 @@ static void *vcpu_worker(void *data) sigmask->len =3D 8; pthread_sigmask(0, NULL, sigset); sigdelset(sigset, SIG_IPI); - vcpu_ioctl(vm, VCPU_ID, KVM_SET_SIGNAL_MASK, sigmask); + vcpu_ioctl(vm, vcpu->id, KVM_SET_SIGNAL_MASK, sigmask); =20 sigemptyset(sigset); sigaddset(sigset, SIG_IPI); @@ -537,13 +536,13 @@ static void *vcpu_worker(void *data) generate_random_array(guest_array, TEST_PAGES_PER_LOOP); pages_count +=3D TEST_PAGES_PER_LOOP; /* Let the guest dirty the random pages */ - ret =3D __vcpu_run(vm, VCPU_ID); + ret =3D __vcpu_run(vm, vcpu->id); if (ret =3D=3D -1 && errno =3D=3D EINTR) { int sig =3D -1; sigwait(sigset, &sig); assert(sig =3D=3D SIG_IPI); } - log_mode_after_vcpu_run(vm, ret, errno); + log_mode_after_vcpu_run(vcpu, ret, errno); } =20 pr_info("Dirtied %"PRIu64" pages\n", pages_count); @@ -696,6 +695,7 @@ struct test_params { static void run_test(enum vm_guest_mode mode, void *arg) { struct test_params *p =3D arg; + struct kvm_vcpu *vcpu; struct kvm_vm *vm; unsigned long *bmap; =20 @@ -713,9 +713,10 @@ static void run_test(enum vm_guest_mode mode, void *ar= g) * (e.g., 64K page size guest will need even less memory for * page tables). */ - vm =3D create_vm(mode, VCPU_ID, + vm =3D create_vm(mode, 0, 2ul << (DIRTY_MEM_BITS - PAGE_SHIFT_4K), guest_code); + vcpu =3D vcpu_get(vm, 0); =20 guest_page_size =3D vm_get_page_size(vm); /* @@ -776,12 +777,12 @@ static void run_test(enum vm_guest_mode mode, void *a= rg) host_clear_count =3D 0; host_track_next_count =3D 0; =20 - pthread_create(&vcpu_thread, NULL, vcpu_worker, vm); + pthread_create(&vcpu_thread, NULL, vcpu_worker, vcpu); =20 while (iteration < p->iterations) { /* Give the vcpu thread some time to dirty some pages */ usleep(p->interval * 1000); - log_mode_collect_dirty_pages(vm, TEST_MEM_SLOT_INDEX, + log_mode_collect_dirty_pages(vcpu, TEST_MEM_SLOT_INDEX, bmap, host_num_pages); =20 /* --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 E7280C433FE for ; Wed, 4 May 2022 23:07:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1381292AbiEDXEa (ORCPT ); Wed, 4 May 2022 19:04:30 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45418 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379723AbiEDW5k (ORCPT ); Wed, 4 May 2022 18:57:40 -0400 Received: from mail-pj1-x1049.google.com (mail-pj1-x1049.google.com [IPv6:2607:f8b0:4864:20::1049]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1D16055219 for ; Wed, 4 May 2022 15:51:55 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id t15-20020a17090a3b4f00b001d67e27715dso3590019pjf.0 for ; Wed, 04 May 2022 15:51:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=8bSuZAB4s6G4lTHS63biopcZqrEo9Rf5S9MwHyFNC+c=; b=W2LKPv/rMmNcBBJN8OJlbkAp4dMvcJ/qqx9zc96SEjxrKHR2x2sERj021KBO2epwoB rIPbOrAo83WhmZmADf1ECMXT2JiAjJwZnhi0wNzZ8kCRMpAoa+XM/1U/EVU76LuNRSlx e+EFB5kNPZyRRb72Po3jdf0ETZKlF7TJY/X+LaXSOoOuyFg5MTEefA++vXx4Gqvgqdor XaD/PEssjpgmDOZc9kcI7eLbUnhOs8Arn3sT2QZolee4cklBWOsv3fkO4c1tJCmqoeG1 WMtj0tt0pDD2UHgwaeUE5e7IoywfPeV6gV9LndqnD7WSVfvUveQgHUQlqVcGIwJrWX2r Qs1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=8bSuZAB4s6G4lTHS63biopcZqrEo9Rf5S9MwHyFNC+c=; b=gtMT6ExaettXhD34MqIdkYYzcCSHTy3EusbojhCVUoqU6ejS1jzW8Z6DF47Ws/4A3L zcKwZpyt3HpyuXDLbfX4IPk8Tm8lN61FgABiPeJFgO9fmjflhJ+sa0f/LXE5Xgb2AjAD Lv0+spi/ocZ2KO/RhBqj76ZrQxtTscvSrdycMmlreAwPTvx58A9ITN7V8QdRKuDIk5eM y7xdxYnrMir3zPd+QBFds3EDlK42Jd9qFc6UzrAqDurXENiaevAe/JWTyR1SOYe7zikD mrN/ZLa1wIyXtrQv+vitvw1aYqED1xe7w0mRx8fp4X/u559i6uY1REiY422tNkSorUFA VISw== X-Gm-Message-State: AOAM530RwfLyrluz1FDCg8nKjPXJusuaXMsVKvG9qgkdWtRnzSD1nfBB NfCjON98vRonhDooLpBkHQaLDrhYn+Y= X-Google-Smtp-Source: ABdhPJxy6SpaXkdmlT+MGNpocUkeL4byDpmb4HeGMRsWuiqex10ep7wPGL3uj/k39Ym9lFtYS8p96nvbjC0= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:903:244b:b0:15e:8844:1578 with SMTP id l11-20020a170903244b00b0015e88441578mr23596655pls.13.1651704714110; Wed, 04 May 2022 15:51:54 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:29 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-84-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 083/128] KVM: selftests: Convert set_memory_region_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert set_memory_region_test to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. Signed-off-by: Sean Christopherson --- .../selftests/kvm/set_memory_region_test.c | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/tools/testing/selftests/kvm/set_memory_region_test.c b/tools/t= esting/selftests/kvm/set_memory_region_test.c index c33402ba7587..1274bbb0e30b 100644 --- a/tools/testing/selftests/kvm/set_memory_region_test.c +++ b/tools/testing/selftests/kvm/set_memory_region_test.c @@ -17,8 +17,6 @@ #include #include =20 -#define VCPU_ID 0 - /* * s390x needs at least 1MB alignment, and the x86_64 MOVE/DELETE tests ne= ed a * 2MB sized and aligned region so that the initial region corresponds to @@ -54,8 +52,8 @@ static inline uint64_t guest_spin_on_val(uint64_t spin_va= l) =20 static void *vcpu_worker(void *data) { - struct kvm_vm *vm =3D data; - struct kvm_run *run; + struct kvm_vcpu *vcpu =3D data; + struct kvm_run *run =3D vcpu->run; struct ucall uc; uint64_t cmd; =20 @@ -64,13 +62,11 @@ static void *vcpu_worker(void *data) * which will occur if the guest attempts to access a memslot after it * has been deleted or while it is being moved . */ - run =3D vcpu_state(vm, VCPU_ID); - while (1) { - vcpu_run(vm, VCPU_ID); + vcpu_run(vcpu->vm, vcpu->id); =20 if (run->exit_reason =3D=3D KVM_EXIT_IO) { - cmd =3D get_ucall(vm, VCPU_ID, &uc); + cmd =3D get_ucall(vcpu->vm, vcpu->id, &uc); if (cmd !=3D UCALL_SYNC) break; =20 @@ -113,13 +109,14 @@ static void wait_for_vcpu(void) usleep(100000); } =20 -static struct kvm_vm *spawn_vm(pthread_t *vcpu_thread, void *guest_code) +static struct kvm_vm *spawn_vm(struct kvm_vcpu **vcpu, pthread_t *vcpu_thr= ead, + void *guest_code) { struct kvm_vm *vm; uint64_t *hva; uint64_t gpa; =20 - vm =3D vm_create_default(VCPU_ID, 0, guest_code); + vm =3D vm_create_with_one_vcpu(vcpu, guest_code); =20 vm_userspace_mem_region_add(vm, VM_MEM_SRC_ANONYMOUS_THP, MEM_REGION_GPA, MEM_REGION_SLOT, @@ -138,7 +135,7 @@ static struct kvm_vm *spawn_vm(pthread_t *vcpu_thread, = void *guest_code) hva =3D addr_gpa2hva(vm, MEM_REGION_GPA); memset(hva, 0, 2 * 4096); =20 - pthread_create(vcpu_thread, NULL, vcpu_worker, vm); + pthread_create(vcpu_thread, NULL, vcpu_worker, *vcpu); =20 /* Ensure the guest thread is spun up. */ wait_for_vcpu(); @@ -180,10 +177,11 @@ static void guest_code_move_memory_region(void) static void test_move_memory_region(void) { pthread_t vcpu_thread; + struct kvm_vcpu *vcpu; struct kvm_vm *vm; uint64_t *hva; =20 - vm =3D spawn_vm(&vcpu_thread, guest_code_move_memory_region); + vm =3D spawn_vm(&vcpu, &vcpu_thread, guest_code_move_memory_region); =20 hva =3D addr_gpa2hva(vm, MEM_REGION_GPA); =20 @@ -258,11 +256,12 @@ static void guest_code_delete_memory_region(void) static void test_delete_memory_region(void) { pthread_t vcpu_thread; + struct kvm_vcpu *vcpu; struct kvm_regs regs; struct kvm_run *run; struct kvm_vm *vm; =20 - vm =3D spawn_vm(&vcpu_thread, guest_code_delete_memory_region); + vm =3D spawn_vm(&vcpu, &vcpu_thread, guest_code_delete_memory_region); =20 /* Delete the memory region, the guest should not die. */ vm_mem_region_delete(vm, MEM_REGION_SLOT); @@ -286,13 +285,13 @@ static void test_delete_memory_region(void) =20 pthread_join(vcpu_thread, NULL); =20 - run =3D vcpu_state(vm, VCPU_ID); + run =3D vcpu->run; =20 TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_SHUTDOWN || run->exit_reason =3D=3D KVM_EXIT_INTERNAL_ERROR, "Unexpected exit reason =3D %d", run->exit_reason); =20 - vcpu_regs_get(vm, VCPU_ID, ®s); + vcpu_regs_get(vm, vcpu->id, ®s); =20 /* * On AMD, after KVM_EXIT_SHUTDOWN the VMCB has been reinitialized alread= y, @@ -309,18 +308,19 @@ static void test_delete_memory_region(void) =20 static void test_zero_memory_regions(void) { + struct kvm_vcpu *vcpu; struct kvm_run *run; struct kvm_vm *vm; =20 pr_info("Testing KVM_RUN with zero added memory regions\n"); =20 vm =3D vm_create_barebones(); - vm_vcpu_add(vm, VCPU_ID); + vcpu =3D vm_vcpu_add(vm, 0); =20 vm_ioctl(vm, KVM_SET_NR_MMU_PAGES, (void *)64ul); - vcpu_run(vm, VCPU_ID); + vcpu_run(vm, vcpu->id); =20 - run =3D vcpu_state(vm, VCPU_ID); + run =3D vcpu->run; TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_INTERNAL_ERROR, "Unexpected exit_reason =3D %u\n", run->exit_reason); =20 --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 14A56C4332F for ; Wed, 4 May 2022 23:07:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1381431AbiEDXEi (ORCPT ); Wed, 4 May 2022 19:04:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45792 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379731AbiEDW5l (ORCPT ); Wed, 4 May 2022 18:57:41 -0400 Received: from mail-pj1-x1049.google.com (mail-pj1-x1049.google.com [IPv6:2607:f8b0:4864:20::1049]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AAFA355499 for ; Wed, 4 May 2022 15:51:56 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id t15-20020a17090a3b4f00b001d67e27715dso3590038pjf.0 for ; Wed, 04 May 2022 15:51:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=rs1BtKhHSNKSuG7x36AJhVcaryKQnmqCldVkUeJOBBE=; b=Gv4LU82MN2vqFI6C8LIdH2O96qaJFehZybMBMu5Sr3DTDhTUqgYy7Q12YR9XXv3T0a RqQtfoOcJ6dTfyIISIuAqXje3VQIB9BJC9UoGMRhr+Y1MBvG25x8B8yIRn5saRiW76Gn 0bD1AkAhdaIZcVuqdVJ2E4r2HmH6+fD1AuInMMpFIE+jwfzymgeVzWCSgECpC8cHzh7/ taeLbb1OFks5gTRuuRKMto/JBS/xODTpSN3Ykut/EkknG7VNNLCldvAboI566/7KLH9g 4raUTpWvUcIiySl4nvBBq5d4YBagRF1JspqsbzM/wUVJ/xAqmc5Bxgu1wqMoARqhtAnA BiYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=rs1BtKhHSNKSuG7x36AJhVcaryKQnmqCldVkUeJOBBE=; b=XRBo+3CaAs/WodDQEoTt4gZqwbVWczhidhFsNV3I8TAwBlp8PtTMgt5aaAMkL3sYN2 kd49mqt/mWWTOEzPyloLXJkOUYj8H35KRTX3VWTxWcNEbFvBdNW1bjfEygPiktYJVAw9 my7vHYRR7eG+YSaOVh1FN9B6N9tcSzTrqRmlk3xv7YirivvL4Tul6PHsIH5Z5lFvsTvq +J5bWkDEDktewIFiryIeGhRmEDc2x6gO6Vv0gbE8pxv/jHjWicNlOWuo++/JEeJDZ7uI tKnsxv5Jn4pjI1x0L0sEBUDlJpGMDOl0rnN9ZxhbZiNtL0sn0md9raXPMFqVZpqtqQpl Phbw== X-Gm-Message-State: AOAM532StazKjyaSWvdDaNhXTQkUWKAhGHNBWAAKjY0oGr3feFXFnzGs nVSXJwj6ufol6CQ3vLhEPwfKjYaZu9o= X-Google-Smtp-Source: ABdhPJwio7KenHpq/S8gufojR0HQzC9mvZWotnyqksp0nNvCjcHqoerubbVnVSQqzEqVGTe/neOvvoLcuYQ= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:164c:b0:50a:472a:6b0a with SMTP id m12-20020a056a00164c00b0050a472a6b0amr23136375pfc.77.1651704715802; Wed, 04 May 2022 15:51:55 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:30 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-85-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 084/128] KVM: selftests: Convert system_counter_offset_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert system_counter_offset_test to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. Signed-off-by: Sean Christopherson --- .../kvm/system_counter_offset_test.c | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/tools/testing/selftests/kvm/system_counter_offset_test.c b/too= ls/testing/selftests/kvm/system_counter_offset_test.c index 5dd9d28efb97..0690ce0ae4fa 100644 --- a/tools/testing/selftests/kvm/system_counter_offset_test.c +++ b/tools/testing/selftests/kvm/system_counter_offset_test.c @@ -14,8 +14,6 @@ #include "kvm_util.h" #include "processor.h" =20 -#define VCPU_ID 0 - #ifdef __x86_64__ =20 struct test_case { @@ -28,18 +26,19 @@ static struct test_case test_cases[] =3D { { -180 * NSEC_PER_SEC }, }; =20 -static void check_preconditions(struct kvm_vm *vm) +static void check_preconditions(struct kvm_vcpu *vcpu) { - if (!__vcpu_has_device_attr(vm, VCPU_ID, KVM_VCPU_TSC_CTRL, KVM_VCPU_TSC_= OFFSET)) + if (!__vcpu_has_device_attr(vcpu->vm, vcpu->id, KVM_VCPU_TSC_CTRL, + KVM_VCPU_TSC_OFFSET)) return; =20 print_skip("KVM_VCPU_TSC_OFFSET not supported; skipping test"); exit(KSFT_SKIP); } =20 -static void setup_system_counter(struct kvm_vm *vm, struct test_case *test) +static void setup_system_counter(struct kvm_vcpu *vcpu, struct test_case *= test) { - vcpu_device_attr_set(vm, VCPU_ID, KVM_VCPU_TSC_CTRL, + vcpu_device_attr_set(vcpu->vm, vcpu->id, KVM_VCPU_TSC_CTRL, KVM_VCPU_TSC_OFFSET, &test->tsc_offset); } =20 @@ -91,7 +90,7 @@ static void handle_abort(struct ucall *uc) __FILE__, uc->args[1]); } =20 -static void enter_guest(struct kvm_vm *vm) +static void enter_guest(struct kvm_vcpu *vcpu) { uint64_t start, end; struct ucall uc; @@ -100,12 +99,12 @@ static void enter_guest(struct kvm_vm *vm) for (i =3D 0; i < ARRAY_SIZE(test_cases); i++) { struct test_case *test =3D &test_cases[i]; =20 - setup_system_counter(vm, test); + setup_system_counter(vcpu, test); start =3D host_read_guest_system_counter(test); - vcpu_run(vm, VCPU_ID); + vcpu_run(vcpu->vm, vcpu->id); end =3D host_read_guest_system_counter(test); =20 - switch (get_ucall(vm, VCPU_ID, &uc)) { + switch (get_ucall(vcpu->vm, vcpu->id, &uc)) { case UCALL_SYNC: handle_sync(&uc, start, end); break; @@ -114,19 +113,20 @@ static void enter_guest(struct kvm_vm *vm) return; default: TEST_ASSERT(0, "unhandled ucall %ld\n", - get_ucall(vm, VCPU_ID, &uc)); + get_ucall(vcpu->vm, vcpu->id, &uc)); } } } =20 int main(void) { + struct kvm_vcpu *vcpu; struct kvm_vm *vm; =20 - vm =3D vm_create_default(VCPU_ID, 0, guest_main); - check_preconditions(vm); + vm =3D vm_create_with_one_vcpu(&vcpu, guest_main); + check_preconditions(vcpu); ucall_init(vm, NULL); =20 - enter_guest(vm); + enter_guest(vcpu); kvm_vm_free(vm); } --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 247B0C43219 for ; Wed, 4 May 2022 23:07:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1381486AbiEDXEk (ORCPT ); Wed, 4 May 2022 19:04:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45364 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379739AbiEDW5l (ORCPT ); Wed, 4 May 2022 18:57:41 -0400 Received: from mail-pj1-x1049.google.com (mail-pj1-x1049.google.com [IPv6:2607:f8b0:4864:20::1049]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 82BD75469F for ; Wed, 4 May 2022 15:51:58 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id gb16-20020a17090b061000b001d78792caebso1318578pjb.5 for ; Wed, 04 May 2022 15:51:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=m1fbDgBOpXedaeQkbwTaO9NDDO/UaHp/JOaIY7+2IJA=; b=U6XkNnZfbRwmcwTVcILZn7/yn0z52QMJQNdxy2zzm3nA0Zgur3S3Wv2R8u92oG8O21 6LNCNn4cE6Ca4M3WDyEK+4XR0dzvyIsSF/vjiAfgfmzY+d8h5FL2FEDRqjZIFNa1DJPt 6DxmHYTCUbW1rSPx32SgGnFfozRM78QOUcPLdm2cgGBWCnXcHZJ2i/4PFAFl30v+lcN5 1vY98QOLZv9cHIbIlgf3ZyqCSeIH1C9a5idCLTZRbloHy1YeJ4lzk5hRmDrGp5UAUUEl HZpa2/NYglxGxnMGNe+YO3EclTKMphGKBml3lN3dRhat2mC5tpi3tE9c7Axg4gDeVxPK myag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=m1fbDgBOpXedaeQkbwTaO9NDDO/UaHp/JOaIY7+2IJA=; b=JUGK06y7qwOumWZm7X/HpKQaf1PFemu+rqLrjVgeQ4vcpNdm95T//SrSqFfWJ3UpGZ GB8yQs+oH2v1K0wNCnCHlUStVnVx0JYImXg/IFUZ+RNX8fVDpBGLb3+7afd1+nEM1pYp jr6cABwYLIhPobq9jZpGqJ40leZFlOdS/jewKrPh5OSxu95ABVCLqFE+oLhKQeTdpjAH N/TV7efVKpgkoTzs0bwOvvjFMiKJTU17mbVwGvHh6YQPCYVdlZNCBRLe6DWe2bdPGl5l 5+FdqEDYR4g5R2k9qI/uDe9f+QSgoXPR1KhzQquAcam5+R/N8X8ztLw0usPdosEJy9gd S7AQ== X-Gm-Message-State: AOAM530zfgIpY/tHkCsL8AwhUrQ+AR+7OwCssu1wRk8Ql1PqJsYlD+EY nb/6jKYzjBLBocb5VmU5qX0+o6Ebzn4= X-Google-Smtp-Source: ABdhPJyLp2dISrNEcAcdcZKefkXikf28GNflF+SqJ9pbzuxjBWeSR4DDtG13+iu0PM89GzjXLxBV3oy5TCQ= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90b:38c7:b0:1dc:77aa:e3d5 with SMTP id nn7-20020a17090b38c700b001dc77aae3d5mr2195419pjb.51.1651704717584; Wed, 04 May 2022 15:51:57 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:31 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-86-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 085/128] KVM: selftests: Track kvm_vcpu object in tsc_scaling_sync From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Track the added 'struct kvm_vcpu' object in tsc_scaling_sync instead of relying purely on the VM + vcpu_id combination. Ideally, the test wouldn't need to manually manage vCPUs, but the need to invoke a per-VM ioctl before creating vCPUs is not handled by the selftests framework, at least not yet... Signed-off-by: Sean Christopherson --- .../selftests/kvm/x86_64/tsc_scaling_sync.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/tsc_scaling_sync.c b/tools/= testing/selftests/kvm/x86_64/tsc_scaling_sync.c index f0083d8cfe98..b7cd5c47fc53 100644 --- a/tools/testing/selftests/kvm/x86_64/tsc_scaling_sync.c +++ b/tools/testing/selftests/kvm/x86_64/tsc_scaling_sync.c @@ -46,38 +46,41 @@ static void guest_code(void) =20 static void *run_vcpu(void *_cpu_nr) { - unsigned long cpu =3D (unsigned long)_cpu_nr; + unsigned long vcpu_id =3D (unsigned long)_cpu_nr; unsigned long failures =3D 0; static bool first_cpu_done; + struct kvm_vcpu *vcpu; =20 /* The kernel is fine, but vm_vcpu_add_default() needs locking */ pthread_spin_lock(&create_lock); =20 - vm_vcpu_add_default(vm, cpu, guest_code); + vm_vcpu_add_default(vm, vcpu_id, guest_code); + vcpu =3D vcpu_get(vm, vcpu_id); =20 if (!first_cpu_done) { first_cpu_done =3D true; - vcpu_set_msr(vm, cpu, MSR_IA32_TSC, TEST_TSC_OFFSET); + vcpu_set_msr(vm, vcpu->id, MSR_IA32_TSC, TEST_TSC_OFFSET); } =20 pthread_spin_unlock(&create_lock); =20 for (;;) { - volatile struct kvm_run *run =3D vcpu_state(vm, cpu); + volatile struct kvm_run *run =3D vcpu->run; struct ucall uc; =20 - vcpu_run(vm, cpu); + vcpu_run(vm, vcpu->id); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Got exit_reason other than KVM_EXIT_IO: %u (%= s)\n", run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vm, cpu, &uc)) { + switch (get_ucall(vm, vcpu->id, &uc)) { case UCALL_DONE: goto out; =20 case UCALL_SYNC: - printf("Guest %ld sync %lx %lx %ld\n", cpu, uc.args[2], uc.args[3], uc.= args[2] - uc.args[3]); + printf("Guest %d sync %lx %lx %ld\n", vcpu->id, + uc.args[2], uc.args[3], uc.args[2] - uc.args[3]); failures++; break; =20 --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 4717FC4167B for ; Wed, 4 May 2022 23:07:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1356155AbiEDXEu (ORCPT ); Wed, 4 May 2022 19:04:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45536 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235475AbiEDW5m (ORCPT ); Wed, 4 May 2022 18:57:42 -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 47C9B53722 for ; Wed, 4 May 2022 15:52:00 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id r16-20020a17090b051000b001db302efed7so1089297pjz.2 for ; Wed, 04 May 2022 15:52:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=Hx8sCbhJvCh5cLdAhmGu8wLUB1jVDA/mxGjlfX4jDqM=; b=tfLtI6sfhovJRsf3jGIwzoV9D3TJaeV+YvUAEkJIwJSxaewRMzz53Llw7lmWCI0j4K eUOSQ31RJ6XLelenIebss22NvfTU3D+X7Tt0X81MZenpjuKsgQulvOZP7MJ9UYP+Y6zr 3Lx1LOG1Aldt32RQMvbzPmu8gFeqV4vTHHkLlrKDG0dZLMgc4WHpXI9qVGdJW2zX7XAi 3gqd340xVwC3KBfYI3zro5OT4LTZKR5gbWOSuAHlA9FaoheMSe6OA62TW0rRctwSVvYm XMGsPLfguqtHE6tKbO5tUvlN8G5KWIGfOtrKXLvTm6AAdIgd2OmOnR/Qh23Vku0QYZrr h1Ew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=Hx8sCbhJvCh5cLdAhmGu8wLUB1jVDA/mxGjlfX4jDqM=; b=Uljrx8FoO9FcHeO9YIKmHqMAK08SwhbqIBlokQixOU62Jew2MON7IPMdLPFZ1yvQ+V U5NO7AGKSRFdSGjn+KeZgvkSjAK0YbzMnIMzC0gfHh49hkLKWCd/rqSNGtaljNtn/Rrf f0RS5iqXJM7notRcqqR6WCetMf+SCoWKbGEfld/PXjIWpar2SyfYk3ujk9fGcStADGr7 nKXBbx/RaXheHKzvtWU718J0yk7YNXndiTW7+Wr7lpHYFbUZZ/ZsUnbntvNp6Di+AFOv /5vA1CD8hvzPE280qS5mBc8AWb2hU6eW5updoKIn1VkpNJ8vqAJadu/irIa8gNy4b5zP +f+A== X-Gm-Message-State: AOAM5331b9Q+AL/SIzgvXH2d3+4etOyNkijtM2sU4PVZ8fRoU+OK+Jyr GjNTD9IoFrhtfF+2vRvzYEIXiJors7w= X-Google-Smtp-Source: ABdhPJyQwjqPyAPUvRIzb7J6XsuFaPqeZRZSGX1w+CRJDk08taZEW9zNDQzFxttZ7zMLtPTHM+ir5HkkoEU= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:1784:b0:50d:d8cb:7a4f with SMTP id s4-20020a056a00178400b0050dd8cb7a4fmr19715916pfg.23.1651704719268; Wed, 04 May 2022 15:51:59 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:32 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-87-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 086/128] KVM: selftests: Convert xapic_state_test away from hardcoded vCPU ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert xapic_state_test to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of the raw vCPU ID. Signed-off-by: Sean Christopherson --- .../selftests/kvm/x86_64/xapic_state_test.c | 48 ++++++++++--------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/xapic_state_test.c b/tools/= testing/selftests/kvm/x86_64/xapic_state_test.c index 9d8393b6ec75..56301ee1adee 100644 --- a/tools/testing/selftests/kvm/x86_64/xapic_state_test.c +++ b/tools/testing/selftests/kvm/x86_64/xapic_state_test.c @@ -12,7 +12,7 @@ #include "test_util.h" =20 struct xapic_vcpu { - uint32_t id; + struct kvm_vcpu *vcpu; bool is_x2apic; }; =20 @@ -47,8 +47,9 @@ static void x2apic_guest_code(void) } while (1); } =20 -static void ____test_icr(struct kvm_vm *vm, struct xapic_vcpu *vcpu, uint6= 4_t val) +static void ____test_icr(struct kvm_vm *vm, struct xapic_vcpu *x, uint64_t= val) { + struct kvm_vcpu *vcpu =3D x->vcpu; struct kvm_lapic_state xapic; struct ucall uc; uint64_t icr; @@ -70,28 +71,29 @@ static void ____test_icr(struct kvm_vm *vm, struct xapi= c_vcpu *vcpu, uint64_t va vcpu_ioctl(vm, vcpu->id, KVM_GET_LAPIC, &xapic); icr =3D (u64)(*((u32 *)&xapic.regs[APIC_ICR])) | (u64)(*((u32 *)&xapic.regs[APIC_ICR2])) << 32; - if (!vcpu->is_x2apic) + if (!x->is_x2apic) val &=3D (-1u | (0xffull << (32 + 24))); ASSERT_EQ(icr, val & ~APIC_ICR_BUSY); } =20 -static void __test_icr(struct kvm_vm *vm, struct xapic_vcpu *vcpu, uint64_= t val) +static void __test_icr(struct kvm_vm *vm, struct xapic_vcpu *x, uint64_t v= al) { - ____test_icr(vm, vcpu, val | APIC_ICR_BUSY); - ____test_icr(vm, vcpu, val & ~(u64)APIC_ICR_BUSY); + ____test_icr(vm, x, val | APIC_ICR_BUSY); + ____test_icr(vm, x, val & ~(u64)APIC_ICR_BUSY); } =20 -static void test_icr(struct kvm_vm *vm, struct xapic_vcpu *vcpu) +static void test_icr(struct kvm_vm *vm, struct xapic_vcpu *x) { + struct kvm_vcpu *vcpu =3D x->vcpu; uint64_t icr, i, j; =20 icr =3D APIC_DEST_SELF | APIC_INT_ASSERT | APIC_DM_FIXED; for (i =3D 0; i <=3D 0xff; i++) - __test_icr(vm, vcpu, icr | i); + __test_icr(vm, x, icr | i); =20 icr =3D APIC_INT_ASSERT | APIC_DM_FIXED; for (i =3D 0; i <=3D 0xff; i++) - __test_icr(vm, vcpu, icr | i); + __test_icr(vm, x, icr | i); =20 /* * Send all flavors of IPIs to non-existent vCPUs. TODO: use number of @@ -100,32 +102,32 @@ static void test_icr(struct kvm_vm *vm, struct xapic_= vcpu *vcpu) icr =3D APIC_INT_ASSERT | 0xff; for (i =3D vcpu->id + 1; i < 0xff; i++) { for (j =3D 0; j < 8; j++) - __test_icr(vm, vcpu, i << (32 + 24) | APIC_INT_ASSERT | (j << 8)); + __test_icr(vm, x, i << (32 + 24) | APIC_INT_ASSERT | (j << 8)); } =20 /* And again with a shorthand destination for all types of IPIs. */ icr =3D APIC_DEST_ALLBUT | APIC_INT_ASSERT; for (i =3D 0; i < 8; i++) - __test_icr(vm, vcpu, icr | (i << 8)); + __test_icr(vm, x, icr | (i << 8)); =20 /* And a few garbage value, just make sure it's an IRQ (blocked). */ - __test_icr(vm, vcpu, 0xa5a5a5a5a5a5a5a5 & ~APIC_DM_FIXED_MASK); - __test_icr(vm, vcpu, 0x5a5a5a5a5a5a5a5a & ~APIC_DM_FIXED_MASK); - __test_icr(vm, vcpu, -1ull & ~APIC_DM_FIXED_MASK); + __test_icr(vm, x, 0xa5a5a5a5a5a5a5a5 & ~APIC_DM_FIXED_MASK); + __test_icr(vm, x, 0x5a5a5a5a5a5a5a5a & ~APIC_DM_FIXED_MASK); + __test_icr(vm, x, -1ull & ~APIC_DM_FIXED_MASK); } =20 int main(int argc, char *argv[]) { - struct xapic_vcpu vcpu =3D { - .id =3D 0, + struct xapic_vcpu x =3D { + .vcpu =3D NULL, .is_x2apic =3D true, }; struct kvm_cpuid2 *cpuid; struct kvm_vm *vm; int i; =20 - vm =3D vm_create_default(vcpu.id, 0, x2apic_guest_code); - test_icr(vm, &vcpu); + vm =3D vm_create_with_one_vcpu(&x.vcpu, x2apic_guest_code); + test_icr(vm, &x); kvm_vm_free(vm); =20 /* @@ -133,18 +135,18 @@ int main(int argc, char *argv[]) * the guest in order to test AVIC. KVM disallows changing CPUID after * KVM_RUN and AVIC is disabled if _any_ vCPU is allowed to use x2APIC. */ - vm =3D vm_create_default(vcpu.id, 0, xapic_guest_code); - vcpu.is_x2apic =3D false; + vm =3D vm_create_with_one_vcpu(&x.vcpu, xapic_guest_code); + x.is_x2apic =3D false; =20 - cpuid =3D vcpu_get_cpuid(vm, vcpu.id); + cpuid =3D vcpu_get_cpuid(vm, x.vcpu->id); for (i =3D 0; i < cpuid->nent; i++) { if (cpuid->entries[i].function =3D=3D 1) break; } cpuid->entries[i].ecx &=3D ~BIT(21); - vcpu_set_cpuid(vm, vcpu.id, cpuid); + vcpu_set_cpuid(vm, x.vcpu->id, cpuid); =20 virt_pg_map(vm, APIC_DEFAULT_GPA, APIC_DEFAULT_GPA); - test_icr(vm, &vcpu); + test_icr(vm, &x); kvm_vm_free(vm); } --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 2F78EC433FE for ; Wed, 4 May 2022 23:07:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1381871AbiEDXFc (ORCPT ); Wed, 4 May 2022 19:05:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46984 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379676AbiEDW6J (ORCPT ); Wed, 4 May 2022 18:58:09 -0400 Received: from mail-pg1-x54a.google.com (mail-pg1-x54a.google.com [IPv6:2607:f8b0:4864:20::54a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3198753B49 for ; Wed, 4 May 2022 15:52:04 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id y17-20020a637d11000000b003ab06870074so1336701pgc.15 for ; Wed, 04 May 2022 15:52:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=JuSB6I15ZhVqlzJm9dB6xmEsKq4c3QIfjVdXnbIX1uc=; b=f+sE+6mGX/smmSPNXPjARqw/YAoc+kPcExZzb7PZZ4ZLPERBNyRyt4chK9qVK0Mq2G R27dsT7UAp9Amh4eZyMdMptcUg+PzehAOVisNmgAoWTFINhBSwisJQF305pONj0zqLez c07e2v63pE3qtdgT7uxg5QJnhQF1gZV2D/9Oq20pS2bvZm3w8LZ7SOXbGTn4REB3tQAQ K2n8pn7yjiuc7Ghf10qYjVvj4F3/LMlGDZCaAiaQMyiw6R8YoA9xwmhkOL58Q/18SmTt kgTbD/mEbe5oTDMaa5IXb0oo8SZ+cDfERJsQAI0n88w1xxtEyA9tpbcCev9d4ZHha5wH 2hxQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=JuSB6I15ZhVqlzJm9dB6xmEsKq4c3QIfjVdXnbIX1uc=; b=GonmXAysmqwGa44RQtfG4fnhWrnjCHfJgkcTDhTRjS1mHgF5MLEZMQbUNZvoVMcl56 eQ3/vmuMyrSsBT7xbTZSBNsU1iK8XR82RZrOx3grpG39eB4rxirEyOM0dnNEd+05rybB 33nNIac8ixKCr/yG8vNAsUFlADYHYwv/Dj44CnzWpYUx8R1wxleVD7ZF0vWxiURL5Vqi zecYRP/XZqewMPdF7Itzc2boFiPjU0iN1u9Ng+cle5ien870pDee2pYAwGfOqeyQ+ZmA rNPB7XO+wioBG+Bur01SzH9W1IGCOM0uAAyQKP3cE8SrL+z+Dx0n5sTugMUAIIkUve7Q 8xbw== X-Gm-Message-State: AOAM530ESnHAbm7OPwVCkJ4SJDUu4788lBN+u4YEXurQDuMuKzLhLT9Q xUV5gd015KbufbSBi9lppfGI3bZ+Jyo= X-Google-Smtp-Source: ABdhPJxruw3LauMi/kdqcd0a1xbkf42wJZ3sPtgbnfUtrwW4m7ceco7H0S2yw+oYuIIOwZ56ISyiBqA0Dus= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:e510:b0:1d9:ee23:9fa1 with SMTP id t16-20020a17090ae51000b001d9ee239fa1mr140465pjy.0.1651704720721; Wed, 04 May 2022 15:52:00 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:33 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-88-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 087/128] KVM: selftests: Convert debug-exceptions away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert debug-exceptions to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. Signed-off-by: Sean Christopherson --- .../selftests/kvm/aarch64/debug-exceptions.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/tools/testing/selftests/kvm/aarch64/debug-exceptions.c b/tools= /testing/selftests/kvm/aarch64/debug-exceptions.c index 63b2178210c4..b69db0942169 100644 --- a/tools/testing/selftests/kvm/aarch64/debug-exceptions.c +++ b/tools/testing/selftests/kvm/aarch64/debug-exceptions.c @@ -3,8 +3,6 @@ #include #include =20 -#define VCPU_ID 0 - #define MDSCR_KDE (1 << 13) #define MDSCR_MDE (1 << 15) #define MDSCR_SS (1 << 0) @@ -240,27 +238,28 @@ static void guest_svc_handler(struct ex_regs *regs) svc_addr =3D regs->pc; } =20 -static int debug_version(struct kvm_vm *vm) +static int debug_version(struct kvm_vcpu *vcpu) { uint64_t id_aa64dfr0; =20 - get_reg(vm, VCPU_ID, KVM_ARM64_SYS_REG(SYS_ID_AA64DFR0_EL1), &id_aa64dfr0= ); + get_reg(vcpu->vm, vcpu->id, KVM_ARM64_SYS_REG(SYS_ID_AA64DFR0_EL1), &id_a= a64dfr0); return id_aa64dfr0 & 0xf; } =20 int main(int argc, char *argv[]) { + struct kvm_vcpu *vcpu; struct kvm_vm *vm; struct ucall uc; int stage; =20 - vm =3D vm_create_default(VCPU_ID, 0, guest_code); + vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); ucall_init(vm, NULL); =20 vm_init_descriptor_tables(vm); - vcpu_init_descriptor_tables(vm, VCPU_ID); + vcpu_init_descriptor_tables(vm, vcpu->id); =20 - if (debug_version(vm) < 6) { + if (debug_version(vcpu) < 6) { print_skip("Armv8 debug architecture not supported."); kvm_vm_free(vm); exit(KSFT_SKIP); @@ -278,9 +277,9 @@ int main(int argc, char *argv[]) ESR_EC_SVC64, guest_svc_handler); =20 for (stage =3D 0; stage < 11; stage++) { - vcpu_run(vm, VCPU_ID); + vcpu_run(vm, vcpu->id); =20 - switch (get_ucall(vm, VCPU_ID, &uc)) { + switch (get_ucall(vm, vcpu->id, &uc)) { case UCALL_SYNC: TEST_ASSERT(uc.args[1] =3D=3D stage, "Stage %d: Unexpected sync ucall, got %lx", --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 7599EC35294 for ; Wed, 4 May 2022 23:07:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1381767AbiEDXF3 (ORCPT ); Wed, 4 May 2022 19:05:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45330 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379755AbiEDW6X (ORCPT ); Wed, 4 May 2022 18:58:23 -0400 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 B041B554A6 for ; Wed, 4 May 2022 15:52:07 -0700 (PDT) Received: by mail-pg1-x549.google.com with SMTP id y17-20020a637d11000000b003ab06870074so1336730pgc.15 for ; Wed, 04 May 2022 15:52:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=VZbSQxn2Y662dXnhVG6459Fi3EyZ+qYww5u80HyOjBM=; b=dp+Wp6i8czCgkdFPl78kNqUGdemM1A6AJjQsjR+yeelmf48ZFVj3+vTb6SbjJ5LRjl it4+ASF0h0xjNqMFcZcXr8Mh3Z8g5rMgxZZd9gHzN122qwUb2o55AeCewHDAAanjDeZI F6J7knN7SoocwGlZ4obZ7jfRrmWxxP3SvqkkLYpUWDINZY+dN7QwPntxxcvx6E0fChgU zKlUVK8nIuf2mJAUP4jULBbQEcuZQwbempVhXvVMUITNxy5RayC0bNXPWD001VCoj7Tx aOsnYEPqz31YuIkt5nIlmACbHNJHiVw98WK3vnz+//UlMUlFxdOkKa8Vi5TnK4EOVaKz Vtpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=VZbSQxn2Y662dXnhVG6459Fi3EyZ+qYww5u80HyOjBM=; b=DiTUvvVnLGSYbGK+8Pd1CHFlJjEh6Iz6OXSU8i7GgCBeUHlYmL2Y72sb6N2avdF2SQ xUO5+V/4SKh9w9SFVZGZI/oCNq5MT31jA65uIp02hzsvTNF72oBsBbz60N9L98ri8bT7 QVoteGOsk1cA4joXWcMfygCIalPZ9u7n2H1oKYUj4rJlT21TtqDzkA3hCAgUBvlExMhM aFX3trHPTYC9va0TWzq4/qBu2l3KbvSa8OzJYHWvAFrUCF1oa7ljmLonZOjatB6L3w7i vKdA2h8TCZKd8Ns2hj7xmY1wa59TeKCzAc4jCOMeljknbksKekPPaYIgqFVsXNw4Oe2s ALQA== X-Gm-Message-State: AOAM531nJIiq7YoU3QD+7mJVkV3/qkzXgZp12gTWHF7dhhrvRQguT/M/ oHvddqQ+66QvLdjkNDCrCcvNylH6QdU= X-Google-Smtp-Source: ABdhPJwCheLbiybAQZnIcuCqxToD3V+umI6qVXqe139wtjr3RzT9xI7BSNbtBVEFh0yKA0GtMdmNGL8OVgc= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:ce02:b0:151:a86d:dc2b with SMTP id k2-20020a170902ce0200b00151a86ddc2bmr24295737plg.57.1651704722582; Wed, 04 May 2022 15:52:02 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:34 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-89-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 088/128] KVM: selftests: Convert fix_hypercall_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert fix_hypercall_test to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of using a global VCPU_ID. Signed-off-by: Sean Christopherson --- .../selftests/kvm/x86_64/fix_hypercall_test.c | 34 +++++++++---------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/fix_hypercall_test.c b/tool= s/testing/selftests/kvm/x86_64/fix_hypercall_test.c index 1f5c32146f3d..565c4ab8dbb7 100644 --- a/tools/testing/selftests/kvm/x86_64/fix_hypercall_test.c +++ b/tools/testing/selftests/kvm/x86_64/fix_hypercall_test.c @@ -14,8 +14,6 @@ #include "kvm_util.h" #include "processor.h" =20 -#define VCPU_ID 0 - static bool ud_expected; =20 static void guest_ud_handler(struct ex_regs *regs) @@ -94,22 +92,20 @@ static void guest_main(void) GUEST_DONE(); } =20 -static void setup_ud_vector(struct kvm_vm *vm) +static void setup_ud_vector(struct kvm_vcpu *vcpu) { - vm_init_descriptor_tables(vm); - vcpu_init_descriptor_tables(vm, VCPU_ID); - vm_install_exception_handler(vm, UD_VECTOR, guest_ud_handler); + vm_init_descriptor_tables(vcpu->vm); + vcpu_init_descriptor_tables(vcpu->vm, vcpu->id); + vm_install_exception_handler(vcpu->vm, UD_VECTOR, guest_ud_handler); } =20 -static void enter_guest(struct kvm_vm *vm) +static void enter_guest(struct kvm_vcpu *vcpu) { - struct kvm_run *run; + struct kvm_run *run =3D vcpu->run; struct ucall uc; =20 - run =3D vcpu_state(vm, VCPU_ID); - - vcpu_run(vm, VCPU_ID); - switch (get_ucall(vm, VCPU_ID, &uc)) { + vcpu_run(vcpu->vm, vcpu->id); + switch (get_ucall(vcpu->vm, vcpu->id, &uc)) { case UCALL_SYNC: pr_info("%s: %016lx\n", (const char *)uc.args[2], uc.args[3]); break; @@ -125,26 +121,28 @@ static void enter_guest(struct kvm_vm *vm) =20 static void test_fix_hypercall(void) { + struct kvm_vcpu *vcpu; struct kvm_vm *vm; =20 - vm =3D vm_create_default(VCPU_ID, 0, guest_main); - setup_ud_vector(vm); + vm =3D vm_create_with_one_vcpu(&vcpu, guest_main); + setup_ud_vector(vcpu); =20 ud_expected =3D false; sync_global_to_guest(vm, ud_expected); =20 virt_pg_map(vm, APIC_DEFAULT_GPA, APIC_DEFAULT_GPA); =20 - enter_guest(vm); + enter_guest(vcpu); } =20 static void test_fix_hypercall_disabled(void) { struct kvm_enable_cap cap =3D {0}; + struct kvm_vcpu *vcpu; struct kvm_vm *vm; =20 - vm =3D vm_create_default(VCPU_ID, 0, guest_main); - setup_ud_vector(vm); + vm =3D vm_create_with_one_vcpu(&vcpu, guest_main); + setup_ud_vector(vcpu); =20 cap.cap =3D KVM_CAP_DISABLE_QUIRKS2; cap.args[0] =3D KVM_X86_QUIRK_FIX_HYPERCALL_INSN; @@ -155,7 +153,7 @@ static void test_fix_hypercall_disabled(void) =20 virt_pg_map(vm, APIC_DEFAULT_GPA, APIC_DEFAULT_GPA); =20 - enter_guest(vm); + enter_guest(vcpu); } =20 int main(void) --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 1B562C3527E for ; Wed, 4 May 2022 23:07:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1381667AbiEDXFZ (ORCPT ); Wed, 4 May 2022 19:05:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45360 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379762AbiEDW6Y (ORCPT ); Wed, 4 May 2022 18:58:24 -0400 Received: from mail-pj1-x1049.google.com (mail-pj1-x1049.google.com [IPv6:2607:f8b0:4864:20::1049]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 15F235536A for ; Wed, 4 May 2022 15:52:09 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id s5-20020a17090aa10500b001d9a8e99e3aso1318963pjp.2 for ; Wed, 04 May 2022 15:52:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=vQ9RsiC3eVUA3hf/NGcV00vB3mSKkhczdPMQnZTeFtU=; b=N9Thpx8WUYJimniuFToz9fHRfmFfDALDVHJU090OPHaVrsp/eMAmtsgvj5PEyGA3u+ 3J7qqB8glDXlIFVLuM1w6yAdAmXt7jvND6NkcYkStqYIjBYiscw7GKUsN+k+2qbXswks 1Ork84yZBH18u8sMWJ81bhLC7CoQj7SyVKZbFBrGUr4Lk+/bvmEC8KFdyHNeZNxiWfvu g8Bw82MZShySuSphEfMuCO9z/Y6G425ZwBw2H4mDI7ZpVOm/6X6WJCANRbYI9KWvI99S 5WCdNtKrdUlJkLwOx6GfM6Utx8s2PN/pkOQNqdLpaE/ewRw+FEN/sGz3PW+xxAM9RlOK jnCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=vQ9RsiC3eVUA3hf/NGcV00vB3mSKkhczdPMQnZTeFtU=; b=z6Sq+nddzhqzH2/8/GIIVI960nf65LwxtVJuShfwKlqA2kACJEX+XxPvTwV7fPoLY1 LYUHMXA/IqkMktKhT6Izk+tq2qVOp0bfkeIXyfMD8iLL1jDIXInth8ONLDYy4TDYT1QS UflmDbyuXnn1E7FJ3RMHyVvX1vMSnoWWvpVjLQOSAvicYFb155+ZIevLd6cTg+stJ4JH OF1fBQMd7Oedia/9W0CAvzQVe3pN6rFIqg6iw9gn0M666qkvx+VoeY3pPJjciKXsuXHR ZQmkPYjdpQNE8e8fTqhRB4iq+00zc6nAd1qTr7Ea14RO/QOfhyZrqoHknD0ZnkLeJ4xC k+IA== X-Gm-Message-State: AOAM531lcw3mLYFEDaXeF85LLLi8CTl2eA+O2IIJgsNvz9EorpukF1jX FlLcLfAMEQBRDEUS3PJlBLqTpAAqLCI= X-Google-Smtp-Source: ABdhPJwA8ShvFxiqc7WhGGVgNxnLD6F7oHU90fI7RS3S+0mFk7NS0e/7pLV3AotDAlO9n7jIMv1LZuZ1clo= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a63:84c8:0:b0:3ab:180b:bb5a with SMTP id k191-20020a6384c8000000b003ab180bbb5amr19675601pgd.308.1651704724155; Wed, 04 May 2022 15:52:04 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:35 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-90-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 089/128] KVM: selftests: Convert vgic_irq away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert vgic_irq to use vm_create_with_one_vcpu() and pass around a 'struct kvm_vcpu' object instead of passing around a vCPU ID (which is always the global VCPU_ID...). Opportunstically align the indentation for multiple functions' parameters. Signed-off-by: Sean Christopherson --- .../testing/selftests/kvm/aarch64/vgic_irq.c | 30 ++++++++++--------- .../selftests/kvm/include/aarch64/vgic.h | 6 ++-- .../testing/selftests/kvm/lib/aarch64/vgic.c | 10 +++---- 3 files changed, 25 insertions(+), 21 deletions(-) diff --git a/tools/testing/selftests/kvm/aarch64/vgic_irq.c b/tools/testing= /selftests/kvm/aarch64/vgic_irq.c index 87e41895b385..111170201e9b 100644 --- a/tools/testing/selftests/kvm/aarch64/vgic_irq.c +++ b/tools/testing/selftests/kvm/aarch64/vgic_irq.c @@ -22,7 +22,6 @@ =20 #define GICD_BASE_GPA 0x08000000ULL #define GICR_BASE_GPA 0x080A0000ULL -#define VCPU_ID 0 =20 /* * Stores the user specified args; it's passed to the guest and to every t= est @@ -589,7 +588,8 @@ static void kvm_set_gsi_routing_irqchip_check(struct kv= m_vm *vm, } =20 static void kvm_irq_write_ispendr_check(int gic_fd, uint32_t intid, - uint32_t vcpu, bool expect_failure) + struct kvm_vcpu *vcpu, + bool expect_failure) { /* * Ignore this when expecting failure as invalid intids will lead to @@ -659,15 +659,16 @@ static void kvm_routing_and_irqfd_check(struct kvm_vm= *vm, (tmp) < (uint64_t)(first) + (uint64_t)(num); \ (tmp)++, (i)++) =20 -static void run_guest_cmd(struct kvm_vm *vm, int gic_fd, - struct kvm_inject_args *inject_args, - struct test_args *test_args) +static void run_guest_cmd(struct kvm_vcpu *vcpu, int gic_fd, + struct kvm_inject_args *inject_args, + struct test_args *test_args) { kvm_inject_cmd cmd =3D inject_args->cmd; uint32_t intid =3D inject_args->first_intid; uint32_t num =3D inject_args->num; int level =3D inject_args->level; bool expect_failure =3D inject_args->expect_failure; + struct kvm_vm *vm =3D vcpu->vm; uint64_t tmp; uint32_t i; =20 @@ -705,12 +706,12 @@ static void run_guest_cmd(struct kvm_vm *vm, int gic_= fd, break; case KVM_WRITE_ISPENDR: for (i =3D intid; i < intid + num; i++) - kvm_irq_write_ispendr_check(gic_fd, i, - VCPU_ID, expect_failure); + kvm_irq_write_ispendr_check(gic_fd, i, vcpu, + expect_failure); break; case KVM_WRITE_ISACTIVER: for (i =3D intid; i < intid + num; i++) - kvm_irq_write_isactiver(gic_fd, i, VCPU_ID); + kvm_irq_write_isactiver(gic_fd, i, vcpu); break; default: break; @@ -739,6 +740,7 @@ static void test_vgic(uint32_t nr_irqs, bool level_sens= itive, bool eoi_split) { struct ucall uc; int gic_fd; + struct kvm_vcpu *vcpu; struct kvm_vm *vm; struct kvm_inject_args inject_args; vm_vaddr_t args_gva; @@ -753,16 +755,16 @@ static void test_vgic(uint32_t nr_irqs, bool level_se= nsitive, bool eoi_split) =20 print_args(&args); =20 - vm =3D vm_create_default(VCPU_ID, 0, guest_code); + vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); ucall_init(vm, NULL); =20 vm_init_descriptor_tables(vm); - vcpu_init_descriptor_tables(vm, VCPU_ID); + vcpu_init_descriptor_tables(vm, vcpu->id); =20 /* Setup the guest args page (so it gets the args). */ args_gva =3D vm_vaddr_alloc_page(vm); memcpy(addr_gva2hva(vm, args_gva), &args, sizeof(args)); - vcpu_args_set(vm, 0, 1, args_gva); + vcpu_args_set(vm, vcpu->id, 1, args_gva); =20 gic_fd =3D vgic_v3_setup(vm, 1, nr_irqs, GICD_BASE_GPA, GICR_BASE_GPA); @@ -775,12 +777,12 @@ static void test_vgic(uint32_t nr_irqs, bool level_se= nsitive, bool eoi_split) guest_irq_handlers[args.eoi_split][args.level_sensitive]); =20 while (1) { - vcpu_run(vm, VCPU_ID); + vcpu_run(vm, vcpu->id); =20 - switch (get_ucall(vm, VCPU_ID, &uc)) { + switch (get_ucall(vm, vcpu->id, &uc)) { case UCALL_SYNC: kvm_inject_get_call(vm, &uc, &inject_args); - run_guest_cmd(vm, gic_fd, &inject_args, &args); + run_guest_cmd(vcpu, gic_fd, &inject_args, &args); break; case UCALL_ABORT: TEST_FAIL("%s at %s:%ld\n\tvalues: %#lx, %#lx", diff --git a/tools/testing/selftests/kvm/include/aarch64/vgic.h b/tools/tes= ting/selftests/kvm/include/aarch64/vgic.h index 4442081221a0..0ac6f05c63f9 100644 --- a/tools/testing/selftests/kvm/include/aarch64/vgic.h +++ b/tools/testing/selftests/kvm/include/aarch64/vgic.h @@ -8,6 +8,8 @@ =20 #include =20 +#include "kvm_util.h" + #define REDIST_REGION_ATTR_ADDR(count, base, flags, index) \ (((uint64_t)(count) << 52) | \ ((uint64_t)((base) >> 16) << 16) | \ @@ -26,8 +28,8 @@ void kvm_arm_irq_line(struct kvm_vm *vm, uint32_t intid, = int level); int _kvm_arm_irq_line(struct kvm_vm *vm, uint32_t intid, int level); =20 /* The vcpu arg only applies to private interrupts. */ -void kvm_irq_write_ispendr(int gic_fd, uint32_t intid, uint32_t vcpu); -void kvm_irq_write_isactiver(int gic_fd, uint32_t intid, uint32_t vcpu); +void kvm_irq_write_ispendr(int gic_fd, uint32_t intid, struct kvm_vcpu *vc= pu); +void kvm_irq_write_isactiver(int gic_fd, uint32_t intid, struct kvm_vcpu *= vcpu); =20 #define KVM_IRQCHIP_NUM_PINS (1020 - 32) =20 diff --git a/tools/testing/selftests/kvm/lib/aarch64/vgic.c b/tools/testing= /selftests/kvm/lib/aarch64/vgic.c index 61da345c48ac..0de9b0686498 100644 --- a/tools/testing/selftests/kvm/lib/aarch64/vgic.c +++ b/tools/testing/selftests/kvm/lib/aarch64/vgic.c @@ -127,8 +127,8 @@ void kvm_arm_irq_line(struct kvm_vm *vm, uint32_t intid= , int level) TEST_ASSERT(!ret, KVM_IOCTL_ERROR(KVM_IRQ_LINE, ret)); } =20 -static void vgic_poke_irq(int gic_fd, uint32_t intid, - uint32_t vcpu, uint64_t reg_off) +static void vgic_poke_irq(int gic_fd, uint32_t intid, struct kvm_vcpu *vcp= u, + uint64_t reg_off) { uint64_t reg =3D intid / 32; uint64_t index =3D intid % 32; @@ -141,7 +141,7 @@ static void vgic_poke_irq(int gic_fd, uint32_t intid, =20 if (intid_is_private) { /* TODO: only vcpu 0 implemented for now. */ - assert(vcpu =3D=3D 0); + assert(vcpu->id =3D=3D 0); attr +=3D SZ_64K; } =20 @@ -159,12 +159,12 @@ static void vgic_poke_irq(int gic_fd, uint32_t intid, kvm_device_attr_set(gic_fd, group, attr, &val); } =20 -void kvm_irq_write_ispendr(int gic_fd, uint32_t intid, uint32_t vcpu) +void kvm_irq_write_ispendr(int gic_fd, uint32_t intid, struct kvm_vcpu *vc= pu) { vgic_poke_irq(gic_fd, intid, vcpu, GICD_ISPENDR); } =20 -void kvm_irq_write_isactiver(int gic_fd, uint32_t intid, uint32_t vcpu) +void kvm_irq_write_isactiver(int gic_fd, uint32_t intid, struct kvm_vcpu *= vcpu) { vgic_poke_irq(gic_fd, intid, vcpu, GICD_ISACTIVER); } --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 93083C352A1 for ; Wed, 4 May 2022 23:07:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1382017AbiEDXFo (ORCPT ); Wed, 4 May 2022 19:05:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46150 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379787AbiEDW60 (ORCPT ); Wed, 4 May 2022 18:58:26 -0400 Received: from mail-pj1-x1049.google.com (mail-pj1-x1049.google.com [IPv6:2607:f8b0:4864:20::1049]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DCD8056214 for ; Wed, 4 May 2022 15:52:16 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id w3-20020a17090ac98300b001b8b914e91aso1320333pjt.0 for ; Wed, 04 May 2022 15:52:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=36MP1emo2zk5OGkKkF+DZacxN5PgxLSoE7Zm4l3PLFU=; b=PCvMrfENqwL4KF2jfXrzGcapgqFJoYJzEm5QdV5NI7q49HboZ6ibIpXBIEicTJ1v7l 4Ee0BgY9mIqHvgzwuFGPvfr/KT1FOiSGWDm9JSrKpiYFD7GPpCbxdF549ge+oKiInoUX mXfwLp3ETc4j0sJcJBP/tyzhnhW3Yo65DVYb4UK1IS3O5BlvspyND/eem7w84Bw05xhq 6J34qZlFtA6OEsxsx4+hbPS1MCcqMHXu3OxHyvKnHihm6aGH91pr23QQ6foLP1y7d6Tw LPzRTR/9WknJuYuzi4KuGsESlE58zwHh+ZERamrzTvGpyP8HeDmWZHGmA9Xmmxhdhypd uJMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=36MP1emo2zk5OGkKkF+DZacxN5PgxLSoE7Zm4l3PLFU=; b=7u8DxoHX0g/Jk668sXx3pI84ZEliRpiF68i1w4pJUvhCPy/qhJVRRfuwtv10Mq1bBj z/RUP0Ii1OWnss/qMi7h+/WRCn3rBegfjRoV5yw22DoHG8OyCRik3xDXIeC+gs8Zs7NF rfzq8NBHodhs3E2D6TVKc6fFYMs6CdyEOvbAaMvTZIq1CjAMHYcAsT7IfjVkJDGcRpGl TMbWSu6PyYg4gtDdKlZQm9iuuzqpAUA71qkJ6von1L6gdTnGxSD+NECLrGOWIPVtOtms n4GhgZk1AOO6vrFGIxXveu1FWdwANJOurMrviNU7Gsc18+fJSOEQmN5oTlRXGRBmdZJA 4ZUw== X-Gm-Message-State: AOAM532kaKNACPL1ItPR2AEf/KWXosIzhTftI+wYxrhU5fVVgu4GySaV tjJ/efVhjlnd7J3REg0s+piXI6UAIWw= X-Google-Smtp-Source: ABdhPJx0yf6Wd7rpduiwh8C1FljRINilw9SerEN7Zutz2ba9UwqHPrm8AF+xI+kFOwdfZOpAf4UvwFQBims= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:6b83:b0:15d:1ea2:4f80 with SMTP id p3-20020a1709026b8300b0015d1ea24f80mr23518012plk.41.1651704725816; Wed, 04 May 2022 15:52:05 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:36 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-91-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 090/128] KVM: selftests: Make arm64's guest_get_vcpuid() declaration arm64-only From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Move the declaration of guest_get_vcpuid() to include/aarch64/processor.h, it is implemented and used only by arm64. Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/include/aarch64/processor.h | 2 ++ tools/testing/selftests/kvm/include/kvm_util_base.h | 2 -- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/kvm/include/aarch64/processor.h b/tool= s/testing/selftests/kvm/include/aarch64/processor.h index 8f9f46979a00..9a430980100e 100644 --- a/tools/testing/selftests/kvm/include/aarch64/processor.h +++ b/tools/testing/selftests/kvm/include/aarch64/processor.h @@ -185,4 +185,6 @@ static inline void local_irq_disable(void) asm volatile("msr daifset, #3" : : : "memory"); } =20 +uint32_t guest_get_vcpuid(void); + #endif /* SELFTEST_KVM_PROCESSOR_H */ diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index 4487d5bce9b4..f621f7ffc150 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -706,6 +706,4 @@ kvm_userspace_memory_region_find(struct kvm_vm *vm, uin= t64_t start, =20 void assert_on_unhandled_exception(struct kvm_vm *vm, uint32_t vcpuid); =20 -uint32_t guest_get_vcpuid(void); - #endif /* SELFTEST_KVM_UTIL_BASE_H */ --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 A27C4C47082 for ; Wed, 4 May 2022 23:07:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1382166AbiEDXFu (ORCPT ); Wed, 4 May 2022 19:05:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46164 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379717AbiEDW6c (ORCPT ); Wed, 4 May 2022 18:58:32 -0400 Received: from mail-yb1-xb49.google.com (mail-yb1-xb49.google.com [IPv6:2607:f8b0:4864:20::b49]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 29DEC5621C for ; Wed, 4 May 2022 15:52:18 -0700 (PDT) Received: by mail-yb1-xb49.google.com with SMTP id d188-20020a25cdc5000000b00648429e5ab9so2306008ybf.13 for ; Wed, 04 May 2022 15:52:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=4WR9zEIsQRadY2XTHddV28lHjmHH8m3YJ1sYfLLT9gM=; b=qSAy0cRzHsHnqdPi0eCNQGd9LRbz8YACWFD8AO1m+Y4niOBi4QVk2H9ztTeFWBmLHw J6m2uUL+q7J3hSKDQcEzyXlLxG31pHPQ3O6/7OocAbEX6G0WO9fnEyWQ1slXolQ75XEV jPqkUu0bHOwNlW6XblQUUUertFnJWESHo5X9DR7rDz3CFcDF00R5czogOxCM1tTtam1f isxlkLSpyYSWW1gikpt4dkLA9dxnWaaIJ3b+1zV9ahge/AWV54QFmJqOb7F3uSH/7CY5 btnMwAfabpWTTZp9p4ty2NHFCBSmB86uIp2to2Nqwn9Bm0DHT/h99yJy1hLXHKTuYfOT n2sA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=4WR9zEIsQRadY2XTHddV28lHjmHH8m3YJ1sYfLLT9gM=; b=gfR/t2/OnJfa6B3vj6/qLCRetinTsPK6c5O7Alj600vY/gtAlwhuxCwxsovIlzYwTU IJb9vB5Xm5J2MsEyLXL0NkpeUgdu9TIgXkeHCWDynesiwIuwD5tsChfCDWhf6PbMLK1n oUAsinqfL2lhTadLWOqIYzFJbRT8S5YfTuT9IKozwwWptrdDIsknoLT4QWdPSotTE5yV XzblTZAymSk0uYpT2jlIcxS2MI/U2iBjOfOlfHD2Tgl2OFGiHNl/CJ+UlOOerD8QbuC+ IYXmDxic4wWwqBFKq3neJUNDzhcxxjxMJ9SZ9Np67P3PyIrQY5FVmORaiFj1PAeKruer QSXA== X-Gm-Message-State: AOAM530Wopkwo2tqbWVVIrrmaHh4YLH/fhzl2AMobqclE7VAYO1zMW2R VRJol8cdkODeayP5jsVvVXOQiHfb+oA= X-Google-Smtp-Source: ABdhPJy/kebFBTcGppdJ4XEHVkmgD1x0nty7ACYkuebnm5m45K8Uq/6ziBxEaWwMsVL2Nymh5pjqdvZSInw= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a25:215:0:b0:64a:c05:7082 with SMTP id 21-20020a250215000000b0064a0c057082mr4218285ybc.188.1651704727455; Wed, 04 May 2022 15:52:07 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:37 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-92-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 091/128] KVM: selftests: Move vm_is_unrestricted_guest() to x86-64 From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" An "unrestricted guest" is an VMX-only concept, move the relevant helper to x86-64 code. Assume most readers can correctly convert underscores to spaces and oppurtunistically trim the function comment. Signed-off-by: Sean Christopherson --- .../selftests/kvm/include/kvm_util_base.h | 2 -- .../selftests/kvm/include/x86_64/processor.h | 1 + tools/testing/selftests/kvm/lib/kvm_util.c | 33 ------------------- .../selftests/kvm/lib/x86_64/processor.c | 21 ++++++++++++ 4 files changed, 22 insertions(+), 35 deletions(-) diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index f621f7ffc150..570eb05005ea 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -666,8 +666,6 @@ struct kvm_vcpu *vm_recreate_with_one_vcpu(struct kvm_v= m *vm); */ void vm_vcpu_add_default(struct kvm_vm *vm, uint32_t vcpuid, void *guest_c= ode); =20 -bool vm_is_unrestricted_guest(struct kvm_vm *vm); - unsigned int vm_get_page_size(struct kvm_vm *vm); unsigned int vm_get_page_shift(struct kvm_vm *vm); unsigned long vm_compute_max_gfn(struct kvm_vm *vm); diff --git a/tools/testing/selftests/kvm/include/x86_64/processor.h b/tools= /testing/selftests/kvm/include/x86_64/processor.h index cf6c9738302f..94888d3a13f5 100644 --- a/tools/testing/selftests/kvm/include/x86_64/processor.h +++ b/tools/testing/selftests/kvm/include/x86_64/processor.h @@ -452,6 +452,7 @@ static inline void vcpu_set_msr(struct kvm_vm *vm, uint= 32_t vcpuid, uint32_t kvm_get_cpuid_max_basic(void); uint32_t kvm_get_cpuid_max_extended(void); void kvm_get_cpu_address_width(unsigned int *pa_bits, unsigned int *va_bit= s); +bool vm_is_unrestricted_guest(struct kvm_vm *vm); =20 struct ex_regs { uint64_t rax, rcx, rdx, rbx; diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index bcdc47289df3..89612535df22 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -1941,39 +1941,6 @@ void *addr_gva2hva(struct kvm_vm *vm, vm_vaddr_t gva) return addr_gpa2hva(vm, addr_gva2gpa(vm, gva)); } =20 -/* - * Is Unrestricted Guest - * - * Input Args: - * vm - Virtual Machine - * - * Output Args: None - * - * Return: True if the unrestricted guest is set to 'Y', otherwise return = false. - * - * Check if the unrestricted guest flag is enabled. - */ -bool vm_is_unrestricted_guest(struct kvm_vm *vm) -{ - char val =3D 'N'; - size_t count; - FILE *f; - - if (vm =3D=3D NULL) { - /* Ensure that the KVM vendor-specific module is loaded. */ - close(open_kvm_dev_path_or_exit()); - } - - f =3D fopen("/sys/module/kvm_intel/parameters/unrestricted_guest", "r"); - if (f) { - count =3D fread(&val, sizeof(char), 1, f); - TEST_ASSERT(count =3D=3D 1, "Unable to read from param file."); - fclose(f); - } - - return val =3D=3D 'Y'; -} - unsigned int vm_get_page_size(struct kvm_vm *vm) { return vm->page_size; diff --git a/tools/testing/selftests/kvm/lib/x86_64/processor.c b/tools/tes= ting/selftests/kvm/lib/x86_64/processor.c index 91b326cd43a2..31a0fd79110d 100644 --- a/tools/testing/selftests/kvm/lib/x86_64/processor.c +++ b/tools/testing/selftests/kvm/lib/x86_64/processor.c @@ -1396,3 +1396,24 @@ unsigned long vm_compute_max_gfn(struct kvm_vm *vm) done: return min(max_gfn, ht_gfn - 1); } + +/* Returns true if kvm_intel was loaded with unrestricted_guest=3D1. */ +bool vm_is_unrestricted_guest(struct kvm_vm *vm) +{ + char val =3D 'N'; + size_t count; + FILE *f; + + /* Ensure that a KVM vendor-specific module is loaded. */ + if (vm =3D=3D NULL) + close(open_kvm_dev_path_or_exit()); + + f =3D fopen("/sys/module/kvm_intel/parameters/unrestricted_guest", "r"); + if (f) { + count =3D fread(&val, sizeof(char), 1, f); + TEST_ASSERT(count =3D=3D 1, "Unable to read from param file."); + fclose(f); + } + + return val =3D=3D 'Y'; +} --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 B8201C352A8 for ; Wed, 4 May 2022 23:07:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1382248AbiEDXF6 (ORCPT ); Wed, 4 May 2022 19:05:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45446 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379813AbiEDW6k (ORCPT ); Wed, 4 May 2022 18:58:40 -0400 Received: from mail-pf1-x44a.google.com (mail-pf1-x44a.google.com [IPv6:2607:f8b0:4864:20::44a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5A9CA56238 for ; Wed, 4 May 2022 15:52:21 -0700 (PDT) Received: by mail-pf1-x44a.google.com with SMTP id j17-20020a62b611000000b004fa6338bd77so821330pff.10 for ; Wed, 04 May 2022 15:52:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=6e5R6qJyolq/A/MgAj1aBQRLvw+sWPtn4dgLZCCgPjs=; b=WGHuID3eErubzDv34bBGHi+76Lbid+M6zitNzei7JvEwsU0Ac17RHdq71L76qE4Ox8 nidzhpmAWXPyMg4LcpEWsWwyefiDf4jYFfNlAimhrqcEZFGVkBu7xw3b0GGXHG8Js77C IDLW7AtmX9EfBoC10JrAjVOg6DuV2ShTVkFQygRjmAaDbxXMO6k0xQ01BME0PuPLZmom OXCWy7bbTt5q+0MeAfFPL3yAJdnTXXQPmaOg2mR5V9DTroweE7BXjv5ITywVfeaW81c2 N5jhsma7XfhBM0TAtrnCkk0UgdTrDnJ7VZHVuaxUkUx3fLUJTbmB57f+rWAUvNiu9Gb2 PiJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=6e5R6qJyolq/A/MgAj1aBQRLvw+sWPtn4dgLZCCgPjs=; b=fP0/8u/1+m9f9IVW3aCh9Kz1Gwaff16o+DJucvF7Hte8v8LM3YeYBnS3Fi10VnPdFl UqeL+mnjOwVBRbK+FvBIANsav61k4QYmPxaVSjnHSQFYbMwAlvYRfpbh3DIh5kjs0cHh vn9KArpqn0tL40fnxVktQGboVrk1VDnFEWbhBNrieYlo1mkVuQFCPUcWy8s/qMrxrt5d vAwYete/e75H6WO7e0NbYZ1FAjYXfjUb0FxkHHxQ8QX0gohopMjMPmPOivtazdzI9WoO h+sfBcADJPo6oaJfTjkUYxduqE6jY6V8zFMLLpT9eU58KrNiC3Wcyb/CBvtYCgAxw17C 1AoQ== X-Gm-Message-State: AOAM53119k/ciWMaYJuX05Pps10FR4RLec3SEOkoAJFzNXwuxbZT9c4/ nrlki4z2iaW8Jb3UCMyA6lQHzIsgheg= X-Google-Smtp-Source: ABdhPJxh/VmB/LCapiCKXDUxJMoaOJU5QJFLPOXeMphJReD6Rzg3RzFWjDpC27TNAOV+0pIWhDpl6Ws86SY= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:9304:b0:15c:fe50:6581 with SMTP id bc4-20020a170902930400b0015cfe506581mr23688899plb.132.1651704728928; Wed, 04 May 2022 15:52:08 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:38 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-93-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 092/128] KVM: selftests: Add "arch" to common utils that have arch implementations From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add "arch" into the name of utility functions that are declared in common code, but (surprise!) have arch-specific implementations. Shuffle code around so that all such helpers' declarations are bundled together. Signed-off-by: Sean Christopherson --- .../selftests/kvm/include/kvm_util_base.h | 200 ++++++++++-------- .../selftests/kvm/lib/aarch64/processor.c | 12 +- .../selftests/kvm/lib/riscv/processor.c | 12 +- .../selftests/kvm/lib/s390x/processor.c | 12 +- .../selftests/kvm/lib/x86_64/processor.c | 12 +- 5 files changed, 141 insertions(+), 107 deletions(-) diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index 570eb05005ea..5e316f7cd927 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -95,23 +95,6 @@ struct kvm_vm { =20 struct kvm_vcpu *vcpu_get(struct kvm_vm *vm, uint32_t vcpuid); =20 -/* - * Virtual Translation Tables Dump - * - * Input Args: - * stream - Output FILE stream - * vm - Virtual Machine - * indent - Left margin indent amount - * - * Output Args: None - * - * Return: None - * - * Dumps to the FILE stream given by @stream, the contents of all the - * virtual translation tables for the VM given by @vm. - */ -void virt_dump(FILE *stream, struct kvm_vm *vm, uint8_t indent); - struct userspace_mem_region * memslot2region(struct kvm_vm *vm, uint32_t memslot); =20 @@ -283,25 +266,6 @@ static inline int vm_get_stats_fd(struct kvm_vm *vm) return fd; } =20 -/* - * VM VCPU Dump - * - * Input Args: - * stream - Output FILE stream - * vm - Virtual Machine - * vcpuid - VCPU ID - * indent - Left margin indent amount - * - * Output Args: None - * - * Return: None - * - * Dumps the current state of the VCPU specified by @vcpuid, within the VM - * given by @vm, to the FILE stream given by @stream. - */ -void vcpu_dump(FILE *stream, struct kvm_vm *vm, uint32_t vcpuid, - uint8_t indent); - void vm_create_irqchip(struct kvm_vm *vm); =20 void vm_set_user_memory_region(struct kvm_vm *vm, uint32_t slot, uint32_t = flags, @@ -328,23 +292,6 @@ void *addr_gva2hva(struct kvm_vm *vm, vm_vaddr_t gva); vm_paddr_t addr_hva2gpa(struct kvm_vm *vm, void *hva); void *addr_gpa2alias(struct kvm_vm *vm, vm_paddr_t gpa); =20 -/* - * Address Guest Virtual to Guest Physical - * - * Input Args: - * vm - Virtual Machine - * gva - VM virtual address - * - * Output Args: None - * - * Return: - * Equivalent VM physical address - * - * Returns the VM physical address of the translated VM virtual - * address given by @gva. - */ -vm_paddr_t addr_gva2gpa(struct kvm_vm *vm, vm_vaddr_t gva); - struct kvm_run *vcpu_state(struct kvm_vm *vm, uint32_t vcpuid); void vcpu_run(struct kvm_vm *vm, uint32_t vcpuid); int _vcpu_run(struct kvm_vm *vm, uint32_t vcpuid); @@ -568,26 +515,6 @@ void kvm_gsi_routing_write(struct kvm_vm *vm, struct k= vm_irq_routing *routing); =20 const char *exit_reason_str(unsigned int exit_reason); =20 -void virt_pgd_alloc(struct kvm_vm *vm); - -/* - * VM Virtual Page Map - * - * Input Args: - * vm - Virtual Machine - * vaddr - VM Virtual Address - * paddr - VM Physical Address - * memslot - Memory region slot for new virtual translation tables - * - * Output Args: None - * - * Return: None - * - * Within @vm, creates a virtual translation for the page starting - * at @vaddr to the page starting at @paddr. - */ -void virt_pg_map(struct kvm_vm *vm, uint64_t vaddr, uint64_t paddr); - vm_paddr_t vm_phy_page_alloc(struct kvm_vm *vm, vm_paddr_t paddr_min, uint32_t memslot); vm_paddr_t vm_phy_pages_alloc(struct kvm_vm *vm, size_t num, @@ -656,16 +583,6 @@ static inline struct kvm_vm *vm_create_with_one_vcpu(s= truct kvm_vcpu **vcpu, =20 struct kvm_vcpu *vm_recreate_with_one_vcpu(struct kvm_vm *vm); =20 -/* - * Adds a vCPU with reasonable defaults (e.g. a stack) - * - * Input Args: - * vm - Virtual Machine - * vcpuid - The id of the VCPU to add to the VM. - * guest_code - The vCPU's entry point - */ -void vm_vcpu_add_default(struct kvm_vm *vm, uint32_t vcpuid, void *guest_c= ode); - unsigned int vm_get_page_size(struct kvm_vm *vm); unsigned int vm_get_page_shift(struct kvm_vm *vm); unsigned long vm_compute_max_gfn(struct kvm_vm *vm); @@ -704,4 +621,121 @@ kvm_userspace_memory_region_find(struct kvm_vm *vm, u= int64_t start, =20 void assert_on_unhandled_exception(struct kvm_vm *vm, uint32_t vcpuid); =20 +/* + * VM VCPU Dump + * + * Input Args: + * stream - Output FILE stream + * vm - Virtual Machine + * vcpuid - VCPU ID + * indent - Left margin indent amount + * + * Output Args: None + * + * Return: None + * + * Dumps the current state of the VCPU specified by @vcpuid, within the VM + * given by @vm, to the FILE stream given by @stream. + */ + +void vcpu_arch_dump(FILE *stream, struct kvm_vm *vm, uint32_t vcpuid, + uint8_t indent); + +static inline void vcpu_dump(FILE *stream, struct kvm_vm *vm, uint32_t vcp= uid, + uint8_t indent) +{ + vcpu_arch_dump(stream, vm, vcpuid, indent); +} + +/* + * Adds a vCPU with reasonable defaults (e.g. a stack) + * + * Input Args: + * vm - Virtual Machine + * vcpuid - The id of the VCPU to add to the VM. + * guest_code - The vCPU's entry point + */ +void vm_arch_vcpu_add(struct kvm_vm *vm, uint32_t vcpuid, void *guest_code= ); + +static inline void vm_vcpu_add_default(struct kvm_vm *vm, uint32_t vcpuid, + void *guest_code) +{ + vm_arch_vcpu_add(vm, vcpuid, guest_code); +} + +void virt_arch_pgd_alloc(struct kvm_vm *vm); + +static inline void virt_pgd_alloc(struct kvm_vm *vm) +{ + virt_arch_pgd_alloc(vm); +} + +/* + * VM Virtual Page Map + * + * Input Args: + * vm - Virtual Machine + * vaddr - VM Virtual Address + * paddr - VM Physical Address + * memslot - Memory region slot for new virtual translation tables + * + * Output Args: None + * + * Return: None + * + * Within @vm, creates a virtual translation for the page starting + * at @vaddr to the page starting at @paddr. + */ +void virt_arch_pg_map(struct kvm_vm *vm, uint64_t vaddr, uint64_t paddr); + +static inline void virt_pg_map(struct kvm_vm *vm, uint64_t vaddr, uint64_t= paddr) +{ + virt_arch_pg_map(vm, vaddr, paddr); +} + + +/* + * Address Guest Virtual to Guest Physical + * + * Input Args: + * vm - Virtual Machine + * gva - VM virtual address + * + * Output Args: None + * + * Return: + * Equivalent VM physical address + * + * Returns the VM physical address of the translated VM virtual + * address given by @gva. + */ +vm_paddr_t addr_arch_gva2gpa(struct kvm_vm *vm, vm_vaddr_t gva); + +static inline vm_paddr_t addr_gva2gpa(struct kvm_vm *vm, vm_vaddr_t gva) +{ + return addr_arch_gva2gpa(vm, gva); +} + +/* + * Virtual Translation Tables Dump + * + * Input Args: + * stream - Output FILE stream + * vm - Virtual Machine + * indent - Left margin indent amount + * + * Output Args: None + * + * Return: None + * + * Dumps to the FILE stream given by @stream, the contents of all the + * virtual translation tables for the VM given by @vm. + */ +void virt_arch_dump(FILE *stream, struct kvm_vm *vm, uint8_t indent); + +static inline void virt_dump(FILE *stream, struct kvm_vm *vm, uint8_t inde= nt) +{ + virt_arch_dump(stream, vm, indent); +} + #endif /* SELFTEST_KVM_UTIL_BASE_H */ diff --git a/tools/testing/selftests/kvm/lib/aarch64/processor.c b/tools/te= sting/selftests/kvm/lib/aarch64/processor.c index 5f6967058647..653e740c46b1 100644 --- a/tools/testing/selftests/kvm/lib/aarch64/processor.c +++ b/tools/testing/selftests/kvm/lib/aarch64/processor.c @@ -74,7 +74,7 @@ static uint64_t __maybe_unused ptrs_per_pte(struct kvm_vm= *vm) return 1 << (vm->page_shift - 3); } =20 -void virt_pgd_alloc(struct kvm_vm *vm) +void virt_arch_pgd_alloc(struct kvm_vm *vm) { if (!vm->pgd_created) { vm_paddr_t paddr =3D vm_phy_pages_alloc(vm, @@ -131,14 +131,14 @@ static void _virt_pg_map(struct kvm_vm *vm, uint64_t = vaddr, uint64_t paddr, *ptep |=3D (attr_idx << 2) | (1 << 10) /* Access Flag */; } =20 -void virt_pg_map(struct kvm_vm *vm, uint64_t vaddr, uint64_t paddr) +void virt_arch_pg_map(struct kvm_vm *vm, uint64_t vaddr, uint64_t paddr) { uint64_t attr_idx =3D 4; /* NORMAL (See DEFAULT_MAIR_EL1) */ =20 _virt_pg_map(vm, vaddr, paddr, attr_idx); } =20 -vm_paddr_t addr_gva2gpa(struct kvm_vm *vm, vm_vaddr_t gva) +vm_paddr_t addr_arch_gva2gpa(struct kvm_vm *vm, vm_vaddr_t gva) { uint64_t *ptep; =20 @@ -195,7 +195,7 @@ static void pte_dump(FILE *stream, struct kvm_vm *vm, u= int8_t indent, uint64_t p #endif } =20 -void virt_dump(FILE *stream, struct kvm_vm *vm, uint8_t indent) +void virt_arch_dump(FILE *stream, struct kvm_vm *vm, uint8_t indent) { int level =3D 4 - (vm->pgtable_levels - 1); uint64_t pgd, *ptep; @@ -303,7 +303,7 @@ void aarch64_vcpu_setup(struct kvm_vm *vm, uint32_t vcp= uid, struct kvm_vcpu_init set_reg(vm, vcpuid, KVM_ARM64_SYS_REG(SYS_TPIDR_EL1), vcpuid); } =20 -void vcpu_dump(FILE *stream, struct kvm_vm *vm, uint32_t vcpuid, uint8_t i= ndent) +void vcpu_arch_dump(FILE *stream, struct kvm_vm *vm, uint32_t vcpuid, uint= 8_t indent) { uint64_t pstate, pc; =20 @@ -330,7 +330,7 @@ void aarch64_vcpu_add_default(struct kvm_vm *vm, uint32= _t vcpuid, set_reg(vm, vcpuid, ARM64_CORE_REG(regs.pc), (uint64_t)guest_code); } =20 -void vm_vcpu_add_default(struct kvm_vm *vm, uint32_t vcpuid, void *guest_c= ode) +void vm_arch_vcpu_add(struct kvm_vm *vm, uint32_t vcpuid, void *guest_code) { aarch64_vcpu_add_default(vm, vcpuid, NULL, guest_code); } diff --git a/tools/testing/selftests/kvm/lib/riscv/processor.c b/tools/test= ing/selftests/kvm/lib/riscv/processor.c index c61c4856ed03..e43651ad7729 100644 --- a/tools/testing/selftests/kvm/lib/riscv/processor.c +++ b/tools/testing/selftests/kvm/lib/riscv/processor.c @@ -53,7 +53,7 @@ static uint64_t pte_index(struct kvm_vm *vm, vm_vaddr_t g= va, int level) return (gva & pte_index_mask[level]) >> pte_index_shift[level]; } =20 -void virt_pgd_alloc(struct kvm_vm *vm) +void virt_arch_pgd_alloc(struct kvm_vm *vm) { if (!vm->pgd_created) { vm_paddr_t paddr =3D vm_phy_pages_alloc(vm, @@ -64,7 +64,7 @@ void virt_pgd_alloc(struct kvm_vm *vm) } } =20 -void virt_pg_map(struct kvm_vm *vm, uint64_t vaddr, uint64_t paddr) +void virt_arch_pg_map(struct kvm_vm *vm, uint64_t vaddr, uint64_t paddr) { uint64_t *ptep, next_ppn; int level =3D vm->pgtable_levels - 1; @@ -108,7 +108,7 @@ void virt_pg_map(struct kvm_vm *vm, uint64_t vaddr, uin= t64_t paddr) PGTBL_PTE_PERM_MASK | PGTBL_PTE_VALID_MASK; } =20 -vm_paddr_t addr_gva2gpa(struct kvm_vm *vm, vm_vaddr_t gva) +vm_paddr_t addr_arch_gva2gpa(struct kvm_vm *vm, vm_vaddr_t gva) { uint64_t *ptep; int level =3D vm->pgtable_levels - 1; @@ -159,7 +159,7 @@ static void pte_dump(FILE *stream, struct kvm_vm *vm, u= int8_t indent, #endif } =20 -void virt_dump(FILE *stream, struct kvm_vm *vm, uint8_t indent) +void virt_arch_dump(FILE *stream, struct kvm_vm *vm, uint8_t indent) { int level =3D vm->pgtable_levels - 1; uint64_t pgd, *ptep; @@ -201,7 +201,7 @@ void riscv_vcpu_mmu_setup(struct kvm_vm *vm, int vcpuid) set_reg(vm, vcpuid, RISCV_CSR_REG(satp), satp); } =20 -void vcpu_dump(FILE *stream, struct kvm_vm *vm, uint32_t vcpuid, uint8_t i= ndent) +void vcpu_arch_dump(FILE *stream, struct kvm_vm *vm, uint32_t vcpuid, uint= 8_t indent) { struct kvm_riscv_core core; =20 @@ -273,7 +273,7 @@ static void __aligned(16) guest_hang(void) ; } =20 -void vm_vcpu_add_default(struct kvm_vm *vm, uint32_t vcpuid, void *guest_c= ode) +void vm_arch_vcpu_add(struct kvm_vm *vm, uint32_t vcpuid, void *guest_code) { int r; size_t stack_size =3D vm->page_size =3D=3D 4096 ? diff --git a/tools/testing/selftests/kvm/lib/s390x/processor.c b/tools/test= ing/selftests/kvm/lib/s390x/processor.c index aec15ca9d887..c2fe56a3fb74 100644 --- a/tools/testing/selftests/kvm/lib/s390x/processor.c +++ b/tools/testing/selftests/kvm/lib/s390x/processor.c @@ -10,7 +10,7 @@ =20 #define PAGES_PER_REGION 4 =20 -void virt_pgd_alloc(struct kvm_vm *vm) +void virt_arch_pgd_alloc(struct kvm_vm *vm) { vm_paddr_t paddr; =20 @@ -46,7 +46,7 @@ static uint64_t virt_alloc_region(struct kvm_vm *vm, int = ri) | ((ri < 4 ? (PAGES_PER_REGION - 1) : 0) & REGION_ENTRY_LENGTH); } =20 -void virt_pg_map(struct kvm_vm *vm, uint64_t gva, uint64_t gpa) +void virt_arch_pg_map(struct kvm_vm *vm, uint64_t gva, uint64_t gpa) { int ri, idx; uint64_t *entry; @@ -85,7 +85,7 @@ void virt_pg_map(struct kvm_vm *vm, uint64_t gva, uint64_= t gpa) entry[idx] =3D gpa; } =20 -vm_paddr_t addr_gva2gpa(struct kvm_vm *vm, vm_vaddr_t gva) +vm_paddr_t addr_arch_gva2gpa(struct kvm_vm *vm, vm_vaddr_t gva) { int ri, idx; uint64_t *entry; @@ -146,7 +146,7 @@ static void virt_dump_region(FILE *stream, struct kvm_v= m *vm, uint8_t indent, } } =20 -void virt_dump(FILE *stream, struct kvm_vm *vm, uint8_t indent) +void virt_arch_dump(FILE *stream, struct kvm_vm *vm, uint8_t indent) { if (!vm->pgd_created) return; @@ -154,7 +154,7 @@ void virt_dump(FILE *stream, struct kvm_vm *vm, uint8_t= indent) virt_dump_region(stream, vm, indent, vm->pgd); } =20 -void vm_vcpu_add_default(struct kvm_vm *vm, uint32_t vcpuid, void *guest_c= ode) +void vm_arch_vcpu_add(struct kvm_vm *vm, uint32_t vcpuid, void *guest_code) { size_t stack_size =3D DEFAULT_STACK_PGS * getpagesize(); uint64_t stack_vaddr; @@ -205,7 +205,7 @@ void vcpu_args_set(struct kvm_vm *vm, uint32_t vcpuid, = unsigned int num, ...) va_end(ap); } =20 -void vcpu_dump(FILE *stream, struct kvm_vm *vm, uint32_t vcpuid, uint8_t i= ndent) +void vcpu_arch_dump(FILE *stream, struct kvm_vm *vm, uint32_t vcpuid, uint= 8_t indent) { struct kvm_vcpu *vcpu =3D vcpu_get(vm, vcpuid); =20 diff --git a/tools/testing/selftests/kvm/lib/x86_64/processor.c b/tools/tes= ting/selftests/kvm/lib/x86_64/processor.c index 31a0fd79110d..c5335345323c 100644 --- a/tools/testing/selftests/kvm/lib/x86_64/processor.c +++ b/tools/testing/selftests/kvm/lib/x86_64/processor.c @@ -109,7 +109,7 @@ static void sregs_dump(FILE *stream, struct kvm_sregs *= sregs, uint8_t indent) } } =20 -void virt_pgd_alloc(struct kvm_vm *vm) +void virt_arch_pgd_alloc(struct kvm_vm *vm) { TEST_ASSERT(vm->mode =3D=3D VM_MODE_PXXV48_4K, "Attempt to use " "unknown or unsupported guest mode, mode: 0x%x", vm->mode); @@ -208,7 +208,7 @@ void __virt_pg_map(struct kvm_vm *vm, uint64_t vaddr, u= int64_t paddr, *pte =3D PTE_PRESENT_MASK | PTE_WRITABLE_MASK | (paddr & PHYSICAL_PAGE_MA= SK); } =20 -void virt_pg_map(struct kvm_vm *vm, uint64_t vaddr, uint64_t paddr) +void virt_arch_pg_map(struct kvm_vm *vm, uint64_t vaddr, uint64_t paddr) { __virt_pg_map(vm, vaddr, paddr, X86_PAGE_SIZE_4K); } @@ -303,7 +303,7 @@ void vm_set_page_table_entry(struct kvm_vm *vm, int vcp= uid, uint64_t vaddr, *(uint64_t *)new_pte =3D pte; } =20 -void virt_dump(FILE *stream, struct kvm_vm *vm, uint8_t indent) +void virt_arch_dump(FILE *stream, struct kvm_vm *vm, uint8_t indent) { uint64_t *pml4e, *pml4e_start; uint64_t *pdpe, *pdpe_start; @@ -484,7 +484,7 @@ static void kvm_seg_set_kernel_data_64bit(struct kvm_vm= *vm, uint16_t selector, kvm_seg_fill_gdt_64bit(vm, segp); } =20 -vm_paddr_t addr_gva2gpa(struct kvm_vm *vm, vm_vaddr_t gva) +vm_paddr_t addr_arch_gva2gpa(struct kvm_vm *vm, vm_vaddr_t gva) { uint16_t index[4]; uint64_t *pml4e, *pdpe, *pde; @@ -633,7 +633,7 @@ void vm_xsave_req_perm(int bit) bitmask); } =20 -void vm_vcpu_add_default(struct kvm_vm *vm, uint32_t vcpuid, void *guest_c= ode) +void vm_arch_vcpu_add(struct kvm_vm *vm, uint32_t vcpuid, void *guest_code) { struct kvm_mp_state mp_state; struct kvm_regs regs; @@ -888,7 +888,7 @@ void vcpu_args_set(struct kvm_vm *vm, uint32_t vcpuid, = unsigned int num, ...) va_end(ap); } =20 -void vcpu_dump(FILE *stream, struct kvm_vm *vm, uint32_t vcpuid, uint8_t i= ndent) +void vcpu_arch_dump(FILE *stream, struct kvm_vm *vm, uint32_t vcpuid, uint= 8_t indent) { struct kvm_regs regs; struct kvm_sregs sregs; --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 1F8D7C3A5A1 for ; Wed, 4 May 2022 23:07:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1384529AbiEDXID (ORCPT ); Wed, 4 May 2022 19:08:03 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47016 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379826AbiEDW6l (ORCPT ); Wed, 4 May 2022 18:58:41 -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 BC91B53E22 for ; Wed, 4 May 2022 15:52:25 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id gn21-20020a17090ac79500b001dc8a800410so1839221pjb.0 for ; Wed, 04 May 2022 15:52:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=0X4EmOn4v13Ft883CYNx9/ctglmAu5XEQQJoVm+CGAA=; b=dmwn3l22LgBQhcrH9K4uMBXbLVxFdAnKO5CPqfcOFb7SNiF5arlfjjEjdmt3pLEaGS bCYe3vxdw2xOjgPvomjdmvN8Tnrv3EOvFvwX3burdgLRXvca2EIgFoOrDfO3r0DY+BDQ 1LRBDOGISJVPdVuRkjSB1pb/jC9jeIx7YXWMOFrtn4kZOirl7dHZHwkbh9Vwhvqpr5KK Tq/5inMdgOMVgTaLRNRwnRGkrlv8w7rRO8jb4+I4kolRLLupTEgWXo7sg1sz/0W28QQd kJBegDL8ONO8NSA2pbCTMATUMS0c9refpO8ixIoEZaufsSbr/a9pdy8CCh0zi+7stGyG 3tRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=0X4EmOn4v13Ft883CYNx9/ctglmAu5XEQQJoVm+CGAA=; b=XyUHIcy1H0+j0dSHeu79sGNHX0GaD0a2oBKUQ1W5Eukx0/+MCeTKOUgs002Z7WJgIP M+KiXv4Sags+hSmAcfmjcsmd/0YpU/g/tL//iAxY11GYZo1UOEczZQc5K7ITjXs80YtM 9qyG8LFrkeBlTjts0Rx9KMxXgAH1Te1dLz0f+3u0iRcuUU90gUo2aSn/p4swhm6sMdj2 t5eonH7uAeKsx1tpJXARpNzblUquSPmf/lWMpjK3dPQQlu52Llf+9olq4C6G1PKVLVeJ z/BivQxer+B93oi+p1bJ6rbwnAYAROdPjU9tTHoWUZ5YOCXiWSBTQebiI1zWHIYFRpjU quhw== X-Gm-Message-State: AOAM532Khqpsn2p2z0BU3IMtAgscFFE2coqUdWgaR/TPA1uXPKDC/q9I F96K76tEsB4t8biyjDvvdYOYv9iKNS0= X-Google-Smtp-Source: ABdhPJxbWXi3sX+oCnyWA6Pab2nD30eh9d+IRlNP6C71457XdRTbPxw4XaZPzP0s5XuH4dKslNZbUf4JY+c= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a63:2bd4:0:b0:3c5:ecc9:6064 with SMTP id r203-20020a632bd4000000b003c5ecc96064mr3519960pgr.397.1651704730505; Wed, 04 May 2022 15:52:10 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:39 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-94-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 093/128] KVM: selftests: Return created vcpu from vm_vcpu_add_default() From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Return the created 'struct kvm_vcpu' object from vm_vcpu_add_default(), which cleans up a few tests and will eventually allow removing vcpu_get() entirely. Signed-off-by: Sean Christopherson --- .../selftests/kvm/include/aarch64/processor.h | 5 +++-- .../selftests/kvm/include/kvm_util_base.h | 10 ++++++---- .../selftests/kvm/lib/aarch64/processor.c | 20 +++++++++++-------- .../selftests/kvm/lib/riscv/processor.c | 20 +++++++++++-------- .../selftests/kvm/lib/s390x/processor.c | 18 ++++++++++------- .../selftests/kvm/lib/x86_64/processor.c | 20 +++++++++++-------- .../kvm/x86_64/pmu_event_filter_test.c | 4 +--- .../selftests/kvm/x86_64/tsc_scaling_sync.c | 3 +-- 8 files changed, 58 insertions(+), 42 deletions(-) diff --git a/tools/testing/selftests/kvm/include/aarch64/processor.h b/tool= s/testing/selftests/kvm/include/aarch64/processor.h index 9a430980100e..5999e7ae7b29 100644 --- a/tools/testing/selftests/kvm/include/aarch64/processor.h +++ b/tools/testing/selftests/kvm/include/aarch64/processor.h @@ -64,8 +64,9 @@ static inline void set_reg(struct kvm_vm *vm, uint32_t vc= puid, uint64_t id, uint } =20 void aarch64_vcpu_setup(struct kvm_vm *vm, uint32_t vcpuid, struct kvm_vcp= u_init *init); -void aarch64_vcpu_add_default(struct kvm_vm *vm, uint32_t vcpuid, - struct kvm_vcpu_init *init, void *guest_code); +struct kvm_vcpu *aarch64_vcpu_add_default(struct kvm_vm *vm, uint32_t vcpu= _id, + struct kvm_vcpu_init *init, + void *guest_code); =20 struct ex_regs { u64 regs[31]; diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index 5e316f7cd927..de36e7e91796 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -655,12 +655,14 @@ static inline void vcpu_dump(FILE *stream, struct kvm= _vm *vm, uint32_t vcpuid, * vcpuid - The id of the VCPU to add to the VM. * guest_code - The vCPU's entry point */ -void vm_arch_vcpu_add(struct kvm_vm *vm, uint32_t vcpuid, void *guest_code= ); +struct kvm_vcpu *vm_arch_vcpu_add(struct kvm_vm *vm, uint32_t vcpu_id, + void *guest_code); =20 -static inline void vm_vcpu_add_default(struct kvm_vm *vm, uint32_t vcpuid, - void *guest_code) +static inline struct kvm_vcpu *vm_vcpu_add_default(struct kvm_vm *vm, + uint32_t vcpu_id, + void *guest_code) { - vm_arch_vcpu_add(vm, vcpuid, guest_code); + return vm_arch_vcpu_add(vm, vcpu_id, guest_code); } =20 void virt_arch_pgd_alloc(struct kvm_vm *vm); diff --git a/tools/testing/selftests/kvm/lib/aarch64/processor.c b/tools/te= sting/selftests/kvm/lib/aarch64/processor.c index 653e740c46b1..089e6de2160c 100644 --- a/tools/testing/selftests/kvm/lib/aarch64/processor.c +++ b/tools/testing/selftests/kvm/lib/aarch64/processor.c @@ -314,25 +314,29 @@ void vcpu_arch_dump(FILE *stream, struct kvm_vm *vm, = uint32_t vcpuid, uint8_t in indent, "", pstate, pc); } =20 -void aarch64_vcpu_add_default(struct kvm_vm *vm, uint32_t vcpuid, - struct kvm_vcpu_init *init, void *guest_code) +struct kvm_vcpu *aarch64_vcpu_add_default(struct kvm_vm *vm, uint32_t vcpu= _id, + struct kvm_vcpu_init *init, + void *guest_code) { size_t stack_size =3D vm->page_size =3D=3D 4096 ? DEFAULT_STACK_PGS * vm->page_size : vm->page_size; uint64_t stack_vaddr =3D vm_vaddr_alloc(vm, stack_size, DEFAULT_ARM64_GUEST_STACK_VADDR_MIN); + struct kvm_vcpu *vcpu =3D vm_vcpu_add(vm, vcpu_id); =20 - vm_vcpu_add(vm, vcpuid); - aarch64_vcpu_setup(vm, vcpuid, init); + aarch64_vcpu_setup(vm, vcpu_id, init); =20 - set_reg(vm, vcpuid, ARM64_CORE_REG(sp_el1), stack_vaddr + stack_size); - set_reg(vm, vcpuid, ARM64_CORE_REG(regs.pc), (uint64_t)guest_code); + set_reg(vm, vcpu_id, ARM64_CORE_REG(sp_el1), stack_vaddr + stack_size); + set_reg(vm, vcpu_id, ARM64_CORE_REG(regs.pc), (uint64_t)guest_code); + + return vcpu; } =20 -void vm_arch_vcpu_add(struct kvm_vm *vm, uint32_t vcpuid, void *guest_code) +struct kvm_vcpu *vm_arch_vcpu_add(struct kvm_vm *vm, uint32_t vcpu_id, + void *guest_code) { - aarch64_vcpu_add_default(vm, vcpuid, NULL, guest_code); + return aarch64_vcpu_add_default(vm, vcpu_id, NULL, guest_code); } =20 void vcpu_args_set(struct kvm_vm *vm, uint32_t vcpuid, unsigned int num, .= ..) diff --git a/tools/testing/selftests/kvm/lib/riscv/processor.c b/tools/test= ing/selftests/kvm/lib/riscv/processor.c index e43651ad7729..71bd7975d65e 100644 --- a/tools/testing/selftests/kvm/lib/riscv/processor.c +++ b/tools/testing/selftests/kvm/lib/riscv/processor.c @@ -273,7 +273,8 @@ static void __aligned(16) guest_hang(void) ; } =20 -void vm_arch_vcpu_add(struct kvm_vm *vm, uint32_t vcpuid, void *guest_code) +struct kvm_vcpu *vm_arch_vcpu_add(struct kvm_vm *vm, uint32_t vcpu_id, + void *guest_code) { int r; size_t stack_size =3D vm->page_size =3D=3D 4096 ? @@ -283,9 +284,10 @@ void vm_arch_vcpu_add(struct kvm_vm *vm, uint32_t vcpu= id, void *guest_code) DEFAULT_RISCV_GUEST_STACK_VADDR_MIN); unsigned long current_gp =3D 0; struct kvm_mp_state mps; + struct kvm_vcpu *vcpu; =20 - vm_vcpu_add(vm, vcpuid); - riscv_vcpu_mmu_setup(vm, vcpuid); + vcpu =3D vm_vcpu_add(vm, vcpu_id); + riscv_vcpu_mmu_setup(vm, vcpu_id); =20 /* * With SBI HSM support in KVM RISC-V, all secondary VCPUs are @@ -293,23 +295,25 @@ void vm_arch_vcpu_add(struct kvm_vm *vm, uint32_t vcp= uid, void *guest_code) * are powered-on using KVM_SET_MP_STATE ioctl(). */ mps.mp_state =3D KVM_MP_STATE_RUNNABLE; - r =3D __vcpu_ioctl(vm, vcpuid, KVM_SET_MP_STATE, &mps); + r =3D __vcpu_ioctl(vm, vcpu_id, KVM_SET_MP_STATE, &mps); TEST_ASSERT(!r, "IOCTL KVM_SET_MP_STATE failed (error %d)", r); =20 /* Setup global pointer of guest to be same as the host */ asm volatile ( "add %0, gp, zero" : "=3Dr" (current_gp) : : "memory"); - set_reg(vm, vcpuid, RISCV_CORE_REG(regs.gp), current_gp); + set_reg(vm, vcpu_id, RISCV_CORE_REG(regs.gp), current_gp); =20 /* Setup stack pointer and program counter of guest */ - set_reg(vm, vcpuid, RISCV_CORE_REG(regs.sp), + set_reg(vm, vcpu_id, RISCV_CORE_REG(regs.sp), stack_vaddr + stack_size); - set_reg(vm, vcpuid, RISCV_CORE_REG(regs.pc), + set_reg(vm, vcpu_id, RISCV_CORE_REG(regs.pc), (unsigned long)guest_code); =20 /* Setup default exception vector of guest */ - set_reg(vm, vcpuid, RISCV_CSR_REG(stvec), + set_reg(vm, vcpu_id, RISCV_CSR_REG(stvec), (unsigned long)guest_hang); + + return vcpu; } =20 void vcpu_args_set(struct kvm_vm *vm, uint32_t vcpuid, unsigned int num, .= ..) diff --git a/tools/testing/selftests/kvm/lib/s390x/processor.c b/tools/test= ing/selftests/kvm/lib/s390x/processor.c index c2fe56a3fb74..cf759844b226 100644 --- a/tools/testing/selftests/kvm/lib/s390x/processor.c +++ b/tools/testing/selftests/kvm/lib/s390x/processor.c @@ -154,12 +154,14 @@ void virt_arch_dump(FILE *stream, struct kvm_vm *vm, = uint8_t indent) virt_dump_region(stream, vm, indent, vm->pgd); } =20 -void vm_arch_vcpu_add(struct kvm_vm *vm, uint32_t vcpuid, void *guest_code) +struct kvm_vcpu *vm_arch_vcpu_add(struct kvm_vm *vm, uint32_t vcpu_id, + void *guest_code) { size_t stack_size =3D DEFAULT_STACK_PGS * getpagesize(); uint64_t stack_vaddr; struct kvm_regs regs; struct kvm_sregs sregs; + struct kvm_vcpu *vcpu; struct kvm_run *run; =20 TEST_ASSERT(vm->page_size =3D=3D 4096, "Unsupported page size: 0x%x", @@ -168,21 +170,23 @@ void vm_arch_vcpu_add(struct kvm_vm *vm, uint32_t vcp= uid, void *guest_code) stack_vaddr =3D vm_vaddr_alloc(vm, stack_size, DEFAULT_GUEST_STACK_VADDR_MIN); =20 - vm_vcpu_add(vm, vcpuid); + vcpu =3D vm_vcpu_add(vm, vcpu_id); =20 /* Setup guest registers */ - vcpu_regs_get(vm, vcpuid, ®s); + vcpu_regs_get(vm, vcpu_id, ®s); regs.gprs[15] =3D stack_vaddr + (DEFAULT_STACK_PGS * getpagesize()) - 160; - vcpu_regs_set(vm, vcpuid, ®s); + vcpu_regs_set(vm, vcpu_id, ®s); =20 - vcpu_sregs_get(vm, vcpuid, &sregs); + vcpu_sregs_get(vm, vcpu_id, &sregs); sregs.crs[0] |=3D 0x00040000; /* Enable floating point regs */ sregs.crs[1] =3D vm->pgd | 0xf; /* Primary region table */ - vcpu_sregs_set(vm, vcpuid, &sregs); + vcpu_sregs_set(vm, vcpu_id, &sregs); =20 - run =3D vcpu_state(vm, vcpuid); + run =3D vcpu_state(vm, vcpu_id); run->psw_mask =3D 0x0400000180000000ULL; /* DAT enabled + 64 bit mode */ run->psw_addr =3D (uintptr_t)guest_code; + + return vcpu; } =20 void vcpu_args_set(struct kvm_vm *vm, uint32_t vcpuid, unsigned int num, .= ..) diff --git a/tools/testing/selftests/kvm/lib/x86_64/processor.c b/tools/tes= ting/selftests/kvm/lib/x86_64/processor.c index c5335345323c..1d0c6d49b8a9 100644 --- a/tools/testing/selftests/kvm/lib/x86_64/processor.c +++ b/tools/testing/selftests/kvm/lib/x86_64/processor.c @@ -633,29 +633,33 @@ void vm_xsave_req_perm(int bit) bitmask); } =20 -void vm_arch_vcpu_add(struct kvm_vm *vm, uint32_t vcpuid, void *guest_code) +struct kvm_vcpu *vm_arch_vcpu_add(struct kvm_vm *vm, uint32_t vcpu_id, + void *guest_code) { struct kvm_mp_state mp_state; struct kvm_regs regs; vm_vaddr_t stack_vaddr; + struct kvm_vcpu *vcpu; + stack_vaddr =3D vm_vaddr_alloc(vm, DEFAULT_STACK_PGS * getpagesize(), DEFAULT_GUEST_STACK_VADDR_MIN); =20 - /* Create VCPU */ - vm_vcpu_add(vm, vcpuid); - vcpu_set_cpuid(vm, vcpuid, kvm_get_supported_cpuid()); - vcpu_setup(vm, vcpuid); + vcpu =3D vm_vcpu_add(vm, vcpu_id); + vcpu_set_cpuid(vm, vcpu_id, kvm_get_supported_cpuid()); + vcpu_setup(vm, vcpu_id); =20 /* Setup guest general purpose registers */ - vcpu_regs_get(vm, vcpuid, ®s); + vcpu_regs_get(vm, vcpu_id, ®s); regs.rflags =3D regs.rflags | 0x2; regs.rsp =3D stack_vaddr + (DEFAULT_STACK_PGS * getpagesize()); regs.rip =3D (unsigned long) guest_code; - vcpu_regs_set(vm, vcpuid, ®s); + vcpu_regs_set(vm, vcpu_id, ®s); =20 /* Setup the MP state */ mp_state.mp_state =3D 0; - vcpu_set_mp_state(vm, vcpuid, &mp_state); + vcpu_set_mp_state(vm, vcpu_id, &mp_state); + + return vcpu; } =20 /* diff --git a/tools/testing/selftests/kvm/x86_64/pmu_event_filter_test.c b/t= ools/testing/selftests/kvm/x86_64/pmu_event_filter_test.c index 535af2d2ad59..38f109ab0fee 100644 --- a/tools/testing/selftests/kvm/x86_64/pmu_event_filter_test.c +++ b/tools/testing/selftests/kvm/x86_64/pmu_event_filter_test.c @@ -346,10 +346,8 @@ static void test_pmu_config_disable(void (*guest_code)= (void)) cap.args[0] =3D KVM_PMU_CAP_DISABLE; vm_enable_cap(vm, &cap); =20 - vm_vcpu_add_default(vm, 0, guest_code); + vcpu =3D vm_vcpu_add_default(vm, 0, guest_code); vm_init_descriptor_tables(vm); - - vcpu =3D vcpu_get(vm, 0); vcpu_init_descriptor_tables(vm, vcpu->id); =20 TEST_ASSERT(!sanity_check_pmu(vcpu), diff --git a/tools/testing/selftests/kvm/x86_64/tsc_scaling_sync.c b/tools/= testing/selftests/kvm/x86_64/tsc_scaling_sync.c index b7cd5c47fc53..ea70ca2e63c3 100644 --- a/tools/testing/selftests/kvm/x86_64/tsc_scaling_sync.c +++ b/tools/testing/selftests/kvm/x86_64/tsc_scaling_sync.c @@ -54,8 +54,7 @@ static void *run_vcpu(void *_cpu_nr) /* The kernel is fine, but vm_vcpu_add_default() needs locking */ pthread_spin_lock(&create_lock); =20 - vm_vcpu_add_default(vm, vcpu_id, guest_code); - vcpu =3D vcpu_get(vm, vcpu_id); + vcpu =3D vm_vcpu_add_default(vm, vcpu_id, guest_code); =20 if (!first_cpu_done) { first_cpu_done =3D true; --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 1ED2DC4332F for ; Wed, 4 May 2022 23:07:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1383248AbiEDXHC (ORCPT ); Wed, 4 May 2022 19:07:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45414 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379766AbiEDW6p (ORCPT ); Wed, 4 May 2022 18:58:45 -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 48E1854180 for ; Wed, 4 May 2022 15:52:26 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id q91-20020a17090a756400b001d951f4846cso3558401pjk.8 for ; Wed, 04 May 2022 15:52:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=0xFMOMQsVvOBesngCx/6CLG+xq8G8QXyB0W3zA5q7eA=; b=mlqOGb9DgrSSQB/kxNL6GLlyzuwwMElDA4WVN+IOeKx2TX3CqBK8yVKjpgv7t2DVu8 sIgu4Z1krmN7iu12r3shFd9uwiPIan07C9RYxtP7XTKpe4bpHmXI0E6rWoKMQYjrY9SZ 8KLXRASpKYq+62uqUwX4jpebv/mVzFADhgM6g842+ZTkwwfTKviWW0Yci1LrqqzyKpzO tcmpFTPQsq1FQVyUMDddd4wdZDjvHFOg/cRWGrnysW2U2xJYeS0ggHh5ix1tx5mY2bQd YdjBgceIn/4/zdXF8XOH4zpTrigxLfnEF/zbscA2g8Ry7pTGs/I5M8ShumDauq4y7it9 /0rw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=0xFMOMQsVvOBesngCx/6CLG+xq8G8QXyB0W3zA5q7eA=; b=8PG8AGE0Cd4F3r6rCBK28dU/4sE7mMCWIAUXy78eH5OdbK1ARYZQc6SkxKDbT/ozTU sKzouOZztbJa23+AnXDpyuzAEKFkS2qbOmwbaYvO3TH4qpC+JG5U/DPA6K32OvCn4mmN goIEGoqOw8lq2irU6SQ7q6W2WBpLQkJDdBdVGvDg7gvs23XiY0vk37iAinKzY8+4MZjr 86/swuoQJ8duYkQhnbYEA85vD76Bs7XVroTHTwRT92TkSM3OSMYCVad+kftv6nhq/sT/ itFA4hfkpHSLCALgYm4J0e08hxtTbg+mjKbRZ9FT2+Bjt+lp3x2/8PyKXDP1TiepS7yv xt0A== X-Gm-Message-State: AOAM533Mpcsz3j1mTUJj1sVmSl1/GcjF3TlJuizPzDQw1+OOIvStZtGe t5U8nkJZIe4P7YOlbY38DK5nQGeFFbs= X-Google-Smtp-Source: ABdhPJx3TDrUudnxA/0jU8lIWk+8qMcGznqfiPZBhwoQGFOefjeDW37HKeOL9VnFnX/DD5LqSoZIji394gk= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:c504:b0:1bf:6d9f:65a6 with SMTP id k4-20020a17090ac50400b001bf6d9f65a6mr2194646pjt.204.1651704732128; Wed, 04 May 2022 15:52:12 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:40 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-95-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 094/128] KVM: selftests: Rename vm_vcpu_add* helpers to better show relationships From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Rename vm_vcpu_add() to __vm_vcpu_add(), and vm_vcpu_add_default() to vm_vcpu_add() to show the relationship between the newly minted vm_vcpu_add() and __vm_vcpu_add(). Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/aarch64/get-reg-list.c | 2 +- tools/testing/selftests/kvm/aarch64/psci_cpu_on_test.c | 4 ++-- .../testing/selftests/kvm/aarch64/vcpu_width_config.c | 8 ++++---- tools/testing/selftests/kvm/aarch64/vgic_init.c | 10 +++++----- tools/testing/selftests/kvm/dirty_log_test.c | 2 +- tools/testing/selftests/kvm/hardware_disable_test.c | 2 +- .../testing/selftests/kvm/include/aarch64/processor.h | 5 ++--- tools/testing/selftests/kvm/include/kvm_util_base.h | 7 +++---- tools/testing/selftests/kvm/kvm_binary_stats_test.c | 2 +- tools/testing/selftests/kvm/kvm_create_max_vcpus.c | 2 +- tools/testing/selftests/kvm/lib/aarch64/processor.c | 9 ++++----- tools/testing/selftests/kvm/lib/kvm_util.c | 6 +++--- tools/testing/selftests/kvm/lib/riscv/processor.c | 2 +- tools/testing/selftests/kvm/lib/s390x/processor.c | 2 +- tools/testing/selftests/kvm/lib/x86_64/processor.c | 2 +- tools/testing/selftests/kvm/set_memory_region_test.c | 2 +- tools/testing/selftests/kvm/steal_time.c | 2 +- .../selftests/kvm/x86_64/pmu_event_filter_test.c | 2 +- tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c | 4 ++-- tools/testing/selftests/kvm/x86_64/set_sregs_test.c | 2 +- tools/testing/selftests/kvm/x86_64/sev_migrate_tests.c | 8 ++++---- tools/testing/selftests/kvm/x86_64/tsc_scaling_sync.c | 4 ++-- tools/testing/selftests/kvm/x86_64/xapic_ipi_test.c | 2 +- 23 files changed, 44 insertions(+), 47 deletions(-) diff --git a/tools/testing/selftests/kvm/aarch64/get-reg-list.c b/tools/tes= ting/selftests/kvm/aarch64/get-reg-list.c index d647973aeb30..8283a62e16e4 100644 --- a/tools/testing/selftests/kvm/aarch64/get-reg-list.c +++ b/tools/testing/selftests/kvm/aarch64/get-reg-list.c @@ -413,7 +413,7 @@ static void run_test(struct vcpu_config *c) =20 vm =3D vm_create_barebones(); prepare_vcpu_init(c, &init); - aarch64_vcpu_add_default(vm, 0, &init, NULL); + aarch64_vcpu_add(vm, 0, &init, NULL); finalize_vcpu(vm, 0, c); =20 reg_list =3D vcpu_get_reg_list(vm, 0); diff --git a/tools/testing/selftests/kvm/aarch64/psci_cpu_on_test.c b/tools= /testing/selftests/kvm/aarch64/psci_cpu_on_test.c index d60c1ddf8870..ffea4f3634b3 100644 --- a/tools/testing/selftests/kvm/aarch64/psci_cpu_on_test.c +++ b/tools/testing/selftests/kvm/aarch64/psci_cpu_on_test.c @@ -82,13 +82,13 @@ int main(void) vm_ioctl(vm, KVM_ARM_PREFERRED_TARGET, &init); init.features[0] |=3D (1 << KVM_ARM_VCPU_PSCI_0_2); =20 - aarch64_vcpu_add_default(vm, VCPU_ID_SOURCE, &init, guest_main); + aarch64_vcpu_add(vm, VCPU_ID_SOURCE, &init, guest_main); =20 /* * make sure the target is already off when executing the test. */ init.features[0] |=3D (1 << KVM_ARM_VCPU_POWER_OFF); - aarch64_vcpu_add_default(vm, VCPU_ID_TARGET, &init, guest_main); + aarch64_vcpu_add(vm, VCPU_ID_TARGET, &init, guest_main); =20 get_reg(vm, VCPU_ID_TARGET, KVM_ARM64_SYS_REG(SYS_MPIDR_EL1), &target_mpi= dr); vcpu_args_set(vm, VCPU_ID_SOURCE, 1, target_mpidr & MPIDR_HWID_BITMASK); diff --git a/tools/testing/selftests/kvm/aarch64/vcpu_width_config.c b/tool= s/testing/selftests/kvm/aarch64/vcpu_width_config.c index 1757f44dd3e2..1dd856a58f5d 100644 --- a/tools/testing/selftests/kvm/aarch64/vcpu_width_config.c +++ b/tools/testing/selftests/kvm/aarch64/vcpu_width_config.c @@ -26,12 +26,12 @@ static int add_init_2vcpus(struct kvm_vcpu_init *init1, =20 vm =3D vm_create_barebones(); =20 - vm_vcpu_add(vm, 0); + __vm_vcpu_add(vm, 0); ret =3D __vcpu_ioctl(vm, 0, KVM_ARM_VCPU_INIT, init1); if (ret) goto free_exit; =20 - vm_vcpu_add(vm, 1); + __vm_vcpu_add(vm, 1); ret =3D __vcpu_ioctl(vm, 1, KVM_ARM_VCPU_INIT, init2); =20 free_exit: @@ -51,8 +51,8 @@ static int add_2vcpus_init_2vcpus(struct kvm_vcpu_init *i= nit1, =20 vm =3D vm_create_barebones(); =20 - vm_vcpu_add(vm, 0); - vm_vcpu_add(vm, 1); + __vm_vcpu_add(vm, 0); + __vm_vcpu_add(vm, 1); =20 ret =3D __vcpu_ioctl(vm, 0, KVM_ARM_VCPU_INIT, init1); if (ret) diff --git a/tools/testing/selftests/kvm/aarch64/vgic_init.c b/tools/testin= g/selftests/kvm/aarch64/vgic_init.c index 0329aa04da31..32dac03f5600 100644 --- a/tools/testing/selftests/kvm/aarch64/vgic_init.c +++ b/tools/testing/selftests/kvm/aarch64/vgic_init.c @@ -314,7 +314,7 @@ static void test_vgic_then_vcpus(uint32_t gic_dev_type) =20 /* Add the rest of the VCPUs */ for (i =3D 1; i < NR_VCPUS; ++i) - vm_vcpu_add_default(v.vm, i, guest_code); + vm_vcpu_add(v.vm, i, guest_code); =20 ret =3D run_vcpu(v.vm, 3); TEST_ASSERT(ret =3D=3D -EINVAL, "dist/rdist overlap detected on 1st vcpu = run"); @@ -402,17 +402,17 @@ static void test_v3_typer_accesses(void) =20 v.gic_fd =3D kvm_create_device(v.vm, KVM_DEV_TYPE_ARM_VGIC_V3); =20 - vm_vcpu_add_default(v.vm, 3, guest_code); + vm_vcpu_add(v.vm, 3, guest_code); =20 ret =3D v3_redist_reg_get(v.gic_fd, 1, GICR_TYPER, &val); TEST_ASSERT(ret && errno =3D=3D EINVAL, "attempting to read GICR_TYPER of= non created vcpu"); =20 - vm_vcpu_add_default(v.vm, 1, guest_code); + vm_vcpu_add(v.vm, 1, guest_code); =20 ret =3D v3_redist_reg_get(v.gic_fd, 1, GICR_TYPER, &val); TEST_ASSERT(ret && errno =3D=3D EBUSY, "read GICR_TYPER before GIC initia= lized"); =20 - vm_vcpu_add_default(v.vm, 2, guest_code); + vm_vcpu_add(v.vm, 2, guest_code); =20 kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL, KVM_DEV_ARM_VGIC_CTRL_INIT, NULL); @@ -576,7 +576,7 @@ static void test_v3_redist_ipa_range_check_at_vcpu_run(= void) =20 /* Add the rest of the VCPUs */ for (i =3D 1; i < NR_VCPUS; ++i) - vm_vcpu_add_default(v.vm, i, guest_code); + vm_vcpu_add(v.vm, i, guest_code); =20 kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL, KVM_DEV_ARM_VGIC_CTRL_INIT, NULL); diff --git a/tools/testing/selftests/kvm/dirty_log_test.c b/tools/testing/s= elftests/kvm/dirty_log_test.c index ff3bd4c941a4..b61af23ba434 100644 --- a/tools/testing/selftests/kvm/dirty_log_test.c +++ b/tools/testing/selftests/kvm/dirty_log_test.c @@ -679,7 +679,7 @@ static struct kvm_vm *create_vm(enum vm_guest_mode mode= , uint32_t vcpuid, vm =3D __vm_create(mode, DEFAULT_GUEST_PHY_PAGES + extra_pg_pages); =20 log_mode_create_vm_done(vm); - vm_vcpu_add_default(vm, vcpuid, guest_code); + vm_vcpu_add(vm, vcpuid, guest_code); return vm; } =20 diff --git a/tools/testing/selftests/kvm/hardware_disable_test.c b/tools/te= sting/selftests/kvm/hardware_disable_test.c index ccbbf8783e2d..31f6d408419f 100644 --- a/tools/testing/selftests/kvm/hardware_disable_test.c +++ b/tools/testing/selftests/kvm/hardware_disable_test.c @@ -108,7 +108,7 @@ static void run_test(uint32_t run) =20 pr_debug("%s: [%d] start vcpus\n", __func__, run); for (i =3D 0; i < VCPU_NUM; ++i) { - vm_vcpu_add_default(vm, i, guest_code); + vm_vcpu_add(vm, i, guest_code); payloads[i].vm =3D vm; payloads[i].index =3D i; =20 diff --git a/tools/testing/selftests/kvm/include/aarch64/processor.h b/tool= s/testing/selftests/kvm/include/aarch64/processor.h index 5999e7ae7b29..f64607c136df 100644 --- a/tools/testing/selftests/kvm/include/aarch64/processor.h +++ b/tools/testing/selftests/kvm/include/aarch64/processor.h @@ -64,9 +64,8 @@ static inline void set_reg(struct kvm_vm *vm, uint32_t vc= puid, uint64_t id, uint } =20 void aarch64_vcpu_setup(struct kvm_vm *vm, uint32_t vcpuid, struct kvm_vcp= u_init *init); -struct kvm_vcpu *aarch64_vcpu_add_default(struct kvm_vm *vm, uint32_t vcpu= _id, - struct kvm_vcpu_init *init, - void *guest_code); +struct kvm_vcpu *aarch64_vcpu_add(struct kvm_vm *vm, uint32_t vcpu_id, + struct kvm_vcpu_init *init, void *guest_code); =20 struct ex_regs { u64 regs[31]; diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index de36e7e91796..02df9a794530 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -280,7 +280,7 @@ void vm_userspace_mem_region_add(struct kvm_vm *vm, void vm_mem_region_set_flags(struct kvm_vm *vm, uint32_t slot, uint32_t fl= ags); 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 vcpuid); +struct kvm_vcpu *__vm_vcpu_add(struct kvm_vm *vm, uint32_t vcpuid); vm_vaddr_t vm_vaddr_alloc(struct kvm_vm *vm, size_t sz, vm_vaddr_t vaddr_m= in); 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); @@ -658,9 +658,8 @@ static inline void vcpu_dump(FILE *stream, struct kvm_v= m *vm, uint32_t vcpuid, struct kvm_vcpu *vm_arch_vcpu_add(struct kvm_vm *vm, uint32_t vcpu_id, void *guest_code); =20 -static inline struct kvm_vcpu *vm_vcpu_add_default(struct kvm_vm *vm, - uint32_t vcpu_id, - void *guest_code) +static inline struct kvm_vcpu *vm_vcpu_add(struct kvm_vm *vm, uint32_t vcp= u_id, + void *guest_code) { return vm_arch_vcpu_add(vm, vcpu_id, guest_code); } diff --git a/tools/testing/selftests/kvm/kvm_binary_stats_test.c b/tools/te= sting/selftests/kvm/kvm_binary_stats_test.c index edeb08239036..407e9ea8e6f3 100644 --- a/tools/testing/selftests/kvm/kvm_binary_stats_test.c +++ b/tools/testing/selftests/kvm/kvm_binary_stats_test.c @@ -223,7 +223,7 @@ int main(int argc, char *argv[]) for (i =3D 0; i < max_vm; ++i) { vms[i] =3D vm_create_barebones(); for (j =3D 0; j < max_vcpu; ++j) - vm_vcpu_add(vms[i], j); + __vm_vcpu_add(vms[i], j); } =20 /* Check stats read for every VM and VCPU */ diff --git a/tools/testing/selftests/kvm/kvm_create_max_vcpus.c b/tools/tes= ting/selftests/kvm/kvm_create_max_vcpus.c index acc92703f563..3ae0237e96b2 100644 --- a/tools/testing/selftests/kvm/kvm_create_max_vcpus.c +++ b/tools/testing/selftests/kvm/kvm_create_max_vcpus.c @@ -32,7 +32,7 @@ void test_vcpu_creation(int first_vcpu_id, int num_vcpus) =20 for (i =3D first_vcpu_id; i < first_vcpu_id + num_vcpus; i++) /* This asserts that the vCPU was created. */ - vm_vcpu_add(vm, i); + __vm_vcpu_add(vm, i); =20 kvm_vm_free(vm); } diff --git a/tools/testing/selftests/kvm/lib/aarch64/processor.c b/tools/te= sting/selftests/kvm/lib/aarch64/processor.c index 089e6de2160c..35bec85f43b0 100644 --- a/tools/testing/selftests/kvm/lib/aarch64/processor.c +++ b/tools/testing/selftests/kvm/lib/aarch64/processor.c @@ -314,16 +314,15 @@ void vcpu_arch_dump(FILE *stream, struct kvm_vm *vm, = uint32_t vcpuid, uint8_t in indent, "", pstate, pc); } =20 -struct kvm_vcpu *aarch64_vcpu_add_default(struct kvm_vm *vm, uint32_t vcpu= _id, - struct kvm_vcpu_init *init, - void *guest_code) +struct kvm_vcpu *aarch64_vcpu_add(struct kvm_vm *vm, uint32_t vcpu_id, + struct kvm_vcpu_init *init, void *guest_code) { size_t stack_size =3D vm->page_size =3D=3D 4096 ? DEFAULT_STACK_PGS * vm->page_size : vm->page_size; uint64_t stack_vaddr =3D vm_vaddr_alloc(vm, stack_size, DEFAULT_ARM64_GUEST_STACK_VADDR_MIN); - struct kvm_vcpu *vcpu =3D vm_vcpu_add(vm, vcpu_id); + struct kvm_vcpu *vcpu =3D __vm_vcpu_add(vm, vcpu_id); =20 aarch64_vcpu_setup(vm, vcpu_id, init); =20 @@ -336,7 +335,7 @@ struct kvm_vcpu *aarch64_vcpu_add_default(struct kvm_vm= *vm, uint32_t vcpu_id, struct kvm_vcpu *vm_arch_vcpu_add(struct kvm_vm *vm, uint32_t vcpu_id, void *guest_code) { - return aarch64_vcpu_add_default(vm, vcpu_id, NULL, guest_code); + return aarch64_vcpu_add(vm, vcpu_id, NULL, guest_code); } =20 void vcpu_args_set(struct kvm_vm *vm, uint32_t vcpuid, unsigned int num, .= ..) diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index 89612535df22..bd9eb23edf3b 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -332,7 +332,7 @@ struct kvm_vm *vm_create_with_vcpus(enum vm_guest_mode = mode, uint32_t nr_vcpus, for (i =3D 0; i < nr_vcpus; ++i) { uint32_t vcpuid =3D vcpuids ? vcpuids[i] : i; =20 - vm_vcpu_add_default(vm, vcpuid, guest_code); + vm_vcpu_add(vm, vcpuid, guest_code); } =20 return vm; @@ -401,7 +401,7 @@ struct kvm_vcpu *vm_recreate_with_one_vcpu(struct kvm_v= m *vm) { kvm_vm_restart(vm); =20 - return vm_vcpu_add(vm, 0); + return __vm_vcpu_add(vm, 0); } =20 /* @@ -1069,7 +1069,7 @@ static int vcpu_mmap_sz(void) * Adds a virtual CPU to the VM specified by vm with the ID given by vcpu_= id. * No additional vCPU setup is done. Returns the vCPU. */ -struct kvm_vcpu *vm_vcpu_add(struct kvm_vm *vm, uint32_t vcpu_id) +struct kvm_vcpu *__vm_vcpu_add(struct kvm_vm *vm, uint32_t vcpu_id) { struct kvm_vcpu *vcpu; =20 diff --git a/tools/testing/selftests/kvm/lib/riscv/processor.c b/tools/test= ing/selftests/kvm/lib/riscv/processor.c index 71bd7975d65e..d0e52ec87169 100644 --- a/tools/testing/selftests/kvm/lib/riscv/processor.c +++ b/tools/testing/selftests/kvm/lib/riscv/processor.c @@ -286,7 +286,7 @@ struct kvm_vcpu *vm_arch_vcpu_add(struct kvm_vm *vm, ui= nt32_t vcpu_id, struct kvm_mp_state mps; struct kvm_vcpu *vcpu; =20 - vcpu =3D vm_vcpu_add(vm, vcpu_id); + vcpu =3D __vm_vcpu_add(vm, vcpu_id); riscv_vcpu_mmu_setup(vm, vcpu_id); =20 /* diff --git a/tools/testing/selftests/kvm/lib/s390x/processor.c b/tools/test= ing/selftests/kvm/lib/s390x/processor.c index cf759844b226..f8170e97eeb7 100644 --- a/tools/testing/selftests/kvm/lib/s390x/processor.c +++ b/tools/testing/selftests/kvm/lib/s390x/processor.c @@ -170,7 +170,7 @@ struct kvm_vcpu *vm_arch_vcpu_add(struct kvm_vm *vm, ui= nt32_t vcpu_id, stack_vaddr =3D vm_vaddr_alloc(vm, stack_size, DEFAULT_GUEST_STACK_VADDR_MIN); =20 - vcpu =3D vm_vcpu_add(vm, vcpu_id); + vcpu =3D __vm_vcpu_add(vm, vcpu_id); =20 /* Setup guest registers */ vcpu_regs_get(vm, vcpu_id, ®s); diff --git a/tools/testing/selftests/kvm/lib/x86_64/processor.c b/tools/tes= ting/selftests/kvm/lib/x86_64/processor.c index 1d0c6d49b8a9..73738083456b 100644 --- a/tools/testing/selftests/kvm/lib/x86_64/processor.c +++ b/tools/testing/selftests/kvm/lib/x86_64/processor.c @@ -644,7 +644,7 @@ struct kvm_vcpu *vm_arch_vcpu_add(struct kvm_vm *vm, ui= nt32_t vcpu_id, stack_vaddr =3D vm_vaddr_alloc(vm, DEFAULT_STACK_PGS * getpagesize(), DEFAULT_GUEST_STACK_VADDR_MIN); =20 - vcpu =3D vm_vcpu_add(vm, vcpu_id); + vcpu =3D __vm_vcpu_add(vm, vcpu_id); vcpu_set_cpuid(vm, vcpu_id, kvm_get_supported_cpuid()); vcpu_setup(vm, vcpu_id); =20 diff --git a/tools/testing/selftests/kvm/set_memory_region_test.c b/tools/t= esting/selftests/kvm/set_memory_region_test.c index 1274bbb0e30b..d832fc12984e 100644 --- a/tools/testing/selftests/kvm/set_memory_region_test.c +++ b/tools/testing/selftests/kvm/set_memory_region_test.c @@ -315,7 +315,7 @@ static void test_zero_memory_regions(void) pr_info("Testing KVM_RUN with zero added memory regions\n"); =20 vm =3D vm_create_barebones(); - vcpu =3D vm_vcpu_add(vm, 0); + vcpu =3D __vm_vcpu_add(vm, 0); =20 vm_ioctl(vm, KVM_SET_NR_MMU_PAGES, (void *)64ul); vcpu_run(vm, vcpu->id); diff --git a/tools/testing/selftests/kvm/steal_time.c b/tools/testing/selft= ests/kvm/steal_time.c index 1d6a91a53eae..741892cec1ea 100644 --- a/tools/testing/selftests/kvm/steal_time.c +++ b/tools/testing/selftests/kvm/steal_time.c @@ -282,7 +282,7 @@ int main(int ac, char **av) =20 /* Add the rest of the VCPUs */ for (i =3D 1; i < NR_VCPUS; ++i) - vm_vcpu_add_default(vm, i, guest_code); + vm_vcpu_add(vm, i, guest_code); =20 steal_time_init(vm); =20 diff --git a/tools/testing/selftests/kvm/x86_64/pmu_event_filter_test.c b/t= ools/testing/selftests/kvm/x86_64/pmu_event_filter_test.c index 38f109ab0fee..e0eed19f669e 100644 --- a/tools/testing/selftests/kvm/x86_64/pmu_event_filter_test.c +++ b/tools/testing/selftests/kvm/x86_64/pmu_event_filter_test.c @@ -346,7 +346,7 @@ static void test_pmu_config_disable(void (*guest_code)(= void)) cap.args[0] =3D KVM_PMU_CAP_DISABLE; vm_enable_cap(vm, &cap); =20 - vcpu =3D vm_vcpu_add_default(vm, 0, guest_code); + vcpu =3D vm_vcpu_add(vm, 0, guest_code); vm_init_descriptor_tables(vm); vcpu_init_descriptor_tables(vm, vcpu->id); =20 diff --git a/tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c b/tools/t= esting/selftests/kvm/x86_64/set_boot_cpu_id.c index 9ba3cd4e7f20..e63709894030 100644 --- a/tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c +++ b/tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c @@ -92,9 +92,9 @@ static struct kvm_vm *create_vm(void) static void add_x86_vcpu(struct kvm_vm *vm, uint32_t vcpuid, bool bsp_code) { if (bsp_code) - vm_vcpu_add_default(vm, vcpuid, guest_bsp_vcpu); + vm_vcpu_add(vm, vcpuid, guest_bsp_vcpu); else - vm_vcpu_add_default(vm, vcpuid, guest_not_bsp_vcpu); + vm_vcpu_add(vm, vcpuid, guest_not_bsp_vcpu); } =20 static void run_vm_bsp(uint32_t bsp_vcpu) diff --git a/tools/testing/selftests/kvm/x86_64/set_sregs_test.c b/tools/te= sting/selftests/kvm/x86_64/set_sregs_test.c index 8a5c1f76287c..2e67df3a95ba 100644 --- a/tools/testing/selftests/kvm/x86_64/set_sregs_test.c +++ b/tools/testing/selftests/kvm/x86_64/set_sregs_test.c @@ -95,7 +95,7 @@ int main(int argc, char *argv[]) * the vCPU model, i.e. without doing KVM_SET_CPUID2. */ vm =3D vm_create_barebones(); - vcpu =3D vm_vcpu_add(vm, 0); + vcpu =3D __vm_vcpu_add(vm, 0); =20 vcpu_sregs_get(vm, vcpu->id, &sregs); =20 diff --git a/tools/testing/selftests/kvm/x86_64/sev_migrate_tests.c b/tools= /testing/selftests/kvm/x86_64/sev_migrate_tests.c index 8d4b5c2f699d..f8bbfc9694ae 100644 --- a/tools/testing/selftests/kvm/x86_64/sev_migrate_tests.c +++ b/tools/testing/selftests/kvm/x86_64/sev_migrate_tests.c @@ -56,7 +56,7 @@ static struct kvm_vm *sev_vm_create(bool es) vm =3D vm_create_barebones(); sev_ioctl(vm->fd, es ? KVM_SEV_ES_INIT : KVM_SEV_INIT, NULL); for (i =3D 0; i < NR_MIGRATE_TEST_VCPUS; ++i) - vm_vcpu_add(vm, i); + __vm_vcpu_add(vm, i); if (es) start.policy |=3D SEV_POLICY_ES; sev_ioctl(vm->fd, KVM_SEV_LAUNCH_START, &start); @@ -75,7 +75,7 @@ static struct kvm_vm *aux_vm_create(bool with_vcpus) return vm; =20 for (i =3D 0; i < NR_MIGRATE_TEST_VCPUS; ++i) - vm_vcpu_add(vm, i); + __vm_vcpu_add(vm, i); =20 return vm; } @@ -187,7 +187,7 @@ static void test_sev_migrate_parameters(void) sev_es_vm =3D sev_vm_create(/* es=3D */ true); sev_es_vm_no_vmsa =3D vm_create_barebones(); sev_ioctl(sev_es_vm_no_vmsa->fd, KVM_SEV_ES_INIT, NULL); - vm_vcpu_add(sev_es_vm_no_vmsa, 1); + __vm_vcpu_add(sev_es_vm_no_vmsa, 1); =20 ret =3D __sev_migrate_from(sev_vm->fd, sev_es_vm->fd); TEST_ASSERT( @@ -288,7 +288,7 @@ static void test_sev_mirror(bool es) =20 /* Check that we can complete creation of the mirror VM. */ for (i =3D 0; i < NR_MIGRATE_TEST_VCPUS; ++i) - vm_vcpu_add(dst_vm, i); + __vm_vcpu_add(dst_vm, i); =20 if (es) sev_ioctl(dst_vm->fd, KVM_SEV_LAUNCH_UPDATE_VMSA, NULL); diff --git a/tools/testing/selftests/kvm/x86_64/tsc_scaling_sync.c b/tools/= testing/selftests/kvm/x86_64/tsc_scaling_sync.c index ea70ca2e63c3..2411215e7ae8 100644 --- a/tools/testing/selftests/kvm/x86_64/tsc_scaling_sync.c +++ b/tools/testing/selftests/kvm/x86_64/tsc_scaling_sync.c @@ -51,10 +51,10 @@ static void *run_vcpu(void *_cpu_nr) static bool first_cpu_done; struct kvm_vcpu *vcpu; =20 - /* The kernel is fine, but vm_vcpu_add_default() needs locking */ + /* The kernel is fine, but vm_vcpu_add() needs locking */ pthread_spin_lock(&create_lock); =20 - vcpu =3D vm_vcpu_add_default(vm, vcpu_id, guest_code); + vcpu =3D vm_vcpu_add(vm, vcpu_id, guest_code); =20 if (!first_cpu_done) { first_cpu_done =3D true; diff --git a/tools/testing/selftests/kvm/x86_64/xapic_ipi_test.c b/tools/te= sting/selftests/kvm/x86_64/xapic_ipi_test.c index afbbc40df884..8b366652be31 100644 --- a/tools/testing/selftests/kvm/x86_64/xapic_ipi_test.c +++ b/tools/testing/selftests/kvm/x86_64/xapic_ipi_test.c @@ -425,7 +425,7 @@ int main(int argc, char *argv[]) =20 virt_pg_map(vm, APIC_DEFAULT_GPA, APIC_DEFAULT_GPA); =20 - vm_vcpu_add_default(vm, SENDER_VCPU_ID, sender_guest_code); + vm_vcpu_add(vm, SENDER_VCPU_ID, sender_guest_code); =20 test_data_page_vaddr =3D vm_vaddr_alloc_page(vm); data =3D --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 0A397C47084 for ; Wed, 4 May 2022 23:07:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1382310AbiEDXGP (ORCPT ); Wed, 4 May 2022 19:06:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45378 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234411AbiEDW6o (ORCPT ); Wed, 4 May 2022 18:58:44 -0400 Received: from mail-pj1-x1049.google.com (mail-pj1-x1049.google.com [IPv6:2607:f8b0:4864:20::1049]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2125A5419B for ; Wed, 4 May 2022 15:52:28 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id o16-20020a17090ab89000b001d84104fc2cso2394195pjr.1 for ; Wed, 04 May 2022 15:52:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=Q3LZylw1GFHh5g+1yFcOEapecvfs/1+h/jGLO2g2Azk=; b=P6k+WuZgZiqGqQyS6KNg4+zIY3shn3s9gIuIvQR+Rz3LwOSXRJu0fpcUl2XcNODqiq /McWyhT5GYGYUzFKTJVe8YueVAvOq62rUgj6OKqrEyKet0BoZn/uFVTPAqQ5MO9emsBc dk2yEWojkOVzJlb4Jr+Uz50CKJ3VrbdVS+oyHgO/UGkYbl+9sZiCz5hk6ULnKDjXTzes CZjFye1loxQvbUOUsf7yMVfgulBJNF3c3whRqiRMsBj+7aEmqo1DqTniNBQO7bxbeUKz TUMq3wVkfZ2TJgj0tB4Xl3ktQ0da3jzloU/6EMhj8SKT92Qd1FnEFKJcNzpq+W5aZaV/ VRgQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=Q3LZylw1GFHh5g+1yFcOEapecvfs/1+h/jGLO2g2Azk=; b=QQgGMH3Mj6dLhts5l5R4qu7xHyXhioBUKB0mScGdXPAItMqNyC2QmmF9vzzwytl/qv J9cZM9n3MG01IHfu6zexfAe9+oJRF2t+kfwutHllj9KoSzEjdDg6R5DlyZSr91LlMLT/ 0aY63FnTXkNUvKpaui8bM4XMDfKg9vL2MQ+PodInI7xPIv0Z17EFJSvJQJYm7/nH4+Xr uKLgm7QsuFCNqxxtUHNnnsbVYcZBuZTMyTfcD4SCrvG5FMBpTi7K+GTn5p8GyuXhaDpn qf6nAJ9myVoKSS29HJzhXlqLPWsy2Kg3+0AatBCRnVl5ZtFl2WdJDH7+tIst0vnERGYc 0tyg== X-Gm-Message-State: AOAM532f6rj5fF+xRZfjv29eCTPY6y3LkXXO27C7ZDcqCd9BSDDlSvOw ZTHonEXl4DwyFnvRxXznJY9hUcpTAVE= X-Google-Smtp-Source: ABdhPJyNhIPnlkWA3WaGOUmzmdKdWYqUNpJmsaz39GJG+yGEIV29hf1pJrfpK03vGbcA2mUSrIr6k+rEvR0= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:c986:b0:1d9:56e7:4e83 with SMTP id w6-20020a17090ac98600b001d956e74e83mr140187pjt.1.1651704733874; Wed, 04 May 2022 15:52:13 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:41 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-96-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 095/128] KVM: selftests: Convert set_boot_cpu_id away from global VCPU_IDs From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Rework set_boot_cpu_id to pass around 'struct kvm_vcpu' objects instead of relying on global VCPU_IDs. The test is still ugly, but that's unavoidable since the point of the test is to verify that KVM correctly assigns VCPU_ID=3D=3D0 to be the BSP by default. This is literally one of two KVM selftests that legitimately needs to care about the exact vCPU IDs of the vCPUs it creates. Signed-off-by: Sean Christopherson --- .../selftests/kvm/x86_64/set_boot_cpu_id.c | 86 ++++++++----------- 1 file changed, 36 insertions(+), 50 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c b/tools/t= esting/selftests/kvm/x86_64/set_boot_cpu_id.c index e63709894030..b11f12888fad 100644 --- a/tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c +++ b/tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c @@ -16,10 +16,6 @@ #include "processor.h" #include "apic.h" =20 -#define N_VCPU 2 -#define VCPU_ID0 0 -#define VCPU_ID1 1 - static void guest_bsp_vcpu(void *arg) { GUEST_SYNC(1); @@ -38,31 +34,30 @@ static void guest_not_bsp_vcpu(void *arg) GUEST_DONE(); } =20 -static void test_set_boot_busy(struct kvm_vm *vm) +static void test_set_bsp_busy(struct kvm_vcpu *vcpu, const char *msg) { - int res; + int r =3D __vm_ioctl(vcpu->vm, KVM_SET_BOOT_CPU_ID, + (void *)(unsigned long)vcpu->id); =20 - res =3D __vm_ioctl(vm, KVM_SET_BOOT_CPU_ID, (void *) VCPU_ID0); - TEST_ASSERT(res =3D=3D -1 && errno =3D=3D EBUSY, - "KVM_SET_BOOT_CPU_ID set while running vm"); + TEST_ASSERT(r =3D=3D -1 && errno =3D=3D EBUSY, "KVM_SET_BOOT_CPU_ID set %= s", msg); } =20 -static void run_vcpu(struct kvm_vm *vm, uint32_t vcpuid) +static void run_vcpu(struct kvm_vcpu *vcpu) { struct ucall uc; int stage; =20 for (stage =3D 0; stage < 2; stage++) { =20 - vcpu_run(vm, vcpuid); + vcpu_run(vcpu->vm, vcpu->id); =20 - switch (get_ucall(vm, vcpuid, &uc)) { + switch (get_ucall(vcpu->vm, vcpu->id, &uc)) { case UCALL_SYNC: TEST_ASSERT(!strcmp((const char *)uc.args[0], "hello") && uc.args[1] =3D=3D stage + 1, "Stage %d: Unexpected register values vmexit, got %lx", stage + 1, (ulong)uc.args[1]); - test_set_boot_busy(vm); + test_set_bsp_busy(vcpu, "while running vm"); break; case UCALL_DONE: TEST_ASSERT(stage =3D=3D 1, @@ -75,65 +70,56 @@ static void run_vcpu(struct kvm_vm *vm, uint32_t vcpuid) uc.args[1], uc.args[2], uc.args[3]); default: TEST_ASSERT(false, "Unexpected exit: %s", - exit_reason_str(vcpu_state(vm, vcpuid)->exit_reason)); + exit_reason_str(vcpu->run->exit_reason)); } } } =20 -static struct kvm_vm *create_vm(void) +static struct kvm_vm *create_vm(uint32_t nr_vcpus, uint32_t bsp_vcpu_id, + struct kvm_vcpu *vcpus[]) { - uint64_t vcpu_pages =3D (DEFAULT_STACK_PGS) * 2; - uint64_t extra_pg_pages =3D vcpu_pages / PTES_PER_MIN_PAGE * N_VCPU; + uint64_t vcpu_pages =3D (DEFAULT_STACK_PGS) * nr_vcpus; + uint64_t extra_pg_pages =3D vcpu_pages / PTES_PER_MIN_PAGE * nr_vcpus; uint64_t pages =3D DEFAULT_GUEST_PHY_PAGES + vcpu_pages + extra_pg_pages; + struct kvm_vm *vm; + uint32_t i; =20 - return vm_create(pages); -} + vm =3D vm_create(pages); =20 -static void add_x86_vcpu(struct kvm_vm *vm, uint32_t vcpuid, bool bsp_code) -{ - if (bsp_code) - vm_vcpu_add(vm, vcpuid, guest_bsp_vcpu); - else - vm_vcpu_add(vm, vcpuid, guest_not_bsp_vcpu); + vm_ioctl(vm, KVM_SET_BOOT_CPU_ID, (void *)(unsigned long)bsp_vcpu_id); + + for (i =3D 0; i < nr_vcpus; i++) + vcpus[i] =3D vm_vcpu_add(vm, i, i =3D=3D bsp_vcpu_id ? guest_bsp_vcpu : + guest_not_bsp_vcpu); + return vm; } =20 -static void run_vm_bsp(uint32_t bsp_vcpu) +static void run_vm_bsp(uint32_t bsp_vcpu_id) { + struct kvm_vcpu *vcpus[2]; struct kvm_vm *vm; - bool is_bsp_vcpu1 =3D bsp_vcpu =3D=3D VCPU_ID1; - - vm =3D create_vm(); - - if (is_bsp_vcpu1) - vm_ioctl(vm, KVM_SET_BOOT_CPU_ID, (void *) VCPU_ID1); =20 - add_x86_vcpu(vm, VCPU_ID0, !is_bsp_vcpu1); - add_x86_vcpu(vm, VCPU_ID1, is_bsp_vcpu1); + vm =3D create_vm(ARRAY_SIZE(vcpus), bsp_vcpu_id, vcpus); =20 - run_vcpu(vm, VCPU_ID0); - run_vcpu(vm, VCPU_ID1); + run_vcpu(vcpus[0]); + run_vcpu(vcpus[1]); =20 kvm_vm_free(vm); } =20 static void check_set_bsp_busy(void) { + struct kvm_vcpu *vcpus[2]; struct kvm_vm *vm; - int res; =20 - vm =3D create_vm(); + vm =3D create_vm(ARRAY_SIZE(vcpus), 0, vcpus); =20 - add_x86_vcpu(vm, VCPU_ID0, true); - add_x86_vcpu(vm, VCPU_ID1, false); + test_set_bsp_busy(vcpus[1], "after adding vcpu"); =20 - res =3D __vm_ioctl(vm, KVM_SET_BOOT_CPU_ID, (void *) VCPU_ID1); - TEST_ASSERT(res =3D=3D -1 && errno =3D=3D EBUSY, "KVM_SET_BOOT_CPU_ID set= after adding vcpu"); + run_vcpu(vcpus[0]); + run_vcpu(vcpus[1]); =20 - run_vcpu(vm, VCPU_ID0); - run_vcpu(vm, VCPU_ID1); - - res =3D __vm_ioctl(vm, KVM_SET_BOOT_CPU_ID, (void *) VCPU_ID1); - TEST_ASSERT(res =3D=3D -1 && errno =3D=3D EBUSY, "KVM_SET_BOOT_CPU_ID set= to a terminated vcpu"); + test_set_bsp_busy(vcpus[1], "to a terminated vcpu"); =20 kvm_vm_free(vm); } @@ -145,9 +131,9 @@ int main(int argc, char *argv[]) return 0; } =20 - run_vm_bsp(VCPU_ID0); - run_vm_bsp(VCPU_ID1); - run_vm_bsp(VCPU_ID0); + run_vm_bsp(0); + run_vm_bsp(1); + run_vm_bsp(0); =20 check_set_bsp_busy(); } --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 EF047C352AA for ; Wed, 4 May 2022 23:07:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1382278AbiEDXGG (ORCPT ); Wed, 4 May 2022 19:06:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45522 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379851AbiEDW7J (ORCPT ); Wed, 4 May 2022 18:59:09 -0400 Received: from mail-pj1-x1049.google.com (mail-pj1-x1049.google.com [IPv6:2607:f8b0:4864:20::1049]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 53222546B5 for ; Wed, 4 May 2022 15:52:30 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id a23-20020a17090a6d9700b001d60327d73aso3558557pjk.7 for ; Wed, 04 May 2022 15:52:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=xjXe7wrgH2q/z7D9TWpA0E4IHD4yQCBTWf+8GpgeOow=; b=njv960a3c06xGMs+URNfx9eBzxI2l23QFB1jV5hGJMgqbwijub/vuOATRoDmstIFZo 44/gOd9dQ869J7BL6G9g/3+b8xn4i48IYAruXDMoQS272pI9CnnpEXbvIW+fsNdR0kBu pAzE7ThB5Kjj2o0rnta5VfIkt0sERkY9MHydYw6zTJ8ef/l1QdNgFsIpK+zV8fo9c7AD SYayrxvDn9Okb/MND9yE6Wuyqy5B17YRc8MH9yIodyFcKMDnW6zaK92jl/0gg8D4sk7+ StGb6Yb8MDVqlV8SYhxT3BS2WYg2uAUDLe6XhpeV8mO4uCx+mksQRFFiicreTPmoNxvS JAdQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=xjXe7wrgH2q/z7D9TWpA0E4IHD4yQCBTWf+8GpgeOow=; b=AjRA7r+D0qe2H0/kTH6ZxLNjTUoRxMErogCtfH/WtPHpG3D3bjhjoklPfLb1PW3DsA rtuEEgZ4f+6Km6cVLsPzFBPIh/aY4iGnRRsy2wd3/I25t8i+5/3ablOoKEidQIoLcDT9 un3XvKFWb9XHdkIcxYq76WTpVAxHCzkLVEhcF41SoK42AAIVfNmnckgp+2nTI9nfi3DE uG370XxA9A9XJcgIEoyHXtv3MqiVmB8Hap01LbIQxxNSw/Am/wNaGOzQ+2hQmZRVEcYu pa5SA38NhqVwSvuNCZiw2g+vHnGy8OFNHmfH7jZwLTWUXJmpi/zUKVxh4D+O+wTCVRyY 22Bw== X-Gm-Message-State: AOAM530vNe7/0vaRBeLOxw6UfAk3RzP023IPrG6J/6dNdssR5hrgqXsy 4hdx/u1JBFsYHoHrfwtbgd1sw5kw7Bo= X-Google-Smtp-Source: ABdhPJwDmxnTD/LTb/O2hBEutrq6toQND04rlUIbC9tRQVSAiH0QcAd3dUi+85BaFOzHne+xnMUC1wy0LAM= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:ad2:b0:4f1:2734:a3d9 with SMTP id c18-20020a056a000ad200b004f12734a3d9mr23072750pfl.61.1651704735715; Wed, 04 May 2022 15:52:15 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:42 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-97-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 096/128] KVM: selftests: Convert psci_cpu_on_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Pass around 'struct kvm_vcpu' objects in psci_cpu_on_test instead of relying on global VCPU_IDs. Ideally, the test wouldn't have to manually create vCPUs and thus care about vCPU IDs, but it's not the end of the world and avoiding that behavior isn't guaranteed to be a net positive (an attempt at macro shenanigans did not go very well). Signed-off-by: Sean Christopherson --- .../selftests/kvm/aarch64/psci_cpu_on_test.c | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/tools/testing/selftests/kvm/aarch64/psci_cpu_on_test.c b/tools= /testing/selftests/kvm/aarch64/psci_cpu_on_test.c index ffea4f3634b3..142c3fa2f5f7 100644 --- a/tools/testing/selftests/kvm/aarch64/psci_cpu_on_test.c +++ b/tools/testing/selftests/kvm/aarch64/psci_cpu_on_test.c @@ -17,9 +17,6 @@ #include "processor.h" #include "test_util.h" =20 -#define VCPU_ID_SOURCE 0 -#define VCPU_ID_TARGET 1 - #define CPU_ON_ENTRY_ADDR 0xfeedf00dul #define CPU_ON_CONTEXT_ID 0xdeadc0deul =20 @@ -72,6 +69,7 @@ static void guest_main(uint64_t target_cpu) int main(void) { uint64_t target_mpidr, obs_pc, obs_x0; + struct kvm_vcpu *vcpu0, *vcpu1; struct kvm_vcpu_init init; struct kvm_vm *vm; struct ucall uc; @@ -82,19 +80,19 @@ int main(void) vm_ioctl(vm, KVM_ARM_PREFERRED_TARGET, &init); init.features[0] |=3D (1 << KVM_ARM_VCPU_PSCI_0_2); =20 - aarch64_vcpu_add(vm, VCPU_ID_SOURCE, &init, guest_main); + vcpu0 =3D aarch64_vcpu_add(vm, 0, &init, guest_main); =20 /* * make sure the target is already off when executing the test. */ init.features[0] |=3D (1 << KVM_ARM_VCPU_POWER_OFF); - aarch64_vcpu_add(vm, VCPU_ID_TARGET, &init, guest_main); + vcpu1 =3D aarch64_vcpu_add(vm, 1, &init, guest_main); =20 - get_reg(vm, VCPU_ID_TARGET, KVM_ARM64_SYS_REG(SYS_MPIDR_EL1), &target_mpi= dr); - vcpu_args_set(vm, VCPU_ID_SOURCE, 1, target_mpidr & MPIDR_HWID_BITMASK); - vcpu_run(vm, VCPU_ID_SOURCE); + get_reg(vm, vcpu1->id, KVM_ARM64_SYS_REG(SYS_MPIDR_EL1), &target_mpidr); + vcpu_args_set(vm, vcpu0->id, 1, target_mpidr & MPIDR_HWID_BITMASK); + vcpu_run(vm, vcpu0->id); =20 - switch (get_ucall(vm, VCPU_ID_SOURCE, &uc)) { + switch (get_ucall(vm, vcpu0->id, &uc)) { case UCALL_DONE: break; case UCALL_ABORT: @@ -105,8 +103,8 @@ int main(void) TEST_FAIL("Unhandled ucall: %lu", uc.cmd); } =20 - get_reg(vm, VCPU_ID_TARGET, ARM64_CORE_REG(regs.pc), &obs_pc); - get_reg(vm, VCPU_ID_TARGET, ARM64_CORE_REG(regs.regs[0]), &obs_x0); + get_reg(vm, vcpu1->id, ARM64_CORE_REG(regs.pc), &obs_pc); + get_reg(vm, vcpu1->id, ARM64_CORE_REG(regs.regs[0]), &obs_x0); =20 TEST_ASSERT(obs_pc =3D=3D CPU_ON_ENTRY_ADDR, "unexpected target cpu pc: %lx (expected: %lx)", --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 35B0CC38A04 for ; Wed, 4 May 2022 23:07:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1383311AbiEDXHG (ORCPT ); Wed, 4 May 2022 19:07:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46164 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379865AbiEDW7P (ORCPT ); Wed, 4 May 2022 18:59:15 -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 A36C754BD1 for ; Wed, 4 May 2022 15:52:32 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id l5-20020a170902ec0500b0015cf1cfa4eeso1367893pld.17 for ; Wed, 04 May 2022 15:52:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=UTDAzzugAKRqfKqJrZIH/IoYzHByuOdUPAxmATSKiTI=; b=rPiXZxY9Drt4UlQiJqVDmGBvE/HflKVSziywhLwdekQJkNQszfFBXTP0dGF02xDOiy 6DIgghypxyKNFUGeHpmIKXQg3EYuwYjwi/BF0LtPWCnROC4HdUBSYAK4I8Q9Ifh9OSTx GZburL02vNPxAqVJBEHtWEwbL909D3Vvk5VSEXrv884U5oo4KH/Y6+SBKiK8RMOHsdAE EL5OKKAMFsSCo+XzZGZsYqaI/5EKdtnNM7rVCU3Ar2JdF9SYny9pgO1VjkWpzGroDVuZ SD6ob1pGbB8xnBrKHLF6sD3kIplyFlAPRggU9Zrd/GkFwBIjcH1lRZl5fM84vBb9WK1u kpVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=UTDAzzugAKRqfKqJrZIH/IoYzHByuOdUPAxmATSKiTI=; b=wwnxJoytpt6sBME1CoI784SJC6vfoEu4xHvhNslCJAOPY1Cti2PiznYYTUsz80Xuyb NQNBZgSA7erXcdhJGevvi5ciZuVnAt/MEnAQ4eIFhYdznYPn2W8sfOoxrqHOvdXC1Hjc YOMm6WCmGNicPDyDQK5m6KDQwKeCq8gGaaQKmqQ6Bj3D0blpkne8E8w40cYY5SjDDkAC SkNXYepHCWzGiGXHY7K+oAEVSYwDYZG8WsvDE509OfCYcLIFbLDnIAP5CQkEx4SshAh9 GnPcxPvfNsAhZXSJXoaEx+8PQAbFJ7ffQXz7XaKWojXXEhdDrL2rW8n4tHBSrUWjygGm HEsA== X-Gm-Message-State: AOAM5334I/PnVYt7QdrdYX2k+SP8YfpSc+Tl9i1xsh9GSLwWh2jIG7D8 lJwQelYRXFv8BsiDWI+yOGNAYEZ/c5w= X-Google-Smtp-Source: ABdhPJyUsCpZRiADmS9XSR+E80A84NjTgBzy50rGR/Fr7VTw8WmyGZKnE+RolUDwK6+0n2aIBUaR5EGyoi8= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:b395:b0:1dc:a402:bd4 with SMTP id e21-20020a17090ab39500b001dca4020bd4mr2245297pjr.238.1651704737681; Wed, 04 May 2022 15:52:17 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:43 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-98-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 097/128] KVM: selftests: Convert hardware_disable_test to pass around vCPU objects From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Pass around 'struct kvm_vcpu' objects in hardware_disable_test instead of the VM+vcpu_id (called "index" by the test). Signed-off-by: Sean Christopherson --- .../selftests/kvm/hardware_disable_test.c | 25 ++++++------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/tools/testing/selftests/kvm/hardware_disable_test.c b/tools/te= sting/selftests/kvm/hardware_disable_test.c index 31f6d408419f..b522610f0ba4 100644 --- a/tools/testing/selftests/kvm/hardware_disable_test.c +++ b/tools/testing/selftests/kvm/hardware_disable_test.c @@ -27,12 +27,6 @@ =20 sem_t *sem; =20 -/* Arguments for the pthreads */ -struct payload { - struct kvm_vm *vm; - uint32_t index; -}; - static void guest_code(void) { for (;;) @@ -42,14 +36,14 @@ static void guest_code(void) =20 static void *run_vcpu(void *arg) { - struct payload *payload =3D (struct payload *)arg; - struct kvm_run *state =3D vcpu_state(payload->vm, payload->index); + struct kvm_vcpu *vcpu =3D arg; + struct kvm_run *run =3D vcpu->run; =20 - vcpu_run(payload->vm, payload->index); + vcpu_run(vcpu->vm, vcpu->id); =20 TEST_ASSERT(false, "%s: exited with reason %d: %s\n", - __func__, state->exit_reason, - exit_reason_str(state->exit_reason)); + __func__, run->exit_reason, + exit_reason_str(run->exit_reason)); pthread_exit(NULL); } =20 @@ -92,11 +86,11 @@ static inline void check_join(pthread_t thread, void **= retval) =20 static void run_test(uint32_t run) { + struct kvm_vcpu *vcpu; struct kvm_vm *vm; cpu_set_t cpu_set; pthread_t threads[VCPU_NUM]; pthread_t throw_away; - struct payload payloads[VCPU_NUM]; void *b; uint32_t i, j; =20 @@ -108,12 +102,9 @@ static void run_test(uint32_t run) =20 pr_debug("%s: [%d] start vcpus\n", __func__, run); for (i =3D 0; i < VCPU_NUM; ++i) { - vm_vcpu_add(vm, i, guest_code); - payloads[i].vm =3D vm; - payloads[i].index =3D i; + vcpu =3D vm_vcpu_add(vm, i, guest_code); =20 - check_create_thread(&threads[i], NULL, run_vcpu, - (void *)&payloads[i]); + check_create_thread(&threads[i], NULL, run_vcpu, vcpu); check_set_affinity(threads[i], &cpu_set); =20 for (j =3D 0; j < SLEEPING_THREAD_NUM; ++j) { --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 2CBD3C3A589 for ; Wed, 4 May 2022 23:07:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1384597AbiEDXIF (ORCPT ); Wed, 4 May 2022 19:08:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45362 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379794AbiEDW6i (ORCPT ); Wed, 4 May 2022 18:58:38 -0400 Received: from mail-pj1-x1049.google.com (mail-pj1-x1049.google.com [IPv6:2607:f8b0:4864:20::1049]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AEB9F5622C for ; Wed, 4 May 2022 15:52:19 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id gb16-20020a17090b061000b001d78792caebso1318578pjb.5 for ; Wed, 04 May 2022 15:52:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=ByVqkqLm1uGzaF3TQCPIx1HaF05dWYxVIwtTq/eI0Pc=; b=fKkWFw+llj+PZVaizfFuTtO8ZHBXh9rsa9GtpL2Z36G5NWIbhiUnY8c3Fz4ggKeUZ6 BuSZbZhuvVZHCy+sU66z4oD2a1xKH8S3GT10gkODzVXiy9jXUwmB5k9bV6E9NBB7Xz5V okdjfW4YgtWeswet7zuyAb3IF9f/oId/jryHWqQF1TitAvJ9W86sq2mFvF8A4sU6gcvo /q0bw0ZChiBTAzH3NzjaHwXBH3A/CTtZ9JnC0nl+JN09J0rfwruimmT5tpeQSAmWkAon KUsDRAPIyXPi0cBgZvDitqdQduNq0zNpP1XX82e2TeqYLmklfsyXmvrZlOMLoL+C+0PT GwUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=ByVqkqLm1uGzaF3TQCPIx1HaF05dWYxVIwtTq/eI0Pc=; b=JX4gRmwaRY2qGvjGScO0J5T/VCjyo00ySarpagBELH+CBMeAL9VhMNZWgHGbyPPPvB McQl8EbdHj90vnE0UAFBRiIJ/wK9NjMvd6/5uZvDs5WS1WkkEhdlBGPC063HFLm2yMH/ nRGW+l0pgilDJIzbRDKTs2QInrGjT7hPWyObF4KDHyZtz8df2DqWlVr1V5eFmZZWyKBj cedwyuxRf/taNmTjOXxoaf4Mgy4bJluSojzBQFQc7aGZFHS8AOlCAnhtPnpbGWhpLGL/ txw6cfa73mxE5IuX6JhxmSV4x2gXGBhUL077ZwoWC/uvlUNetNI1wSWf4n3iGH+s+GjK mlcw== X-Gm-Message-State: AOAM532JfS4IUgMAwOj9bKPrHZPp5a+G31FxPFPqA+2gvHG7+jYgr1VT MzBGhU9IyWsxsin82zRvEh7x3rYS+EM= X-Google-Smtp-Source: ABdhPJyJV2ANDhm0W75sV5WKSLz5StdzAn5LRR77nsl3BGMkKtJ13qGTcyLstv6TobgUPU1APFaPLsgHLjE= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:a406:b0:158:260d:1ed2 with SMTP id p6-20020a170902a40600b00158260d1ed2mr24096732plq.49.1651704739333; Wed, 04 May 2022 15:52:19 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:44 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-99-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 098/128] KVM: selftests: Add VM creation helper that "returns" vCPUs From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add a VM creator that "returns" the created vCPUs by filling the provided array. This will allow converting multi-vCPU tests away from hardcoded vCPU IDs. Signed-off-by: Sean Christopherson --- .../selftests/kvm/include/kvm_util_base.h | 17 +++++++++++++---- .../testing/selftests/kvm/kvm_page_table_test.c | 4 ++-- tools/testing/selftests/kvm/lib/kvm_util.c | 17 ++++++++++------- .../testing/selftests/kvm/lib/perf_test_util.c | 4 ++-- 4 files changed, 27 insertions(+), 15 deletions(-) diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index 02df9a794530..2ddf0854c24d 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -562,10 +562,19 @@ struct kvm_vm *vm_create_default_with_vcpus(uint32_t = nr_vcpus, uint64_t extra_me uint32_t vcpuids[]); =20 /* Like vm_create_default_with_vcpus, but accepts mode and slot0 memory as= a parameter */ -struct kvm_vm *vm_create_with_vcpus(enum vm_guest_mode mode, uint32_t nr_v= cpus, - uint64_t slot0_mem_pages, uint64_t extra_mem_pages, - uint32_t num_percpu_pages, void *guest_code, - uint32_t vcpuids[]); +struct kvm_vm *__vm_create_with_vcpus(enum vm_guest_mode mode, uint32_t nr= _vcpus, + uint64_t slot0_mem_pages, uint64_t extra_mem_pages, + uint32_t num_percpu_pages, void *guest_code, + uint32_t vcpuids[], struct kvm_vcpu *vcpus[]); + +static inline struct kvm_vm *vm_create_with_vcpus(uint32_t nr_vcpus, + void *guest_code, + struct kvm_vcpu *vcpus[]) +{ + return __vm_create_with_vcpus(VM_MODE_DEFAULT, nr_vcpus, + DEFAULT_GUEST_PHY_PAGES, 0, 0, + guest_code, NULL, vcpus); +} =20 /* * Create a VM with a single vCPU with reasonable defaults and @extra_mem_= pages diff --git a/tools/testing/selftests/kvm/kvm_page_table_test.c b/tools/test= ing/selftests/kvm/kvm_page_table_test.c index 2c4a7563a4f8..e91bc7f1400d 100644 --- a/tools/testing/selftests/kvm/kvm_page_table_test.c +++ b/tools/testing/selftests/kvm/kvm_page_table_test.c @@ -268,8 +268,8 @@ static struct kvm_vm *pre_init_before_test(enum vm_gues= t_mode mode, void *arg) =20 /* Create a VM with enough guest pages */ guest_num_pages =3D test_mem_size / guest_page_size; - vm =3D vm_create_with_vcpus(mode, nr_vcpus, DEFAULT_GUEST_PHY_PAGES, - guest_num_pages, 0, guest_code, NULL); + vm =3D __vm_create_with_vcpus(mode, nr_vcpus, DEFAULT_GUEST_PHY_PAGES, + guest_num_pages, 0, guest_code, NULL, NULL); =20 /* Align down GPA of the testing memslot */ if (!p->phys_offset) diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index bd9eb23edf3b..838a3eda9381 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -300,12 +300,13 @@ struct kvm_vm *__vm_create(enum vm_guest_mode mode, u= int64_t nr_pages) * extra_mem_pages is only used to calculate the maximum page table size, * no real memory allocation for non-slot0 memory in this function. */ -struct kvm_vm *vm_create_with_vcpus(enum vm_guest_mode mode, uint32_t nr_v= cpus, - uint64_t slot0_mem_pages, uint64_t extra_mem_pages, - uint32_t num_percpu_pages, void *guest_code, - uint32_t vcpuids[]) +struct kvm_vm *__vm_create_with_vcpus(enum vm_guest_mode mode, uint32_t nr= _vcpus, + uint64_t slot0_mem_pages, uint64_t extra_mem_pages, + uint32_t num_percpu_pages, void *guest_code, + uint32_t vcpuids[], struct kvm_vcpu *vcpus[]) { uint64_t vcpu_pages, extra_pg_pages, pages; + struct kvm_vcpu *vcpu; struct kvm_vm *vm; int i; =20 @@ -332,7 +333,9 @@ struct kvm_vm *vm_create_with_vcpus(enum vm_guest_mode = mode, uint32_t nr_vcpus, for (i =3D 0; i < nr_vcpus; ++i) { uint32_t vcpuid =3D vcpuids ? vcpuids[i] : i; =20 - vm_vcpu_add(vm, vcpuid, guest_code); + vcpu =3D vm_vcpu_add(vm, vcpuid, guest_code); + if (vcpus) + vcpus[i] =3D vcpu; } =20 return vm; @@ -342,8 +345,8 @@ struct kvm_vm *vm_create_default_with_vcpus(uint32_t nr= _vcpus, uint64_t extra_me uint32_t num_percpu_pages, void *guest_code, uint32_t vcpuids[]) { - return vm_create_with_vcpus(VM_MODE_DEFAULT, nr_vcpus, DEFAULT_GUEST_PHY_= PAGES, - extra_mem_pages, num_percpu_pages, guest_code, vcpuids); + return __vm_create_with_vcpus(VM_MODE_DEFAULT, nr_vcpus, DEFAULT_GUEST_PH= Y_PAGES, + extra_mem_pages, num_percpu_pages, guest_code, vcpuids, NULL); } =20 struct kvm_vm *vm_create_default(uint32_t vcpuid, uint64_t extra_mem_pages, diff --git a/tools/testing/selftests/kvm/lib/perf_test_util.c b/tools/testi= ng/selftests/kvm/lib/perf_test_util.c index 722df3a28791..5b80ba7f12e4 100644 --- a/tools/testing/selftests/kvm/lib/perf_test_util.c +++ b/tools/testing/selftests/kvm/lib/perf_test_util.c @@ -139,8 +139,8 @@ struct kvm_vm *perf_test_create_vm(enum vm_guest_mode m= ode, int vcpus, * The memory is also added to memslot 0, but that's a benign side * effect as KVM allows aliasing HVAs in meslots. */ - vm =3D vm_create_with_vcpus(mode, vcpus, DEFAULT_GUEST_PHY_PAGES, - guest_num_pages, 0, guest_code, NULL); + vm =3D __vm_create_with_vcpus(mode, vcpus, DEFAULT_GUEST_PHY_PAGES, + guest_num_pages, 0, guest_code, NULL, NULL); =20 pta->vm =3D vm; =20 --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 19969C4708D for ; Wed, 4 May 2022 23:07:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1384465AbiEDXIA (ORCPT ); Wed, 4 May 2022 19:08:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45412 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379972AbiEDW7f (ORCPT ); Wed, 4 May 2022 18:59:35 -0400 Received: from mail-pj1-x1049.google.com (mail-pj1-x1049.google.com [IPv6:2607:f8b0:4864:20::1049]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EBA2854BF7 for ; Wed, 4 May 2022 15:52:41 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id o8-20020a17090a9f8800b001dc9f554c7fso1083152pjp.4 for ; Wed, 04 May 2022 15:52:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=q6AIj817CevNnhok7TpRrpYhOGlmlSTBBZ+O77AbXM4=; b=j1qEmO9OjecSXax05N2m5U41H3uhMxD63Px2oDCRHoaj82dAvrkb6W4Sq2/n/sJbJM eIJkTe9PD3zvOE4J3rjo7Ha1lvSCLCzGoj+RMW9EVQJUVWB/rIJK2yopfb2b8vVGGzHf Ie7dk/mSVW834eTbZkIWAfzBllpqJXclOBFMocw69MzEJaaLb8xpN6DHbDDfLSiLBirn 3oSs4AMLx9GYJK/f/1PrSH7acvSXt/PQ1dgAJkQo/Bi5PF7IzxUkDXKxgEw88ptCSEQ+ ta9u2IRASLm3xslhhmL4qLKZItYF0Yrd0Z8/lBNz917rp5Oy4BsZgy9JfFUL9fmUwQkw 171w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=q6AIj817CevNnhok7TpRrpYhOGlmlSTBBZ+O77AbXM4=; b=n2zjAlEYXX5bjawSkojYyMtpVk1LdF7CNL1nWMIdcmZphYhSPHZaGpNK71QpiGfvD9 CaMg8d0vgeFEDj6dCOhh+qkhSYMavenRkop8cRvsKoxtgFpOWFfNSw7RqamWT35zNrbq wd3JrYNKC/tSPZnsBg029U3oAZyUt/N7Upr/0Jd9wBhK8S9nAO+ldB70WaG5xpHlQCIY CcrJL/Cb/LQQcKgBBh6A8aBWe3ETHun21ciI5EUjCCKRdvjabMqfzjyVSVPggnkrOo1B riCfn0P+9kbYA8lP//RvcLNzuu466N6DrmykS9RB1n+1ZZFnFdNtvM9eENUF/9Gy5IYa dy4A== X-Gm-Message-State: AOAM530QYUVWbHcEkWolKCokmgpvs8KizyvYF9QSbQaZep49oR6CQNQH fd90ummnnYfmnYkRWEaw3bqeaEuJ6PQ= X-Google-Smtp-Source: ABdhPJyJLvij56MuiBVWtggNFnwOLahy86p2YU+mp6YYF+39YDpo2d3zxpWSNmKlBL+RNhgovKqLO560wXQ= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:1ac8:b0:4fa:917f:c1aa with SMTP id f8-20020a056a001ac800b004fa917fc1aamr23244208pfv.2.1651704741153; Wed, 04 May 2022 15:52:21 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:45 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-100-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 099/128] KVM: selftests: Convert steal_time away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert steal_time to use vm_create_with_vcpus() and pass around a 'struct kvm_vcpu' object instead of requiring that the index into the array of vCPUs for a given vCPU is also the ID of the vCPU. Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/steal_time.c | 123 ++++++++++++----------- 1 file changed, 62 insertions(+), 61 deletions(-) diff --git a/tools/testing/selftests/kvm/steal_time.c b/tools/testing/selft= ests/kvm/steal_time.c index 741892cec1ea..2aca51d83079 100644 --- a/tools/testing/selftests/kvm/steal_time.c +++ b/tools/testing/selftests/kvm/steal_time.c @@ -58,36 +58,34 @@ static void guest_code(int cpu) GUEST_DONE(); } =20 -static void steal_time_init(struct kvm_vm *vm) +static bool is_steal_time_supported(struct kvm_vcpu *vcpu) { - int i; + struct kvm_cpuid_entry2 *cpuid =3D kvm_get_supported_cpuid_entry(KVM_CPUI= D_FEATURES); =20 - if (!(kvm_get_supported_cpuid_entry(KVM_CPUID_FEATURES)->eax & - KVM_FEATURE_STEAL_TIME)) { - print_skip("steal-time not supported"); - exit(KSFT_SKIP); - } + return cpuid && (cpuid->eax & KVM_FEATURE_STEAL_TIME); +} =20 - for (i =3D 0; i < NR_VCPUS; ++i) { - int ret; +static void steal_time_init(struct kvm_vcpu *vcpu, uint32_t i) +{ + int ret; =20 - /* ST_GPA_BASE is identity mapped */ - st_gva[i] =3D (void *)(ST_GPA_BASE + i * STEAL_TIME_SIZE); - sync_global_to_guest(vm, st_gva[i]); + /* ST_GPA_BASE is identity mapped */ + st_gva[i] =3D (void *)(ST_GPA_BASE + i * STEAL_TIME_SIZE); + sync_global_to_guest(vcpu->vm, st_gva[i]); =20 - ret =3D _vcpu_set_msr(vm, i, MSR_KVM_STEAL_TIME, (ulong)st_gva[i] | KVM_= STEAL_RESERVED_MASK); - TEST_ASSERT(ret =3D=3D 0, "Bad GPA didn't fail"); + ret =3D _vcpu_set_msr(vcpu->vm, vcpu->id, MSR_KVM_STEAL_TIME, + (ulong)st_gva[i] | KVM_STEAL_RESERVED_MASK); + TEST_ASSERT(ret =3D=3D 0, "Bad GPA didn't fail"); =20 - vcpu_set_msr(vm, i, MSR_KVM_STEAL_TIME, (ulong)st_gva[i] | KVM_MSR_ENABL= ED); - } + vcpu_set_msr(vcpu->vm, vcpu->id, MSR_KVM_STEAL_TIME, (ulong)st_gva[i] | K= VM_MSR_ENABLED); } =20 -static void steal_time_dump(struct kvm_vm *vm, uint32_t vcpuid) +static void steal_time_dump(struct kvm_vm *vm, uint32_t vcpu_idx) { - struct kvm_steal_time *st =3D addr_gva2hva(vm, (ulong)st_gva[vcpuid]); + struct kvm_steal_time *st =3D addr_gva2hva(vm, (ulong)st_gva[vcpu_idx]); int i; =20 - pr_info("VCPU%d:\n", vcpuid); + pr_info("VCPU%d:\n", vcpu_idx); pr_info(" steal: %lld\n", st->steal); pr_info(" version: %d\n", st->version); pr_info(" flags: %d\n", st->flags); @@ -165,49 +163,50 @@ static void guest_code(int cpu) GUEST_DONE(); } =20 -static void steal_time_init(struct kvm_vm *vm) +static bool is_steal_time_supported(struct kvm_vcpu *vcpu) { struct kvm_device_attr dev =3D { .group =3D KVM_ARM_VCPU_PVTIME_CTRL, .attr =3D KVM_ARM_VCPU_PVTIME_IPA, }; - int i, ret; =20 - ret =3D __vcpu_ioctl(vm, 0, KVM_HAS_DEVICE_ATTR, &dev); - if (ret !=3D 0 && errno =3D=3D ENXIO) { - print_skip("steal-time not supported"); - exit(KSFT_SKIP); - } - - for (i =3D 0; i < NR_VCPUS; ++i) { - uint64_t st_ipa; + return !__vcpu_ioctl(vcpu->vm, vcpu->id, KVM_HAS_DEVICE_ATTR, &dev); +} =20 - vcpu_ioctl(vm, i, KVM_HAS_DEVICE_ATTR, &dev); +static void steal_time_init(struct kvm_vcpu *vcpu, uint32_t i) +{ + struct kvm_vm *vm =3D vcpu->vm; + uint64_t st_ipa; + int ret; =20 - dev.addr =3D (uint64_t)&st_ipa; + struct kvm_device_attr dev =3D { + .group =3D KVM_ARM_VCPU_PVTIME_CTRL, + .attr =3D KVM_ARM_VCPU_PVTIME_IPA, + .addr =3D (uint64_t)&st_ipa, + }; =20 - /* ST_GPA_BASE is identity mapped */ - st_gva[i] =3D (void *)(ST_GPA_BASE + i * STEAL_TIME_SIZE); - sync_global_to_guest(vm, st_gva[i]); + vcpu_ioctl(vm, vcpu->id, KVM_HAS_DEVICE_ATTR, &dev); =20 - st_ipa =3D (ulong)st_gva[i] | 1; - ret =3D __vcpu_ioctl(vm, i, KVM_SET_DEVICE_ATTR, &dev); - TEST_ASSERT(ret =3D=3D -1 && errno =3D=3D EINVAL, "Bad IPA didn't report= EINVAL"); + /* ST_GPA_BASE is identity mapped */ + st_gva[i] =3D (void *)(ST_GPA_BASE + i * STEAL_TIME_SIZE); + sync_global_to_guest(vm, st_gva[i]); =20 - st_ipa =3D (ulong)st_gva[i]; - vcpu_ioctl(vm, i, KVM_SET_DEVICE_ATTR, &dev); + st_ipa =3D (ulong)st_gva[i] | 1; + ret =3D __vcpu_ioctl(vm, vcpu->id, KVM_SET_DEVICE_ATTR, &dev); + TEST_ASSERT(ret =3D=3D -1 && errno =3D=3D EINVAL, "Bad IPA didn't report = EINVAL"); =20 - ret =3D __vcpu_ioctl(vm, i, KVM_SET_DEVICE_ATTR, &dev); - TEST_ASSERT(ret =3D=3D -1 && errno =3D=3D EEXIST, "Set IPA twice without= EEXIST"); + st_ipa =3D (ulong)st_gva[i]; + vcpu_ioctl(vm, vcpu->id, KVM_SET_DEVICE_ATTR, &dev); =20 - } + ret =3D __vcpu_ioctl(vm, vcpu->id, KVM_SET_DEVICE_ATTR, &dev); + TEST_ASSERT(ret =3D=3D -1 && errno =3D=3D EEXIST, "Set IPA twice without = EEXIST"); } =20 -static void steal_time_dump(struct kvm_vm *vm, uint32_t vcpuid) +static void steal_time_dump(struct kvm_vm *vm, uint32_t vcpu_idx) { - struct st_time *st =3D addr_gva2hva(vm, (ulong)st_gva[vcpuid]); + struct st_time *st =3D addr_gva2hva(vm, (ulong)st_gva[vcpu_idx]); =20 - pr_info("VCPU%d:\n", vcpuid); + pr_info("VCPU%d:\n", vcpu_idx); pr_info(" rev: %d\n", st->rev); pr_info(" attr: %d\n", st->attr); pr_info(" st_time: %ld\n", st->st_time); @@ -231,15 +230,13 @@ static void *do_steal_time(void *arg) return NULL; } =20 -static void run_vcpu(struct kvm_vm *vm, uint32_t vcpuid) +static void run_vcpu(struct kvm_vcpu *vcpu) { struct ucall uc; =20 - vcpu_args_set(vm, vcpuid, 1, vcpuid); + vcpu_run(vcpu->vm, vcpu->id); =20 - vcpu_ioctl(vm, vcpuid, KVM_RUN, NULL); - - switch (get_ucall(vm, vcpuid, &uc)) { + switch (get_ucall(vcpu->vm, vcpu->id, &uc)) { case UCALL_SYNC: case UCALL_DONE: break; @@ -248,12 +245,13 @@ static void run_vcpu(struct kvm_vm *vm, uint32_t vcpu= id) __FILE__, uc.args[1]); default: TEST_ASSERT(false, "Unexpected exit: %s", - exit_reason_str(vcpu_state(vm, vcpuid)->exit_reason)); + exit_reason_str(vcpu->run->exit_reason)); } } =20 int main(int ac, char **av) { + struct kvm_vcpu *vcpus[NR_VCPUS]; struct kvm_vm *vm; pthread_attr_t attr; pthread_t thread; @@ -273,26 +271,29 @@ int main(int ac, char **av) pthread_attr_setaffinity_np(&attr, sizeof(cpu_set_t), &cpuset); pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset); =20 - /* Create a one VCPU guest and an identity mapped memslot for the steal t= ime structure */ - vm =3D vm_create_default(0, 0, guest_code); + /* Create a VM and an identity mapped memslot for the steal time structur= e */ + vm =3D vm_create_with_vcpus(NR_VCPUS, guest_code, vcpus); gpages =3D vm_calc_num_guest_pages(VM_MODE_DEFAULT, STEAL_TIME_SIZE * NR_= VCPUS); vm_userspace_mem_region_add(vm, VM_MEM_SRC_ANONYMOUS, ST_GPA_BASE, 1, gpa= ges, 0); virt_map(vm, ST_GPA_BASE, ST_GPA_BASE, gpages); ucall_init(vm, NULL); =20 - /* Add the rest of the VCPUs */ - for (i =3D 1; i < NR_VCPUS; ++i) - vm_vcpu_add(vm, i, guest_code); - - steal_time_init(vm); + if (!is_steal_time_supported(vcpus[0])) { + print_skip("steal-time not supported"); + exit(KSFT_SKIP); + } =20 /* Run test on each VCPU */ for (i =3D 0; i < NR_VCPUS; ++i) { + steal_time_init(vcpus[i], i); + + vcpu_args_set(vm, vcpus[i]->id, 1, i); + /* First VCPU run initializes steal-time */ - run_vcpu(vm, i); + run_vcpu(vcpus[i]); =20 /* Second VCPU run, expect guest stolen time to be <=3D run_delay */ - run_vcpu(vm, i); + run_vcpu(vcpus[i]); sync_global_from_guest(vm, guest_stolen_time[i]); stolen_time =3D guest_stolen_time[i]; run_delay =3D get_run_delay(); @@ -313,7 +314,7 @@ int main(int ac, char **av) MIN_RUN_DELAY_NS, run_delay); =20 /* Run VCPU again to confirm stolen time is consistent with run_delay */ - run_vcpu(vm, i); + run_vcpu(vcpus[i]); sync_global_from_guest(vm, guest_stolen_time[i]); stolen_time =3D guest_stolen_time[i] - stolen_time; TEST_ASSERT(stolen_time >=3D run_delay, --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 28C8BC47085 for ; Wed, 4 May 2022 23:07:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1382455AbiEDXG0 (ORCPT ); Wed, 4 May 2022 19:06:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45414 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379989AbiEDW7g (ORCPT ); Wed, 4 May 2022 18:59:36 -0400 Received: from mail-pg1-x54a.google.com (mail-pg1-x54a.google.com [IPv6:2607:f8b0:4864:20::54a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7DA5156406 for ; Wed, 4 May 2022 15:52:43 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id j24-20020a637a58000000b003ab45990247so1336355pgn.17 for ; Wed, 04 May 2022 15:52:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=jMEQySaj1Rxs5aGpP5khdJki27/sUpGqRcC5WiSoU3o=; b=c16ep8pv9Mq2l2AD//OApNL/YycrUvJr5MCjdpfAYkqE439mqkAdRwFXe4/MTeaRco ig0tXHGFXUgygkF1G6Cig5flclR0D32TziyFhHZ+mULBqiWgeH1r3M3n42i2oo5KuJsg mFMrhWAH/f9AwE7O+oukkvuGPa83qHrYsA1HWEXsdGAql5cnLrROGwkw4OhtPs4WjRr5 HK72RfWOgiai4Ecvk3XHpCvKNZa43ib6/Mah4igxWUHBu7S73phiNhi5OfvjFr5RpYtF d/r1hHivR/yEu1K4NkSbWQFy+qBpZDc4ZWo/yQ/KDKQv/1hBFA4MM1Jn1JMXXxge3rQJ RXFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=jMEQySaj1Rxs5aGpP5khdJki27/sUpGqRcC5WiSoU3o=; b=tSMoiSLtKMme1+RvttlATU97FGWpDfCpSQBm/Lj5nMXrNdH9qIPgWESgx8k3iTRvr9 wED3zptHa5MGZIQOgQ4xXBRE7a08f+1UIe5IDdyQNB+JYmki+bhQJUNZk5+dOkcIuiyC vMC8VXGx8ggweBP8vz1d55yuNsfc94gT21EpToJPfFbYCTeeWZS79+lJrT/Fwm5/3Twu rsR7bVliTRIZSCnMmuhOmrXutQKiywFePD3ciZD5OuiBfp2P8kQY7C/Y1lMhNWJdRKhW 2bBrvLhuYR/5cCazZ6EVfDoQDnMRjowDEo724W1QJphNn/v9l8Y4Rks8icPTmQz8olZ/ KxVA== X-Gm-Message-State: AOAM532ixkPRixacWYJ1UEHu3gvYmhPUPtDYPXOH8kCVlJVx8+WlBMph mh84xr8mb3eNmybbI/ntkDID9MWH/0M= X-Google-Smtp-Source: ABdhPJwxPw5SYRUumfnsshwju/m/hT5MRtSZ0zseZdiMFidvFkNg7cef7sU0Mh351TWknbDslQxcIdgzKLA= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:903:230e:b0:15e:d0a1:922f with SMTP id d14-20020a170903230e00b0015ed0a1922fmr3114818plh.75.1651704742910; Wed, 04 May 2022 15:52:22 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:46 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-101-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 100/128] KVM: selftests: Convert arch_timer away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert arch_timer to use vm_create_with_vcpus() and pass around a 'struct kvm_vcpu' object instead of requiring that the index into the array of vCPUs for a given vCPU is also the ID of the vCPU Signed-off-by: Sean Christopherson --- .../selftests/kvm/aarch64/arch_timer.c | 62 ++++++++----------- 1 file changed, 27 insertions(+), 35 deletions(-) diff --git a/tools/testing/selftests/kvm/aarch64/arch_timer.c b/tools/testi= ng/selftests/kvm/aarch64/arch_timer.c index f04ca07c7f14..a873d9adc558 100644 --- a/tools/testing/selftests/kvm/aarch64/arch_timer.c +++ b/tools/testing/selftests/kvm/aarch64/arch_timer.c @@ -76,13 +76,8 @@ struct test_vcpu_shared_data { uint64_t xcnt; }; =20 -struct test_vcpu { - uint32_t vcpuid; - pthread_t pt_vcpu_run; - struct kvm_vm *vm; -}; - -static struct test_vcpu test_vcpu[KVM_MAX_VCPUS]; +static struct kvm_vcpu *vcpus[KVM_MAX_VCPUS]; +static pthread_t pt_vcpu_run[KVM_MAX_VCPUS]; static struct test_vcpu_shared_data vcpu_shared_data[KVM_MAX_VCPUS]; =20 static int vtimer_irq, ptimer_irq; @@ -217,20 +212,20 @@ static void guest_code(void) =20 static void *test_vcpu_run(void *arg) { + unsigned int vcpu_idx =3D (unsigned long)arg; struct ucall uc; - struct test_vcpu *vcpu =3D arg; + struct kvm_vcpu *vcpu =3D vcpus[vcpu_idx]; struct kvm_vm *vm =3D vcpu->vm; - uint32_t vcpuid =3D vcpu->vcpuid; - struct test_vcpu_shared_data *shared_data =3D &vcpu_shared_data[vcpuid]; + struct test_vcpu_shared_data *shared_data =3D &vcpu_shared_data[vcpu_idx]; =20 - vcpu_run(vm, vcpuid); + vcpu_run(vm, vcpu->id); =20 /* Currently, any exit from guest is an indication of completion */ pthread_mutex_lock(&vcpu_done_map_lock); - set_bit(vcpuid, vcpu_done_map); + set_bit(vcpu_idx, vcpu_done_map); pthread_mutex_unlock(&vcpu_done_map_lock); =20 - switch (get_ucall(vm, vcpuid, &uc)) { + switch (get_ucall(vm, vcpu->id, &uc)) { case UCALL_SYNC: case UCALL_DONE: break; @@ -238,7 +233,7 @@ static void *test_vcpu_run(void *arg) sync_global_from_guest(vm, *shared_data); TEST_FAIL("%s at %s:%ld\n\tvalues: %lu, %lu; %lu, vcpu: %u; stage: %u; i= ter: %u", (const char *)uc.args[0], __FILE__, uc.args[1], - uc.args[2], uc.args[3], uc.args[4], vcpuid, + uc.args[2], uc.args[3], uc.args[4], vcpu_idx, shared_data->guest_stage, shared_data->nr_iter); break; default: @@ -265,7 +260,7 @@ static uint32_t test_get_pcpu(void) return pcpu; } =20 -static int test_migrate_vcpu(struct test_vcpu *vcpu) +static int test_migrate_vcpu(unsigned int vcpu_idx) { int ret; cpu_set_t cpuset; @@ -274,15 +269,15 @@ static int test_migrate_vcpu(struct test_vcpu *vcpu) CPU_ZERO(&cpuset); CPU_SET(new_pcpu, &cpuset); =20 - pr_debug("Migrating vCPU: %u to pCPU: %u\n", vcpu->vcpuid, new_pcpu); + pr_debug("Migrating vCPU: %u to pCPU: %u\n", vcpu_idx, new_pcpu); =20 - ret =3D pthread_setaffinity_np(vcpu->pt_vcpu_run, - sizeof(cpuset), &cpuset); + ret =3D pthread_setaffinity_np(pt_vcpu_run[vcpu_idx], + sizeof(cpuset), &cpuset); =20 /* Allow the error where the vCPU thread is already finished */ TEST_ASSERT(ret =3D=3D 0 || ret =3D=3D ESRCH, - "Failed to migrate the vCPU:%u to pCPU: %u; ret: %d\n", - vcpu->vcpuid, new_pcpu, ret); + "Failed to migrate the vCPU:%u to pCPU: %u; ret: %d\n", + vcpu_idx, new_pcpu, ret); =20 return ret; } @@ -305,7 +300,7 @@ static void *test_vcpu_migration(void *arg) continue; } =20 - test_migrate_vcpu(&test_vcpu[i]); + test_migrate_vcpu(i); } } while (test_args.nr_vcpus !=3D n_done); =20 @@ -314,16 +309,17 @@ static void *test_vcpu_migration(void *arg) =20 static void test_run(struct kvm_vm *vm) { - int i, ret; pthread_t pt_vcpu_migration; + unsigned int i; + int ret; =20 pthread_mutex_init(&vcpu_done_map_lock, NULL); vcpu_done_map =3D bitmap_zalloc(test_args.nr_vcpus); TEST_ASSERT(vcpu_done_map, "Failed to allocate vcpu done bitmap\n"); =20 - for (i =3D 0; i < test_args.nr_vcpus; i++) { - ret =3D pthread_create(&test_vcpu[i].pt_vcpu_run, NULL, - test_vcpu_run, &test_vcpu[i]); + for (i =3D 0; i < (unsigned long)test_args.nr_vcpus; i++) { + ret =3D pthread_create(&pt_vcpu_run[i], NULL, test_vcpu_run, + (void *)(unsigned long)i); TEST_ASSERT(!ret, "Failed to create vCPU-%d pthread\n", i); } =20 @@ -338,7 +334,7 @@ static void test_run(struct kvm_vm *vm) =20 =20 for (i =3D 0; i < test_args.nr_vcpus; i++) - pthread_join(test_vcpu[i].pt_vcpu_run, NULL); + pthread_join(pt_vcpu_run[i], NULL); =20 if (test_args.migration_freq_ms) pthread_join(pt_vcpu_migration, NULL); @@ -349,9 +345,9 @@ static void test_run(struct kvm_vm *vm) static void test_init_timer_irq(struct kvm_vm *vm) { /* Timer initid should be same for all the vCPUs, so query only vCPU-0 */ - vcpu_device_attr_get(vm, 0, KVM_ARM_VCPU_TIMER_CTRL, + vcpu_device_attr_get(vm, vcpus[0]->id, KVM_ARM_VCPU_TIMER_CTRL, KVM_ARM_VCPU_TIMER_IRQ_PTIMER, &ptimer_irq); - vcpu_device_attr_get(vm, 0, KVM_ARM_VCPU_TIMER_CTRL, + vcpu_device_attr_get(vm, vcpus[0]->id, KVM_ARM_VCPU_TIMER_CTRL, KVM_ARM_VCPU_TIMER_IRQ_VTIMER, &vtimer_irq); =20 sync_global_to_guest(vm, ptimer_irq); @@ -368,17 +364,13 @@ static struct kvm_vm *test_vm_create(void) unsigned int i; int nr_vcpus =3D test_args.nr_vcpus; =20 - vm =3D vm_create_default_with_vcpus(nr_vcpus, 0, 0, guest_code, NULL); + vm =3D vm_create_with_vcpus(nr_vcpus, guest_code, vcpus); =20 vm_init_descriptor_tables(vm); vm_install_exception_handler(vm, VECTOR_IRQ_CURRENT, guest_irq_handler); =20 - for (i =3D 0; i < nr_vcpus; i++) { - vcpu_init_descriptor_tables(vm, i); - - test_vcpu[i].vcpuid =3D i; - test_vcpu[i].vm =3D vm; - } + for (i =3D 0; i < nr_vcpus; i++) + vcpu_init_descriptor_tables(vm, vcpus[i]->id); =20 ucall_init(vm, NULL); test_init_timer_irq(vm); --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 C99CDC3A59F for ; Wed, 4 May 2022 23:07:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1382576AbiEDXG3 (ORCPT ); Wed, 4 May 2022 19:06:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46170 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1380027AbiEDW7i (ORCPT ); Wed, 4 May 2022 18:59:38 -0400 Received: from mail-pl1-x64a.google.com (mail-pl1-x64a.google.com [IPv6:2607:f8b0:4864:20::64a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EF5C956419 for ; Wed, 4 May 2022 15:52:45 -0700 (PDT) Received: by mail-pl1-x64a.google.com with SMTP id i11-20020a1709026acb00b0015ebd774840so1377137plt.2 for ; Wed, 04 May 2022 15:52:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=xQGuZKK7b+/H3Nkh3wUrCN2rrVMkaOXKv5C35+MWASU=; b=Oe9B9UsSVusR3pQ2JrM50arKEFMmB69hMSq6t+7RnyUHVWW0YqwpuG7rwWRDJvb2NO UMYj7sAtuO62xK1NlfqFCXsOllJGwtIezvamJC44lLW3IpH/piDm4KFMCK/PlTCe0+MT /aQ3yDz4aI/HBEn1bTfsaBqs5zYgWpeHOYoIoo3XChH6zEeDkPpkH++7RCvMFu4YYx+c e/Tfr+xgFAwOCeYKdezYmmESkC18i+HwrB0S+ckOhLUCk52c5uT7QBVkqExAXiWYVOXa lhlh8xObHiHJ+8Y+SF6X1dWCL8ONS1TNMQRJn0U6Ors9xt4f+GuZCSWmAmqYqEqzIO43 Ccng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=xQGuZKK7b+/H3Nkh3wUrCN2rrVMkaOXKv5C35+MWASU=; b=SnoJkOCkultZIemY0j3oBqshICbSDbR8Ja2olL+j50KrHyR0pFo2JtucXvXzsOoh6K L9FN1oJJf7W8ZWBeBoFr9304+6X1LbwFcXb4kU/gp4ZOqbaxugVYFksFqHIhfs1EkFXJ hElop8O88JzUK+8eCgmkS59fiAMZlAw2jg4d2WWwkLaL3Rok3wF8n8oxCfvTVTu+2pNg oT1kji+9p9Nz+TgVaFrjEW1geSEHup9IaCP9yBJEogrsC2uvAJvilBbflTQFjcvKefoG J97b6H9CbUKWse5Pms7ZMKCoUF6byU/Uh6bswNbXJD2rjm3QVsP+G94+rLrBIwmPeaqd 9/Sg== X-Gm-Message-State: AOAM530ongu7+RsNnwWPppk7RhknNMizbQBANpFqBCK7D+Jr9CQsFvqn 3Fts6uRw5huUVpcq0lASKLmwYP70dUM= X-Google-Smtp-Source: ABdhPJzQ5iFt+wDvqEZsICkqePK+g/ZRYK5FOJbSyWq1hVg1sUT+jQQgmddsX7SlvxTE7z7lex0qxelKIVo= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:1492:b0:50e:11ae:f62f with SMTP id v18-20020a056a00149200b0050e11aef62fmr9544148pfu.43.1651704744763; Wed, 04 May 2022 15:52:24 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:47 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-102-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 101/128] KVM: selftests: Fix typo in vgic_init test From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When iterating over vCPUs, invoke v3_redist_reg_get() on the "current" vCPU instead of vCPU0, which is presumably what was intended by iterating over all vCPUs. Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/aarch64/vgic_init.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/testing/selftests/kvm/aarch64/vgic_init.c b/tools/testin= g/selftests/kvm/aarch64/vgic_init.c index 32dac03f5600..f8d41f12bdca 100644 --- a/tools/testing/selftests/kvm/aarch64/vgic_init.c +++ b/tools/testing/selftests/kvm/aarch64/vgic_init.c @@ -418,7 +418,7 @@ static void test_v3_typer_accesses(void) KVM_DEV_ARM_VGIC_CTRL_INIT, NULL); =20 for (i =3D 0; i < NR_VCPUS ; i++) { - ret =3D v3_redist_reg_get(v.gic_fd, 0, GICR_TYPER, &val); + ret =3D v3_redist_reg_get(v.gic_fd, i, GICR_TYPER, &val); TEST_ASSERT(!ret && !val, "read GICR_TYPER before rdist region setting"); } =20 --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 3ED68C38161 for ; Wed, 4 May 2022 23:07:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1382662AbiEDXGc (ORCPT ); Wed, 4 May 2022 19:06:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47000 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1380093AbiEDW7m (ORCPT ); Wed, 4 May 2022 18:59:42 -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 F056056742 for ; Wed, 4 May 2022 15:52:50 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id w3-20020a17090ac98300b001b8b914e91aso1320737pjt.0 for ; Wed, 04 May 2022 15:52:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=HRuYHNyWNj3yVfRJqkWiQFhjZyJBqlyDBstHHg7DoVo=; b=LK4FIty36PCKGbuj1m38lcjKjqlM0zakhQB8K34zBVK7tjZY2LDL3EuOJZWisVz3Cz H7owBwY7zh5wuqOhdVf2HyBai/uZoeo+DK0ltB5b8CojGsOz7eTocjV9rnoHW13mrRg0 FBB7ceJSaepN/UzA+r7ZoM5ujLmo4SqTjII25GjaTabnjeLgJuOiZ3Vv2iuATUmoRgLx Gb0U66EVZ4xn2PKQujXnN6pXYpKkK0R1Q01p3Z63HuSmyZfooCXz3i5BmR3GlfMctBI7 PD8FFPLoxpbb/FlD7okYyGh8NccuONEN23q5WHU1G9cn0wnqBgjD4Oisb3EeOnj24Gp9 3psw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=HRuYHNyWNj3yVfRJqkWiQFhjZyJBqlyDBstHHg7DoVo=; b=6Ydzm7t6EW9aiCvESkLZ2qb3SL7d8pp6pO8/h0xAN2+4OCyOGhOjOhOpoJ1eueKVLP C3X0cdWItPPZmgICks4p4v87+VZkB/puJEP6AzEttnSyJARJPF4Ozazpli26qoIkLBGl T3iyi4+DDjOj5X1N1gcjD9JLF6azcbJ6W8lkU0zovgINQeqhAhIT0FmpSyXAfAfqYNOO MRrmJDwsLHR9RHSN/OQ5jfgZK0PHIs7GfY9yl6XZ4yImUw+xEvDvONA0ORQrG7tzwnGz JX6BREvBRMHByShW/QmyP7gS+sKZPO6EUd61NQYQ+1D2pA9HTEJHJdrKjjEavwkSvtkF nnqg== X-Gm-Message-State: AOAM533Emtq1yewFH0DZa9/NVaelOc/2EVC3otYpVYYuc928wArAjWxG cyapWLAm2vNztw9IXijECL2j0yPB34g= X-Google-Smtp-Source: ABdhPJyokREXhb9I+yi7XPBn3Clcco/OkeWRx93XULAXLg21aNGdhno2hENIffpFekrX1GSaWXd85cQGIz8= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90b:4c4e:b0:1d2:9f85:66b2 with SMTP id np14-20020a17090b4c4e00b001d29f8566b2mr2240278pjb.128.1651704746242; Wed, 04 May 2022 15:52:26 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:48 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-103-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 102/128] KVM: selftests: Convert vgic_init away from vm_create_default_with_vcpus() From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use a combination of vm_create(), vm_create_with_vcpus(), and vm_vcpu_add() to convert vgic_init from vm_create_default_with_vcpus(), and away from referncing vCPUs by ID. Thus continues the march toward total annihilation of "default" helpers. Signed-off-by: Sean Christopherson --- .../testing/selftests/kvm/aarch64/vgic_init.c | 79 ++++++++++++------- 1 file changed, 49 insertions(+), 30 deletions(-) diff --git a/tools/testing/selftests/kvm/aarch64/vgic_init.c b/tools/testin= g/selftests/kvm/aarch64/vgic_init.c index f8d41f12bdca..f93e9fa6ecd4 100644 --- a/tools/testing/selftests/kvm/aarch64/vgic_init.c +++ b/tools/testing/selftests/kvm/aarch64/vgic_init.c @@ -49,19 +49,21 @@ static void guest_code(void) } =20 /* we don't want to assert on run execution, hence that helper */ -static int run_vcpu(struct kvm_vm *vm, uint32_t vcpuid) +static int run_vcpu(struct kvm_vcpu *vcpu) { - ucall_init(vm, NULL); + ucall_init(vcpu->vm, NULL); =20 - return __vcpu_run(vm, vcpuid) ? -errno : 0; + return __vcpu_run(vcpu->vm, vcpu->id) ? -errno : 0; } =20 -static struct vm_gic vm_gic_create_with_vcpus(uint32_t gic_dev_type, uint3= 2_t nr_vcpus) +static struct vm_gic vm_gic_create_with_vcpus(uint32_t gic_dev_type, + uint32_t nr_vcpus, + struct kvm_vcpu *vcpus[]) { struct vm_gic v; =20 v.gic_dev_type =3D gic_dev_type; - v.vm =3D vm_create_default_with_vcpus(nr_vcpus, 0, 0, guest_code, NULL); + v.vm =3D vm_create_with_vcpus(nr_vcpus, guest_code, vcpus); v.gic_fd =3D kvm_create_device(v.vm, gic_dev_type); =20 return v; @@ -305,10 +307,11 @@ static void subtest_v3_redist_regions(struct vm_gic *= v) */ static void test_vgic_then_vcpus(uint32_t gic_dev_type) { + struct kvm_vcpu *vcpus[NR_VCPUS]; struct vm_gic v; int ret, i; =20 - v =3D vm_gic_create_with_vcpus(gic_dev_type, 1); + v =3D vm_gic_create_with_vcpus(gic_dev_type, 1, vcpus); =20 subtest_dist_rdist(&v); =20 @@ -316,7 +319,7 @@ static void test_vgic_then_vcpus(uint32_t gic_dev_type) for (i =3D 1; i < NR_VCPUS; ++i) vm_vcpu_add(v.vm, i, guest_code); =20 - ret =3D run_vcpu(v.vm, 3); + ret =3D run_vcpu(vcpus[3]); TEST_ASSERT(ret =3D=3D -EINVAL, "dist/rdist overlap detected on 1st vcpu = run"); =20 vm_gic_destroy(&v); @@ -325,14 +328,15 @@ static void test_vgic_then_vcpus(uint32_t gic_dev_typ= e) /* All the VCPUs are created before the VGIC KVM device gets initialized */ static void test_vcpus_then_vgic(uint32_t gic_dev_type) { + struct kvm_vcpu *vcpus[NR_VCPUS]; struct vm_gic v; int ret; =20 - v =3D vm_gic_create_with_vcpus(gic_dev_type, NR_VCPUS); + v =3D vm_gic_create_with_vcpus(gic_dev_type, NR_VCPUS, vcpus); =20 subtest_dist_rdist(&v); =20 - ret =3D run_vcpu(v.vm, 3); + ret =3D run_vcpu(vcpus[3]); TEST_ASSERT(ret =3D=3D -EINVAL, "dist/rdist overlap detected on 1st vcpu = run"); =20 vm_gic_destroy(&v); @@ -340,37 +344,38 @@ static void test_vcpus_then_vgic(uint32_t gic_dev_typ= e) =20 static void test_v3_new_redist_regions(void) { + struct kvm_vcpu *vcpus[NR_VCPUS]; void *dummy =3D NULL; struct vm_gic v; uint64_t addr; int ret; =20 - v =3D vm_gic_create_with_vcpus(KVM_DEV_TYPE_ARM_VGIC_V3, NR_VCPUS); + v =3D vm_gic_create_with_vcpus(KVM_DEV_TYPE_ARM_VGIC_V3, NR_VCPUS, vcpus); subtest_v3_redist_regions(&v); kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL, KVM_DEV_ARM_VGIC_CTRL_INIT, NULL); =20 - ret =3D run_vcpu(v.vm, 3); + ret =3D run_vcpu(vcpus[3]); TEST_ASSERT(ret =3D=3D -ENXIO, "running without sufficient number of rdis= ts"); vm_gic_destroy(&v); =20 /* step2 */ =20 - v =3D vm_gic_create_with_vcpus(KVM_DEV_TYPE_ARM_VGIC_V3, NR_VCPUS); + v =3D vm_gic_create_with_vcpus(KVM_DEV_TYPE_ARM_VGIC_V3, NR_VCPUS, vcpus); subtest_v3_redist_regions(&v); =20 addr =3D REDIST_REGION_ATTR_ADDR(1, 0x280000, 0, 2); kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr); =20 - ret =3D run_vcpu(v.vm, 3); + ret =3D run_vcpu(vcpus[3]); TEST_ASSERT(ret =3D=3D -EBUSY, "running without vgic explicit init"); =20 vm_gic_destroy(&v); =20 /* step 3 */ =20 - v =3D vm_gic_create_with_vcpus(KVM_DEV_TYPE_ARM_VGIC_V3, NR_VCPUS); + v =3D vm_gic_create_with_vcpus(KVM_DEV_TYPE_ARM_VGIC_V3, NR_VCPUS, vcpus); subtest_v3_redist_regions(&v); =20 ret =3D __kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, @@ -385,7 +390,7 @@ static void test_v3_new_redist_regions(void) kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL, KVM_DEV_ARM_VGIC_CTRL_INIT, NULL); =20 - ret =3D run_vcpu(v.vm, 3); + ret =3D run_vcpu(vcpus[3]); TEST_ASSERT(!ret, "vcpu run"); =20 vm_gic_destroy(&v); @@ -398,21 +403,22 @@ static void test_v3_typer_accesses(void) uint32_t val; int ret, i; =20 - v.vm =3D vm_create_default(0, 0, guest_code); + v.vm =3D vm_create(DEFAULT_GUEST_PHY_PAGES); + (void)vm_vcpu_add(v.vm, 0, guest_code); =20 v.gic_fd =3D kvm_create_device(v.vm, KVM_DEV_TYPE_ARM_VGIC_V3); =20 - vm_vcpu_add(v.vm, 3, guest_code); + (void)vm_vcpu_add(v.vm, 3, guest_code); =20 ret =3D v3_redist_reg_get(v.gic_fd, 1, GICR_TYPER, &val); TEST_ASSERT(ret && errno =3D=3D EINVAL, "attempting to read GICR_TYPER of= non created vcpu"); =20 - vm_vcpu_add(v.vm, 1, guest_code); + (void)vm_vcpu_add(v.vm, 1, guest_code); =20 ret =3D v3_redist_reg_get(v.gic_fd, 1, GICR_TYPER, &val); TEST_ASSERT(ret && errno =3D=3D EBUSY, "read GICR_TYPER before GIC initia= lized"); =20 - vm_vcpu_add(v.vm, 2, guest_code); + (void)vm_vcpu_add(v.vm, 2, guest_code); =20 kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL, KVM_DEV_ARM_VGIC_CTRL_INIT, NULL); @@ -460,6 +466,21 @@ static void test_v3_typer_accesses(void) vm_gic_destroy(&v); } =20 +static struct vm_gic vm_gic_v3_create_with_vcpuids(int nr_vcpus, + uint32_t vcpuids[]) +{ + struct vm_gic v; + int i; + + v.vm =3D vm_create(DEFAULT_GUEST_PHY_PAGES); + for (i =3D 0; i < nr_vcpus; i++) + vm_vcpu_add(v.vm, vcpuids[i], guest_code); + + v.gic_fd =3D kvm_create_device(v.vm, KVM_DEV_TYPE_ARM_VGIC_V3); + + return v; +} + /** * Test GICR_TYPER last bit with new redist regions * rdist regions #1 and #2 are contiguous @@ -478,9 +499,7 @@ static void test_v3_last_bit_redist_regions(void) uint32_t val; int ret; =20 - v.vm =3D vm_create_default_with_vcpus(6, 0, 0, guest_code, vcpuids); - - v.gic_fd =3D kvm_create_device(v.vm, KVM_DEV_TYPE_ARM_VGIC_V3); + v =3D vm_gic_v3_create_with_vcpuids(ARRAY_SIZE(vcpuids), vcpuids); =20 kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL, KVM_DEV_ARM_VGIC_CTRL_INIT, NULL); @@ -527,9 +546,7 @@ static void test_v3_last_bit_single_rdist(void) uint32_t val; int ret; =20 - v.vm =3D vm_create_default_with_vcpus(6, 0, 0, guest_code, vcpuids); - - v.gic_fd =3D kvm_create_device(v.vm, KVM_DEV_TYPE_ARM_VGIC_V3); + v =3D vm_gic_v3_create_with_vcpuids(ARRAY_SIZE(vcpuids), vcpuids); =20 kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL, KVM_DEV_ARM_VGIC_CTRL_INIT, NULL); @@ -559,11 +576,12 @@ static void test_v3_last_bit_single_rdist(void) /* Uses the legacy REDIST region API. */ static void test_v3_redist_ipa_range_check_at_vcpu_run(void) { + struct kvm_vcpu *vcpus[NR_VCPUS]; struct vm_gic v; int ret, i; uint64_t addr; =20 - v =3D vm_gic_create_with_vcpus(KVM_DEV_TYPE_ARM_VGIC_V3, 1); + v =3D vm_gic_create_with_vcpus(KVM_DEV_TYPE_ARM_VGIC_V3, 1, vcpus); =20 /* Set space for 3 redists, we have 1 vcpu, so this succeeds. */ addr =3D max_phys_size - (3 * 2 * 0x10000); @@ -576,13 +594,13 @@ static void test_v3_redist_ipa_range_check_at_vcpu_ru= n(void) =20 /* Add the rest of the VCPUs */ for (i =3D 1; i < NR_VCPUS; ++i) - vm_vcpu_add(v.vm, i, guest_code); + vcpus[i] =3D vm_vcpu_add(v.vm, i, guest_code); =20 kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL, KVM_DEV_ARM_VGIC_CTRL_INIT, NULL); =20 /* Attempt to run a vcpu without enough redist space. */ - ret =3D run_vcpu(v.vm, 2); + ret =3D run_vcpu(vcpus[2]); TEST_ASSERT(ret && errno =3D=3D EINVAL, "redist base+size above PA range detected on 1st vcpu run"); =20 @@ -591,11 +609,12 @@ static void test_v3_redist_ipa_range_check_at_vcpu_ru= n(void) =20 static void test_v3_its_region(void) { + struct kvm_vcpu *vcpus[NR_VCPUS]; struct vm_gic v; uint64_t addr; int its_fd, ret; =20 - v =3D vm_gic_create_with_vcpus(KVM_DEV_TYPE_ARM_VGIC_V3, NR_VCPUS); + v =3D vm_gic_create_with_vcpus(KVM_DEV_TYPE_ARM_VGIC_V3, NR_VCPUS, vcpus); its_fd =3D kvm_create_device(v.vm, KVM_DEV_TYPE_ARM_VGIC_ITS); =20 addr =3D 0x401000; @@ -639,7 +658,7 @@ int test_kvm_device(uint32_t gic_dev_type) uint32_t other; int ret; =20 - v.vm =3D vm_create_default_with_vcpus(NR_VCPUS, 0, 0, guest_code, NULL); + v.vm =3D vm_create_with_vcpus(NR_VCPUS, guest_code, NULL); =20 /* try to create a non existing KVM device */ ret =3D __kvm_test_create_device(v.vm, 0); --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 D8FFBC38A2B for ; Wed, 4 May 2022 23:07:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1384309AbiEDXHv (ORCPT ); Wed, 4 May 2022 19:07:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45714 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1380135AbiEDW7p (ORCPT ); Wed, 4 May 2022 18:59:45 -0400 Received: from mail-pj1-x1049.google.com (mail-pj1-x1049.google.com [IPv6:2607:f8b0:4864:20::1049]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 63BB856766 for ; Wed, 4 May 2022 15:52:55 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id gn21-20020a17090ac79500b001dc8a800410so1839393pjb.0 for ; Wed, 04 May 2022 15:52:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=4bly9fCgHFsdmM5ZCMYizW8PoZOq6e48Buux7KsvtyA=; b=WRFS6281SNf8tHoud0fyD1eZamZejhaqX7WSEmfnMKwQyBCetEeMLuWC+JYKfdldQ8 l1oHrlVkydxY4jmzU9rVbluCpbHPDkAQxOPu3A9SGnP4OjRUft/Uj6VlC2zJLe5b6ak+ sQRzR7ekevckPo5i4opNQsQEvmZhJQW++ta+62t99gKL0WOTCA12kE0gcuZOxRXY6ur3 9N28qvfDCw1Lamn/4w2TLmRBHhRStCubmZokHiS08GqV6tTQYvWUXeBXCnWxJhsWLwQL ZtErrUdAqGFSm1bUNelbtjToJjTqAcR2oPAx9CPtswEPouGJ2ISmhU68aHlgAF06Vef2 0o5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=4bly9fCgHFsdmM5ZCMYizW8PoZOq6e48Buux7KsvtyA=; b=N8Qcd4Y2N7WM8St3HB19PbN30j/2YptwfxjcHr0iJBoUSpG//w2onWBYLfoSCIl2kH Er0ejT8MbDtfMlzKD7yQygcCQ8uSYYyt9e/TZYiApulz6srPmmPj7caPGYXs3sC19ZoY Clz7yl57JkeS+F1PRbt/qWHtbWQEPoSemut9pd3G6dhp74WGS0imAv67N7y5nqnLIjLI mKnJaOBH57oXDFBSvPYg56dEQ2I6cY2UJqCC7CSwddPK5jmFhY+Xs+yd2iwEUvVY42DZ CaTKa9Bbof7h25UUf5U7da74UuVTYucE12qS2eFMIhjI9buWh46+yu8/ZPa9qVAK8VUk Hqsg== X-Gm-Message-State: AOAM531XAVnOO+RH0+BGBMcGLdBCKxscXXPDb4JTzjS/35toA1A5ubR5 4CgkLVs5Km0XxsTsDurhoEmQNvGOxF4= X-Google-Smtp-Source: ABdhPJwcHfKozL1JFQZ3DRcTDHk44DqcrLTNA3j+FfEw4E191noBj+CeMbfU2kPcK2n6QalJvTgrkv28qLs= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:e808:b0:15e:b27b:9302 with SMTP id u8-20020a170902e80800b0015eb27b9302mr13171471plg.54.1651704748138; Wed, 04 May 2022 15:52:28 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:49 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-104-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 103/128] KVM: selftests: Convert xapic_ipi_test away from *_VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert vm_create_with_one_vcpu to use vm_create_with_vcpus() and pass around 'struct kvm_vcpu' objects instead of passing around vCPU IDs. Don't bother with macros for the HALTER versus SENDER indices, the vast majority of references don't differentiate between the vCPU roles, and the code that does either has a comment or an explicit reference to the role, e.g. to halter_guest_code() or sender_guest_code(). Signed-off-by: Sean Christopherson --- .../selftests/kvm/x86_64/xapic_ipi_test.c | 48 ++++++++----------- 1 file changed, 20 insertions(+), 28 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/xapic_ipi_test.c b/tools/te= sting/selftests/kvm/x86_64/xapic_ipi_test.c index 8b366652be31..4484ee563b18 100644 --- a/tools/testing/selftests/kvm/x86_64/xapic_ipi_test.c +++ b/tools/testing/selftests/kvm/x86_64/xapic_ipi_test.c @@ -39,9 +39,6 @@ /* Default delay between migrate_pages calls (microseconds) */ #define DEFAULT_DELAY_USECS 500000 =20 -#define HALTER_VCPU_ID 0 -#define SENDER_VCPU_ID 1 - /* * Vector for IPI from sender vCPU to halting vCPU. * Value is arbitrary and was chosen for the alternating bit pattern. Any @@ -79,8 +76,7 @@ struct test_data_page { =20 struct thread_params { struct test_data_page *data; - struct kvm_vm *vm; - uint32_t vcpu_id; + struct kvm_vcpu *vcpu; uint64_t *pipis_rcvd; /* host address of ipis_rcvd global */ }; =20 @@ -198,6 +194,7 @@ static void sender_guest_code(struct test_data_page *da= ta) static void *vcpu_thread(void *arg) { struct thread_params *params =3D (struct thread_params *)arg; + struct kvm_vcpu *vcpu =3D params->vcpu; struct ucall uc; int old; int r; @@ -206,17 +203,17 @@ static void *vcpu_thread(void *arg) r =3D pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &old); TEST_ASSERT(r =3D=3D 0, "pthread_setcanceltype failed on vcpu_id=3D%u with errno=3D%d", - params->vcpu_id, r); + vcpu->id, r); =20 - fprintf(stderr, "vCPU thread running vCPU %u\n", params->vcpu_id); - vcpu_run(params->vm, params->vcpu_id); - exit_reason =3D vcpu_state(params->vm, params->vcpu_id)->exit_reason; + fprintf(stderr, "vCPU thread running vCPU %u\n", vcpu->id); + vcpu_run(vcpu->vm, vcpu->id); + exit_reason =3D vcpu->run->exit_reason; =20 TEST_ASSERT(exit_reason =3D=3D KVM_EXIT_IO, "vCPU %u exited with unexpected exit reason %u-%s, expected KVM_EXIT= _IO", - params->vcpu_id, exit_reason, exit_reason_str(exit_reason)); + vcpu->id, exit_reason, exit_reason_str(exit_reason)); =20 - if (get_ucall(params->vm, params->vcpu_id, &uc) =3D=3D UCALL_ABORT) { + if (get_ucall(vcpu->vm, vcpu->id, &uc) =3D=3D UCALL_ABORT) { TEST_ASSERT(false, "vCPU %u exited with error: %s.\n" "Sending vCPU sent %lu IPIs to halting vCPU\n" @@ -224,7 +221,7 @@ static void *vcpu_thread(void *arg) "Halter TPR=3D%#x PPR=3D%#x LVR=3D%#x\n" "Migrations attempted: %lu\n" "Migrations completed: %lu\n", - params->vcpu_id, (const char *)uc.args[0], + vcpu->id, (const char *)uc.args[0], params->data->ipis_sent, params->data->hlt_count, params->data->wake_count, *params->pipis_rcvd, params->data->halter_tpr, @@ -236,7 +233,7 @@ static void *vcpu_thread(void *arg) return NULL; } =20 -static void cancel_join_vcpu_thread(pthread_t thread, uint32_t vcpu_id) +static void cancel_join_vcpu_thread(pthread_t thread, struct kvm_vcpu *vcp= u) { void *retval; int r; @@ -244,12 +241,12 @@ static void cancel_join_vcpu_thread(pthread_t thread,= uint32_t vcpu_id) r =3D pthread_cancel(thread); TEST_ASSERT(r =3D=3D 0, "pthread_cancel on vcpu_id=3D%d failed with errno=3D%d", - vcpu_id, r); + vcpu->id, r); =20 r =3D pthread_join(thread, &retval); TEST_ASSERT(r =3D=3D 0, "pthread_join on vcpu_id=3D%d failed with errno=3D%d", - vcpu_id, r); + vcpu->id, r); TEST_ASSERT(retval =3D=3D PTHREAD_CANCELED, "expected retval=3D%p, got %p", PTHREAD_CANCELED, retval); @@ -415,34 +412,30 @@ int main(int argc, char *argv[]) if (delay_usecs <=3D 0) delay_usecs =3D DEFAULT_DELAY_USECS; =20 - vm =3D vm_create_default(HALTER_VCPU_ID, 0, halter_guest_code); - params[0].vm =3D vm; - params[1].vm =3D vm; + vm =3D vm_create_with_one_vcpu(¶ms[0].vcpu, halter_guest_code); =20 vm_init_descriptor_tables(vm); - vcpu_init_descriptor_tables(vm, HALTER_VCPU_ID); + vcpu_init_descriptor_tables(vm, params[0].vcpu->id); vm_install_exception_handler(vm, IPI_VECTOR, guest_ipi_handler); =20 virt_pg_map(vm, APIC_DEFAULT_GPA, APIC_DEFAULT_GPA); =20 - vm_vcpu_add(vm, SENDER_VCPU_ID, sender_guest_code); + params[1].vcpu =3D vm_vcpu_add(vm, 1, sender_guest_code); =20 test_data_page_vaddr =3D vm_vaddr_alloc_page(vm); - data =3D - (struct test_data_page *)addr_gva2hva(vm, test_data_page_vaddr); + data =3D addr_gva2hva(vm, test_data_page_vaddr); memset(data, 0, sizeof(*data)); params[0].data =3D data; params[1].data =3D data; =20 - vcpu_args_set(vm, HALTER_VCPU_ID, 1, test_data_page_vaddr); - vcpu_args_set(vm, SENDER_VCPU_ID, 1, test_data_page_vaddr); + vcpu_args_set(vm, params[0].vcpu->id, 1, test_data_page_vaddr); + vcpu_args_set(vm, params[1].vcpu->id, 1, test_data_page_vaddr); =20 pipis_rcvd =3D (uint64_t *)addr_gva2hva(vm, (uint64_t)&ipis_rcvd); params[0].pipis_rcvd =3D pipis_rcvd; params[1].pipis_rcvd =3D pipis_rcvd; =20 /* Start halter vCPU thread and wait for it to execute first HLT. */ - params[0].vcpu_id =3D HALTER_VCPU_ID; r =3D pthread_create(&threads[0], NULL, vcpu_thread, ¶ms[0]); TEST_ASSERT(r =3D=3D 0, "pthread_create halter failed errno=3D%d", errno); @@ -462,7 +455,6 @@ int main(int argc, char *argv[]) "Halter vCPU thread reported its APIC ID: %u after %d seconds.\n", data->halter_apic_id, wait_secs); =20 - params[1].vcpu_id =3D SENDER_VCPU_ID; r =3D pthread_create(&threads[1], NULL, vcpu_thread, ¶ms[1]); TEST_ASSERT(r =3D=3D 0, "pthread_create sender failed errno=3D%d", errno); =20 @@ -478,8 +470,8 @@ int main(int argc, char *argv[]) /* * Cancel threads and wait for them to stop. */ - cancel_join_vcpu_thread(threads[0], HALTER_VCPU_ID); - cancel_join_vcpu_thread(threads[1], SENDER_VCPU_ID); + cancel_join_vcpu_thread(threads[0], params[0].vcpu); + cancel_join_vcpu_thread(threads[1], params[1].vcpu); =20 fprintf(stderr, "Test successful after running for %d seconds.\n" --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 4EE27C47086 for ; Wed, 4 May 2022 23:07:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1382750AbiEDXGg (ORCPT ); Wed, 4 May 2022 19:06:36 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45536 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1380177AbiEDW7r (ORCPT ); Wed, 4 May 2022 18:59:47 -0400 Received: from mail-pg1-x54a.google.com (mail-pg1-x54a.google.com [IPv6:2607:f8b0:4864:20::54a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EC20B56C04 for ; Wed, 4 May 2022 15:52:59 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id f7-20020a6547c7000000b003c600995546so782769pgs.5 for ; Wed, 04 May 2022 15:52:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=jBOKPgITQ+t6KgcUpnbhwnACndUi+3U33hpnYQtppvw=; b=NqLl0hkSgRyIFwt8VrOmoOraEml7+XO5lFudxG00uEp0Ai27qJREF3SFyKsWVeCekY 8bx4XkdY4GbXxU8AyNFBP22cDZZxznaxVLmDAEBENCPU2638haWImZRrWClJhi+ba0RK vH88cXvptLSIPASh6USpFzws7ZE95meGElI8szA3Yu+tRvvBNxfRu5OWGU9YJk2ZnXiS GZzy5tzqUmvgEM+OuzbPQUJW0ehpKOAFf0vDNvkqMbMIhSvMPt9yv4uupeelvt1Gu/Qu /M5IXNl6ZdnApWsLsDjjcVThMXcCtTs8FNn4orPOWOMgUFHktCnO1S/di0VJaOeKR2E/ dwKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=jBOKPgITQ+t6KgcUpnbhwnACndUi+3U33hpnYQtppvw=; b=IXBaaQnHcf/n0+z4xJvVR+jl4bt9vbgPVk00adnhBQdjM4ii6fXt011Ezo/LCHBx/E xpDOKdUxN+mCF4EJBk94IV1bTdY8fokUNtJjlrWFqUKsY0nuiz4Y1FHMvT5OqZGvg9Ak iJe+P90U3A/WPqS2sSkyjymqfl3yLa4YJQQqCf08GHYgRuXoUIMPcz7Ns2hEmxNzKJtt tNuic7XtDzx4MneSvWv6pCRgSa0k1uEYK+9EIwV2N31wFd2yswDEE0Eqeyb/pAod1/Vd A4SNZhIz3Q7jhs7YuMIAfDMxg5i4V9sLOUjfTe/J0ww+6ziebFVuYK8bvSVT7w+As8Pk 5BlQ== X-Gm-Message-State: AOAM533aHXOqnFE/auvReq+7bHBcGnXqxfuyuMaXs551kIyp93HIIHPm ssD/upMsTiXBZVS/gyp0HAl74PNl75E= X-Google-Smtp-Source: ABdhPJxgXnp+T49jFWgHWAzeuM3s5zWXBQymglLXehyG7OiGlJ2Uw1D64mGQ9Y4ECz5Bv0AcJlGLuQYCCyU= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:e510:b0:1d9:ee23:9fa1 with SMTP id t16-20020a17090ae51000b001d9ee239fa1mr140576pjy.0.1651704749981; Wed, 04 May 2022 15:52:29 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:50 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-105-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 104/128] KVM: selftests: Convert sync_regs_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert sync_regs_test to use vm_create_with_vcpus() and pass around a 'struct kvm_vcpu' object instead of passing around vCPU IDs. Note, this is a "functional" change in the sense that the test now creates a vCPU with vcpu_id=3D=3D0 instead of vcpu_id=3D=3D5. The non-zero VCPU_ID was 10= 0% arbitrary and added little to no validation coverage. If testing non-zero vCPU IDs is desirable for generic tests, that can be done in the future by tweaking the VM creation helpers. Signed-off-by: Sean Christopherson --- .../selftests/kvm/s390x/sync_regs_test.c | 37 +++++++++---------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/tools/testing/selftests/kvm/s390x/sync_regs_test.c b/tools/tes= ting/selftests/kvm/s390x/sync_regs_test.c index caf7b8859a94..bf52cabeaed6 100644 --- a/tools/testing/selftests/kvm/s390x/sync_regs_test.c +++ b/tools/testing/selftests/kvm/s390x/sync_regs_test.c @@ -22,8 +22,6 @@ #include "kvm_util.h" #include "diag318_test_handler.h" =20 -#define VCPU_ID 5 - static void guest_code(void) { /* @@ -76,6 +74,7 @@ static void compare_sregs(struct kvm_sregs *left, struct = kvm_sync_regs *right) =20 int main(int argc, char *argv[]) { + struct kvm_vcpu *vcpu; struct kvm_vm *vm; struct kvm_run *run; struct kvm_regs regs; @@ -92,43 +91,43 @@ int main(int argc, char *argv[]) } =20 /* Create VM */ - vm =3D vm_create_default(VCPU_ID, 0, guest_code); + vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); =20 - run =3D vcpu_state(vm, VCPU_ID); + run =3D vcpu->run; =20 /* Request reading invalid register set from VCPU. */ run->kvm_valid_regs =3D INVALID_SYNC_FIELD; - rv =3D _vcpu_run(vm, VCPU_ID); + rv =3D _vcpu_run(vm, vcpu->id); TEST_ASSERT(rv < 0 && errno =3D=3D EINVAL, "Invalid kvm_valid_regs did not cause expected KVM_RUN error: %d\n", rv); - vcpu_state(vm, VCPU_ID)->kvm_valid_regs =3D 0; + run->kvm_valid_regs =3D 0; =20 run->kvm_valid_regs =3D INVALID_SYNC_FIELD | TEST_SYNC_FIELDS; - rv =3D _vcpu_run(vm, VCPU_ID); + rv =3D _vcpu_run(vm, vcpu->id); TEST_ASSERT(rv < 0 && errno =3D=3D EINVAL, "Invalid kvm_valid_regs did not cause expected KVM_RUN error: %d\n", rv); - vcpu_state(vm, VCPU_ID)->kvm_valid_regs =3D 0; + run->kvm_valid_regs =3D 0; =20 /* Request setting invalid register set into VCPU. */ run->kvm_dirty_regs =3D INVALID_SYNC_FIELD; - rv =3D _vcpu_run(vm, VCPU_ID); + rv =3D _vcpu_run(vm, vcpu->id); TEST_ASSERT(rv < 0 && errno =3D=3D EINVAL, "Invalid kvm_dirty_regs did not cause expected KVM_RUN error: %d\n", rv); - vcpu_state(vm, VCPU_ID)->kvm_dirty_regs =3D 0; + run->kvm_dirty_regs =3D 0; =20 run->kvm_dirty_regs =3D INVALID_SYNC_FIELD | TEST_SYNC_FIELDS; - rv =3D _vcpu_run(vm, VCPU_ID); + rv =3D _vcpu_run(vm, vcpu->id); TEST_ASSERT(rv < 0 && errno =3D=3D EINVAL, "Invalid kvm_dirty_regs did not cause expected KVM_RUN error: %d\n", rv); - vcpu_state(vm, VCPU_ID)->kvm_dirty_regs =3D 0; + run->kvm_dirty_regs =3D 0; =20 /* Request and verify all valid register sets. */ run->kvm_valid_regs =3D TEST_SYNC_FIELDS; - rv =3D _vcpu_run(vm, VCPU_ID); + rv =3D _vcpu_run(vm, vcpu->id); TEST_ASSERT(rv =3D=3D 0, "vcpu_run failed: %d\n", rv); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_S390_SIEIC, "Unexpected exit reason: %u (%s)\n", @@ -141,10 +140,10 @@ int main(int argc, char *argv[]) run->s390_sieic.icptcode, run->s390_sieic.ipa, run->s390_sieic.ipb); =20 - vcpu_regs_get(vm, VCPU_ID, ®s); + vcpu_regs_get(vm, vcpu->id, ®s); compare_regs(®s, &run->s.regs); =20 - vcpu_sregs_get(vm, VCPU_ID, &sregs); + vcpu_sregs_get(vm, vcpu->id, &sregs); compare_sregs(&sregs, &run->s.regs); =20 /* Set and verify various register values */ @@ -159,7 +158,7 @@ int main(int argc, char *argv[]) run->kvm_dirty_regs |=3D KVM_SYNC_DIAG318; } =20 - rv =3D _vcpu_run(vm, VCPU_ID); + rv =3D _vcpu_run(vm, vcpu->id); TEST_ASSERT(rv =3D=3D 0, "vcpu_run failed: %d\n", rv); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_S390_SIEIC, "Unexpected exit reason: %u (%s)\n", @@ -175,10 +174,10 @@ int main(int argc, char *argv[]) "diag318 sync regs value incorrect 0x%llx.", run->s.regs.diag318); =20 - vcpu_regs_get(vm, VCPU_ID, ®s); + vcpu_regs_get(vm, vcpu->id, ®s); compare_regs(®s, &run->s.regs); =20 - vcpu_sregs_get(vm, VCPU_ID, &sregs); + vcpu_sregs_get(vm, vcpu->id, &sregs); compare_sregs(&sregs, &run->s.regs); =20 /* Clear kvm_dirty_regs bits, verify new s.regs values are @@ -188,7 +187,7 @@ int main(int argc, char *argv[]) run->kvm_dirty_regs =3D 0; run->s.regs.gprs[11] =3D 0xDEADBEEF; run->s.regs.diag318 =3D 0x4B1D; - rv =3D _vcpu_run(vm, VCPU_ID); + rv =3D _vcpu_run(vm, vcpu->id); TEST_ASSERT(rv =3D=3D 0, "vcpu_run failed: %d\n", rv); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_S390_SIEIC, "Unexpected exit reason: %u (%s)\n", --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 0A7C0C3A59E for ; Wed, 4 May 2022 23:07:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1384228AbiEDXHs (ORCPT ); Wed, 4 May 2022 19:07:48 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46962 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1380201AbiEDW7t (ORCPT ); Wed, 4 May 2022 18:59:49 -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 20DAE56C0E for ; Wed, 4 May 2022 15:53:01 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id l5-20020a170902ec0500b0015cf1cfa4eeso1368133pld.17 for ; Wed, 04 May 2022 15:53:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=ejt3XeASRuxrfpgeoyKmbPytv7MRM47JDoD5bu32ApE=; b=U1leitxRyCTziij67KBTtIJ3cMUxmcH5nAhK83lUpZeHQvXaR7vEWxe0/a9IMlrCs9 57QLP5rhy9GVxUHlfgpglYR9N2UTyMhzIQOIQE7YaTDmhMZ9DWyxJ5qfw4HCRi00xgh6 tUbrXA+8xZoiY9D6uRB7mitZYoQVAXemFfxfwq4UYf86bHEf/w7Qo5f4CSTiSwmiLL6Y zFjAZ6dKUKq0UtUnkvWzRunr5zcLko0I+SR6FE1C9ZOr2GXSXY+o07Q7/wr/juslHrmt 9Lww78H95rvJVvTJJJgYRSHL+9GoJ7JckZ+QE+VjKKnwzQDFGYvm5InKPHmLcqNN/tKt Sibg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=ejt3XeASRuxrfpgeoyKmbPytv7MRM47JDoD5bu32ApE=; b=QBQIX6hdOM9/Lx5Q4kNIWtU5I4z7Yj2RpPa/wD5LCfk1DHZSgS3JAyDoLEdwAuOLuw ueP/e7bKnNwyan8z4R+ImlZoSmVjDzkCBiF3mxRTrV0zCAjNdVWbFu3StlIzvZLyR1II NmTrPwYW3lZpYEQ5QkC/uMr5a8KVamX/WAXA1QpTwpjCL9b8CfguqoKfKjXyJYRGek/6 3W+nK8N8Z8ULaHPCeCM/KbQfV8/qtXYdgDAdI79/bMnsi9MZ9QOP439QdSroMbARrH/r 2TtcYIyinoxnpEpG+Iy5XAgOqxizgsUuu0wFMly7TsbNGqvT5UJbfC04b9HC/IqKc2Q/ 3a6w== X-Gm-Message-State: AOAM531nyt5bfM6k4/v7lU++f3m1a95BDE3Ei94lJ6x//rkfOilbciks zyty/oryTm7rJomInuQhkLGaiDj7wBE= X-Google-Smtp-Source: ABdhPJxJynHUNPShFz67qglSHrFGi4CecsJCJLogHPZYvdy1VcOJ/xScDb6A8Xm9vqrlQH7x4lvqvEE3Y4s= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:c986:b0:1d9:56e7:4e83 with SMTP id w6-20020a17090ac98600b001d956e74e83mr140243pjt.1.1651704751970; Wed, 04 May 2022 15:52:31 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:51 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-106-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 105/128] KVM: selftests: Convert s390's "resets" test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Pass around a 'struct kvm_vcpu' object in the "resets" test instead of referencing the vCPU by the global VCPU_ID. Rename the #define for the vCPU's ID to ARBITRARY_NON_ZERO_VCPU_ID to make it more obvious that (a) the value matters but (b) is otherwise arbitrary. Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/s390x/resets.c | 137 ++++++++++++--------- 1 file changed, 77 insertions(+), 60 deletions(-) diff --git a/tools/testing/selftests/kvm/s390x/resets.c b/tools/testing/sel= ftests/kvm/s390x/resets.c index cc4b7c86d69f..c9233f14689c 100644 --- a/tools/testing/selftests/kvm/s390x/resets.c +++ b/tools/testing/selftests/kvm/s390x/resets.c @@ -13,14 +13,12 @@ #include "test_util.h" #include "kvm_util.h" =20 -#define VCPU_ID 3 #define LOCAL_IRQS 32 =20 -struct kvm_s390_irq buf[VCPU_ID + LOCAL_IRQS]; +#define ARBITRARY_NON_ZERO_VCPU_ID 3 + +struct kvm_s390_irq buf[ARBITRARY_NON_ZERO_VCPU_ID + LOCAL_IRQS]; =20 -struct kvm_vm *vm; -struct kvm_run *run; -struct kvm_sync_regs *sync_regs; static uint8_t regs_null[512]; =20 static void guest_code_initial(void) @@ -58,25 +56,25 @@ static void guest_code_initial(void) ); } =20 -static void test_one_reg(uint64_t id, uint64_t value) +static void test_one_reg(struct kvm_vcpu *vcpu, uint64_t id, uint64_t valu= e) { struct kvm_one_reg reg; uint64_t eval_reg; =20 reg.addr =3D (uintptr_t)&eval_reg; reg.id =3D id; - vcpu_get_reg(vm, VCPU_ID, ®); + vcpu_get_reg(vcpu->vm, vcpu->id, ®); TEST_ASSERT(eval_reg =3D=3D value, "value =3D=3D 0x%lx", value); } =20 -static void assert_noirq(void) +static void assert_noirq(struct kvm_vcpu *vcpu) { struct kvm_s390_irq_state irq_state; int irqs; =20 irq_state.len =3D sizeof(buf); irq_state.buf =3D (unsigned long)buf; - irqs =3D __vcpu_ioctl(vm, VCPU_ID, KVM_S390_GET_IRQ_STATE, &irq_state); + irqs =3D __vcpu_ioctl(vcpu->vm, vcpu->id, KVM_S390_GET_IRQ_STATE, &irq_st= ate); /* * irqs contains the number of retrieved interrupts. Any interrupt * (notably, the emergency call interrupt we have injected) should @@ -86,19 +84,20 @@ static void assert_noirq(void) TEST_ASSERT(!irqs, "IRQ pending"); } =20 -static void assert_clear(void) +static void assert_clear(struct kvm_vcpu *vcpu) { + struct kvm_sync_regs *sync_regs =3D &vcpu->run->s.regs; struct kvm_sregs sregs; struct kvm_regs regs; struct kvm_fpu fpu; =20 - vcpu_regs_get(vm, VCPU_ID, ®s); + vcpu_regs_get(vcpu->vm, vcpu->id, ®s); TEST_ASSERT(!memcmp(®s.gprs, regs_null, sizeof(regs.gprs)), "grs =3D= =3D 0"); =20 - vcpu_sregs_get(vm, VCPU_ID, &sregs); + vcpu_sregs_get(vcpu->vm, vcpu->id, &sregs); TEST_ASSERT(!memcmp(&sregs.acrs, regs_null, sizeof(sregs.acrs)), "acrs = =3D=3D 0"); =20 - vcpu_fpu_get(vm, VCPU_ID, &fpu); + vcpu_fpu_get(vcpu->vm, vcpu->id, &fpu); TEST_ASSERT(!memcmp(&fpu.fprs, regs_null, sizeof(fpu.fprs)), "fprs =3D=3D= 0"); =20 /* sync regs */ @@ -112,8 +111,10 @@ static void assert_clear(void) "vrs0-15 =3D=3D 0 (sync_regs)"); } =20 -static void assert_initial_noclear(void) +static void assert_initial_noclear(struct kvm_vcpu *vcpu) { + struct kvm_sync_regs *sync_regs =3D &vcpu->run->s.regs; + TEST_ASSERT(sync_regs->gprs[0] =3D=3D 0xffff000000000000UL, "gpr0 =3D=3D 0xffff000000000000 (sync_regs)"); TEST_ASSERT(sync_regs->gprs[1] =3D=3D 0x0000555500000000UL, @@ -127,13 +128,14 @@ static void assert_initial_noclear(void) TEST_ASSERT(sync_regs->acrs[9] =3D=3D 1, "ar9 =3D=3D 1 (sync_regs)"); } =20 -static void assert_initial(void) +static void assert_initial(struct kvm_vcpu *vcpu) { + struct kvm_sync_regs *sync_regs =3D &vcpu->run->s.regs; struct kvm_sregs sregs; struct kvm_fpu fpu; =20 /* KVM_GET_SREGS */ - vcpu_sregs_get(vm, VCPU_ID, &sregs); + vcpu_sregs_get(vcpu->vm, vcpu->id, &sregs); TEST_ASSERT(sregs.crs[0] =3D=3D 0xE0UL, "cr0 =3D=3D 0xE0 (KVM_GET_SREGS)"= ); TEST_ASSERT(sregs.crs[14] =3D=3D 0xC2000000UL, "cr14 =3D=3D 0xC2000000 (KVM_GET_SREGS)"); @@ -156,36 +158,38 @@ static void assert_initial(void) TEST_ASSERT(sync_regs->gbea =3D=3D 1, "gbea =3D=3D 1 (sync_regs)"); =20 /* kvm_run */ - TEST_ASSERT(run->psw_addr =3D=3D 0, "psw_addr =3D=3D 0 (kvm_run)"); - TEST_ASSERT(run->psw_mask =3D=3D 0, "psw_mask =3D=3D 0 (kvm_run)"); + TEST_ASSERT(vcpu->run->psw_addr =3D=3D 0, "psw_addr =3D=3D 0 (kvm_run)"); + TEST_ASSERT(vcpu->run->psw_mask =3D=3D 0, "psw_mask =3D=3D 0 (kvm_run)"); =20 - vcpu_fpu_get(vm, VCPU_ID, &fpu); + vcpu_fpu_get(vcpu->vm, vcpu->id, &fpu); TEST_ASSERT(!fpu.fpc, "fpc =3D=3D 0"); =20 - test_one_reg(KVM_REG_S390_GBEA, 1); - test_one_reg(KVM_REG_S390_PP, 0); - test_one_reg(KVM_REG_S390_TODPR, 0); - test_one_reg(KVM_REG_S390_CPU_TIMER, 0); - test_one_reg(KVM_REG_S390_CLOCK_COMP, 0); + test_one_reg(vcpu, KVM_REG_S390_GBEA, 1); + test_one_reg(vcpu, KVM_REG_S390_PP, 0); + test_one_reg(vcpu, KVM_REG_S390_TODPR, 0); + test_one_reg(vcpu, KVM_REG_S390_CPU_TIMER, 0); + test_one_reg(vcpu, KVM_REG_S390_CLOCK_COMP, 0); } =20 -static void assert_normal_noclear(void) +static void assert_normal_noclear(struct kvm_vcpu *vcpu) { + struct kvm_sync_regs *sync_regs =3D &vcpu->run->s.regs; + TEST_ASSERT(sync_regs->crs[2] =3D=3D 0x10, "cr2 =3D=3D 10 (sync_regs)"); TEST_ASSERT(sync_regs->crs[8] =3D=3D 1, "cr10 =3D=3D 1 (sync_regs)"); TEST_ASSERT(sync_regs->crs[10] =3D=3D 1, "cr10 =3D=3D 1 (sync_regs)"); TEST_ASSERT(sync_regs->crs[11] =3D=3D -1, "cr11 =3D=3D -1 (sync_regs)"); } =20 -static void assert_normal(void) +static void assert_normal(struct kvm_vcpu *vcpu) { - test_one_reg(KVM_REG_S390_PFTOKEN, KVM_S390_PFAULT_TOKEN_INVALID); - TEST_ASSERT(sync_regs->pft =3D=3D KVM_S390_PFAULT_TOKEN_INVALID, + test_one_reg(vcpu, KVM_REG_S390_PFTOKEN, KVM_S390_PFAULT_TOKEN_INVALID); + TEST_ASSERT(vcpu->run->s.regs.pft =3D=3D KVM_S390_PFAULT_TOKEN_INVALID, "pft =3D=3D 0xff..... (sync_regs)"); - assert_noirq(); + assert_noirq(vcpu); } =20 -static void inject_irq(int cpu_id) +static void inject_irq(struct kvm_vcpu *vcpu) { struct kvm_s390_irq_state irq_state; struct kvm_s390_irq *irq =3D &buf[0]; @@ -195,73 +199,86 @@ static void inject_irq(int cpu_id) irq_state.len =3D sizeof(struct kvm_s390_irq); irq_state.buf =3D (unsigned long)buf; irq->type =3D KVM_S390_INT_EMERGENCY; - irq->u.emerg.code =3D cpu_id; - irqs =3D __vcpu_ioctl(vm, cpu_id, KVM_S390_SET_IRQ_STATE, &irq_state); + irq->u.emerg.code =3D vcpu->id; + irqs =3D __vcpu_ioctl(vcpu->vm, vcpu->id, KVM_S390_SET_IRQ_STATE, &irq_st= ate); TEST_ASSERT(irqs >=3D 0, "Error injecting EMERGENCY IRQ errno %d\n", errn= o); } =20 +static struct kvm_vm *create_vm(struct kvm_vcpu **vcpu) +{ + struct kvm_vm *vm; + + vm =3D vm_create(DEFAULT_GUEST_PHY_PAGES); + + *vcpu =3D vm_vcpu_add(vm, ARBITRARY_NON_ZERO_VCPU_ID, guest_code_initial); + + return vm; +} + static void test_normal(void) { + struct kvm_vcpu *vcpu; + struct kvm_vm *vm; + pr_info("Testing normal reset\n"); - /* Create VM */ - vm =3D vm_create_default(VCPU_ID, 0, guest_code_initial); - run =3D vcpu_state(vm, VCPU_ID); - sync_regs =3D &run->s.regs; + vm =3D create_vm(&vcpu); =20 - vcpu_run(vm, VCPU_ID); + vcpu_run(vm, vcpu->id); =20 - inject_irq(VCPU_ID); + inject_irq(vcpu); =20 - vcpu_ioctl(vm, VCPU_ID, KVM_S390_NORMAL_RESET, 0); + vcpu_ioctl(vm, vcpu->id, KVM_S390_NORMAL_RESET, 0); =20 /* must clears */ - assert_normal(); + assert_normal(vcpu); /* must not clears */ - assert_normal_noclear(); - assert_initial_noclear(); + assert_normal_noclear(vcpu); + assert_initial_noclear(vcpu); =20 kvm_vm_free(vm); } =20 static void test_initial(void) { + struct kvm_vcpu *vcpu; + struct kvm_vm *vm; + pr_info("Testing initial reset\n"); - vm =3D vm_create_default(VCPU_ID, 0, guest_code_initial); - run =3D vcpu_state(vm, VCPU_ID); - sync_regs =3D &run->s.regs; + vm =3D create_vm(&vcpu); =20 - vcpu_run(vm, VCPU_ID); + vcpu_run(vm, vcpu->id); =20 - inject_irq(VCPU_ID); + inject_irq(vcpu); =20 - vcpu_ioctl(vm, VCPU_ID, KVM_S390_INITIAL_RESET, 0); + vcpu_ioctl(vm, vcpu->id, KVM_S390_INITIAL_RESET, 0); =20 /* must clears */ - assert_normal(); - assert_initial(); + assert_normal(vcpu); + assert_initial(vcpu); /* must not clears */ - assert_initial_noclear(); + assert_initial_noclear(vcpu); =20 kvm_vm_free(vm); } =20 static void test_clear(void) { + struct kvm_vcpu *vcpu; + struct kvm_vm *vm; + pr_info("Testing clear reset\n"); - vm =3D vm_create_default(VCPU_ID, 0, guest_code_initial); - run =3D vcpu_state(vm, VCPU_ID); - sync_regs =3D &run->s.regs; + vm =3D create_vm(&vcpu); =20 - vcpu_run(vm, VCPU_ID); + vcpu_run(vm, vcpu->id); =20 - inject_irq(VCPU_ID); + inject_irq(vcpu); =20 - vcpu_ioctl(vm, VCPU_ID, KVM_S390_CLEAR_RESET, 0); + vcpu_ioctl(vm, vcpu->id, KVM_S390_CLEAR_RESET, 0); =20 /* must clears */ - assert_normal(); - assert_initial(); - assert_clear(); + assert_normal(vcpu); + assert_initial(vcpu); + assert_clear(vcpu); =20 kvm_vm_free(vm); } --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 19866C352B6 for ; Wed, 4 May 2022 23:07:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1382371AbiEDXGW (ORCPT ); Wed, 4 May 2022 19:06:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46228 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379905AbiEDW7c (ORCPT ); Wed, 4 May 2022 18:59:32 -0400 Received: from mail-pj1-x1049.google.com (mail-pj1-x1049.google.com [IPv6:2607:f8b0:4864:20::1049]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3F8B5562C9 for ; Wed, 4 May 2022 15:52:34 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id gb16-20020a17090b061000b001d78792caebso1318578pjb.5 for ; Wed, 04 May 2022 15:52:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=OjfbmCPfsPFbm1g2v6wtPVS0L/Dcelop2dJZ2b57DQw=; b=Ax22X01ToKZWVI/cZ1sWZvxq5vVTyrDAZRUMwiRyEU2G5/Ztfc149wXmJM3Zt22yjo GAZrnjHE3Up4O5tTOlQw8JFhPiYA9XA/RFxs3z+k0K7QlaFooHhmhqUGXygjjCAgyM7L QQt3CmoRAJbw0AuteRpHkOC7Ca3dBCBPAHfpJs1kRzCef9EgzIi9mXK65FjCGnpKQYPy DGjiSaL23biy9Ygr06UWnvT12QIE54zzAE7FSTi/r1UBoJAnHPCc5+c7Xl6tPS1ZZIxc od9i5gWVl+ur8oetN8gqL41bHNF34KWoUHd8rpMZcvVtHD4Dr6YQiANxKmHOVM/IwVD7 CoeQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=OjfbmCPfsPFbm1g2v6wtPVS0L/Dcelop2dJZ2b57DQw=; b=abyzBP26gzlKuflmYHZKfOtiRuC2MGEbi/HjqHH/SDUhfL9NbEKPtlPsWAqf6UTFYq QVXRXUHovdeCkzaPlRH7WlxQTH4UTNl3TLfJodp8tEMsAm16pGSaQeIwSb/Ch9hNuHfO uzBF89KHSjFK49o1y0vFeijcT3WzD4CHX20EXzc6bi9vHmnN0QHMPAW+8NASIGvweK6J s1VuZgPvqcj/2lGTgl+DKGCyN4DztJEUIzY/Ik3mVLTBBT/6CAfMAYxZ5jWS0rwGoWUm McxRZMTKp4D28Dwhwvno46kTHBuIC52lMJX/7KBlchaifYzFy/Yz4FEQlNAj5aGqV2Gn eamw== X-Gm-Message-State: AOAM53195ouds4qSwpGn1rNtaeYQyqKlAvwVOqB2GP6aQfbH/+2WghFv mir1VBzhmwNk9yggTy56gIBKTuC6TNE= X-Google-Smtp-Source: ABdhPJyEObyDIhU6OmP+vRHG7qigqJkML103tgWt+w08GLLW6bCafdSm2rXNNX0KNNwoxWgeF2UdES5l7JY= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:cccc:b0:15a:30ec:2f56 with SMTP id z12-20020a170902cccc00b0015a30ec2f56mr24062309ple.169.1651704753960; Wed, 04 May 2022 15:52:33 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:52 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-107-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 106/128] KVM: selftests: Convert memop away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Pass around a 'struct kvm_vcpu' object instead of a vCPU ID in s390's memop test. Pass NULL for the vCPU instead of a magic '-1' ID to indicate that an ioctl/test should be done at VM scope. Rename "struct test_vcpu vcpu" to "struct test_info info" in order to avoid naming collisions (this is the bulk of the diff :-( ). Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/s390x/memop.c | 82 ++++++++++++----------- 1 file changed, 42 insertions(+), 40 deletions(-) diff --git a/tools/testing/selftests/kvm/s390x/memop.c b/tools/testing/self= tests/kvm/s390x/memop.c index 5eb20a358cfe..ba5f645b7565 100644 --- a/tools/testing/selftests/kvm/s390x/memop.c +++ b/tools/testing/selftests/kvm/s390x/memop.c @@ -96,21 +96,18 @@ static struct kvm_s390_mem_op ksmo_from_desc(struct mop= _desc desc) return ksmo; } =20 -/* vcpu dummy id signifying that vm instead of vcpu ioctl is to occur */ -const uint32_t VM_VCPU_ID =3D (uint32_t)-1; - -struct test_vcpu { +struct test_info { struct kvm_vm *vm; - uint32_t id; + struct kvm_vcpu *vcpu; }; =20 #define PRINT_MEMOP false -static void print_memop(uint32_t vcpu_id, const struct kvm_s390_mem_op *ks= mo) +static void print_memop(struct kvm_vcpu *vcpu, const struct kvm_s390_mem_o= p *ksmo) { if (!PRINT_MEMOP) return; =20 - if (vcpu_id =3D=3D VM_VCPU_ID) + if (!vcpu) printf("vm memop("); else printf("vcpu memop("); @@ -145,25 +142,29 @@ static void print_memop(uint32_t vcpu_id, const struc= t kvm_s390_mem_op *ksmo) puts(")"); } =20 -static void memop_ioctl(struct test_vcpu vcpu, struct kvm_s390_mem_op *ksm= o) +static void memop_ioctl(struct test_info info, struct kvm_s390_mem_op *ksm= o) { - if (vcpu.id =3D=3D VM_VCPU_ID) - vm_ioctl(vcpu.vm, KVM_S390_MEM_OP, ksmo); + struct kvm_vcpu *vcpu =3D info.vcpu; + + if (!vcpu) + vm_ioctl(info.vm, KVM_S390_MEM_OP, ksmo); else - vcpu_ioctl(vcpu.vm, vcpu.id, KVM_S390_MEM_OP, ksmo); + vcpu_ioctl(vcpu->vm, vcpu->id, KVM_S390_MEM_OP, ksmo); } =20 -static int err_memop_ioctl(struct test_vcpu vcpu, struct kvm_s390_mem_op *= ksmo) +static int err_memop_ioctl(struct test_info info, struct kvm_s390_mem_op *= ksmo) { - if (vcpu.id =3D=3D VM_VCPU_ID) - return __vm_ioctl(vcpu.vm, KVM_S390_MEM_OP, ksmo); + struct kvm_vcpu *vcpu =3D info.vcpu; + + if (!vcpu) + return __vm_ioctl(info.vm, KVM_S390_MEM_OP, ksmo); else - return __vcpu_ioctl(vcpu.vm, vcpu.id, KVM_S390_MEM_OP, ksmo); + return __vcpu_ioctl(vcpu->vm, vcpu->id, KVM_S390_MEM_OP, ksmo); } =20 -#define MEMOP(err, vcpu_p, mop_target_p, access_mode_p, buf_p, size_p, ...= ) \ +#define MEMOP(err, info_p, mop_target_p, access_mode_p, buf_p, size_p, ...= ) \ ({ \ - struct test_vcpu __vcpu =3D (vcpu_p); \ + struct test_info __info =3D (info_p); \ struct mop_desc __desc =3D { \ .target =3D (mop_target_p), \ .mode =3D (access_mode_p), \ @@ -175,13 +176,13 @@ static int err_memop_ioctl(struct test_vcpu vcpu, str= uct kvm_s390_mem_op *ksmo) \ if (__desc._gaddr_v) { \ if (__desc.target =3D=3D ABSOLUTE) \ - __desc.gaddr =3D addr_gva2gpa(__vcpu.vm, __desc.gaddr_v); \ + __desc.gaddr =3D addr_gva2gpa(__info.vm, __desc.gaddr_v); \ else \ __desc.gaddr =3D __desc.gaddr_v; \ } \ __ksmo =3D ksmo_from_desc(__desc); \ - print_memop(__vcpu.id, &__ksmo); \ - err##memop_ioctl(__vcpu, &__ksmo); \ + print_memop(__info.vcpu, &__ksmo); \ + err##memop_ioctl(__info, &__ksmo); \ }) =20 #define MOP(...) MEMOP(, __VA_ARGS__) @@ -197,7 +198,6 @@ static int err_memop_ioctl(struct test_vcpu vcpu, struc= t kvm_s390_mem_op *ksmo) =20 #define CHECK_N_DO(f, ...) ({ f(__VA_ARGS__, CHECK_ONLY); f(__VA_ARGS__); = }) =20 -#define VCPU_ID 1 #define PAGE_SHIFT 12 #define PAGE_SIZE (1ULL << PAGE_SHIFT) #define PAGE_MASK (~(PAGE_SIZE - 1)) @@ -209,21 +209,22 @@ static uint8_t mem2[65536]; =20 struct test_default { struct kvm_vm *kvm_vm; - struct test_vcpu vm; - struct test_vcpu vcpu; + struct test_info vm; + struct test_info vcpu; struct kvm_run *run; int size; }; =20 static struct test_default test_default_init(void *guest_code) { + struct kvm_vcpu *vcpu; struct test_default t; =20 t.size =3D min((size_t)kvm_check_cap(KVM_CAP_S390_MEM_OP), sizeof(mem1)); - t.kvm_vm =3D vm_create_default(VCPU_ID, 0, guest_code); - t.vm =3D (struct test_vcpu) { t.kvm_vm, VM_VCPU_ID }; - t.vcpu =3D (struct test_vcpu) { t.kvm_vm, VCPU_ID }; - t.run =3D vcpu_state(t.kvm_vm, VCPU_ID); + t.kvm_vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); + t.vm =3D (struct test_info) { t.kvm_vm, NULL }; + t.vcpu =3D (struct test_info) { t.kvm_vm, vcpu }; + t.run =3D vcpu->run; return t; } =20 @@ -238,14 +239,15 @@ enum stage { STAGE_COPIED, }; =20 -#define HOST_SYNC(vcpu_p, stage) \ +#define HOST_SYNC(info_p, stage) \ ({ \ - struct test_vcpu __vcpu =3D (vcpu_p); \ + struct test_info __info =3D (info_p); \ + struct kvm_vcpu *__vcpu =3D __info.vcpu; \ struct ucall uc; \ int __stage =3D (stage); \ \ - vcpu_run(__vcpu.vm, __vcpu.id); \ - get_ucall(__vcpu.vm, __vcpu.id, &uc); \ + vcpu_run(__vcpu->vm, __vcpu->id); \ + get_ucall(__vcpu->vm, __vcpu->id, &uc); \ ASSERT_EQ(uc.cmd, UCALL_SYNC); \ ASSERT_EQ(uc.args[1], __stage); \ }) \ @@ -264,7 +266,7 @@ static void prepare_mem12(void) =20 #define DEFAULT_WRITE_READ(copy_cpu, mop_cpu, mop_target_p, size, ...) \ ({ \ - struct test_vcpu __copy_cpu =3D (copy_cpu), __mop_cpu =3D (mop_cpu); \ + struct test_info __copy_cpu =3D (copy_cpu), __mop_cpu =3D (mop_cpu); \ enum mop_target __target =3D (mop_target_p); \ uint32_t __size =3D (size); \ \ @@ -279,7 +281,7 @@ static void prepare_mem12(void) =20 #define DEFAULT_READ(copy_cpu, mop_cpu, mop_target_p, size, ...) \ ({ \ - struct test_vcpu __copy_cpu =3D (copy_cpu), __mop_cpu =3D (mop_cpu); \ + struct test_info __copy_cpu =3D (copy_cpu), __mop_cpu =3D (mop_cpu); \ enum mop_target __target =3D (mop_target_p); \ uint32_t __size =3D (size); \ \ @@ -580,34 +582,34 @@ static void guest_idle(void) GUEST_SYNC(STAGE_IDLED); } =20 -static void _test_errors_common(struct test_vcpu vcpu, enum mop_target tar= get, int size) +static void _test_errors_common(struct test_info info, enum mop_target tar= get, int size) { int rv; =20 /* Bad size: */ - rv =3D ERR_MOP(vcpu, target, WRITE, mem1, -1, GADDR_V(mem1)); + rv =3D ERR_MOP(info, target, WRITE, mem1, -1, GADDR_V(mem1)); TEST_ASSERT(rv =3D=3D -1 && errno =3D=3D E2BIG, "ioctl allows insane size= s"); =20 /* Zero size: */ - rv =3D ERR_MOP(vcpu, target, WRITE, mem1, 0, GADDR_V(mem1)); + rv =3D ERR_MOP(info, target, WRITE, mem1, 0, GADDR_V(mem1)); TEST_ASSERT(rv =3D=3D -1 && (errno =3D=3D EINVAL || errno =3D=3D ENOMEM), "ioctl allows 0 as size"); =20 /* Bad flags: */ - rv =3D ERR_MOP(vcpu, target, WRITE, mem1, size, GADDR_V(mem1), SET_FLAGS(= -1)); + rv =3D ERR_MOP(info, target, WRITE, mem1, size, GADDR_V(mem1), SET_FLAGS(= -1)); TEST_ASSERT(rv =3D=3D -1 && errno =3D=3D EINVAL, "ioctl allows all flags"= ); =20 /* Bad guest address: */ - rv =3D ERR_MOP(vcpu, target, WRITE, mem1, size, GADDR((void *)~0xfffUL), = CHECK_ONLY); + rv =3D ERR_MOP(info, target, WRITE, mem1, size, GADDR((void *)~0xfffUL), = CHECK_ONLY); TEST_ASSERT(rv > 0, "ioctl does not report bad guest memory access"); =20 /* Bad host address: */ - rv =3D ERR_MOP(vcpu, target, WRITE, 0, size, GADDR_V(mem1)); + rv =3D ERR_MOP(info, target, WRITE, 0, size, GADDR_V(mem1)); TEST_ASSERT(rv =3D=3D -1 && errno =3D=3D EFAULT, "ioctl does not report bad host memory address"); =20 /* Bad key: */ - rv =3D ERR_MOP(vcpu, target, WRITE, mem1, size, GADDR_V(mem1), KEY(17)); + rv =3D ERR_MOP(info, target, WRITE, mem1, size, GADDR_V(mem1), KEY(17)); TEST_ASSERT(rv =3D=3D -1 && errno =3D=3D EINVAL, "ioctl allows invalid ke= y"); } =20 --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 65A81C38162 for ; Wed, 4 May 2022 23:07:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1382841AbiEDXGj (ORCPT ); Wed, 4 May 2022 19:06:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45416 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1380243AbiEDW7w (ORCPT ); Wed, 4 May 2022 18:59:52 -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 0EF7E56F82 for ; Wed, 4 May 2022 15:53:05 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id u8-20020a170903124800b0015195a5826cso1377506plh.4 for ; Wed, 04 May 2022 15:53:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=MNZdk2aHSD0+/6jdlwq8oD++DPnxxVbOOlc8/sNiKFA=; b=ZKIxJhXhvZd4cu4L7JuNvGEuDMhzKvxLPk/FNK22bZ//xghJdK/P4zAhVxs9XYW09h XXzIRVlrqtbFXhbPaE7M0ieMY0tPptOFVgo+t9ysWX5H3pUEwiW0Yg1BWJR9VoFejRIg EP2lEB4zFyAzUoNpsfKZVbbuBemBHJClQ6fYpzxZdoI0N5fcKUYXn8y0CrnbJxzLAbqv zttcGSEMEyzfZ+1ETbYc6OVasMsQfsJu0iuYwuvxUIHyPUN+4yJBfb7TZVE4YJbTPjgk 3qQ9mYbICDMsiucBh/8IXaBMol6sQmIaxPIqoqhH22nzyToM3UNJ4Bq//TtJswqNnQ83 NG+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=MNZdk2aHSD0+/6jdlwq8oD++DPnxxVbOOlc8/sNiKFA=; b=aHhtsfCnN2KJepCKTCWwKMiE9hjlyv3HbwHwYe0xvty5z6KhFT6Gp37monXyUaQ+fQ ocJGiK1xarh/zB/OUPGsQ86oBxtuXnJ44+A/VuXLiVOSmdVFq0/11FTSQnh2MoFxt/Ts ka18jgu6e3eHfzqvZSm6FeB3AlZ96e6NeWyYLGDj+upQ9Aq0o/Ce0NXv7r4iBhI7XvoJ La4qJs+qrBJpjc0TeU6mH6oFfiRolkiQ0MD23nX4+CVrGwtog3XEFc/ucHf7DTjlJPG5 9w1wWr5eg0Y/5kHrYkcQWfKL4tCQfg+hUoCyrRacdZAwzh65Q1TABvyn5FmYWGb/GdrS SHoA== X-Gm-Message-State: AOAM533A2xsyBPnGGoJjg1BUBco2OsgbwSPz1GHD8eYkHeFFNEKBK/KZ pZZ+V/SQEh3PInLeI75ohaxng7iPd70= X-Google-Smtp-Source: ABdhPJwSHCMREXRH2Tvkn6eXDT23uVtw8KQn1QdMWGkH/AvP5uBScHKAz1RmshpKZNvUz9o9NjUGOTkV1zE= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:903:215:b0:15e:cae9:7622 with SMTP id r21-20020a170903021500b0015ecae97622mr4283626plh.28.1651704755765; Wed, 04 May 2022 15:52:35 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:53 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-108-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 107/128] KVM: selftests: Convert s390x/diag318_test_handler away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert diag318_test_handler to use vm_create_with_vcpus() and pass around a 'struct kvm_vcpu' object instead of passing around vCPU IDs. Note, this is a "functional" change in the sense that the test now creates a vCPU with vcpu_id=3D=3D0 instead of vcpu_id=3D=3D6. The non-zero VCPU_ID was 100% ar= bitrary and added little to no validation coverage. If testing non-zero vCPU IDs is desirable for generic tests, that can be done in the future by tweaking the VM creation helpers. Signed-off-by: Sean Christopherson --- .../selftests/kvm/lib/s390x/diag318_test_handler.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/tools/testing/selftests/kvm/lib/s390x/diag318_test_handler.c b= /tools/testing/selftests/kvm/lib/s390x/diag318_test_handler.c index 86b9e611ad87..21c31fe10c1a 100644 --- a/tools/testing/selftests/kvm/lib/s390x/diag318_test_handler.c +++ b/tools/testing/selftests/kvm/lib/s390x/diag318_test_handler.c @@ -8,8 +8,6 @@ #include "test_util.h" #include "kvm_util.h" =20 -#define VCPU_ID 6 - #define ICPT_INSTRUCTION 0x04 #define IPA0_DIAG 0x8300 =20 @@ -27,14 +25,15 @@ static void guest_code(void) */ static uint64_t diag318_handler(void) { + struct kvm_vcpu *vcpu; struct kvm_vm *vm; struct kvm_run *run; uint64_t reg; uint64_t diag318_info; =20 - vm =3D vm_create_default(VCPU_ID, 0, guest_code); - vcpu_run(vm, VCPU_ID); - run =3D vcpu_state(vm, VCPU_ID); + vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); + vcpu_run(vm, vcpu->id); + run =3D vcpu->run; =20 TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_S390_SIEIC, "DIAGNOSE 0x0318 instruction was not intercepted"); --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 B6486C38A2C for ; Wed, 4 May 2022 23:07:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1384146AbiEDXHp (ORCPT ); Wed, 4 May 2022 19:07:45 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45384 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1380250AbiEDW7w (ORCPT ); Wed, 4 May 2022 18:59:52 -0400 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 86B2956F90 for ; Wed, 4 May 2022 15:53:06 -0700 (PDT) Received: by mail-pg1-x549.google.com with SMTP id q143-20020a632a95000000b003c1c3490dfbso1331796pgq.20 for ; Wed, 04 May 2022 15:53:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=5DAJlGNKe8aX3EmZHon3SRjMD9ccYXNvX9H64hVT1+A=; b=Hki4o5RLSB468iQLRnZhCPLw3xUA6dR+tqQVMGQ6ypwvf23CSxeip172ChxT/i/8Bq TqJIOFJERX1LDyvx4aytdMe3PfI8OItrhsFwK7SSjoR4Nx8sTndPHqvvnUE3+n7kGJ8z cZFFEgBH6HB5idGJT9aa28lcBArxAOnn2BzrFUP5QFbTe5MlVuLNOxqkSJwb2b23UUjr +Z9sMbMboDUDZBptZf0LCIZPJC43jgzCI8l9jx4EwA+KAVjmUivvoDcKqThp+jDgY8yk oivXUMvjFmUTKb5a1Uh4mzvdVXMTZ7d1nfkDHk3gO0N8YB/+ToA9H6R1KQ2+TuiHDIqK 9ZPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=5DAJlGNKe8aX3EmZHon3SRjMD9ccYXNvX9H64hVT1+A=; b=ZzBxdpbYLZkJp1kY4k5fKvXoRern3PgIW+k5tg/6g+DSLyU3FlzOlT455xnn8UlxQm DHX0AAUNOGa7+2DqYPvPH6qAgRJzQGu6v9QIYRetd1kzOCGHL7TakYP5fIzYARt9lb4S atK4cNMYwNze35dA23ciFl9zG4/3dx2g7Nmrg/qAVRolgF6eQc6/p9NRV7T4Mwon1qH/ 2+h1TxWyI10nR0xcVABaZYzgdTTxkNly+nVNuHVmn0UZTG40Ngp13LElpe3fANMhMDih 3RFA0l6LsQsygdHpvUOpmA4BwZQhaZpk/Xwin05fyMD4Jy6847YG+8YqVnOhE7KpUuou F0HA== X-Gm-Message-State: AOAM532v/ViOPddI1nNfiF7kYreDCXnbTUWH8VsdH5E50MjDwjbOZ8MF t1FjJdYX0V1HE1p+7S2idbTAG0B8CQA= X-Google-Smtp-Source: ABdhPJyzfctc2eyR5HnXUMoP63671DjI9Rgwc3rmUeZUs2u9V++XpkQ3kve8+q3f5fZc1hZakHSoPzkEnkU= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90b:3ecd:b0:1dc:945e:41b1 with SMTP id rm13-20020a17090b3ecd00b001dc945e41b1mr2212660pjb.208.1651704757437; Wed, 04 May 2022 15:52:37 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:54 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-109-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 108/128] KVM: selftests: Convert tprot away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert tprot to use vm_create_with_vcpus() and pass around a 'struct kvm_vcpu' object instead of passing around vCPU IDs. Note, this is a "functional" change in the sense that the test now creates a vCPU with vcpu_id=3D=3D0 instead of vcpu_id=3D=3D1. The non-zero VCPU_ID was 100% ar= bitrary and added little to no validation coverage. If testing non-zero vCPU IDs is desirable for generic tests, that can be done in the future by tweaking the VM creation helpers. Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/s390x/tprot.c | 25 +++++++++++------------ 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/tools/testing/selftests/kvm/s390x/tprot.c b/tools/testing/self= tests/kvm/s390x/tprot.c index c097b9db495e..4caa77388033 100644 --- a/tools/testing/selftests/kvm/s390x/tprot.c +++ b/tools/testing/selftests/kvm/s390x/tprot.c @@ -14,8 +14,6 @@ #define CR0_FETCH_PROTECTION_OVERRIDE (1UL << (63 - 38)) #define CR0_STORAGE_PROTECTION_OVERRIDE (1UL << (63 - 39)) =20 -#define VCPU_ID 1 - static __aligned(PAGE_SIZE) uint8_t pages[2][PAGE_SIZE]; static uint8_t *const page_store_prot =3D pages[0]; static uint8_t *const page_fetch_prot =3D pages[1]; @@ -182,14 +180,14 @@ static void guest_code(void) GUEST_SYNC(perform_next_stage(&i, mapped_0)); } =20 -#define HOST_SYNC(vmp, stage) \ +#define HOST_SYNC(vcpup, stage) \ ({ \ - struct kvm_vm *__vm =3D (vmp); \ + struct kvm_vcpu *__vcpu =3D (vcpup); \ struct ucall uc; \ int __stage =3D (stage); \ \ - vcpu_run(__vm, VCPU_ID); \ - get_ucall(__vm, VCPU_ID, &uc); \ + vcpu_run(__vcpu->vm, __vcpu->id); \ + get_ucall(__vcpu->vm, __vcpu->id, &uc); \ if (uc.cmd =3D=3D UCALL_ABORT) { \ TEST_FAIL("line %lu: %s, hints: %lu, %lu", uc.args[1], \ (const char *)uc.args[0], uc.args[2], uc.args[3]); \ @@ -200,28 +198,29 @@ static void guest_code(void) =20 int main(int argc, char *argv[]) { + struct kvm_vcpu *vcpu; struct kvm_vm *vm; struct kvm_run *run; vm_vaddr_t guest_0_page; =20 - vm =3D vm_create_default(VCPU_ID, 0, guest_code); - run =3D vcpu_state(vm, VCPU_ID); + vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); + run =3D vcpu->run; =20 - HOST_SYNC(vm, STAGE_INIT_SIMPLE); + HOST_SYNC(vcpu, STAGE_INIT_SIMPLE); mprotect(addr_gva2hva(vm, (vm_vaddr_t)pages), PAGE_SIZE * 2, PROT_READ); - HOST_SYNC(vm, TEST_SIMPLE); + HOST_SYNC(vcpu, TEST_SIMPLE); =20 guest_0_page =3D vm_vaddr_alloc(vm, PAGE_SIZE, 0); if (guest_0_page !=3D 0) print_skip("Did not allocate page at 0 for fetch protection override tes= ts"); - HOST_SYNC(vm, STAGE_INIT_FETCH_PROT_OVERRIDE); + HOST_SYNC(vcpu, STAGE_INIT_FETCH_PROT_OVERRIDE); if (guest_0_page =3D=3D 0) mprotect(addr_gva2hva(vm, (vm_vaddr_t)0), PAGE_SIZE, PROT_READ); run->s.regs.crs[0] |=3D CR0_FETCH_PROTECTION_OVERRIDE; run->kvm_dirty_regs =3D KVM_SYNC_CRS; - HOST_SYNC(vm, TEST_FETCH_PROT_OVERRIDE); + HOST_SYNC(vcpu, TEST_FETCH_PROT_OVERRIDE); =20 run->s.regs.crs[0] |=3D CR0_STORAGE_PROTECTION_OVERRIDE; run->kvm_dirty_regs =3D KVM_SYNC_CRS; - HOST_SYNC(vm, TEST_STORAGE_PROT_OVERRIDE); + HOST_SYNC(vcpu, TEST_STORAGE_PROT_OVERRIDE); } --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 9DBC5C4708C for ; Wed, 4 May 2022 23:07:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1384085AbiEDXHm (ORCPT ); Wed, 4 May 2022 19:07:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45420 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1380281AbiEDW7x (ORCPT ); Wed, 4 May 2022 18:59:53 -0400 Received: from mail-yb1-xb49.google.com (mail-yb1-xb49.google.com [IPv6:2607:f8b0:4864:20::b49]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6106356FA0 for ; Wed, 4 May 2022 15:53:08 -0700 (PDT) Received: by mail-yb1-xb49.google.com with SMTP id 9-20020a250909000000b006484b89c979so2257477ybj.21 for ; Wed, 04 May 2022 15:53:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=G/NbvGhtiyLQi7kYqoocOZcin0VQ7Ev2zOKIrEGbvEg=; b=PEtzywlanOhN5HCJA3Lt0CeIncOVVBKRoV0Hf2g1tEJh5BLkkMlbTy4701Ccc7S0UY koKKUWTdKaN61LeyvKAWsy0NnbVTrS1shF+8jndT/qCkDFahRcrUViryo9fDf5fb22F9 1pafsRqHBmgwLFYPWTofxlLLi0Kzqg5jytBCK18RYJXkurPp5R8ZD5Wk6JKpSi5InZwZ fOcmpRSWdL3OqAnyUMf2GOwX6HyBtLD/ZGtvPVw+Bt4MoOZEIIiL/Kz6TlVrdfcbGY1L sSdMuPWn2iakz3XVTYecII7Pb+Da44akgh4pLgeZLoKQfBF6r07l6kKv27AJ/k73c4Ii u+lA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=G/NbvGhtiyLQi7kYqoocOZcin0VQ7Ev2zOKIrEGbvEg=; b=Vc6pQexzxS7pMoMD2QzPE0+YgnL7c3+vK87U+Ziu67jpsGX194wNwniNplfNjWfbLq 58m5nxOzwLKh7BA/tL7MLcJUZ2W+j9cMbM0MoQP2TrgbRYtFveEN18HbLMAlmtGDnICQ 5RA2pv67e1GMIds8AmaEDJgExdSo3qWiqKyoMMAC05kUxnd/nmFN81l6ueGg/6ag4X1d kY/0/GgqdmZeJXUHAmHWRRRh7TvQcr+pFf53dhvtexsMXp/DcGdqhXLWj2dKSE4T6kcd e2Fs8WMbdFaF47ipMaesvdwzcbw90WoJfTyJzEI6k0PF7OCa1oJaAuM+tmI0ZUS1upTR FlJw== X-Gm-Message-State: AOAM531l1A36hcrN9s4VpfGjpyC75lAF1P3r/XMphw4UtKyA9DxMhk1t 5XvA+3ZZzVzzyP2Q9AYFRANxX/tGAV4= X-Google-Smtp-Source: ABdhPJw4vqEx1r/FPBUGl6CXjGB99bRmtBvbIU1DcpitmJiYdK1Z1DGCAz61RZcnkMRlB+o/5X+6z514Cko= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a25:2a52:0:b0:648:f7b4:7cb8 with SMTP id q79-20020a252a52000000b00648f7b47cb8mr18287580ybq.431.1651704759092; Wed, 04 May 2022 15:52:39 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:55 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-110-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 109/128] KVM: selftests: Use vm_create() in tsc_scaling_sync From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use vm_create() instead of vm_create_default_with_vcpus() in tsc_scaling_sync. The existing call doesn't create any vCPUs, and the guest_code() entry point is set when vm_vcpu_add_default() is invoked. Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/x86_64/tsc_scaling_sync.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/testing/selftests/kvm/x86_64/tsc_scaling_sync.c b/tools/= testing/selftests/kvm/x86_64/tsc_scaling_sync.c index 2411215e7ae8..728b252597cc 100644 --- a/tools/testing/selftests/kvm/x86_64/tsc_scaling_sync.c +++ b/tools/testing/selftests/kvm/x86_64/tsc_scaling_sync.c @@ -98,7 +98,7 @@ int main(int argc, char *argv[]) exit(KSFT_SKIP); } =20 - vm =3D vm_create_default_with_vcpus(0, DEFAULT_STACK_PGS * NR_TEST_VCPUS,= 0, guest_code, NULL); + vm =3D vm_create(DEFAULT_GUEST_PHY_PAGES + DEFAULT_STACK_PGS * NR_TEST_VC= PUS); vm_ioctl(vm, KVM_SET_TSC_KHZ, (void *) TEST_TSC_KHZ); =20 pthread_spin_init(&create_lock, PTHREAD_PROCESS_PRIVATE); --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 ADF67C43219 for ; Wed, 4 May 2022 23:07:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1383059AbiEDXGr (ORCPT ); Wed, 4 May 2022 19:06:47 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45806 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1380292AbiEDW7y (ORCPT ); Wed, 4 May 2022 18:59:54 -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 6E34E56FA5 for ; Wed, 4 May 2022 15:53:09 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id m6-20020a17090a730600b001d9041534e4so1078544pjk.7 for ; Wed, 04 May 2022 15:53:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=MLU+SS8ptc3VdisiTyqeNIDg5kJwfCfbwvY9mVCwAYM=; b=CMDLv3g6q4N6WtnyZI3YdiPx1LaEBB3IYvxP+cLWRkDcGda+5r6u2osjIIoPQmmt9Y cNRTBL1fnIrvYKr1CF9TLk4akb/obPsKvkROWLAWzxi+GbybyaeGamwXDRr7uja8vq1u C9008+8GHLHWlwECb81QE1jaK58oKwA2wY86mPRxjPJ4AW1q4tn7gWr0VmM82TXMLjLx 1Veozc764GxEbgqA3HE2ru846tFdi2iFlJQ4azDA7Arv/9xNPCb2zCeGtj3u++E7OD74 HJoZbnptboBQmmpJcku2olCOKswdYH87vD7cD0oIWEc4rfb+SeaPwB6+bd/fEWrp2Mp6 qtgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=MLU+SS8ptc3VdisiTyqeNIDg5kJwfCfbwvY9mVCwAYM=; b=3GTeFVmCb84CKVHF8rwkBgKNv4/0CTbvXKwLpC9DPcx85t0P6K+YbK+EThzZ1yOgz+ GZCsUATuHh0kfTZf0LyWoa0El5NoCSgHDNPD1ooqutnzi+lpSzIi3yz1Yc9EhW33D8Nh ME1DYAMoOzgwOeSiUxSWFazHcj2vKA8+N+HcmfOoedrBMG8VgIJug6oOqfnjLFbs/rcl QOL+eb/D4swlm7VCa+aOk2tI0TJDj5CHghYbLGk6hWa409mMjcb7I19q6b/g5K5OtagU oycun6huKEP9xLNFhaW+pprodR8y6cy2+y+2Tq2L+NKWuTdw4ML8vEoTzOy3HyS/Eu6O DCSg== X-Gm-Message-State: AOAM530gew+r9s7eEVsoE3euPt7XNq6Gn7WDW7c3L4YpciW8G/eOZKB+ CAEAF8wD94L203c2+3KvJjCxfqe3Aag= X-Google-Smtp-Source: ABdhPJzayaVoqUhknmAbSK8yZDeZZZVA0r60UISplvxnshReSjYvLFZSouYhwKXT2teTNKPPtzt3+xjSF8I= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:891:b0:4fe:1262:9b4e with SMTP id q17-20020a056a00089100b004fe12629b4emr23112238pfj.21.1651704760854; Wed, 04 May 2022 15:52:40 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:56 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-111-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 110/128] KVM: selftests: Use vm_create_with_vcpus() in max_guest_memory_test From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use vm_create_with_vcpus() in max_guest_memory_test and reference vCPUs by their 'struct kvm_vcpu' object instead of their ID. Signed-off-by: Sean Christopherson --- .../selftests/kvm/max_guest_memory_test.c | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/tools/testing/selftests/kvm/max_guest_memory_test.c b/tools/te= sting/selftests/kvm/max_guest_memory_test.c index 3875c4b23a04..956fc56b8c68 100644 --- a/tools/testing/selftests/kvm/max_guest_memory_test.c +++ b/tools/testing/selftests/kvm/max_guest_memory_test.c @@ -28,8 +28,7 @@ static void guest_code(uint64_t start_gpa, uint64_t end_g= pa, uint64_t stride) } =20 struct vcpu_info { - struct kvm_vm *vm; - uint32_t id; + struct kvm_vcpu *vcpu; uint64_t start_gpa; uint64_t end_gpa; }; @@ -60,12 +59,13 @@ static void run_vcpu(struct kvm_vm *vm, uint32_t vcpu_i= d) =20 static void *vcpu_worker(void *data) { - struct vcpu_info *vcpu =3D data; + struct vcpu_info *info =3D data; + struct kvm_vcpu *vcpu =3D info->vcpu; struct kvm_vm *vm =3D vcpu->vm; struct kvm_sregs sregs; struct kvm_regs regs; =20 - vcpu_args_set(vm, vcpu->id, 3, vcpu->start_gpa, vcpu->end_gpa, + vcpu_args_set(vm, vcpu->id, 3, info->start_gpa, info->end_gpa, vm_get_page_size(vm)); =20 /* Snapshot regs before the first run. */ @@ -89,8 +89,8 @@ static void *vcpu_worker(void *data) return NULL; } =20 -static pthread_t *spawn_workers(struct kvm_vm *vm, uint64_t start_gpa, - uint64_t end_gpa) +static pthread_t *spawn_workers(struct kvm_vm *vm, struct kvm_vcpu **vcpus, + uint64_t start_gpa, uint64_t end_gpa) { struct vcpu_info *info; uint64_t gpa, nr_bytes; @@ -108,8 +108,7 @@ static pthread_t *spawn_workers(struct kvm_vm *vm, uint= 64_t start_gpa, TEST_ASSERT(nr_bytes, "C'mon, no way you have %d CPUs", nr_vcpus); =20 for (i =3D 0, gpa =3D start_gpa; i < nr_vcpus; i++, gpa +=3D nr_bytes) { - info[i].vm =3D vm; - info[i].id =3D i; + info[i].vcpu =3D vcpus[i]; info[i].start_gpa =3D gpa; info[i].end_gpa =3D gpa + nr_bytes; pthread_create(&threads[i], NULL, vcpu_worker, &info[i]); @@ -172,6 +171,7 @@ int main(int argc, char *argv[]) uint64_t max_gpa, gpa, slot_size, max_mem, i; int max_slots, slot, opt, fd; bool hugepages =3D false; + struct kvm_vcpu **vcpus; pthread_t *threads; struct kvm_vm *vm; void *mem; @@ -215,7 +215,10 @@ int main(int argc, char *argv[]) } } =20 - vm =3D vm_create_default_with_vcpus(nr_vcpus, 0, 0, guest_code, NULL); + vcpus =3D malloc(nr_vcpus * sizeof(*vcpus)); + TEST_ASSERT(vcpus, "Failed to allocate vCPU array"); + + vm =3D vm_create_with_vcpus(nr_vcpus, guest_code, vcpus); =20 max_gpa =3D vm_get_max_gfn(vm) << vm_get_page_shift(vm); TEST_ASSERT(max_gpa > (4 * slot_size), "MAXPHYADDR <4gb "); @@ -252,7 +255,10 @@ int main(int argc, char *argv[]) } =20 atomic_set(&rendezvous, nr_vcpus + 1); - threads =3D spawn_workers(vm, start_gpa, gpa); + threads =3D spawn_workers(vm, vcpus, start_gpa, gpa); + + free(vcpus); + vcpus =3D NULL; =20 pr_info("Running with %lugb of guest memory and %u vCPUs\n", (gpa - start_gpa) / size_1gb, nr_vcpus); --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 7A62BC38A06 for ; Wed, 4 May 2022 23:07:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1384023AbiEDXHi (ORCPT ); Wed, 4 May 2022 19:07:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46228 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1380319AbiEDW7z (ORCPT ); Wed, 4 May 2022 18:59:55 -0400 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 C267A57108 for ; Wed, 4 May 2022 15:53:10 -0700 (PDT) Received: by mail-pg1-x549.google.com with SMTP id y17-20020a637d11000000b003ab06870074so1337313pgc.15 for ; Wed, 04 May 2022 15:53:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=6HSIjMhV1FkDSn9Q2dZiNlWH0XvamyXxhC0LlfB3b9Q=; b=DkRxlPcdbrbXKsKMK7kQ7JDeVGO2p2CzUK+kcqRqxCoet3tc5Dt5oyxJtVZNwIeigO ttI0bdDGSThuuBloWZkUkbqqdPf1hU2Kf/o1C1wZTrmfdrP9ZNAqQgYuFvlfyFcUAnDF mrViP4skJBJSSrb+Q20n9Kv7C4H/CSfkpChjZr+RykBIVIuLu0lNp7Z+B3ZXTf8dFxRT WqDuZ5ibzRj6oRqVBqIR2lXZ/nzRJgiJMwXSu9GjhJPwBJLdv/gWfpGVwsc6W1G/yl8f ntCIGN1lSE+SxsjhadwHWLNXNRJwClPh6wPftNDAqm32mzeVrgO11Ib1WFcgemsbqHmp wUuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=6HSIjMhV1FkDSn9Q2dZiNlWH0XvamyXxhC0LlfB3b9Q=; b=T5VUGr1xjSsnbFHs5VMAkz/87NNnSYEuhtFqz5re+ejUQgkeyXo5TNN2kGHousIaYi KBf+iphAePaVhuWvOzqhVc4idHoKlOefkc5h73kSH3k4fLioWFPKhT+UwcqkJIHuILS6 eCh3I2aeaFR40Eo7AfCO8w1UhVUG/P8k+uMP7aQfLI784XIDHKFwnnsL/mrzvRq3Jw0a Lqd9fhTBNgxROLAP1Ac6HGh+MBtHsE6+mx0QOCaX3vqpSveY1Kgcc3fXwLGOgD4tOA52 qBlemMxUK3jUnyzTZ67Zstswh7Xual95RI49v6mcYjNVIu9zXDHP8n/ahAtn8vmjVANr p7RA== X-Gm-Message-State: AOAM531EeOieo8qpSqHMxs1I0foNjJyYWMJjMc/2bNDOra89rhYuWbPz rEKat1yRxZkRx2BVZg82UXDS3W22o10= X-Google-Smtp-Source: ABdhPJxYHAVE8NMpqzvg79GDxP5iYL+Sq/Qsi6yll75i+qhzI1I08BjzeT6eLToG03Jc89JlQP+pbfWksSY= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a62:e80d:0:b0:50d:8f8e:ffb8 with SMTP id c13-20020a62e80d000000b0050d8f8effb8mr22843748pfi.37.1651704762430; Wed, 04 May 2022 15:52:42 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:57 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-112-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 111/128] KVM: selftests: Drop vm_create_default* helpers From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Drop all vm_create_default*() helpers, the "default" naming turned out to terrible as wasn't extensible (hard to have multiple defaults), was a lie (half the settings were default, half weren't), and failed to capture relationships between helpers, e.g. compared with the kernel's standard underscores pattern. Signed-off-by: Sean Christopherson --- .../selftests/kvm/include/kvm_util_base.h | 23 ------------------- tools/testing/selftests/kvm/lib/kvm_util.c | 23 +++++-------------- 2 files changed, 6 insertions(+), 40 deletions(-) diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index 2ddf0854c24d..882b684dc372 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -538,29 +538,6 @@ static inline struct kvm_vm *vm_create(uint64_t nr_pag= es) return __vm_create(VM_MODE_DEFAULT, nr_pages); } =20 -/* - * Create a VM with reasonable defaults - * - * Input Args: - * vcpuid - The id of the single VCPU to add to the VM. - * extra_mem_pages - The number of extra pages to add (this will - * decide how much extra space we will need to - * setup the page tables using memslot 0) - * guest_code - The vCPU's entry point - * - * Output Args: None - * - * Return: - * Pointer to opaque structure that describes the created VM. - */ -struct kvm_vm *vm_create_default(uint32_t vcpuid, uint64_t extra_mem_pages, - void *guest_code); - -/* Same as vm_create_default, but can be used for more than one vcpu */ -struct kvm_vm *vm_create_default_with_vcpus(uint32_t nr_vcpus, uint64_t ex= tra_mem_pages, - uint32_t num_percpu_pages, void *guest_code, - uint32_t vcpuids[]); - /* Like vm_create_default_with_vcpus, but accepts mode and slot0 memory as= a parameter */ struct kvm_vm *__vm_create_with_vcpus(enum vm_guest_mode mode, uint32_t nr= _vcpus, uint64_t slot0_mem_pages, uint64_t extra_mem_pages, diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index 838a3eda9381..96d1daf14dc3 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -341,28 +341,17 @@ struct kvm_vm *__vm_create_with_vcpus(enum vm_guest_m= ode mode, uint32_t nr_vcpus return vm; } =20 -struct kvm_vm *vm_create_default_with_vcpus(uint32_t nr_vcpus, uint64_t ex= tra_mem_pages, - uint32_t num_percpu_pages, void *guest_code, - uint32_t vcpuids[]) -{ - return __vm_create_with_vcpus(VM_MODE_DEFAULT, nr_vcpus, DEFAULT_GUEST_PH= Y_PAGES, - extra_mem_pages, num_percpu_pages, guest_code, vcpuids, NULL); -} - -struct kvm_vm *vm_create_default(uint32_t vcpuid, uint64_t extra_mem_pages, - void *guest_code) -{ - return vm_create_default_with_vcpus(1, extra_mem_pages, 0, guest_code, - (uint32_t []){ vcpuid }); -} - struct kvm_vm *__vm_create_with_one_vcpu(struct kvm_vcpu **vcpu, uint64_t extra_mem_pages, void *guest_code) { - struct kvm_vm *vm =3D vm_create_default(0, extra_mem_pages, guest_code); + struct kvm_vcpu *vcpus[1]; + struct kvm_vm *vm; =20 - *vcpu =3D vcpu_get(vm, 0); + vm =3D __vm_create_with_vcpus(VM_MODE_DEFAULT, 1, DEFAULT_GUEST_PHY_PAGES, + extra_mem_pages, 0, guest_code, NULL, vcpus); + + *vcpu =3D vcpus[0]; return vm; } =20 --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 69E7BC433EF for ; Wed, 4 May 2022 23:07:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1383989AbiEDXHc (ORCPT ); Wed, 4 May 2022 19:07:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46988 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1380364AbiEDW75 (ORCPT ); Wed, 4 May 2022 18:59:57 -0400 Received: from mail-pl1-x64a.google.com (mail-pl1-x64a.google.com [IPv6:2607:f8b0:4864:20::64a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B66CE57135 for ; Wed, 4 May 2022 15:53:14 -0700 (PDT) Received: by mail-pl1-x64a.google.com with SMTP id v8-20020a170902b7c800b0015e927ee201so1368111plz.12 for ; Wed, 04 May 2022 15:53:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=b5mqyDQydri5T13drbTfXUVGOsVwBBBBvhoVfKOp4Ng=; b=E3cUwHmMsCEN9UooIQHkxsNcWNT7UFkJIUUh57XKJtxJ+lG6bNMc9BIPYbGSCt3w5D yTtiuuMFgs4MLu8U9yAFk8qO7fPYH9+4ej6+fx/vszn0KljBFud3jxHmTbVOWk/EsUE4 XqAFnVnWEIUpE1KA8wSbBhuEH1r05BAQbQ1sM7rcpiatoC1rNi7oLCk1mHHZR2kXhscg 8RI/6xWxm0EIGgVOynQXQAEQR2V2+GqE8gdv17D0GYQ6kNAYGsS8nBDO3RSREWMujdPa YIdlFyuytchaVPJ4q1tuf+nbXCMBrGmmEurvexu4k/B/dsIRp97kEm7FqYSZ/Bl5j1a/ 4e3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=b5mqyDQydri5T13drbTfXUVGOsVwBBBBvhoVfKOp4Ng=; b=nzSyugtJtTiKMs+cIlhyCxhobFSf1DauqbvUCD/hMgZPpiXX1KnC41rsxI7kJijdlc QuM2Qj3HdgxgOzieuAV1ZGJ94DNocggQxuJOBKhMW0nSSzZUFfvpQ+SeyFGjVFJdXjlq C/RNPcwkMn4735djcOOwkHHRMtxBdPIlYzZeTlCE/+g8QoBAq2WjuUSdLPx/bXR638Xf yDZCtdBjxeae7ISSKsePGl8Ok2KSG3/+yrtAGvSv0PglPvWEHguwveM4eD8RH7xBHmMP usW95aDTR6jyIX+U4ZMBm8ISBGYPuD2rYP/9B7dXyWRawkWhu27sAcWJjArGrnKYSubq 8uXA== X-Gm-Message-State: AOAM532Wtiws/EAvVm68WQn3D+lLHjhs4aTIJbr93j3Y3FUcBDntPuZZ XcgXKGwPTCLTWgaFVqnTf83znOYl8Pc= X-Google-Smtp-Source: ABdhPJzGh9RbXHnHWVjsE25ui8Kt42FUo+iqCEdec0OdPK+O2q9UD6d1qGIZaYPIlueNm3i7xaDyT5darfs= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:b704:b0:156:624:934b with SMTP id d4-20020a170902b70400b001560624934bmr24729613pls.116.1651704764277; Wed, 04 May 2022 15:52:44 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:58 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-113-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 112/128] KVM: selftests: Drop @vcpuids param from VM creators From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Drop the @vcpuids parameter from VM creators now that there are no users. Allowing tests to specify IDs was a gigantic mistake as it resulted in tests with arbitrary and ultimately meaningless IDs that differed only because the author used test X intead of test Y as the source for copy+paste (the de facto standard way to create a KVM selftest). Except for literally two tests, x86's set_boot_cpu_id and s390's resets, tests do not and should not care about the vCPU ID. Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/include/kvm_util_base.h | 4 ++-- tools/testing/selftests/kvm/kvm_page_table_test.c | 2 +- tools/testing/selftests/kvm/lib/kvm_util.c | 8 +++----- tools/testing/selftests/kvm/lib/perf_test_util.c | 2 +- 4 files changed, 7 insertions(+), 9 deletions(-) diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index 882b684dc372..6eeaef797ea1 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -542,7 +542,7 @@ static inline struct kvm_vm *vm_create(uint64_t nr_page= s) struct kvm_vm *__vm_create_with_vcpus(enum vm_guest_mode mode, uint32_t nr= _vcpus, uint64_t slot0_mem_pages, uint64_t extra_mem_pages, uint32_t num_percpu_pages, void *guest_code, - uint32_t vcpuids[], struct kvm_vcpu *vcpus[]); + struct kvm_vcpu *vcpus[]); =20 static inline struct kvm_vm *vm_create_with_vcpus(uint32_t nr_vcpus, void *guest_code, @@ -550,7 +550,7 @@ static inline struct kvm_vm *vm_create_with_vcpus(uint3= 2_t nr_vcpus, { return __vm_create_with_vcpus(VM_MODE_DEFAULT, nr_vcpus, DEFAULT_GUEST_PHY_PAGES, 0, 0, - guest_code, NULL, vcpus); + guest_code, vcpus); } =20 /* diff --git a/tools/testing/selftests/kvm/kvm_page_table_test.c b/tools/test= ing/selftests/kvm/kvm_page_table_test.c index e91bc7f1400d..76031be195fa 100644 --- a/tools/testing/selftests/kvm/kvm_page_table_test.c +++ b/tools/testing/selftests/kvm/kvm_page_table_test.c @@ -269,7 +269,7 @@ static struct kvm_vm *pre_init_before_test(enum vm_gues= t_mode mode, void *arg) /* Create a VM with enough guest pages */ guest_num_pages =3D test_mem_size / guest_page_size; vm =3D __vm_create_with_vcpus(mode, nr_vcpus, DEFAULT_GUEST_PHY_PAGES, - guest_num_pages, 0, guest_code, NULL, NULL); + guest_num_pages, 0, guest_code, NULL); =20 /* Align down GPA of the testing memslot */ if (!p->phys_offset) diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index 96d1daf14dc3..ccd194007e90 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -303,7 +303,7 @@ struct kvm_vm *__vm_create(enum vm_guest_mode mode, uin= t64_t nr_pages) struct kvm_vm *__vm_create_with_vcpus(enum vm_guest_mode mode, uint32_t nr= _vcpus, uint64_t slot0_mem_pages, uint64_t extra_mem_pages, uint32_t num_percpu_pages, void *guest_code, - uint32_t vcpuids[], struct kvm_vcpu *vcpus[]) + struct kvm_vcpu *vcpus[]) { uint64_t vcpu_pages, extra_pg_pages, pages; struct kvm_vcpu *vcpu; @@ -331,9 +331,7 @@ struct kvm_vm *__vm_create_with_vcpus(enum vm_guest_mod= e mode, uint32_t nr_vcpus vm =3D __vm_create(mode, pages); =20 for (i =3D 0; i < nr_vcpus; ++i) { - uint32_t vcpuid =3D vcpuids ? vcpuids[i] : i; - - vcpu =3D vm_vcpu_add(vm, vcpuid, guest_code); + vcpu =3D vm_vcpu_add(vm, i, guest_code); if (vcpus) vcpus[i] =3D vcpu; } @@ -349,7 +347,7 @@ struct kvm_vm *__vm_create_with_one_vcpu(struct kvm_vcp= u **vcpu, struct kvm_vm *vm; =20 vm =3D __vm_create_with_vcpus(VM_MODE_DEFAULT, 1, DEFAULT_GUEST_PHY_PAGES, - extra_mem_pages, 0, guest_code, NULL, vcpus); + extra_mem_pages, 0, guest_code, vcpus); =20 *vcpu =3D vcpus[0]; return vm; diff --git a/tools/testing/selftests/kvm/lib/perf_test_util.c b/tools/testi= ng/selftests/kvm/lib/perf_test_util.c index 5b80ba7f12e4..ffbd3664e162 100644 --- a/tools/testing/selftests/kvm/lib/perf_test_util.c +++ b/tools/testing/selftests/kvm/lib/perf_test_util.c @@ -140,7 +140,7 @@ struct kvm_vm *perf_test_create_vm(enum vm_guest_mode m= ode, int vcpus, * effect as KVM allows aliasing HVAs in meslots. */ vm =3D __vm_create_with_vcpus(mode, vcpus, DEFAULT_GUEST_PHY_PAGES, - guest_num_pages, 0, guest_code, NULL, NULL); + guest_num_pages, 0, guest_code, NULL); =20 pta->vm =3D vm; =20 --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 CCBEBC38A02 for ; Wed, 4 May 2022 23:07:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1383111AbiEDXGw (ORCPT ); Wed, 4 May 2022 19:06:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58548 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1380391AbiEDW76 (ORCPT ); Wed, 4 May 2022 18:59:58 -0400 Received: from mail-yw1-x114a.google.com (mail-yw1-x114a.google.com [IPv6:2607:f8b0:4864:20::114a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 14F465715B for ; Wed, 4 May 2022 15:53:19 -0700 (PDT) Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-2d11b6259adso24158297b3.19 for ; Wed, 04 May 2022 15:53:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=oRrFo0pRNZVILdspoViulKa/Kh2FDJcS73izUxhLGmY=; b=k2rIWeHIqvV0DT5rMRSOj6MOWmKrEwqfRcpOyG7Ik3GQWcc2lNosTwRJZvCT6LQozl xNQjT+ZfwfnQ4pnva4b1Zf2DuX/N83DMDBo2jg28lsCMCHAIAfuCBX463V5CcB/7ttbg j8//LlGvafe7gwS7MLudTk3yMN0E50NC9GwRjUPxaLlf+xZmWVNNFY9yHpiMo/UTx3Z3 7ylJyyFDoFIYk6CMdHKvequfBBF34bkO6WU5LfZkp6dTVVqSeaJs+ZSlyxbvk9hnWpx7 7RSm35ci7m9cl1rcvZ53SJKMSCQqTbqV1AtQeyYY39yd1/FBjL3U3SsyD3+XKcSm+87u VxRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=oRrFo0pRNZVILdspoViulKa/Kh2FDJcS73izUxhLGmY=; b=CTs4y5LFnYLNuvEJpUtiJFzHElksd2hT5vaOHXoOdCkw1gfuvUQ8J1BbjjdGohAIxZ FlQX5mmGusWuZG+LsgMhs/P9RW9wXlsgerc6MX/bOHqIWnPL8UH/kO973aPFHxGorKM9 AVxTIsnP4rhj905y7A7br0D5nGuG3ISv6gLyQShNogmgmhlPuEyr5xRa6URDMfjwpPpL jVoazlDXzb+QUKvtKsFYogbQmcjdck3uoErbksVRH6Ll1/GYNuHxp/Ms8IWXDtQwZUia dkaWt/7dPBCYDW0I5MIyBKlHkah7+hNCidwYdudh6+BhVInpSo4PT/BmCKNKsF1z05Cz KN1A== X-Gm-Message-State: AOAM531akrv4HX38r3SdhNf9UMD+F809c+VqQtENjvRytCSZw/dZ1zWe 0TZnQVhgXtN7xsvFnlgOttQ0QnpAwqw= X-Google-Smtp-Source: ABdhPJwL/k1Z8mD2VLbPMHprO/qXM6XugJPt7p/rBXgIE/C+OijDU5EPQ6HP1ytmgvEAnPsCKs3X0u9EOO8= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a5b:4c9:0:b0:64a:2c09:cddb with SMTP id u9-20020a5b04c9000000b0064a2c09cddbmr2949888ybp.296.1651704766159; Wed, 04 May 2022 15:52:46 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:48:59 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-114-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 113/128] KVM: selftests: Convert kvm_page_table_test away from reliance on vcpu_id From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Reference vCPUs by their 'struct kvm_vcpu' object in kvm_page_table_test instead of by their ID. This moves selftests one step closer towards taking a 'struct kvm_vcpu *' instead of VM+vcpu_id for vCPU helpers. Signed-off-by: Sean Christopherson --- .../selftests/kvm/kvm_page_table_test.c | 62 +++++++------------ 1 file changed, 21 insertions(+), 41 deletions(-) diff --git a/tools/testing/selftests/kvm/kvm_page_table_test.c b/tools/test= ing/selftests/kvm/kvm_page_table_test.c index 76031be195fa..b577b5999c95 100644 --- a/tools/testing/selftests/kvm/kvm_page_table_test.c +++ b/tools/testing/selftests/kvm/kvm_page_table_test.c @@ -46,11 +46,6 @@ static const char * const test_stage_string[] =3D { "KVM_ADJUST_MAPPINGS", }; =20 -struct vcpu_args { - int vcpu_id; - bool vcpu_write; -}; - struct test_args { struct kvm_vm *vm; uint64_t guest_test_virt_mem; @@ -60,7 +55,7 @@ struct test_args { uint64_t large_num_pages; uint64_t host_pages_per_lpage; enum vm_mem_backing_src_type src_type; - struct vcpu_args vcpu_args[KVM_MAX_VCPUS]; + struct kvm_vcpu *vcpus[KVM_MAX_VCPUS]; }; =20 /* @@ -92,17 +87,13 @@ static uint64_t guest_test_phys_mem; */ static uint64_t guest_test_virt_mem =3D DEFAULT_GUEST_TEST_MEM; =20 -static void guest_code(int vcpu_id) +static void guest_code(bool do_write) { struct test_args *p =3D &test_args; - struct vcpu_args *vcpu_args =3D &p->vcpu_args[vcpu_id]; enum test_stage *current_stage =3D &guest_test_stage; uint64_t addr; int i, j; =20 - /* Make sure vCPU args data structure is not corrupt */ - GUEST_ASSERT(vcpu_args->vcpu_id =3D=3D vcpu_id); - while (true) { addr =3D p->guest_test_virt_mem; =20 @@ -123,7 +114,7 @@ static void guest_code(int vcpu_id) */ case KVM_CREATE_MAPPINGS: for (i =3D 0; i < p->large_num_pages; i++) { - if (vcpu_args->vcpu_write) + if (do_write) *(uint64_t *)addr =3D 0x0123456789ABCDEF; else READ_ONCE(*(uint64_t *)addr); @@ -193,17 +184,15 @@ static void guest_code(int vcpu_id) =20 static void *vcpu_worker(void *data) { - int ret; - struct vcpu_args *vcpu_args =3D data; struct kvm_vm *vm =3D test_args.vm; - int vcpu_id =3D vcpu_args->vcpu_id; - struct kvm_run *run; + struct kvm_vcpu *vcpu =3D data; + bool do_write =3D !(vcpu->id % 2); struct timespec start; struct timespec ts_diff; enum test_stage stage; + int ret; =20 - vcpu_args_set(vm, vcpu_id, 1, vcpu_id); - run =3D vcpu_state(vm, vcpu_id); + vcpu_args_set(vm, vcpu->id, 1, do_write); =20 while (!READ_ONCE(host_quit)) { ret =3D sem_wait(&test_stage_updated); @@ -213,15 +202,15 @@ static void *vcpu_worker(void *data) return NULL; =20 clock_gettime(CLOCK_MONOTONIC_RAW, &start); - ret =3D _vcpu_run(vm, vcpu_id); + ret =3D _vcpu_run(vm, vcpu->id); ts_diff =3D timespec_elapsed(start); =20 TEST_ASSERT(ret =3D=3D 0, "vcpu_run failed: %d\n", ret); - TEST_ASSERT(get_ucall(vm, vcpu_id, NULL) =3D=3D UCALL_SYNC, + TEST_ASSERT(get_ucall(vm, vcpu->id, NULL) =3D=3D UCALL_SYNC, "Invalid guest sync status: exit_reason=3D%s\n", - exit_reason_str(run->exit_reason)); + exit_reason_str(vcpu->run->exit_reason)); =20 - pr_debug("Got sync event from vCPU %d\n", vcpu_id); + pr_debug("Got sync event from vCPU %d\n", vcpu->id); stage =3D READ_ONCE(*current_stage); =20 /* @@ -230,7 +219,7 @@ static void *vcpu_worker(void *data) */ pr_debug("vCPU %d has completed stage %s\n" "execution time is: %ld.%.9lds\n\n", - vcpu_id, test_stage_string[stage], + vcpu->id, test_stage_string[stage], ts_diff.tv_sec, ts_diff.tv_nsec); =20 ret =3D sem_post(&test_stage_completed); @@ -250,7 +239,6 @@ static struct kvm_vm *pre_init_before_test(enum vm_gues= t_mode mode, void *arg) { int ret; struct test_params *p =3D arg; - struct vcpu_args *vcpu_args; enum vm_mem_backing_src_type src_type =3D p->src_type; uint64_t large_page_size =3D get_backing_src_pagesz(src_type); uint64_t guest_page_size =3D vm_guest_mode_params[mode].page_size; @@ -260,7 +248,6 @@ static struct kvm_vm *pre_init_before_test(enum vm_gues= t_mode mode, void *arg) uint64_t alignment; void *host_test_mem; struct kvm_vm *vm; - int vcpu_id; =20 /* Align up the test memory size */ alignment =3D max(large_page_size, guest_page_size); @@ -269,7 +256,8 @@ static struct kvm_vm *pre_init_before_test(enum vm_gues= t_mode mode, void *arg) /* Create a VM with enough guest pages */ guest_num_pages =3D test_mem_size / guest_page_size; vm =3D __vm_create_with_vcpus(mode, nr_vcpus, DEFAULT_GUEST_PHY_PAGES, - guest_num_pages, 0, guest_code, NULL); + guest_num_pages, 0, guest_code, + test_args.vcpus); =20 /* Align down GPA of the testing memslot */ if (!p->phys_offset) @@ -292,12 +280,6 @@ static struct kvm_vm *pre_init_before_test(enum vm_gue= st_mode mode, void *arg) test_args.host_pages_per_lpage =3D large_page_size / host_page_size; test_args.src_type =3D src_type; =20 - for (vcpu_id =3D 0; vcpu_id < KVM_MAX_VCPUS; vcpu_id++) { - vcpu_args =3D &test_args.vcpu_args[vcpu_id]; - vcpu_args->vcpu_id =3D vcpu_id; - vcpu_args->vcpu_write =3D !(vcpu_id % 2); - } - /* Add an extra memory slot with specified backing src type */ vm_userspace_mem_region_add(vm, src_type, guest_test_phys_mem, TEST_MEM_SLOT_INDEX, guest_num_pages, 0); @@ -363,12 +345,11 @@ static void vcpus_complete_new_stage(enum test_stage = stage) =20 static void run_test(enum vm_guest_mode mode, void *arg) { - int ret; pthread_t *vcpu_threads; struct kvm_vm *vm; - int vcpu_id; struct timespec start; struct timespec ts_diff; + int ret, i; =20 /* Create VM with vCPUs and make some pre-initialization */ vm =3D pre_init_before_test(mode, arg); @@ -379,10 +360,9 @@ static void run_test(enum vm_guest_mode mode, void *ar= g) host_quit =3D false; *current_stage =3D KVM_BEFORE_MAPPINGS; =20 - for (vcpu_id =3D 0; vcpu_id < nr_vcpus; vcpu_id++) { - pthread_create(&vcpu_threads[vcpu_id], NULL, vcpu_worker, - &test_args.vcpu_args[vcpu_id]); - } + for (i =3D 0; i < nr_vcpus; i++) + pthread_create(&vcpu_threads[i], NULL, vcpu_worker, + test_args.vcpus[i]); =20 vcpus_complete_new_stage(*current_stage); pr_info("Started all vCPUs successfully\n"); @@ -424,13 +404,13 @@ static void run_test(enum vm_guest_mode mode, void *a= rg) =20 /* Tell the vcpu thread to quit */ host_quit =3D true; - for (vcpu_id =3D 0; vcpu_id < nr_vcpus; vcpu_id++) { + for (i =3D 0; i < nr_vcpus; i++) { ret =3D sem_post(&test_stage_updated); TEST_ASSERT(ret =3D=3D 0, "Error in sem_post"); } =20 - for (vcpu_id =3D 0; vcpu_id < nr_vcpus; vcpu_id++) - pthread_join(vcpu_threads[vcpu_id], NULL); + for (i =3D 0; i < nr_vcpus; i++) + pthread_join(vcpu_threads[i], NULL); =20 ret =3D sem_destroy(&test_stage_updated); TEST_ASSERT(ret =3D=3D 0, "Error in sem_destroy"); --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 F0AFBC388F3 for ; Wed, 4 May 2022 23:07:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1383192AbiEDXGz (ORCPT ); Wed, 4 May 2022 19:06:55 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58544 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1380392AbiEDW76 (ORCPT ); Wed, 4 May 2022 18:59:58 -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 135D657159 for ; Wed, 4 May 2022 15:53:18 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id s2-20020a17090302c200b00158ea215fa2so1380270plk.3 for ; Wed, 04 May 2022 15:53:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=F+kK/XPWXcKK2ny6diLAkFYmqndC2dDl4o6tQn0cWkc=; b=BWCmEOfrEeiIqLn0P4PWgbGYuu7qE1llTLedCapeUbf8Qrvh9Nmt2tKrqlBiGQ0gO5 MUIPAvEbTKyLzrtBddgAEoknXooe1QDEbJFOEfYMlkFA2rF9V7KLzfg+nJr9OrkmT3t0 px76pV3l5HemfSDAQZntU+eJND2iScwTQ+XC5cWhjtotDHrG1WKz5j1LbcOC5p5ZsMQP kMS6OG0aBsFr7g2lAADMBfw9KjVuQFaQEvM8b5Elemzd8BqMxTtfKdEeyCgs8tpLIB9g bAjwaBeuOpayQzfPL29PWe7BeASgEy+4rjs9Tx1813FrN2MmE8e/eiS6icobBpy3CqMh 85FA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=F+kK/XPWXcKK2ny6diLAkFYmqndC2dDl4o6tQn0cWkc=; b=t9F8gsw8yR88uinmdceTHbs9roPIXh/t07bkP29NknQIRC6Zl4DgDeNNuSNeyopM15 KII3qCVJKbjuJfvAAiCY5P/NvzPNT0F4XAollg5O//tB5TQ6L0sjZfTxYSd37Cuhtx1t HwrTjLfSSiJMEhUNmxnqseLF7uGwbzGXkb7l9lbbZxeltXe/ebBBgPE7z/OySwJ3Yme7 b243kctssQbbXxWhTUvurwgh+Juh9VDXImhVWpsd0PgmdNuVbWuU8VlkoTvvHANqKv7z Jl43qx4wEbNunD2wdMCEuBwjjPkJreUtHZaItZE8guSVx7PBDuLMluwP50yXGx0Kkf79 VgEQ== X-Gm-Message-State: AOAM533uGc8LQ4gwJ0MsAUX8qNpQdNanP1CsDeB2vmX5ZY342+5Xtnve kyyiwwu4rOTIQEx5MShgmS0rjrXwG18= X-Google-Smtp-Source: ABdhPJyUhuTwwz7UIV57bC3ZMTsptmctbegVNnYinR+99suZaX48lZRMBPr6CQkG4EY6TbpBD28DxRnoY6I= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:1991:b0:50e:697:53f9 with SMTP id d17-20020a056a00199100b0050e069753f9mr11918083pfl.22.1651704767934; Wed, 04 May 2022 15:52:47 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:49:00 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-115-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 114/128] KVM: selftests: Convert kvm_binary_stats_test away from vCPU IDs From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Track vCPUs by their 'struct kvm_vcpu' object in kvm_binary_stats_test, not by their ID. The per-vCPU helpers will soon take a vCPU instead of a VM+vcpu_id pair. Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/kvm_binary_stats_test.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/tools/testing/selftests/kvm/kvm_binary_stats_test.c b/tools/te= sting/selftests/kvm/kvm_binary_stats_test.c index 407e9ea8e6f3..dfc3cf531ced 100644 --- a/tools/testing/selftests/kvm/kvm_binary_stats_test.c +++ b/tools/testing/selftests/kvm/kvm_binary_stats_test.c @@ -172,9 +172,9 @@ static void vm_stats_test(struct kvm_vm *vm) TEST_ASSERT(fcntl(stats_fd, F_GETFD) =3D=3D -1, "Stats fd not freed"); } =20 -static void vcpu_stats_test(struct kvm_vm *vm, int vcpu_id) +static void vcpu_stats_test(struct kvm_vcpu *vcpu) { - int stats_fd =3D vcpu_get_stats_fd(vm, vcpu_id); + int stats_fd =3D vcpu_get_stats_fd(vcpu->vm, vcpu->id); =20 stats_test(stats_fd); close(stats_fd); @@ -195,6 +195,7 @@ static void vcpu_stats_test(struct kvm_vm *vm, int vcpu= _id) int main(int argc, char *argv[]) { int i, j; + struct kvm_vcpu **vcpus; struct kvm_vm **vms; int max_vm =3D DEFAULT_NUM_VM; int max_vcpu =3D DEFAULT_NUM_VCPU; @@ -220,17 +221,21 @@ int main(int argc, char *argv[]) /* Create VMs and VCPUs */ vms =3D malloc(sizeof(vms[0]) * max_vm); TEST_ASSERT(vms, "Allocate memory for storing VM pointers"); + + vcpus =3D malloc(sizeof(struct kvm_vcpu *) * max_vm * max_vcpu); + TEST_ASSERT(vcpus, "Allocate memory for storing vCPU pointers"); + for (i =3D 0; i < max_vm; ++i) { vms[i] =3D vm_create_barebones(); for (j =3D 0; j < max_vcpu; ++j) - __vm_vcpu_add(vms[i], j); + vcpus[j * max_vcpu + i] =3D __vm_vcpu_add(vms[i], j); } =20 /* Check stats read for every VM and VCPU */ for (i =3D 0; i < max_vm; ++i) { vm_stats_test(vms[i]); for (j =3D 0; j < max_vcpu; ++j) - vcpu_stats_test(vms[i], j); + vcpu_stats_test(vcpus[j * max_vcpu + i]); } =20 for (i =3D 0; i < max_vm; ++i) --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 5C77BC38A05 for ; Wed, 4 May 2022 23:07:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1383391AbiEDXHK (ORCPT ); Wed, 4 May 2022 19:07:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58202 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1380412AbiEDW77 (ORCPT ); Wed, 4 May 2022 18:59:59 -0400 Received: from mail-pl1-x64a.google.com (mail-pl1-x64a.google.com [IPv6:2607:f8b0:4864:20::64a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A18715717D for ; Wed, 4 May 2022 15:53:20 -0700 (PDT) Received: by mail-pl1-x64a.google.com with SMTP id k2-20020a170902ba8200b0015613b12004so1368536pls.22 for ; Wed, 04 May 2022 15:53:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=+CNWUluVgfE7BKVDZQOZnHYJi4lcccfQxqQd/SjNgbE=; b=oZupDN2DKwB5oVgymTvsHW5Hf1NhUapq7YbEKSPLCfMyWiKxFju9RjbCx4aiYKf/4T BFxw9vcPPGu+DCqX4nOHfdXgl4T0v1m9GzMo0hO3eflzXK/1gJxUhvsgYVA65Rrf9x1f wJb4+WzanxTzRUL/s2q3uv/Ux3s16RG3475MF+kJp8TGGgZjyDUMFJJzvn2oo/6Owa+u +P82jgbcHu2iI5DlntlhvpQBUSlKDkUGSszkF0YeQIvRx2qbSohxYW1oDDnowck64Zin WNPsTiGFMaxxgSzlAZkWga79TAFCUKFp5dY0WSqffKcPwNG+/jcBTPPOGgeb02oK4r6d ZkNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=+CNWUluVgfE7BKVDZQOZnHYJi4lcccfQxqQd/SjNgbE=; b=A/KWRvBI3U93JlWSdhk9FMS/eS2nWZLT07nnzrmbHoeHfcW4w/AEqi7syHdvrVfQH/ IOaHnQyx9mkiR9rmTWZ1aVTN46pXeV/kzX0jGSkNyU23p+OGaTILBeB5UoCCZBbEWtQH kTkD3bUWGZIpeRAluS8+Y5NAaOx00oxjs6g3CZtJJMvL/su6cn4MnYtWU1QPE5FAI4sT 0OlWSXsa4poKS4G9ORiKONYEjw1SuBzfTZOMSCNCaVeYiEagBkJbG2q0dvkLjkjhEMrr HAYYMdyNWqLSF625JXv2sEcr1ePwfd2IGChmb5y3ZLwmR6AwE3TfSg/EipRYFf2iIuRG SzbA== X-Gm-Message-State: AOAM532GFpPhspCFuL3HjN8HyNTCpma5B9AS8RLiN1Ip/k27bm+fEJuC rGz+wzfQy5ZP6YLTOBBiC9VPAZJzSvo= X-Google-Smtp-Source: ABdhPJyJvttlOkABk04uej8Mc89kBy2o6rz1jLup7YqfoTJcxS0m2k22OZQRN+HbqY/nWqK2C9gcEIn60Nk= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a62:d155:0:b0:50d:3c4e:37ec with SMTP id t21-20020a62d155000000b0050d3c4e37ecmr22808296pfl.60.1651704769699; Wed, 04 May 2022 15:52:49 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:49:01 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-116-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 115/128] KVM: selftests: Convert get-reg-list away from its "VCPU_ID" From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Track the vCPU's 'struct kvm_vcpu' object in get-reg-list instead of hardcoding '0' everywhere. Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/aarch64/get-reg-list.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/tools/testing/selftests/kvm/aarch64/get-reg-list.c b/tools/tes= ting/selftests/kvm/aarch64/get-reg-list.c index 8283a62e16e4..dae6d5704519 100644 --- a/tools/testing/selftests/kvm/aarch64/get-reg-list.c +++ b/tools/testing/selftests/kvm/aarch64/get-reg-list.c @@ -406,6 +406,7 @@ static void run_test(struct vcpu_config *c) struct kvm_vcpu_init init =3D { .target =3D -1, }; int new_regs =3D 0, missing_regs =3D 0, i, n; int failed_get =3D 0, failed_set =3D 0, failed_reject =3D 0; + struct kvm_vcpu *vcpu; struct kvm_vm *vm; struct reg_sublist *s; =20 @@ -413,10 +414,10 @@ static void run_test(struct vcpu_config *c) =20 vm =3D vm_create_barebones(); prepare_vcpu_init(c, &init); - aarch64_vcpu_add(vm, 0, &init, NULL); - finalize_vcpu(vm, 0, c); + vcpu =3D aarch64_vcpu_add(vm, 0, &init, NULL); + finalize_vcpu(vm, vcpu->id, c); =20 - reg_list =3D vcpu_get_reg_list(vm, 0); + reg_list =3D vcpu_get_reg_list(vm, vcpu->id); =20 if (fixup_core_regs) core_reg_fixup(); @@ -452,7 +453,7 @@ static void run_test(struct vcpu_config *c) bool reject_reg =3D false; int ret; =20 - ret =3D __vcpu_ioctl(vm, 0, KVM_GET_ONE_REG, ®); + ret =3D __vcpu_ioctl(vm, vcpu->id, KVM_GET_ONE_REG, ®); if (ret) { printf("%s: Failed to get ", config_name(c)); print_reg(c, reg.id); @@ -464,7 +465,7 @@ static void run_test(struct vcpu_config *c) for_each_sublist(c, s) { if (s->rejects_set && find_reg(s->rejects_set, s->rejects_set_n, reg.id= )) { reject_reg =3D true; - ret =3D __vcpu_ioctl(vm, 0, KVM_SET_ONE_REG, ®); + ret =3D __vcpu_ioctl(vm, vcpu->id, KVM_SET_ONE_REG, ®); if (ret !=3D -1 || errno !=3D EPERM) { printf("%s: Failed to reject (ret=3D%d, errno=3D%d) ", config_name(c)= , ret, errno); print_reg(c, reg.id); @@ -476,7 +477,7 @@ static void run_test(struct vcpu_config *c) } =20 if (!reject_reg) { - ret =3D __vcpu_ioctl(vm, 0, KVM_SET_ONE_REG, ®); + ret =3D __vcpu_ioctl(vm, vcpu->id, KVM_SET_ONE_REG, ®); if (ret) { printf("%s: Failed to set ", config_name(c)); print_reg(c, reg.id); --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 06DA4C4167B for ; Wed, 4 May 2022 23:07:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1383701AbiEDXHV (ORCPT ); Wed, 4 May 2022 19:07:21 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58718 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1380440AbiEDXAA (ORCPT ); Wed, 4 May 2022 19:00:00 -0400 Received: from mail-pg1-x54a.google.com (mail-pg1-x54a.google.com [IPv6:2607:f8b0:4864:20::54a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3444854F8A for ; Wed, 4 May 2022 15:53:22 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id s68-20020a637747000000b003aaff19b95bso1354951pgc.1 for ; Wed, 04 May 2022 15:53:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=f5f/LLx9WhINchyLZxvs4xznbsCcXbPaUrDUqVFjwOU=; b=M+Z2YfuAplTjHTdRLuuiglVwyDuuBa3aYjRTFeA9f5WBoigc1/JlpdXMASISCWzJ6Z VynBbIB7Fmn66vT1RcrtV8TzY5MoBCtVaNTGTMhgRlsnLOdcr6p4/AXpxj3f/rZgJLxT xky171nhvkrXxfGTVjA4n25+ujd7r5bWfi9Msr2Ij/H5vSsot4qMraRxnHv+lW65bTHg RaXf4igJyGhunqyasLkrRvv/FMFZ3ZyurZ2bIckhZorOXe7jiGk/NPcjm/bT7/hL+qpl +JwIJ2djcYF18cH5iB9rM8AdhPo9j5781ZmsAhCa/IuM6UizayOoUKV9Sxu6PUjm1JGa F0ZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=f5f/LLx9WhINchyLZxvs4xznbsCcXbPaUrDUqVFjwOU=; b=uGTKxORsv5YRa4wQ609tbKN1mE4kuKUATX9W0BWrub3cEapF2iGO6zs8FV8NNhFsKf 9dN6OP8l5C+2QUgGe/hrqBB6IpX0yvb1A565SDtFAZpwbEQV8ofClKjq5H4q51DQ0oiv jjTitOvdea40SISM6FWrdY3wFzPf+iI46fdsuVTv0gXpHcKMI9OFwHItuFNAYUTGB1xj nZuu8sXuiw/X8vrlC3DyorDhAo7z+jRpDRn4u3exAyLBzCrECpw951tDbv5TF1sw9/X2 Ye/4+8YBVhNfyjGk2d6SaUlJ21FF/pUgl8it0JGjCdmuxKFr56auqk4S/TKZhA072GgH WzrA== X-Gm-Message-State: AOAM5304aT6hCkmztD4EQaQn4itbQd4EIUqMNkm5bSvKgolPbj0DAUhg LFKrtuDHC/Erxn4rx4DRgFk3edWNCrI= X-Google-Smtp-Source: ABdhPJzCDtyBxpndtkFGHjTkVZEIuNBNo3OWmesmo2laDtlePxcjYHM4V5SFKJrcjTl62Up63NckZYRIi2A= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90b:3ec7:b0:1dc:b008:3cd3 with SMTP id rm7-20020a17090b3ec700b001dcb0083cd3mr2232406pjb.226.1651704771485; Wed, 04 May 2022 15:52:51 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:49:02 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-117-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 116/128] KVM: selftests: Stop hardcoding vCPU IDs in vcpu_width_config From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In preparation for taking a vCPU pointer in vCPU-scoped functions, grab the vCPU(s) created by __vm_vcpu_add() and use the ID from the vCPU object instead of hardcoding the ID in ioctl() invocations. Rename init1/init2 =3D> init0/init1 to avoid having odd/confusing code where vcpu0 consumes init1 and vcpu1 consumes init2. Note, this change could easily be done when the functions are converted in the future, and/or the vcpu{0,1} vs. init{1,2} discrepancy could be ignored, but then there would be no opportunity to poke fun at the 1-based counting scheme. Signed-off-by: Sean Christopherson --- .../selftests/kvm/aarch64/vcpu_width_config.c | 60 ++++++++++--------- 1 file changed, 31 insertions(+), 29 deletions(-) diff --git a/tools/testing/selftests/kvm/aarch64/vcpu_width_config.c b/tool= s/testing/selftests/kvm/aarch64/vcpu_width_config.c index 1dd856a58f5d..e4e66632f05c 100644 --- a/tools/testing/selftests/kvm/aarch64/vcpu_width_config.c +++ b/tools/testing/selftests/kvm/aarch64/vcpu_width_config.c @@ -15,24 +15,25 @@ =20 =20 /* - * Add a vCPU, run KVM_ARM_VCPU_INIT with @init1, and then - * add another vCPU, and run KVM_ARM_VCPU_INIT with @init2. + * Add a vCPU, run KVM_ARM_VCPU_INIT with @init0, and then + * add another vCPU, and run KVM_ARM_VCPU_INIT with @init1. */ -static int add_init_2vcpus(struct kvm_vcpu_init *init1, - struct kvm_vcpu_init *init2) +static int add_init_2vcpus(struct kvm_vcpu_init *init0, + struct kvm_vcpu_init *init1) { + struct kvm_vcpu *vcpu0, *vcpu1; struct kvm_vm *vm; int ret; =20 vm =3D vm_create_barebones(); =20 - __vm_vcpu_add(vm, 0); - ret =3D __vcpu_ioctl(vm, 0, KVM_ARM_VCPU_INIT, init1); + vcpu0 =3D __vm_vcpu_add(vm, 0); + ret =3D __vcpu_ioctl(vm, vcpu0->id, KVM_ARM_VCPU_INIT, init0); if (ret) goto free_exit; =20 - __vm_vcpu_add(vm, 1); - ret =3D __vcpu_ioctl(vm, 1, KVM_ARM_VCPU_INIT, init2); + vcpu1 =3D __vm_vcpu_add(vm, 1); + ret =3D __vcpu_ioctl(vm, vcpu1->id, KVM_ARM_VCPU_INIT, init1); =20 free_exit: kvm_vm_free(vm); @@ -40,25 +41,26 @@ static int add_init_2vcpus(struct kvm_vcpu_init *init1, } =20 /* - * Add two vCPUs, then run KVM_ARM_VCPU_INIT for one vCPU with @init1, - * and run KVM_ARM_VCPU_INIT for another vCPU with @init2. + * Add two vCPUs, then run KVM_ARM_VCPU_INIT for one vCPU with @init0, + * and run KVM_ARM_VCPU_INIT for another vCPU with @init1. */ -static int add_2vcpus_init_2vcpus(struct kvm_vcpu_init *init1, - struct kvm_vcpu_init *init2) +static int add_2vcpus_init_2vcpus(struct kvm_vcpu_init *init0, + struct kvm_vcpu_init *init1) { + struct kvm_vcpu *vcpu0, *vcpu1; struct kvm_vm *vm; int ret; =20 vm =3D vm_create_barebones(); =20 - __vm_vcpu_add(vm, 0); - __vm_vcpu_add(vm, 1); + vcpu0 =3D __vm_vcpu_add(vm, 0); + vcpu1 =3D __vm_vcpu_add(vm, 1); =20 - ret =3D __vcpu_ioctl(vm, 0, KVM_ARM_VCPU_INIT, init1); + ret =3D __vcpu_ioctl(vm, vcpu0->id, KVM_ARM_VCPU_INIT, init0); if (ret) goto free_exit; =20 - ret =3D __vcpu_ioctl(vm, 1, KVM_ARM_VCPU_INIT, init2); + ret =3D __vcpu_ioctl(vm, vcpu1->id, KVM_ARM_VCPU_INIT, init1); =20 free_exit: kvm_vm_free(vm); @@ -76,7 +78,7 @@ static int add_2vcpus_init_2vcpus(struct kvm_vcpu_init *i= nit1, */ int main(void) { - struct kvm_vcpu_init init1, init2; + struct kvm_vcpu_init init0, init1; struct kvm_vm *vm; int ret; =20 @@ -85,36 +87,36 @@ int main(void) exit(KSFT_SKIP); } =20 - /* Get the preferred target type and copy that to init2 for later use */ + /* Get the preferred target type and copy that to init1 for later use */ vm =3D vm_create_barebones(); - vm_ioctl(vm, KVM_ARM_PREFERRED_TARGET, &init1); + vm_ioctl(vm, KVM_ARM_PREFERRED_TARGET, &init0); kvm_vm_free(vm); - init2 =3D init1; + init1 =3D init0; =20 /* Test with 64bit vCPUs */ - ret =3D add_init_2vcpus(&init1, &init1); + ret =3D add_init_2vcpus(&init0, &init0); TEST_ASSERT(ret =3D=3D 0, "Configuring 64bit EL1 vCPUs failed unexpectedly"); - ret =3D add_2vcpus_init_2vcpus(&init1, &init1); + ret =3D add_2vcpus_init_2vcpus(&init0, &init0); TEST_ASSERT(ret =3D=3D 0, "Configuring 64bit EL1 vCPUs failed unexpectedly"); =20 /* Test with 32bit vCPUs */ - init1.features[0] =3D (1 << KVM_ARM_VCPU_EL1_32BIT); - ret =3D add_init_2vcpus(&init1, &init1); + init0.features[0] =3D (1 << KVM_ARM_VCPU_EL1_32BIT); + ret =3D add_init_2vcpus(&init0, &init0); TEST_ASSERT(ret =3D=3D 0, "Configuring 32bit EL1 vCPUs failed unexpectedly"); - ret =3D add_2vcpus_init_2vcpus(&init1, &init1); + ret =3D add_2vcpus_init_2vcpus(&init0, &init0); TEST_ASSERT(ret =3D=3D 0, "Configuring 32bit EL1 vCPUs failed unexpectedly"); =20 /* Test with mixed-width vCPUs */ - init1.features[0] =3D 0; - init2.features[0] =3D (1 << KVM_ARM_VCPU_EL1_32BIT); - ret =3D add_init_2vcpus(&init1, &init2); + init0.features[0] =3D 0; + init1.features[0] =3D (1 << KVM_ARM_VCPU_EL1_32BIT); + ret =3D add_init_2vcpus(&init0, &init1); TEST_ASSERT(ret !=3D 0, "Configuring mixed-width vCPUs worked unexpectedly"); - ret =3D add_2vcpus_init_2vcpus(&init1, &init2); + ret =3D add_2vcpus_init_2vcpus(&init0, &init1); TEST_ASSERT(ret !=3D 0, "Configuring mixed-width vCPUs worked unexpectedly"); =20 --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 76A10C47088 for ; Wed, 4 May 2022 23:07:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1383459AbiEDXHM (ORCPT ); Wed, 4 May 2022 19:07:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58822 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1380490AbiEDXAD (ORCPT ); Wed, 4 May 2022 19:00:03 -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 92C16579B7 for ; Wed, 4 May 2022 15:53:25 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id x23-20020a170902b41700b0015ea144789fso1370366plr.13 for ; Wed, 04 May 2022 15:53:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=DQsnetlJzh5n+Fi2DVV7AGi00uvD80LWfhexBKnJZbs=; b=s9yQzW6FMYP/Lv8Vj+hPPOOLDsU6vq7gDm7fNVcwbjrUn+2D1WIfq0XCgKUgaSJthj cw/ks5wV08S3wmhdMP19ys4+GcVijgOJqsGRlnzHhoba0jDMV3wObHZMzhQ07aT9uVjV pl6thjB4eziO+hRAUKjstGjRc+bdwOPb4M8jvBxqzWR/Sa90IJnKQHY9SI5Of+w1ehYN +qWY4h746ixsav0nqQ7786kF3hJVgDLi24EUYqgXTqwXoNnU23JSKuNSX9AgOPNTndJG A6BehR5MMh6GgBTUzVzGUOaPKXJfaLSImvGEnnzF3dNAQNnNBJ/Ozc0MQHlvsXnt9TMe TLUA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=DQsnetlJzh5n+Fi2DVV7AGi00uvD80LWfhexBKnJZbs=; b=jzdp6nMTYlim4Jp2rouzQkEDYnxvoWn8G5bLKx0pkiTEOantEgNbOeSvIpSfeRP2eU K8su4exR9QVKxnjFsaAkPvei+HID5vXw2o0C3oARIYv4bJL0am+jHFXA8X99KkBtu/FR ZjpRT6jOB89OcPRGZanob/J/T24MsbaClN2RYTi0H1lPnu4++Uv3N3Q2uJqPzhWr9yGC Fem5eQmeMsX5bQGcNeVl/rvsy86UavjrSNTVs7V7hV3kMVDI6atwpbOYGCp7cvmPECUT KE+Oqd9YIPUH0HPjuLO3EznJyOu/L81GUWimUYzdnzE7VOkP5yyyP1DnKtJNr061SzTH 3m+Q== X-Gm-Message-State: AOAM5310kihTFHEn07BeN8PLvq4Psk/PE3VmSl+t9DBXCAcUJm77PnbZ VgfO+2LKqR9GSulT3EY7fGvimnEoPz4= X-Google-Smtp-Source: ABdhPJx0svU+gM8FrKC2fjfphkJ8dFQOjMgh6j1cxjwmzrzjDQ5OTXzNe92sQf43sKTN1qg1idpTh06ACY4= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:eb4d:b0:15e:d25c:4e0a with SMTP id i13-20020a170902eb4d00b0015ed25c4e0amr2813298pli.8.1651704773158; Wed, 04 May 2022 15:52:53 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:49:03 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-118-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 117/128] KVM: selftests: Stop conflating vCPU index and ID in perf tests From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Track vCPUs by their 'struct kvm_vcpu' object, and stop assuming that a vCPU's ID is the same as its index when referencing a vCPU's metadata. Signed-off-by: Sean Christopherson --- .../selftests/kvm/access_tracking_perf_test.c | 81 ++++++++++--------- .../selftests/kvm/demand_paging_test.c | 36 ++++----- .../selftests/kvm/dirty_log_perf_test.c | 39 ++++----- .../selftests/kvm/include/perf_test_util.h | 5 +- .../selftests/kvm/lib/perf_test_util.c | 79 +++++++++--------- .../kvm/memslot_modification_stress_test.c | 10 +-- 6 files changed, 129 insertions(+), 121 deletions(-) diff --git a/tools/testing/selftests/kvm/access_tracking_perf_test.c b/tool= s/testing/selftests/kvm/access_tracking_perf_test.c index d8909032317a..86a90222f913 100644 --- a/tools/testing/selftests/kvm/access_tracking_perf_test.c +++ b/tools/testing/selftests/kvm/access_tracking_perf_test.c @@ -74,7 +74,7 @@ struct test_params { uint64_t vcpu_memory_bytes; =20 /* The number of vCPUs to create in the VM. */ - int vcpus; + int nr_vcpus; }; =20 static uint64_t pread_uint64(int fd, const char *filename, uint64_t index) @@ -127,10 +127,12 @@ static void mark_page_idle(int page_idle_fd, uint64_t= pfn) "Set page_idle bits for PFN 0x%" PRIx64, pfn); } =20 -static void mark_vcpu_memory_idle(struct kvm_vm *vm, int vcpu_id) +static void mark_vcpu_memory_idle(struct kvm_vm *vm, + struct perf_test_vcpu_args *vcpu_args) { - uint64_t base_gva =3D perf_test_args.vcpu_args[vcpu_id].gva; - uint64_t pages =3D perf_test_args.vcpu_args[vcpu_id].pages; + int vcpu_idx =3D vcpu_args->vcpu_idx; + uint64_t base_gva =3D vcpu_args->gva; + uint64_t pages =3D vcpu_args->pages; uint64_t page; uint64_t still_idle =3D 0; uint64_t no_pfn =3D 0; @@ -138,7 +140,7 @@ static void mark_vcpu_memory_idle(struct kvm_vm *vm, in= t vcpu_id) int pagemap_fd; =20 /* If vCPUs are using an overlapping region, let vCPU 0 mark it idle. */ - if (overlap_memory_access && vcpu_id) + if (overlap_memory_access && vcpu_idx) return; =20 page_idle_fd =3D open("/sys/kernel/mm/page_idle/bitmap", O_RDWR); @@ -170,7 +172,7 @@ static void mark_vcpu_memory_idle(struct kvm_vm *vm, in= t vcpu_id) */ TEST_ASSERT(no_pfn < pages / 100, "vCPU %d: No PFN for %" PRIu64 " out of %" PRIu64 " pages.", - vcpu_id, no_pfn, pages); + vcpu_idx, no_pfn, pages); =20 /* * Test that at least 90% of memory has been marked idle (the rest might @@ -183,17 +185,16 @@ static void mark_vcpu_memory_idle(struct kvm_vm *vm, = int vcpu_id) TEST_ASSERT(still_idle < pages / 10, "vCPU%d: Too many pages still idle (%"PRIu64 " out of %" PRIu64 ").\n", - vcpu_id, still_idle, pages); + vcpu_idx, still_idle, pages); =20 close(page_idle_fd); close(pagemap_fd); } =20 -static void assert_ucall(struct kvm_vm *vm, uint32_t vcpu_id, - uint64_t expected_ucall) +static void assert_ucall(struct kvm_vcpu *vcpu, uint64_t expected_ucall) { struct ucall uc; - uint64_t actual_ucall =3D get_ucall(vm, vcpu_id, &uc); + uint64_t actual_ucall =3D get_ucall(vcpu->vm, vcpu->id, &uc); =20 TEST_ASSERT(expected_ucall =3D=3D actual_ucall, "Guest exited unexpectedly (expected ucall %" PRIu64 @@ -217,28 +218,29 @@ static bool spin_wait_for_next_iteration(int *current= _iteration) =20 static void vcpu_thread_main(struct perf_test_vcpu_args *vcpu_args) { + struct kvm_vcpu *vcpu =3D vcpu_args->vcpu; struct kvm_vm *vm =3D perf_test_args.vm; - int vcpu_id =3D vcpu_args->vcpu_id; + int vcpu_idx =3D vcpu_args->vcpu_idx; int current_iteration =3D 0; =20 while (spin_wait_for_next_iteration(¤t_iteration)) { switch (READ_ONCE(iteration_work)) { case ITERATION_ACCESS_MEMORY: - vcpu_run(vm, vcpu_id); - assert_ucall(vm, vcpu_id, UCALL_SYNC); + vcpu_run(vm, vcpu->id); + assert_ucall(vcpu, UCALL_SYNC); break; case ITERATION_MARK_IDLE: - mark_vcpu_memory_idle(vm, vcpu_id); + mark_vcpu_memory_idle(vm, vcpu_args); break; }; =20 - vcpu_last_completed_iteration[vcpu_id] =3D current_iteration; + vcpu_last_completed_iteration[vcpu_idx] =3D current_iteration; } } =20 -static void spin_wait_for_vcpu(int vcpu_id, int target_iteration) +static void spin_wait_for_vcpu(int vcpu_idx, int target_iteration) { - while (READ_ONCE(vcpu_last_completed_iteration[vcpu_id]) !=3D + while (READ_ONCE(vcpu_last_completed_iteration[vcpu_idx]) !=3D target_iteration) { continue; } @@ -250,12 +252,11 @@ enum access_type { ACCESS_WRITE, }; =20 -static void run_iteration(struct kvm_vm *vm, int vcpus, const char *descri= ption) +static void run_iteration(struct kvm_vm *vm, int nr_vcpus, const char *des= cription) { struct timespec ts_start; struct timespec ts_elapsed; - int next_iteration; - int vcpu_id; + int next_iteration, i; =20 /* Kick off the vCPUs by incrementing iteration. */ next_iteration =3D ++iteration; @@ -263,23 +264,23 @@ static void run_iteration(struct kvm_vm *vm, int vcpu= s, const char *description) clock_gettime(CLOCK_MONOTONIC, &ts_start); =20 /* Wait for all vCPUs to finish the iteration. */ - for (vcpu_id =3D 0; vcpu_id < vcpus; vcpu_id++) - spin_wait_for_vcpu(vcpu_id, next_iteration); + for (i =3D 0; i < nr_vcpus; i++) + spin_wait_for_vcpu(i, next_iteration); =20 ts_elapsed =3D timespec_elapsed(ts_start); pr_info("%-30s: %ld.%09lds\n", description, ts_elapsed.tv_sec, ts_elapsed.tv_nsec); } =20 -static void access_memory(struct kvm_vm *vm, int vcpus, enum access_type a= ccess, - const char *description) +static void access_memory(struct kvm_vm *vm, int nr_vcpus, + enum access_type access, const char *description) { perf_test_set_wr_fract(vm, (access =3D=3D ACCESS_READ) ? INT_MAX : 1); iteration_work =3D ITERATION_ACCESS_MEMORY; - run_iteration(vm, vcpus, description); + run_iteration(vm, nr_vcpus, description); } =20 -static void mark_memory_idle(struct kvm_vm *vm, int vcpus) +static void mark_memory_idle(struct kvm_vm *vm, int nr_vcpus) { /* * Even though this parallelizes the work across vCPUs, this is still a @@ -289,37 +290,37 @@ static void mark_memory_idle(struct kvm_vm *vm, int v= cpus) */ pr_debug("Marking VM memory idle (slow)...\n"); iteration_work =3D ITERATION_MARK_IDLE; - run_iteration(vm, vcpus, "Mark memory idle"); + run_iteration(vm, nr_vcpus, "Mark memory idle"); } =20 static void run_test(enum vm_guest_mode mode, void *arg) { struct test_params *params =3D arg; struct kvm_vm *vm; - int vcpus =3D params->vcpus; + int nr_vcpus =3D params->nr_vcpus; =20 - vm =3D perf_test_create_vm(mode, vcpus, params->vcpu_memory_bytes, 1, + vm =3D perf_test_create_vm(mode, nr_vcpus, params->vcpu_memory_bytes, 1, params->backing_src, !overlap_memory_access); =20 - perf_test_start_vcpu_threads(vcpus, vcpu_thread_main); + perf_test_start_vcpu_threads(nr_vcpus, vcpu_thread_main); =20 pr_info("\n"); - access_memory(vm, vcpus, ACCESS_WRITE, "Populating memory"); + access_memory(vm, nr_vcpus, ACCESS_WRITE, "Populating memory"); =20 /* As a control, read and write to the populated memory first. */ - access_memory(vm, vcpus, ACCESS_WRITE, "Writing to populated memory"); - access_memory(vm, vcpus, ACCESS_READ, "Reading from populated memory"); + access_memory(vm, nr_vcpus, ACCESS_WRITE, "Writing to populated memory"); + access_memory(vm, nr_vcpus, ACCESS_READ, "Reading from populated memory"); =20 /* Repeat on memory that has been marked as idle. */ - mark_memory_idle(vm, vcpus); - access_memory(vm, vcpus, ACCESS_WRITE, "Writing to idle memory"); - mark_memory_idle(vm, vcpus); - access_memory(vm, vcpus, ACCESS_READ, "Reading from idle memory"); + mark_memory_idle(vm, nr_vcpus); + access_memory(vm, nr_vcpus, ACCESS_WRITE, "Writing to idle memory"); + mark_memory_idle(vm, nr_vcpus); + access_memory(vm, nr_vcpus, ACCESS_READ, "Reading from idle memory"); =20 /* Set done to signal the vCPU threads to exit */ done =3D true; =20 - perf_test_join_vcpu_threads(vcpus); + perf_test_join_vcpu_threads(nr_vcpus); perf_test_destroy_vm(vm); } =20 @@ -347,7 +348,7 @@ int main(int argc, char *argv[]) struct test_params params =3D { .backing_src =3D DEFAULT_VM_MEM_SRC, .vcpu_memory_bytes =3D DEFAULT_PER_VCPU_MEM_SIZE, - .vcpus =3D 1, + .nr_vcpus =3D 1, }; int page_idle_fd; int opt; @@ -363,7 +364,7 @@ int main(int argc, char *argv[]) params.vcpu_memory_bytes =3D parse_size(optarg); break; case 'v': - params.vcpus =3D atoi(optarg); + params.nr_vcpus =3D atoi(optarg); break; case 'o': overlap_memory_access =3D true; diff --git a/tools/testing/selftests/kvm/demand_paging_test.c b/tools/testi= ng/selftests/kvm/demand_paging_test.c index d8db0a37e973..c46110721088 100644 --- a/tools/testing/selftests/kvm/demand_paging_test.c +++ b/tools/testing/selftests/kvm/demand_paging_test.c @@ -44,28 +44,27 @@ static char *guest_data_prototype; =20 static void vcpu_worker(struct perf_test_vcpu_args *vcpu_args) { - int ret; - int vcpu_id =3D vcpu_args->vcpu_id; + struct kvm_vcpu *vcpu =3D vcpu_args->vcpu; struct kvm_vm *vm =3D perf_test_args.vm; - struct kvm_run *run; + int vcpu_idx =3D vcpu_args->vcpu_idx; + struct kvm_run *run =3D vcpu->run; struct timespec start; struct timespec ts_diff; - - run =3D vcpu_state(vm, vcpu_id); + int ret; =20 clock_gettime(CLOCK_MONOTONIC, &start); =20 /* Let the guest access its memory */ - ret =3D _vcpu_run(vm, vcpu_id); + ret =3D _vcpu_run(vm, vcpu->id); TEST_ASSERT(ret =3D=3D 0, "vcpu_run failed: %d\n", ret); - if (get_ucall(vm, vcpu_id, NULL) !=3D UCALL_SYNC) { + if (get_ucall(vm, vcpu->id, NULL) !=3D UCALL_SYNC) { TEST_ASSERT(false, "Invalid guest sync status: exit_reason=3D%s\n", exit_reason_str(run->exit_reason)); } =20 ts_diff =3D timespec_elapsed(start); - PER_VCPU_DEBUG("vCPU %d execution time: %ld.%.9lds\n", vcpu_id, + PER_VCPU_DEBUG("vCPU %d execution time: %ld.%.9lds\n", vcpu_idx, ts_diff.tv_sec, ts_diff.tv_nsec); } =20 @@ -285,8 +284,7 @@ static void run_test(enum vm_guest_mode mode, void *arg) struct timespec ts_diff; int *pipefds =3D NULL; struct kvm_vm *vm; - int vcpu_id; - int r; + int r, i; =20 vm =3D perf_test_create_vm(mode, nr_vcpus, guest_percpu_mem_size, 1, p->src_type, p->partition_vcpu_memory_access); @@ -309,12 +307,12 @@ static void run_test(enum vm_guest_mode mode, void *a= rg) pipefds =3D malloc(sizeof(int) * nr_vcpus * 2); TEST_ASSERT(pipefds, "Unable to allocate memory for pipefd"); =20 - for (vcpu_id =3D 0; vcpu_id < nr_vcpus; vcpu_id++) { + for (i =3D 0; i < nr_vcpus; i++) { struct perf_test_vcpu_args *vcpu_args; void *vcpu_hva; void *vcpu_alias; =20 - vcpu_args =3D &perf_test_args.vcpu_args[vcpu_id]; + vcpu_args =3D &perf_test_args.vcpu_args[i]; =20 /* Cache the host addresses of the region */ vcpu_hva =3D addr_gpa2hva(vm, vcpu_args->gpa); @@ -324,13 +322,13 @@ static void run_test(enum vm_guest_mode mode, void *a= rg) * Set up user fault fd to handle demand paging * requests. */ - r =3D pipe2(&pipefds[vcpu_id * 2], + r =3D pipe2(&pipefds[i * 2], O_CLOEXEC | O_NONBLOCK); TEST_ASSERT(!r, "Failed to set up pipefd"); =20 - setup_demand_paging(vm, &uffd_handler_threads[vcpu_id], - pipefds[vcpu_id * 2], p->uffd_mode, - p->uffd_delay, &uffd_args[vcpu_id], + setup_demand_paging(vm, &uffd_handler_threads[i], + pipefds[i * 2], p->uffd_mode, + p->uffd_delay, &uffd_args[i], vcpu_hva, vcpu_alias, vcpu_args->pages * perf_test_args.guest_page_size); } @@ -350,11 +348,11 @@ static void run_test(enum vm_guest_mode mode, void *a= rg) char c; =20 /* Tell the user fault fd handler threads to quit */ - for (vcpu_id =3D 0; vcpu_id < nr_vcpus; vcpu_id++) { - r =3D write(pipefds[vcpu_id * 2 + 1], &c, 1); + for (i =3D 0; i < nr_vcpus; i++) { + r =3D write(pipefds[i * 2 + 1], &c, 1); TEST_ASSERT(r =3D=3D 1, "Unable to write to pipefd"); =20 - pthread_join(uffd_handler_threads[vcpu_id], NULL); + pthread_join(uffd_handler_threads[i], NULL); } } =20 diff --git a/tools/testing/selftests/kvm/dirty_log_perf_test.c b/tools/test= ing/selftests/kvm/dirty_log_perf_test.c index 7b47ae4f952e..e0b3639c47b9 100644 --- a/tools/testing/selftests/kvm/dirty_log_perf_test.c +++ b/tools/testing/selftests/kvm/dirty_log_perf_test.c @@ -68,44 +68,45 @@ static int vcpu_last_completed_iteration[KVM_MAX_VCPUS]; =20 static void vcpu_worker(struct perf_test_vcpu_args *vcpu_args) { - int ret; + struct kvm_vcpu *vcpu =3D vcpu_args->vcpu; struct kvm_vm *vm =3D perf_test_args.vm; + int vcpu_idx =3D vcpu_args->vcpu_idx; uint64_t pages_count =3D 0; struct kvm_run *run; struct timespec start; struct timespec ts_diff; struct timespec total =3D (struct timespec){0}; struct timespec avg; - int vcpu_id =3D vcpu_args->vcpu_id; + int ret; =20 - run =3D vcpu_state(vm, vcpu_id); + run =3D vcpu->run; =20 while (!READ_ONCE(host_quit)) { int current_iteration =3D READ_ONCE(iteration); =20 clock_gettime(CLOCK_MONOTONIC, &start); - ret =3D _vcpu_run(vm, vcpu_id); + ret =3D _vcpu_run(vm, vcpu->id); ts_diff =3D timespec_elapsed(start); =20 TEST_ASSERT(ret =3D=3D 0, "vcpu_run failed: %d\n", ret); - TEST_ASSERT(get_ucall(vm, vcpu_id, NULL) =3D=3D UCALL_SYNC, + TEST_ASSERT(get_ucall(vm, vcpu->id, NULL) =3D=3D UCALL_SYNC, "Invalid guest sync status: exit_reason=3D%s\n", exit_reason_str(run->exit_reason)); =20 - pr_debug("Got sync event from vCPU %d\n", vcpu_id); - vcpu_last_completed_iteration[vcpu_id] =3D current_iteration; + pr_debug("Got sync event from vCPU %d\n", vcpu_idx); + vcpu_last_completed_iteration[vcpu_idx] =3D current_iteration; pr_debug("vCPU %d updated last completed iteration to %d\n", - vcpu_id, vcpu_last_completed_iteration[vcpu_id]); + vcpu->id, vcpu_last_completed_iteration[vcpu_idx]); =20 if (current_iteration) { pages_count +=3D vcpu_args->pages; total =3D timespec_add(total, ts_diff); pr_debug("vCPU %d iteration %d dirty memory time: %ld.%.9lds\n", - vcpu_id, current_iteration, ts_diff.tv_sec, + vcpu_idx, current_iteration, ts_diff.tv_sec, ts_diff.tv_nsec); } else { pr_debug("vCPU %d iteration %d populate memory time: %ld.%.9lds\n", - vcpu_id, current_iteration, ts_diff.tv_sec, + vcpu_idx, current_iteration, ts_diff.tv_sec, ts_diff.tv_nsec); } =20 @@ -113,9 +114,9 @@ static void vcpu_worker(struct perf_test_vcpu_args *vcp= u_args) !READ_ONCE(host_quit)) {} } =20 - avg =3D timespec_div(total, vcpu_last_completed_iteration[vcpu_id]); + avg =3D timespec_div(total, vcpu_last_completed_iteration[vcpu_idx]); pr_debug("\nvCPU %d dirtied 0x%lx pages over %d iterations in %ld.%.9lds.= (Avg %ld.%.9lds/iteration)\n", - vcpu_id, pages_count, vcpu_last_completed_iteration[vcpu_id], + vcpu_idx, pages_count, vcpu_last_completed_iteration[vcpu_idx], total.tv_sec, total.tv_nsec, avg.tv_sec, avg.tv_nsec); } =20 @@ -207,7 +208,6 @@ static void run_test(enum vm_guest_mode mode, void *arg) uint64_t guest_num_pages; uint64_t host_num_pages; uint64_t pages_per_slot; - int vcpu_id; struct timespec start; struct timespec ts_diff; struct timespec get_dirty_log_total =3D (struct timespec){0}; @@ -215,6 +215,7 @@ static void run_test(enum vm_guest_mode mode, void *arg) struct timespec avg; struct kvm_enable_cap cap =3D {}; struct timespec clear_dirty_log_total =3D (struct timespec){0}; + int i; =20 vm =3D perf_test_create_vm(mode, nr_vcpus, guest_percpu_mem_size, p->slots, p->backing_src, @@ -242,15 +243,15 @@ static void run_test(enum vm_guest_mode mode, void *a= rg) host_quit =3D false; =20 clock_gettime(CLOCK_MONOTONIC, &start); - for (vcpu_id =3D 0; vcpu_id < nr_vcpus; vcpu_id++) - vcpu_last_completed_iteration[vcpu_id] =3D -1; + for (i =3D 0; i < nr_vcpus; i++) + vcpu_last_completed_iteration[i] =3D -1; =20 perf_test_start_vcpu_threads(nr_vcpus, vcpu_worker); =20 /* Allow the vCPUs to populate memory */ pr_debug("Starting iteration %d - Populating\n", iteration); - for (vcpu_id =3D 0; vcpu_id < nr_vcpus; vcpu_id++) { - while (READ_ONCE(vcpu_last_completed_iteration[vcpu_id]) !=3D + for (i =3D 0; i < nr_vcpus; i++) { + while (READ_ONCE(vcpu_last_completed_iteration[i]) !=3D iteration) ; } @@ -275,8 +276,8 @@ static void run_test(enum vm_guest_mode mode, void *arg) iteration++; =20 pr_debug("Starting iteration %d\n", iteration); - for (vcpu_id =3D 0; vcpu_id < nr_vcpus; vcpu_id++) { - while (READ_ONCE(vcpu_last_completed_iteration[vcpu_id]) + for (i =3D 0; i < nr_vcpus; i++) { + while (READ_ONCE(vcpu_last_completed_iteration[i]) !=3D iteration) ; } diff --git a/tools/testing/selftests/kvm/include/perf_test_util.h b/tools/t= esting/selftests/kvm/include/perf_test_util.h index a86f953d8d36..9a6cdaed33f6 100644 --- a/tools/testing/selftests/kvm/include/perf_test_util.h +++ b/tools/testing/selftests/kvm/include/perf_test_util.h @@ -25,7 +25,8 @@ struct perf_test_vcpu_args { uint64_t pages; =20 /* Only used by the host userspace part of the vCPU thread */ - int vcpu_id; + struct kvm_vcpu *vcpu; + int vcpu_idx; }; =20 struct perf_test_args { @@ -39,7 +40,7 @@ struct perf_test_args { =20 extern struct perf_test_args perf_test_args; =20 -struct kvm_vm *perf_test_create_vm(enum vm_guest_mode mode, int vcpus, +struct kvm_vm *perf_test_create_vm(enum vm_guest_mode mode, int nr_vcpus, uint64_t vcpu_memory_bytes, int slots, enum vm_mem_backing_src_type backing_src, bool partition_vcpu_memory_access); diff --git a/tools/testing/selftests/kvm/lib/perf_test_util.c b/tools/testi= ng/selftests/kvm/lib/perf_test_util.c index ffbd3664e162..679f64527f1a 100644 --- a/tools/testing/selftests/kvm/lib/perf_test_util.c +++ b/tools/testing/selftests/kvm/lib/perf_test_util.c @@ -17,8 +17,8 @@ struct perf_test_args perf_test_args; static uint64_t guest_test_virt_mem =3D DEFAULT_GUEST_TEST_MEM; =20 struct vcpu_thread { - /* The id of the vCPU. */ - int vcpu_id; + /* The index of the vCPU. */ + int vcpu_idx; =20 /* The pthread backing the vCPU. */ pthread_t thread; @@ -36,24 +36,26 @@ static void (*vcpu_thread_fn)(struct perf_test_vcpu_arg= s *); /* Set to true once all vCPU threads are up and running. */ static bool all_vcpu_threads_running; =20 +static struct kvm_vcpu *vcpus[KVM_MAX_VCPUS]; + /* * Continuously write to the first 8 bytes of each page in the * specified region. */ -static void guest_code(uint32_t vcpu_id) +static void guest_code(uint32_t vcpu_idx) { struct perf_test_args *pta =3D &perf_test_args; - struct perf_test_vcpu_args *vcpu_args =3D &pta->vcpu_args[vcpu_id]; + struct perf_test_vcpu_args *vcpu_args =3D &pta->vcpu_args[vcpu_idx]; uint64_t gva; uint64_t pages; int i; =20 - /* Make sure vCPU args data structure is not corrupt. */ - GUEST_ASSERT(vcpu_args->vcpu_id =3D=3D vcpu_id); - gva =3D vcpu_args->gva; pages =3D vcpu_args->pages; =20 + /* Make sure vCPU args data structure is not corrupt. */ + GUEST_ASSERT(vcpu_args->vcpu_idx =3D=3D vcpu_idx); + while (true) { for (i =3D 0; i < pages; i++) { uint64_t addr =3D gva + (i * pta->guest_page_size); @@ -68,40 +70,43 @@ static void guest_code(uint32_t vcpu_id) } } =20 -void perf_test_setup_vcpus(struct kvm_vm *vm, int vcpus, +void perf_test_setup_vcpus(struct kvm_vm *vm, int nr_vcpus, + struct kvm_vcpu *vcpus[], uint64_t vcpu_memory_bytes, bool partition_vcpu_memory_access) { struct perf_test_args *pta =3D &perf_test_args; struct perf_test_vcpu_args *vcpu_args; - int vcpu_id; + int i; =20 - for (vcpu_id =3D 0; vcpu_id < vcpus; vcpu_id++) { - vcpu_args =3D &pta->vcpu_args[vcpu_id]; + for (i =3D 0; i < nr_vcpus; i++) { + vcpu_args =3D &pta->vcpu_args[i]; + + vcpu_args->vcpu =3D vcpus[i]; + vcpu_args->vcpu_idx =3D i; =20 - vcpu_args->vcpu_id =3D vcpu_id; if (partition_vcpu_memory_access) { vcpu_args->gva =3D guest_test_virt_mem + - (vcpu_id * vcpu_memory_bytes); + (i * vcpu_memory_bytes); vcpu_args->pages =3D vcpu_memory_bytes / pta->guest_page_size; - vcpu_args->gpa =3D pta->gpa + (vcpu_id * vcpu_memory_bytes); + vcpu_args->gpa =3D pta->gpa + (i * vcpu_memory_bytes); } else { vcpu_args->gva =3D guest_test_virt_mem; - vcpu_args->pages =3D (vcpus * vcpu_memory_bytes) / + vcpu_args->pages =3D (nr_vcpus * vcpu_memory_bytes) / pta->guest_page_size; vcpu_args->gpa =3D pta->gpa; } =20 - vcpu_args_set(vm, vcpu_id, 1, vcpu_id); + vcpu_args_set(vm, vcpus[i]->id, 1, i); =20 pr_debug("Added VCPU %d with test mem gpa [%lx, %lx)\n", - vcpu_id, vcpu_args->gpa, vcpu_args->gpa + + i, vcpu_args->gpa, vcpu_args->gpa + (vcpu_args->pages * pta->guest_page_size)); } } =20 -struct kvm_vm *perf_test_create_vm(enum vm_guest_mode mode, int vcpus, +struct kvm_vm *perf_test_create_vm(enum vm_guest_mode mode, int nr_vcpus, uint64_t vcpu_memory_bytes, int slots, enum vm_mem_backing_src_type backing_src, bool partition_vcpu_memory_access) @@ -124,7 +129,7 @@ struct kvm_vm *perf_test_create_vm(enum vm_guest_mode m= ode, int vcpus, pta->guest_page_size =3D vm_guest_mode_params[mode].page_size; =20 guest_num_pages =3D vm_adjust_num_guest_pages(mode, - (vcpus * vcpu_memory_bytes) / pta->guest_page_size); + (nr_vcpus * vcpu_memory_bytes) / pta->guest_page_size); =20 TEST_ASSERT(vcpu_memory_bytes % getpagesize() =3D=3D 0, "Guest memory size is not host page size aligned."); @@ -139,8 +144,8 @@ struct kvm_vm *perf_test_create_vm(enum vm_guest_mode m= ode, int vcpus, * The memory is also added to memslot 0, but that's a benign side * effect as KVM allows aliasing HVAs in meslots. */ - vm =3D __vm_create_with_vcpus(mode, vcpus, DEFAULT_GUEST_PHY_PAGES, - guest_num_pages, 0, guest_code, NULL); + vm =3D __vm_create_with_vcpus(mode, nr_vcpus, DEFAULT_GUEST_PHY_PAGES, + guest_num_pages, 0, guest_code, vcpus); =20 pta->vm =3D vm; =20 @@ -151,8 +156,8 @@ struct kvm_vm *perf_test_create_vm(enum vm_guest_mode m= ode, int vcpus, TEST_ASSERT(guest_num_pages < vm_get_max_gfn(vm), "Requested more guest memory than address space allows.\n" " guest pages: %" PRIx64 " max gfn: %" PRIx64 - " vcpus: %d wss: %" PRIx64 "]\n", - guest_num_pages, vm_get_max_gfn(vm), vcpus, + " nr_vcpus: %d wss: %" PRIx64 "]\n", + guest_num_pages, vm_get_max_gfn(vm), nr_vcpus, vcpu_memory_bytes); =20 pta->gpa =3D (vm_get_max_gfn(vm) - guest_num_pages) * pta->guest_page_siz= e; @@ -176,7 +181,8 @@ struct kvm_vm *perf_test_create_vm(enum vm_guest_mode m= ode, int vcpus, /* Do mapping for the demand paging memory slot */ virt_map(vm, guest_test_virt_mem, pta->gpa, guest_num_pages); =20 - perf_test_setup_vcpus(vm, vcpus, vcpu_memory_bytes, partition_vcpu_memory= _access); + perf_test_setup_vcpus(vm, nr_vcpus, vcpus, vcpu_memory_bytes, + partition_vcpu_memory_access); =20 ucall_init(vm, NULL); =20 @@ -213,39 +219,40 @@ static void *vcpu_thread_main(void *data) while (!READ_ONCE(all_vcpu_threads_running)) ; =20 - vcpu_thread_fn(&perf_test_args.vcpu_args[vcpu->vcpu_id]); + vcpu_thread_fn(&perf_test_args.vcpu_args[vcpu->vcpu_idx]); =20 return NULL; } =20 -void perf_test_start_vcpu_threads(int vcpus, void (*vcpu_fn)(struct perf_t= est_vcpu_args *)) +void perf_test_start_vcpu_threads(int nr_vcpus, + void (*vcpu_fn)(struct perf_test_vcpu_args *)) { - int vcpu_id; + int i; =20 vcpu_thread_fn =3D vcpu_fn; WRITE_ONCE(all_vcpu_threads_running, false); =20 - for (vcpu_id =3D 0; vcpu_id < vcpus; vcpu_id++) { - struct vcpu_thread *vcpu =3D &vcpu_threads[vcpu_id]; + for (i =3D 0; i < nr_vcpus; i++) { + struct vcpu_thread *vcpu =3D &vcpu_threads[i]; =20 - vcpu->vcpu_id =3D vcpu_id; + vcpu->vcpu_idx =3D i; WRITE_ONCE(vcpu->running, false); =20 pthread_create(&vcpu->thread, NULL, vcpu_thread_main, vcpu); } =20 - for (vcpu_id =3D 0; vcpu_id < vcpus; vcpu_id++) { - while (!READ_ONCE(vcpu_threads[vcpu_id].running)) + for (i =3D 0; i < nr_vcpus; i++) { + while (!READ_ONCE(vcpu_threads[i].running)) ; } =20 WRITE_ONCE(all_vcpu_threads_running, true); } =20 -void perf_test_join_vcpu_threads(int vcpus) +void perf_test_join_vcpu_threads(int nr_vcpus) { - int vcpu_id; + int i; =20 - for (vcpu_id =3D 0; vcpu_id < vcpus; vcpu_id++) - pthread_join(vcpu_threads[vcpu_id].thread, NULL); + for (i =3D 0; i < nr_vcpus; i++) + pthread_join(vcpu_threads[i].thread, NULL); } diff --git a/tools/testing/selftests/kvm/memslot_modification_stress_test.c= b/tools/testing/selftests/kvm/memslot_modification_stress_test.c index 1410d0a9141a..a3efb3182119 100644 --- a/tools/testing/selftests/kvm/memslot_modification_stress_test.c +++ b/tools/testing/selftests/kvm/memslot_modification_stress_test.c @@ -38,19 +38,19 @@ static bool run_vcpus =3D true; =20 static void vcpu_worker(struct perf_test_vcpu_args *vcpu_args) { - int ret; - int vcpu_id =3D vcpu_args->vcpu_id; + struct kvm_vcpu *vcpu =3D vcpu_args->vcpu; struct kvm_vm *vm =3D perf_test_args.vm; struct kvm_run *run; + int ret; =20 - run =3D vcpu_state(vm, vcpu_id); + run =3D vcpu->run; =20 /* Let the guest access its memory until a stop signal is received */ while (READ_ONCE(run_vcpus)) { - ret =3D _vcpu_run(vm, vcpu_id); + ret =3D _vcpu_run(vm, vcpu->id); TEST_ASSERT(ret =3D=3D 0, "vcpu_run failed: %d\n", ret); =20 - if (get_ucall(vm, vcpu_id, NULL) =3D=3D UCALL_SYNC) + if (get_ucall(vm, vcpu->id, NULL) =3D=3D UCALL_SYNC) continue; =20 TEST_ASSERT(false, --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 8D4DFC43217 for ; Wed, 4 May 2022 23:07:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1383629AbiEDXHS (ORCPT ); Wed, 4 May 2022 19:07:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58552 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1380511AbiEDXAE (ORCPT ); Wed, 4 May 2022 19:00:04 -0400 Received: from mail-yb1-xb49.google.com (mail-yb1-xb49.google.com [IPv6:2607:f8b0:4864:20::b49]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 88D5C57B2D for ; Wed, 4 May 2022 15:53:28 -0700 (PDT) Received: by mail-yb1-xb49.google.com with SMTP id b33-20020a25aea1000000b0064588c45fbaso2271859ybj.16 for ; Wed, 04 May 2022 15:53:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=1Ko89WgoR4QoPr6VqUAmRTjNB65KGevR+vu8Lfe+KrY=; b=hpwTYNVKayJGrqxOPwmZTNGFN/7HtMmZwmydASwz0toZ91ismPoEA3BHf7yB3mF0uI 0ZZwLS7tDoAO9i9jqoXZLfJh0hnPWnyvQoGSUwnAwkFvYIFwM+ghzuoRM+KIXOi9y5bG w2zCfbsMMH+e3h+27GWN/m/TvbtQdMFculxXV3ABs29LwJOdf9lllFbHo+jQH/kHirNb xoA0grfeZl8pLt/Uq+fWXcupWBFmHXvjHK3ANNVFC7/C0qx60/zHA0F5+dfiiS8Jsg8S 8kju4HrgNQwiCDoKQDiGnYlEVPBYFafuUR0QQKJZnwiPwHpozct6r4AABGnbqZ2NX38Z CV+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=1Ko89WgoR4QoPr6VqUAmRTjNB65KGevR+vu8Lfe+KrY=; b=5NvDq6XVuR2hZ+GMN3dlDzJv9ZuOMMUwqeIoZin4aio6i0Be5GmHyEitztaDOLrOr8 Is+FbXms2QHDiDL7RIxk9ZyagW5J9kjFrxP+ODMDSXNg1ZPZBppdsH3H5a9UcU7kpbll 9A8vPaXa6MzJAmrZ4mQFCDWGf2+4A7Pza4uMxIgiuFY5bwt88t+6khzfQojUj/OTWw2N 3G0EYFoiCqwFboj8WGWOH+8M/zDroN8Vf99MvpDoxyHoWPdQhK/sR9UcPUeeK2eFePA0 6VZlqY8Kz85t4b/WqNTbhsdwm5KPMrkzt/UyXSFbr7qQ8IqByjEWLAljrG8aW0tCVTxu UV+w== X-Gm-Message-State: AOAM532egIZVEac93nviRH3NTaL2EmM+vrK1DQEKAXAT0jK+mLCHU5xi Hv++4MwLcC+tcwJQhcXKk9o58Nd0x2Q= X-Google-Smtp-Source: ABdhPJxIyNosEuODp1hRl7pKdS4yHHRTzfhNLT+Ogmit5H7vWGukQNk7xEe18n7Uyy+dvIAC6pWKQmdzoOE= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a25:2646:0:b0:645:8261:d7ff with SMTP id m67-20020a252646000000b006458261d7ffmr20289498ybm.351.1651704774982; Wed, 04 May 2022 15:52:54 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:49:04 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-119-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 118/128] KVM: selftests: Remove vcpu_get() usage from dirty_log_test From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Grab the vCPU from vm_vcpu_add() directly instead of doing vcpu_get() after the fact. This will allow removing vcpu_get() entirely. Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/dirty_log_test.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/tools/testing/selftests/kvm/dirty_log_test.c b/tools/testing/s= elftests/kvm/dirty_log_test.c index b61af23ba434..73c6fd9c850c 100644 --- a/tools/testing/selftests/kvm/dirty_log_test.c +++ b/tools/testing/selftests/kvm/dirty_log_test.c @@ -668,7 +668,7 @@ static void vm_dirty_log_verify(enum vm_guest_mode mode= , unsigned long *bmap) } } =20 -static struct kvm_vm *create_vm(enum vm_guest_mode mode, uint32_t vcpuid, +static struct kvm_vm *create_vm(enum vm_guest_mode mode, struct kvm_vcpu *= *vcpu, uint64_t extra_mem_pages, void *guest_code) { struct kvm_vm *vm; @@ -679,7 +679,7 @@ static struct kvm_vm *create_vm(enum vm_guest_mode mode= , uint32_t vcpuid, vm =3D __vm_create(mode, DEFAULT_GUEST_PHY_PAGES + extra_pg_pages); =20 log_mode_create_vm_done(vm); - vm_vcpu_add(vm, vcpuid, guest_code); + *vcpu =3D vm_vcpu_add(vm, 0, guest_code); return vm; } =20 @@ -713,10 +713,8 @@ static void run_test(enum vm_guest_mode mode, void *ar= g) * (e.g., 64K page size guest will need even less memory for * page tables). */ - vm =3D create_vm(mode, 0, - 2ul << (DIRTY_MEM_BITS - PAGE_SHIFT_4K), - guest_code); - vcpu =3D vcpu_get(vm, 0); + vm =3D create_vm(mode, &vcpu, + 2ul << (DIRTY_MEM_BITS - PAGE_SHIFT_4K), guest_code); =20 guest_page_size =3D vm_get_page_size(vm); /* --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 E631CC41535 for ; Wed, 4 May 2022 23:07:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1383552AbiEDXHP (ORCPT ); Wed, 4 May 2022 19:07:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58544 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1380509AbiEDXAE (ORCPT ); Wed, 4 May 2022 19:00:04 -0400 Received: from mail-pj1-x1049.google.com (mail-pj1-x1049.google.com [IPv6:2607:f8b0:4864:20::1049]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id ECD6857B3A for ; Wed, 4 May 2022 15:53:28 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id z11-20020a17090a468b00b001dc792e8660so1320270pjf.1 for ; Wed, 04 May 2022 15:53:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=Y0ltxz1n+cyN9oREkFOZuEteikspMaetU0xjw3Z41ek=; b=aUFgP/bFtY1euxIu3o+lcaoKK4P/6/CaCsFszu3Zqslm0vfXNjHvwREDNYSy79i9hw JkiVnd36bY57O6fq8Ope5Z0RvUawzJM+Pv+Fe3DiZZHSn+/TLZJZe5tTTjzrQsVrAy0R RyuMQtrYBqQmSp832a9nz6c7Em8uJ7Tlw4qEXzXTKMLKIfZK9oJgphZnJbFHwO6WfK6I z0p65ncHT+sX9s/NXV4HImEg1qQEk5asvqsk/G26KsDXTKfZD0XPAqi+yEZLOaB1NkHf Pd4y/H6vtaVy87NB2NhjVBfLKJ+AZ4lFQfPuYZH7YNUuZ1gax1sAhuUdK1clShZApbyc 990w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=Y0ltxz1n+cyN9oREkFOZuEteikspMaetU0xjw3Z41ek=; b=CgRXVeblBBuw3ULsourQhZsgSCbC8nbtn/ar0BB1rBzSLpuHrzemITDSr8bD9TTGdK jfmt4ixLg9/2iIS9D34bQpktlMsf9aqnuTyaGcJy+PfACB9suAt6ZBgICPvaaejDNw7m hdgPbejug+NCz5QOCwttsFM2qREmpHW1CV1GBrpUpwHnKpzAfRwb4/6tlGl+jTmoScNI 6LXnpDF5Q4QqMfa0jh1+In3LqmjPNN7aRtM3Ok+3jejUGhNDDxbSC0lio7Rr2S+u73g+ 9inXhd/Gb2yjAL6XDcisz1SplA+Py45eURouZ1NRXqWbFhsxl+qUcweM7bT4i98rB6sM t6Tg== X-Gm-Message-State: AOAM531NL2JlzACa644Sbo2ryiXc47Bbf+wgyK4XxGqHtfEhUutYKDKT LUmZr0OfizFz7MMS+hYpdMcbD04/PGs= X-Google-Smtp-Source: ABdhPJw0c4fwBdmtI5STNhQu6KndxT4eTv+v+03HIZdr9hfcfayqBDensfmmaO+7Jn8mEt4lc5hIl5jNexY= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:e5d2:b0:15e:9467:187 with SMTP id u18-20020a170902e5d200b0015e94670187mr21683068plf.123.1651704776410; Wed, 04 May 2022 15:52:56 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:49:05 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-120-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 119/128] KVM: selftests: Require vCPU output array when creating VM with vCPUs From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Require the caller of __vm_create_with_vcpus() to provide a non-NULL array of vCPUs now that all callers do so. It's extremely unlikely a test will have a legitimate use case for creating a VM with vCPUs without wanting to do something with those vCPUs, and if there is such a use case, requiring that one-off test to provide a dummy array is a minor annoyance. Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/lib/kvm_util.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index ccd194007e90..9cc1eacacb4e 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -306,10 +306,11 @@ struct kvm_vm *__vm_create_with_vcpus(enum vm_guest_m= ode mode, uint32_t nr_vcpus struct kvm_vcpu *vcpus[]) { uint64_t vcpu_pages, extra_pg_pages, pages; - struct kvm_vcpu *vcpu; struct kvm_vm *vm; int i; =20 + TEST_ASSERT(!nr_vcpus || vcpus, "Must provide vCPU array"); + /* Force slot0 memory size not small than DEFAULT_GUEST_PHY_PAGES */ if (slot0_mem_pages < DEFAULT_GUEST_PHY_PAGES) slot0_mem_pages =3D DEFAULT_GUEST_PHY_PAGES; @@ -330,11 +331,8 @@ struct kvm_vm *__vm_create_with_vcpus(enum vm_guest_mo= de mode, uint32_t nr_vcpus =20 vm =3D __vm_create(mode, pages); =20 - for (i =3D 0; i < nr_vcpus; ++i) { - vcpu =3D vm_vcpu_add(vm, i, guest_code); - if (vcpus) - vcpus[i] =3D vcpu; - } + for (i =3D 0; i < nr_vcpus; ++i) + vcpus[i] =3D vm_vcpu_add(vm, i, guest_code); =20 return vm; } --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 3D570C4708A for ; Wed, 4 May 2022 23:07:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1383910AbiEDXHa (ORCPT ); Wed, 4 May 2022 19:07:30 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58718 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379246AbiEDXAO (ORCPT ); Wed, 4 May 2022 19:00:14 -0400 Received: from mail-pj1-x1049.google.com (mail-pj1-x1049.google.com [IPv6:2607:f8b0:4864:20::1049]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 58F0E580C9 for ; Wed, 4 May 2022 15:53:29 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id d64-20020a17090a6f4600b001da3937032fso3566898pjk.5 for ; Wed, 04 May 2022 15:53:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=7QC4KbqQ9vxH/kW0U2ZTgMUJb8ldU1+MU4dSvQ/BQb8=; b=eFK4c0QDRzOnXRasA/G81rvd9UmRyBFTZP+HM4HUmOCC1erbg/T7R2Ze7WyPQ0PEhT W21a6PwVc0xMtbxpABqQegEmNbaPLRXCxQHAAWBG7x6JnlGNFJNSi8/pdJ0wGx8hKMl+ F3tvJ7kNCz+bOFQo/lIFd23sEC3L+za8CV/OwI2BHoJHI56STs5Mho20ue5n11motCj3 JAhUJUF2berfimxSFZf/WiyYhN0fzpDKeERz2K7jt6S+nGT/5mqa4Exqx0NsjCfOV8wn gsRvzY3SvAu696eYP/ssPYG412/ts6r30TiPNCROffsub8PjwU2YLYGxW18sQlae010f QZlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=7QC4KbqQ9vxH/kW0U2ZTgMUJb8ldU1+MU4dSvQ/BQb8=; b=Jsa/wt4apBgVFtb15albAkXwpuU0NMz8VihdgORvE/dtaXJGBnsH/dNuv2s8zGQ8Gy j0nK+gQwT2vqTewuTvnP4tcTUJYIXiNK1w+CCnBc8+Ahnhowf+lfVJ1Q1UEbzgjL2xsf CU+oWZVzsB76N1oo1kf9BxxC/srgMTdWf2rDGmf+t4+Ql6K93lHyteP6mo0puJWSUJSm sLoaXd+G9f/FVo0AQbXLqyLnhZ/H1fHK8yVQLCEom2uzfJqe1q5HHx40EuI10xTjzrcc jxRKUK5TQdJM7yEGlZP+LUOj0jgeFyOjrLIWBlMQag6HoD6ReRnZ3uVsclwq860+eO+y YZRA== X-Gm-Message-State: AOAM530iKv/uEA53qen6oOquFL/Oz/ZbX9A305ZPlJ1znn2Ueu9SQVWT YBVReqfr8/Igfl/FP52PIh1X//R/5u0= X-Google-Smtp-Source: ABdhPJwYlHudDs2RKFt0FHr6gGZCrsD2tuH6yaKJAPmAg1Zqngqe+WjSV7fz1w9se9vtuRkmDsfYix9b9GU= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:903:20f:b0:158:d86a:f473 with SMTP id r15-20020a170903020f00b00158d86af473mr24141253plh.92.1651704778061; Wed, 04 May 2022 15:52:58 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:49:06 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-121-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 120/128] KVM: selftests: Purge vm+vcpu_id == vcpu silliness From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Take a vCPU directly instead of a VM+vcpu pair in all vCPU-scoped helpers and ioctls. Signed-off-by: Sean Christopherson --- .../selftests/kvm/aarch64/arch_timer.c | 10 +- .../selftests/kvm/aarch64/debug-exceptions.c | 8 +- .../selftests/kvm/aarch64/get-reg-list.c | 14 +- .../selftests/kvm/aarch64/psci_cpu_on_test.c | 12 +- .../selftests/kvm/aarch64/vcpu_width_config.c | 8 +- .../testing/selftests/kvm/aarch64/vgic_init.c | 2 +- .../testing/selftests/kvm/aarch64/vgic_irq.c | 8 +- .../selftests/kvm/access_tracking_perf_test.c | 4 +- .../selftests/kvm/demand_paging_test.c | 5 +- .../selftests/kvm/dirty_log_perf_test.c | 7 +- tools/testing/selftests/kvm/dirty_log_test.c | 10 +- .../selftests/kvm/hardware_disable_test.c | 2 +- .../selftests/kvm/include/aarch64/processor.h | 14 +- .../selftests/kvm/include/kvm_util_base.h | 192 +++++++++--------- .../selftests/kvm/include/riscv/processor.h | 8 +- .../selftests/kvm/include/ucall_common.h | 2 +- .../selftests/kvm/include/x86_64/evmcs.h | 2 +- .../selftests/kvm/include/x86_64/processor.h | 39 ++-- .../selftests/kvm/kvm_binary_stats_test.c | 2 +- .../selftests/kvm/kvm_page_table_test.c | 7 +- .../selftests/kvm/lib/aarch64/processor.c | 45 ++-- .../testing/selftests/kvm/lib/aarch64/ucall.c | 8 +- tools/testing/selftests/kvm/lib/kvm_util.c | 162 ++++----------- .../selftests/kvm/lib/perf_test_util.c | 2 +- .../selftests/kvm/lib/riscv/processor.c | 94 +++++---- tools/testing/selftests/kvm/lib/riscv/ucall.c | 8 +- .../kvm/lib/s390x/diag318_test_handler.c | 2 +- .../selftests/kvm/lib/s390x/processor.c | 22 +- tools/testing/selftests/kvm/lib/s390x/ucall.c | 8 +- .../selftests/kvm/lib/x86_64/processor.c | 102 ++++------ .../testing/selftests/kvm/lib/x86_64/ucall.c | 10 +- tools/testing/selftests/kvm/lib/x86_64/vmx.c | 4 +- .../selftests/kvm/max_guest_memory_test.c | 20 +- .../kvm/memslot_modification_stress_test.c | 5 +- .../testing/selftests/kvm/memslot_perf_test.c | 4 +- tools/testing/selftests/kvm/rseq_test.c | 4 +- tools/testing/selftests/kvm/s390x/memop.c | 8 +- tools/testing/selftests/kvm/s390x/resets.c | 28 +-- .../selftests/kvm/s390x/sync_regs_test.c | 22 +- tools/testing/selftests/kvm/s390x/tprot.c | 4 +- .../selftests/kvm/set_memory_region_test.c | 8 +- tools/testing/selftests/kvm/steal_time.c | 20 +- .../kvm/system_counter_offset_test.c | 13 +- tools/testing/selftests/kvm/x86_64/amx_test.c | 22 +- .../testing/selftests/kvm/x86_64/cpuid_test.c | 14 +- .../kvm/x86_64/cr4_cpuid_sync_test.c | 8 +- .../testing/selftests/kvm/x86_64/debug_regs.c | 30 +-- .../kvm/x86_64/emulator_error_test.c | 20 +- .../testing/selftests/kvm/x86_64/evmcs_test.c | 28 +-- .../selftests/kvm/x86_64/fix_hypercall_test.c | 6 +- .../selftests/kvm/x86_64/hyperv_clock.c | 14 +- .../selftests/kvm/x86_64/hyperv_cpuid.c | 8 +- .../selftests/kvm/x86_64/hyperv_features.c | 28 +-- .../selftests/kvm/x86_64/hyperv_svm_test.c | 8 +- .../selftests/kvm/x86_64/kvm_clock_test.c | 6 +- .../selftests/kvm/x86_64/kvm_pv_test.c | 10 +- .../selftests/kvm/x86_64/mmu_role_test.c | 10 +- .../selftests/kvm/x86_64/platform_info_test.c | 14 +- .../kvm/x86_64/pmu_event_filter_test.c | 8 +- .../selftests/kvm/x86_64/set_boot_cpu_id.c | 4 +- .../selftests/kvm/x86_64/set_sregs_test.c | 16 +- tools/testing/selftests/kvm/x86_64/smm_test.c | 18 +- .../testing/selftests/kvm/x86_64/state_test.c | 18 +- .../selftests/kvm/x86_64/svm_int_ctl_test.c | 8 +- .../selftests/kvm/x86_64/svm_vmcall_test.c | 6 +- .../selftests/kvm/x86_64/sync_regs_test.c | 36 ++-- .../selftests/kvm/x86_64/tsc_msrs_test.c | 14 +- .../selftests/kvm/x86_64/tsc_scaling_sync.c | 6 +- .../selftests/kvm/x86_64/userspace_io_test.c | 8 +- .../kvm/x86_64/userspace_msr_exit_test.c | 22 +- .../kvm/x86_64/vmx_apic_access_test.c | 6 +- .../kvm/x86_64/vmx_close_while_nested_test.c | 6 +- .../selftests/kvm/x86_64/vmx_dirty_log_test.c | 6 +- .../vmx_exception_with_invalid_guest_state.c | 10 +- .../x86_64/vmx_invalid_nested_guest_state.c | 12 +- .../kvm/x86_64/vmx_nested_tsc_scaling_test.c | 11 +- .../selftests/kvm/x86_64/vmx_pmu_msrs_test.c | 20 +- .../kvm/x86_64/vmx_preemption_timer_test.c | 18 +- .../kvm/x86_64/vmx_set_nested_state_test.c | 12 +- .../kvm/x86_64/vmx_tsc_adjust_test.c | 6 +- .../selftests/kvm/x86_64/xapic_ipi_test.c | 10 +- .../selftests/kvm/x86_64/xapic_state_test.c | 42 ++-- .../selftests/kvm/x86_64/xen_shinfo_test.c | 38 ++-- .../selftests/kvm/x86_64/xen_vmcall_test.c | 6 +- .../selftests/kvm/x86_64/xss_msr_test.c | 6 +- 85 files changed, 722 insertions(+), 836 deletions(-) diff --git a/tools/testing/selftests/kvm/aarch64/arch_timer.c b/tools/testi= ng/selftests/kvm/aarch64/arch_timer.c index a873d9adc558..ca4c08b4e353 100644 --- a/tools/testing/selftests/kvm/aarch64/arch_timer.c +++ b/tools/testing/selftests/kvm/aarch64/arch_timer.c @@ -218,14 +218,14 @@ static void *test_vcpu_run(void *arg) struct kvm_vm *vm =3D vcpu->vm; struct test_vcpu_shared_data *shared_data =3D &vcpu_shared_data[vcpu_idx]; =20 - vcpu_run(vm, vcpu->id); + vcpu_run(vcpu); =20 /* Currently, any exit from guest is an indication of completion */ pthread_mutex_lock(&vcpu_done_map_lock); set_bit(vcpu_idx, vcpu_done_map); pthread_mutex_unlock(&vcpu_done_map_lock); =20 - switch (get_ucall(vm, vcpu->id, &uc)) { + switch (get_ucall(vcpu, &uc)) { case UCALL_SYNC: case UCALL_DONE: break; @@ -345,9 +345,9 @@ static void test_run(struct kvm_vm *vm) static void test_init_timer_irq(struct kvm_vm *vm) { /* Timer initid should be same for all the vCPUs, so query only vCPU-0 */ - vcpu_device_attr_get(vm, vcpus[0]->id, KVM_ARM_VCPU_TIMER_CTRL, + vcpu_device_attr_get(vcpus[0], KVM_ARM_VCPU_TIMER_CTRL, KVM_ARM_VCPU_TIMER_IRQ_PTIMER, &ptimer_irq); - vcpu_device_attr_get(vm, vcpus[0]->id, KVM_ARM_VCPU_TIMER_CTRL, + vcpu_device_attr_get(vcpus[0], KVM_ARM_VCPU_TIMER_CTRL, KVM_ARM_VCPU_TIMER_IRQ_VTIMER, &vtimer_irq); =20 sync_global_to_guest(vm, ptimer_irq); @@ -370,7 +370,7 @@ static struct kvm_vm *test_vm_create(void) vm_install_exception_handler(vm, VECTOR_IRQ_CURRENT, guest_irq_handler); =20 for (i =3D 0; i < nr_vcpus; i++) - vcpu_init_descriptor_tables(vm, vcpus[i]->id); + vcpu_init_descriptor_tables(vcpus[i]); =20 ucall_init(vm, NULL); test_init_timer_irq(vm); diff --git a/tools/testing/selftests/kvm/aarch64/debug-exceptions.c b/tools= /testing/selftests/kvm/aarch64/debug-exceptions.c index b69db0942169..98ca49ecbf06 100644 --- a/tools/testing/selftests/kvm/aarch64/debug-exceptions.c +++ b/tools/testing/selftests/kvm/aarch64/debug-exceptions.c @@ -242,7 +242,7 @@ static int debug_version(struct kvm_vcpu *vcpu) { uint64_t id_aa64dfr0; =20 - get_reg(vcpu->vm, vcpu->id, KVM_ARM64_SYS_REG(SYS_ID_AA64DFR0_EL1), &id_a= a64dfr0); + get_reg(vcpu, KVM_ARM64_SYS_REG(SYS_ID_AA64DFR0_EL1), &id_aa64dfr0); return id_aa64dfr0 & 0xf; } =20 @@ -257,7 +257,7 @@ int main(int argc, char *argv[]) ucall_init(vm, NULL); =20 vm_init_descriptor_tables(vm); - vcpu_init_descriptor_tables(vm, vcpu->id); + vcpu_init_descriptor_tables(vcpu); =20 if (debug_version(vcpu) < 6) { print_skip("Armv8 debug architecture not supported."); @@ -277,9 +277,9 @@ int main(int argc, char *argv[]) ESR_EC_SVC64, guest_svc_handler); =20 for (stage =3D 0; stage < 11; stage++) { - vcpu_run(vm, vcpu->id); + vcpu_run(vcpu); =20 - switch (get_ucall(vm, vcpu->id, &uc)) { + switch (get_ucall(vcpu, &uc)) { case UCALL_SYNC: TEST_ASSERT(uc.args[1] =3D=3D stage, "Stage %d: Unexpected sync ucall, got %lx", diff --git a/tools/testing/selftests/kvm/aarch64/get-reg-list.c b/tools/tes= ting/selftests/kvm/aarch64/get-reg-list.c index dae6d5704519..63591486677b 100644 --- a/tools/testing/selftests/kvm/aarch64/get-reg-list.c +++ b/tools/testing/selftests/kvm/aarch64/get-reg-list.c @@ -372,7 +372,7 @@ static void prepare_vcpu_init(struct vcpu_config *c, st= ruct kvm_vcpu_init *init) init->features[s->feature / 32] |=3D 1 << (s->feature % 32); } =20 -static void finalize_vcpu(struct kvm_vm *vm, uint32_t vcpuid, struct vcpu_= config *c) +static void finalize_vcpu(struct kvm_vcpu *vcpu, struct vcpu_config *c) { struct reg_sublist *s; int feature; @@ -380,7 +380,7 @@ static void finalize_vcpu(struct kvm_vm *vm, uint32_t v= cpuid, struct vcpu_config for_each_sublist(c, s) { if (s->finalize) { feature =3D s->feature; - vcpu_ioctl(vm, vcpuid, KVM_ARM_VCPU_FINALIZE, &feature); + vcpu_ioctl(vcpu, KVM_ARM_VCPU_FINALIZE, &feature); } } } @@ -415,9 +415,9 @@ static void run_test(struct vcpu_config *c) vm =3D vm_create_barebones(); prepare_vcpu_init(c, &init); vcpu =3D aarch64_vcpu_add(vm, 0, &init, NULL); - finalize_vcpu(vm, vcpu->id, c); + finalize_vcpu(vcpu, c); =20 - reg_list =3D vcpu_get_reg_list(vm, vcpu->id); + reg_list =3D vcpu_get_reg_list(vcpu); =20 if (fixup_core_regs) core_reg_fixup(); @@ -453,7 +453,7 @@ static void run_test(struct vcpu_config *c) bool reject_reg =3D false; int ret; =20 - ret =3D __vcpu_ioctl(vm, vcpu->id, KVM_GET_ONE_REG, ®); + ret =3D __vcpu_ioctl(vcpu, KVM_GET_ONE_REG, ®); if (ret) { printf("%s: Failed to get ", config_name(c)); print_reg(c, reg.id); @@ -465,7 +465,7 @@ static void run_test(struct vcpu_config *c) for_each_sublist(c, s) { if (s->rejects_set && find_reg(s->rejects_set, s->rejects_set_n, reg.id= )) { reject_reg =3D true; - ret =3D __vcpu_ioctl(vm, vcpu->id, KVM_SET_ONE_REG, ®); + ret =3D __vcpu_ioctl(vcpu, KVM_SET_ONE_REG, ®); if (ret !=3D -1 || errno !=3D EPERM) { printf("%s: Failed to reject (ret=3D%d, errno=3D%d) ", config_name(c)= , ret, errno); print_reg(c, reg.id); @@ -477,7 +477,7 @@ static void run_test(struct vcpu_config *c) } =20 if (!reject_reg) { - ret =3D __vcpu_ioctl(vm, vcpu->id, KVM_SET_ONE_REG, ®); + ret =3D __vcpu_ioctl(vcpu, KVM_SET_ONE_REG, ®); if (ret) { printf("%s: Failed to set ", config_name(c)); print_reg(c, reg.id); diff --git a/tools/testing/selftests/kvm/aarch64/psci_cpu_on_test.c b/tools= /testing/selftests/kvm/aarch64/psci_cpu_on_test.c index 142c3fa2f5f7..3ed8dcbd4227 100644 --- a/tools/testing/selftests/kvm/aarch64/psci_cpu_on_test.c +++ b/tools/testing/selftests/kvm/aarch64/psci_cpu_on_test.c @@ -88,11 +88,11 @@ int main(void) init.features[0] |=3D (1 << KVM_ARM_VCPU_POWER_OFF); vcpu1 =3D aarch64_vcpu_add(vm, 1, &init, guest_main); =20 - get_reg(vm, vcpu1->id, KVM_ARM64_SYS_REG(SYS_MPIDR_EL1), &target_mpidr); - vcpu_args_set(vm, vcpu0->id, 1, target_mpidr & MPIDR_HWID_BITMASK); - vcpu_run(vm, vcpu0->id); + get_reg(vcpu1, KVM_ARM64_SYS_REG(SYS_MPIDR_EL1), &target_mpidr); + vcpu_args_set(vcpu0, 1, target_mpidr & MPIDR_HWID_BITMASK); + vcpu_run(vcpu0); =20 - switch (get_ucall(vm, vcpu0->id, &uc)) { + switch (get_ucall(vcpu0, &uc)) { case UCALL_DONE: break; case UCALL_ABORT: @@ -103,8 +103,8 @@ int main(void) TEST_FAIL("Unhandled ucall: %lu", uc.cmd); } =20 - get_reg(vm, vcpu1->id, ARM64_CORE_REG(regs.pc), &obs_pc); - get_reg(vm, vcpu1->id, ARM64_CORE_REG(regs.regs[0]), &obs_x0); + get_reg(vcpu1, ARM64_CORE_REG(regs.pc), &obs_pc); + get_reg(vcpu1, ARM64_CORE_REG(regs.regs[0]), &obs_x0); =20 TEST_ASSERT(obs_pc =3D=3D CPU_ON_ENTRY_ADDR, "unexpected target cpu pc: %lx (expected: %lx)", diff --git a/tools/testing/selftests/kvm/aarch64/vcpu_width_config.c b/tool= s/testing/selftests/kvm/aarch64/vcpu_width_config.c index e4e66632f05c..dd5a1c4b49e0 100644 --- a/tools/testing/selftests/kvm/aarch64/vcpu_width_config.c +++ b/tools/testing/selftests/kvm/aarch64/vcpu_width_config.c @@ -28,12 +28,12 @@ static int add_init_2vcpus(struct kvm_vcpu_init *init0, vm =3D vm_create_barebones(); =20 vcpu0 =3D __vm_vcpu_add(vm, 0); - ret =3D __vcpu_ioctl(vm, vcpu0->id, KVM_ARM_VCPU_INIT, init0); + ret =3D __vcpu_ioctl(vcpu0, KVM_ARM_VCPU_INIT, init0); if (ret) goto free_exit; =20 vcpu1 =3D __vm_vcpu_add(vm, 1); - ret =3D __vcpu_ioctl(vm, vcpu1->id, KVM_ARM_VCPU_INIT, init1); + ret =3D __vcpu_ioctl(vcpu1, KVM_ARM_VCPU_INIT, init1); =20 free_exit: kvm_vm_free(vm); @@ -56,11 +56,11 @@ static int add_2vcpus_init_2vcpus(struct kvm_vcpu_init = *init0, vcpu0 =3D __vm_vcpu_add(vm, 0); vcpu1 =3D __vm_vcpu_add(vm, 1); =20 - ret =3D __vcpu_ioctl(vm, vcpu0->id, KVM_ARM_VCPU_INIT, init0); + ret =3D __vcpu_ioctl(vcpu0, KVM_ARM_VCPU_INIT, init0); if (ret) goto free_exit; =20 - ret =3D __vcpu_ioctl(vm, vcpu1->id, KVM_ARM_VCPU_INIT, init1); + ret =3D __vcpu_ioctl(vcpu1, KVM_ARM_VCPU_INIT, init1); =20 free_exit: kvm_vm_free(vm); diff --git a/tools/testing/selftests/kvm/aarch64/vgic_init.c b/tools/testin= g/selftests/kvm/aarch64/vgic_init.c index f93e9fa6ecd4..7ee10f02d4bf 100644 --- a/tools/testing/selftests/kvm/aarch64/vgic_init.c +++ b/tools/testing/selftests/kvm/aarch64/vgic_init.c @@ -53,7 +53,7 @@ static int run_vcpu(struct kvm_vcpu *vcpu) { ucall_init(vcpu->vm, NULL); =20 - return __vcpu_run(vcpu->vm, vcpu->id) ? -errno : 0; + return __vcpu_run(vcpu) ? -errno : 0; } =20 static struct vm_gic vm_gic_create_with_vcpus(uint32_t gic_dev_type, diff --git a/tools/testing/selftests/kvm/aarch64/vgic_irq.c b/tools/testing= /selftests/kvm/aarch64/vgic_irq.c index 111170201e9b..90dbba61d72a 100644 --- a/tools/testing/selftests/kvm/aarch64/vgic_irq.c +++ b/tools/testing/selftests/kvm/aarch64/vgic_irq.c @@ -759,12 +759,12 @@ static void test_vgic(uint32_t nr_irqs, bool level_se= nsitive, bool eoi_split) ucall_init(vm, NULL); =20 vm_init_descriptor_tables(vm); - vcpu_init_descriptor_tables(vm, vcpu->id); + vcpu_init_descriptor_tables(vcpu); =20 /* Setup the guest args page (so it gets the args). */ args_gva =3D vm_vaddr_alloc_page(vm); memcpy(addr_gva2hva(vm, args_gva), &args, sizeof(args)); - vcpu_args_set(vm, vcpu->id, 1, args_gva); + vcpu_args_set(vcpu, 1, args_gva); =20 gic_fd =3D vgic_v3_setup(vm, 1, nr_irqs, GICD_BASE_GPA, GICR_BASE_GPA); @@ -777,9 +777,9 @@ static void test_vgic(uint32_t nr_irqs, bool level_sens= itive, bool eoi_split) guest_irq_handlers[args.eoi_split][args.level_sensitive]); =20 while (1) { - vcpu_run(vm, vcpu->id); + vcpu_run(vcpu); =20 - switch (get_ucall(vm, vcpu->id, &uc)) { + switch (get_ucall(vcpu, &uc)) { case UCALL_SYNC: kvm_inject_get_call(vm, &uc, &inject_args); run_guest_cmd(vcpu, gic_fd, &inject_args, &args); diff --git a/tools/testing/selftests/kvm/access_tracking_perf_test.c b/tool= s/testing/selftests/kvm/access_tracking_perf_test.c index 86a90222f913..1c771378f7f4 100644 --- a/tools/testing/selftests/kvm/access_tracking_perf_test.c +++ b/tools/testing/selftests/kvm/access_tracking_perf_test.c @@ -194,7 +194,7 @@ static void mark_vcpu_memory_idle(struct kvm_vm *vm, static void assert_ucall(struct kvm_vcpu *vcpu, uint64_t expected_ucall) { struct ucall uc; - uint64_t actual_ucall =3D get_ucall(vcpu->vm, vcpu->id, &uc); + uint64_t actual_ucall =3D get_ucall(vcpu, &uc); =20 TEST_ASSERT(expected_ucall =3D=3D actual_ucall, "Guest exited unexpectedly (expected ucall %" PRIu64 @@ -226,7 +226,7 @@ static void vcpu_thread_main(struct perf_test_vcpu_args= *vcpu_args) while (spin_wait_for_next_iteration(¤t_iteration)) { switch (READ_ONCE(iteration_work)) { case ITERATION_ACCESS_MEMORY: - vcpu_run(vm, vcpu->id); + vcpu_run(vcpu); assert_ucall(vcpu, UCALL_SYNC); break; case ITERATION_MARK_IDLE: diff --git a/tools/testing/selftests/kvm/demand_paging_test.c b/tools/testi= ng/selftests/kvm/demand_paging_test.c index c46110721088..779ae54f89c4 100644 --- a/tools/testing/selftests/kvm/demand_paging_test.c +++ b/tools/testing/selftests/kvm/demand_paging_test.c @@ -45,7 +45,6 @@ static char *guest_data_prototype; static void vcpu_worker(struct perf_test_vcpu_args *vcpu_args) { struct kvm_vcpu *vcpu =3D vcpu_args->vcpu; - struct kvm_vm *vm =3D perf_test_args.vm; int vcpu_idx =3D vcpu_args->vcpu_idx; struct kvm_run *run =3D vcpu->run; struct timespec start; @@ -55,9 +54,9 @@ static void vcpu_worker(struct perf_test_vcpu_args *vcpu_= args) clock_gettime(CLOCK_MONOTONIC, &start); =20 /* Let the guest access its memory */ - ret =3D _vcpu_run(vm, vcpu->id); + ret =3D _vcpu_run(vcpu); TEST_ASSERT(ret =3D=3D 0, "vcpu_run failed: %d\n", ret); - if (get_ucall(vm, vcpu->id, NULL) !=3D UCALL_SYNC) { + if (get_ucall(vcpu, NULL) !=3D UCALL_SYNC) { TEST_ASSERT(false, "Invalid guest sync status: exit_reason=3D%s\n", exit_reason_str(run->exit_reason)); diff --git a/tools/testing/selftests/kvm/dirty_log_perf_test.c b/tools/test= ing/selftests/kvm/dirty_log_perf_test.c index e0b3639c47b9..b048f4f65f15 100644 --- a/tools/testing/selftests/kvm/dirty_log_perf_test.c +++ b/tools/testing/selftests/kvm/dirty_log_perf_test.c @@ -69,7 +69,6 @@ static int vcpu_last_completed_iteration[KVM_MAX_VCPUS]; static void vcpu_worker(struct perf_test_vcpu_args *vcpu_args) { struct kvm_vcpu *vcpu =3D vcpu_args->vcpu; - struct kvm_vm *vm =3D perf_test_args.vm; int vcpu_idx =3D vcpu_args->vcpu_idx; uint64_t pages_count =3D 0; struct kvm_run *run; @@ -85,18 +84,18 @@ static void vcpu_worker(struct perf_test_vcpu_args *vcp= u_args) int current_iteration =3D READ_ONCE(iteration); =20 clock_gettime(CLOCK_MONOTONIC, &start); - ret =3D _vcpu_run(vm, vcpu->id); + ret =3D _vcpu_run(vcpu); ts_diff =3D timespec_elapsed(start); =20 TEST_ASSERT(ret =3D=3D 0, "vcpu_run failed: %d\n", ret); - TEST_ASSERT(get_ucall(vm, vcpu->id, NULL) =3D=3D UCALL_SYNC, + TEST_ASSERT(get_ucall(vcpu, NULL) =3D=3D UCALL_SYNC, "Invalid guest sync status: exit_reason=3D%s\n", exit_reason_str(run->exit_reason)); =20 pr_debug("Got sync event from vCPU %d\n", vcpu_idx); vcpu_last_completed_iteration[vcpu_idx] =3D current_iteration; pr_debug("vCPU %d updated last completed iteration to %d\n", - vcpu->id, vcpu_last_completed_iteration[vcpu_idx]); + vcpu_idx, vcpu_last_completed_iteration[vcpu_idx]); =20 if (current_iteration) { pages_count +=3D vcpu_args->pages; diff --git a/tools/testing/selftests/kvm/dirty_log_test.c b/tools/testing/s= elftests/kvm/dirty_log_test.c index 73c6fd9c850c..378efd08f7b8 100644 --- a/tools/testing/selftests/kvm/dirty_log_test.c +++ b/tools/testing/selftests/kvm/dirty_log_test.c @@ -258,7 +258,7 @@ static void default_after_vcpu_run(struct kvm_vcpu *vcp= u, int ret, int err) TEST_ASSERT(ret =3D=3D 0 || (ret =3D=3D -1 && err =3D=3D EINTR), "vcpu run failed: errno=3D%d", err); =20 - TEST_ASSERT(get_ucall(vcpu->vm, vcpu->id, NULL) =3D=3D UCALL_SYNC, + TEST_ASSERT(get_ucall(vcpu, NULL) =3D=3D UCALL_SYNC, "Invalid guest sync status: exit_reason=3D%s\n", exit_reason_str(run->exit_reason)); =20 @@ -349,7 +349,7 @@ static void dirty_ring_collect_dirty_pages(struct kvm_v= cpu *vcpu, int slot, } =20 /* Only have one vcpu */ - count =3D dirty_ring_collect_one(vcpu_map_dirty_ring(vcpu->vm, vcpu->id), + count =3D dirty_ring_collect_one(vcpu_map_dirty_ring(vcpu), slot, bitmap, num_pages, &fetch_index); =20 cleared =3D kvm_vm_reset_dirty_ring(vcpu->vm); @@ -372,7 +372,7 @@ static void dirty_ring_after_vcpu_run(struct kvm_vcpu *= vcpu, int ret, int err) struct kvm_run *run =3D vcpu->run; =20 /* A ucall-sync or ring-full event is allowed */ - if (get_ucall(vcpu->vm, vcpu->id, NULL) =3D=3D UCALL_SYNC) { + if (get_ucall(vcpu, NULL) =3D=3D UCALL_SYNC) { /* We should allow this to continue */ ; } else if (run->exit_reason =3D=3D KVM_EXIT_DIRTY_RING_FULL || @@ -524,7 +524,7 @@ static void *vcpu_worker(void *data) sigmask->len =3D 8; pthread_sigmask(0, NULL, sigset); sigdelset(sigset, SIG_IPI); - vcpu_ioctl(vm, vcpu->id, KVM_SET_SIGNAL_MASK, sigmask); + vcpu_ioctl(vcpu, KVM_SET_SIGNAL_MASK, sigmask); =20 sigemptyset(sigset); sigaddset(sigset, SIG_IPI); @@ -536,7 +536,7 @@ static void *vcpu_worker(void *data) generate_random_array(guest_array, TEST_PAGES_PER_LOOP); pages_count +=3D TEST_PAGES_PER_LOOP; /* Let the guest dirty the random pages */ - ret =3D __vcpu_run(vm, vcpu->id); + ret =3D __vcpu_run(vcpu); if (ret =3D=3D -1 && errno =3D=3D EINTR) { int sig =3D -1; sigwait(sigset, &sig); diff --git a/tools/testing/selftests/kvm/hardware_disable_test.c b/tools/te= sting/selftests/kvm/hardware_disable_test.c index b522610f0ba4..f5eecd51fe70 100644 --- a/tools/testing/selftests/kvm/hardware_disable_test.c +++ b/tools/testing/selftests/kvm/hardware_disable_test.c @@ -39,7 +39,7 @@ static void *run_vcpu(void *arg) struct kvm_vcpu *vcpu =3D arg; struct kvm_run *run =3D vcpu->run; =20 - vcpu_run(vcpu->vm, vcpu->id); + vcpu_run(vcpu); =20 TEST_ASSERT(false, "%s: exited with reason %d: %s\n", __func__, run->exit_reason, diff --git a/tools/testing/selftests/kvm/include/aarch64/processor.h b/tool= s/testing/selftests/kvm/include/aarch64/processor.h index f64607c136df..db01666e7e13 100644 --- a/tools/testing/selftests/kvm/include/aarch64/processor.h +++ b/tools/testing/selftests/kvm/include/aarch64/processor.h @@ -47,23 +47,25 @@ =20 #define MPIDR_HWID_BITMASK (0xff00fffffful) =20 -static inline void get_reg(struct kvm_vm *vm, uint32_t vcpuid, uint64_t id= , uint64_t *addr) +static inline void get_reg(struct kvm_vcpu *vcpu, uint64_t id, uint64_t *a= ddr) { struct kvm_one_reg reg; + reg.id =3D id; reg.addr =3D (uint64_t)addr; - vcpu_ioctl(vm, vcpuid, KVM_GET_ONE_REG, ®); + vcpu_ioctl(vcpu, KVM_GET_ONE_REG, ®); } =20 -static inline void set_reg(struct kvm_vm *vm, uint32_t vcpuid, uint64_t id= , uint64_t val) +static inline void set_reg(struct kvm_vcpu *vcpu, uint64_t id, uint64_t va= l) { struct kvm_one_reg reg; + reg.id =3D id; reg.addr =3D (uint64_t)&val; - vcpu_ioctl(vm, vcpuid, KVM_SET_ONE_REG, ®); + vcpu_ioctl(vcpu, KVM_SET_ONE_REG, ®); } =20 -void aarch64_vcpu_setup(struct kvm_vm *vm, uint32_t vcpuid, struct kvm_vcp= u_init *init); +void aarch64_vcpu_setup(struct kvm_vcpu *vcpu, struct kvm_vcpu_init *init); struct kvm_vcpu *aarch64_vcpu_add(struct kvm_vm *vm, uint32_t vcpu_id, struct kvm_vcpu_init *init, void *guest_code); =20 @@ -117,7 +119,7 @@ void aarch64_get_supported_page_sizes(uint32_t ipa, bool *ps4k, bool *ps16k, bool *ps64k); =20 void vm_init_descriptor_tables(struct kvm_vm *vm); -void vcpu_init_descriptor_tables(struct kvm_vm *vm, uint32_t vcpuid); +void vcpu_init_descriptor_tables(struct kvm_vcpu *vcpu); =20 typedef void(*handler_fn)(struct ex_regs *); void vm_install_exception_handler(struct kvm_vm *vm, diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index 6eeaef797ea1..c0533f2ab418 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -93,7 +93,7 @@ struct kvm_vm { continue; \ else =20 -struct kvm_vcpu *vcpu_get(struct kvm_vm *vm, uint32_t vcpuid); +struct kvm_vcpu *vcpu_get(struct kvm_vm *vm, uint32_t vcpu_id); =20 struct userspace_mem_region * memslot2region(struct kvm_vm *vm, uint32_t memslot); @@ -196,12 +196,12 @@ int __vm_ioctl(struct kvm_vm *vm, unsigned long cmd, = void *arg); void _vm_ioctl(struct kvm_vm *vm, unsigned long cmd, const char *name, voi= d *arg); #define vm_ioctl(vm, cmd, arg) _vm_ioctl(vm, cmd, #cmd, arg) =20 -int __vcpu_ioctl(struct kvm_vm *vm, uint32_t vcpuid, unsigned long cmd, +int __vcpu_ioctl(struct kvm_vcpu *vcpu, unsigned long cmd, void *arg); -void _vcpu_ioctl(struct kvm_vm *vm, uint32_t vcpuid, unsigned long cmd, +void _vcpu_ioctl(struct kvm_vcpu *vcpu, unsigned long cmd, const char *name, void *arg); -#define vcpu_ioctl(vm, vcpuid, cmd, arg) \ - _vcpu_ioctl(vm, vcpuid, cmd, #cmd, arg) +#define vcpu_ioctl(vcpu, cmd, arg) \ + _vcpu_ioctl(vcpu, cmd, #cmd, arg) =20 /* * Looks up and returns the value corresponding to the capability @@ -280,7 +280,7 @@ void vm_userspace_mem_region_add(struct kvm_vm *vm, void vm_mem_region_set_flags(struct kvm_vm *vm, uint32_t slot, uint32_t fl= ags); 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 vcpuid); +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_m= in); 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); @@ -292,116 +292,107 @@ void *addr_gva2hva(struct kvm_vm *vm, vm_vaddr_t gv= a); vm_paddr_t addr_hva2gpa(struct kvm_vm *vm, void *hva); void *addr_gpa2alias(struct kvm_vm *vm, vm_paddr_t gpa); =20 -struct kvm_run *vcpu_state(struct kvm_vm *vm, uint32_t vcpuid); -void vcpu_run(struct kvm_vm *vm, uint32_t vcpuid); -int _vcpu_run(struct kvm_vm *vm, uint32_t vcpuid); +struct kvm_run *vcpu_state(struct kvm_vcpu *vcpu); +void vcpu_run(struct kvm_vcpu *vcpu); +int _vcpu_run(struct kvm_vcpu *vcpu); =20 -static inline int __vcpu_run(struct kvm_vm *vm, uint32_t vcpuid) +static inline int __vcpu_run(struct kvm_vcpu *vcpu) { - return __vcpu_ioctl(vm, vcpuid, KVM_RUN, NULL); + return __vcpu_ioctl(vcpu, KVM_RUN, NULL); } =20 -void vcpu_run_complete_io(struct kvm_vm *vm, uint32_t vcpuid); -struct kvm_reg_list *vcpu_get_reg_list(struct kvm_vm *vm, uint32_t vcpuid); +void vcpu_run_complete_io(struct kvm_vcpu *vcpu); +struct kvm_reg_list *vcpu_get_reg_list(struct kvm_vcpu *vcpu); =20 -static inline void vcpu_enable_cap(struct kvm_vm *vm, uint32_t vcpu_id, +static inline void vcpu_enable_cap(struct kvm_vcpu *vcpu, struct kvm_enable_cap *cap) { - vcpu_ioctl(vm, vcpu_id, KVM_ENABLE_CAP, cap); + vcpu_ioctl(vcpu, KVM_ENABLE_CAP, cap); } =20 -static inline void vcpu_set_guest_debug(struct kvm_vm *vm, uint32_t vcpuid, +static inline void vcpu_set_guest_debug(struct kvm_vcpu *vcpu, struct kvm_guest_debug *debug) { - vcpu_ioctl(vm, vcpuid, KVM_SET_GUEST_DEBUG, debug); + vcpu_ioctl(vcpu, KVM_SET_GUEST_DEBUG, debug); } =20 -static inline void vcpu_set_mp_state(struct kvm_vm *vm, uint32_t vcpuid, +static inline void vcpu_set_mp_state(struct kvm_vcpu *vcpu, struct kvm_mp_state *mp_state) { - vcpu_ioctl(vm, vcpuid, KVM_SET_MP_STATE, mp_state); + vcpu_ioctl(vcpu, KVM_SET_MP_STATE, mp_state); } =20 -static inline void vcpu_regs_get(struct kvm_vm *vm, uint32_t vcpuid, - struct kvm_regs *regs) +static inline void vcpu_regs_get(struct kvm_vcpu *vcpu, struct kvm_regs *r= egs) { - vcpu_ioctl(vm, vcpuid, KVM_GET_REGS, regs); + vcpu_ioctl(vcpu, KVM_GET_REGS, regs); } =20 -static inline void vcpu_regs_set(struct kvm_vm *vm, uint32_t vcpuid, - struct kvm_regs *regs) +static inline void vcpu_regs_set(struct kvm_vcpu *vcpu, struct kvm_regs *r= egs) { - vcpu_ioctl(vm, vcpuid, KVM_SET_REGS, regs); + vcpu_ioctl(vcpu, KVM_SET_REGS, regs); } -static inline void vcpu_sregs_get(struct kvm_vm *vm, uint32_t vcpuid, - struct kvm_sregs *sregs) +static inline void vcpu_sregs_get(struct kvm_vcpu *vcpu, struct kvm_sregs = *sregs) { - vcpu_ioctl(vm, vcpuid, KVM_GET_SREGS, sregs); + vcpu_ioctl(vcpu, KVM_GET_SREGS, sregs); =20 } -static inline void vcpu_sregs_set(struct kvm_vm *vm, uint32_t vcpuid, - struct kvm_sregs *sregs) +static inline void vcpu_sregs_set(struct kvm_vcpu *vcpu, struct kvm_sregs = *sregs) { - vcpu_ioctl(vm, vcpuid, KVM_SET_SREGS, sregs); + vcpu_ioctl(vcpu, KVM_SET_SREGS, sregs); } -static inline int _vcpu_sregs_set(struct kvm_vm *vm, uint32_t vcpuid, - struct kvm_sregs *sregs) +static inline int _vcpu_sregs_set(struct kvm_vcpu *vcpu, struct kvm_sregs = *sregs) { - return __vcpu_ioctl(vm, vcpuid, KVM_SET_SREGS, sregs); + return __vcpu_ioctl(vcpu, KVM_SET_SREGS, sregs); } -static inline void vcpu_fpu_get(struct kvm_vm *vm, uint32_t vcpuid, - struct kvm_fpu *fpu) +static inline void vcpu_fpu_get(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu) { - vcpu_ioctl(vm, vcpuid, KVM_GET_FPU, fpu); + vcpu_ioctl(vcpu, KVM_GET_FPU, fpu); } -static inline void vcpu_fpu_set(struct kvm_vm *vm, uint32_t vcpuid, - struct kvm_fpu *fpu) +static inline void vcpu_fpu_set(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu) { - vcpu_ioctl(vm, vcpuid, KVM_SET_FPU, fpu); + vcpu_ioctl(vcpu, KVM_SET_FPU, fpu); } -static inline void vcpu_get_reg(struct kvm_vm *vm, uint32_t vcpuid, - struct kvm_one_reg *reg) +static inline void vcpu_get_reg(struct kvm_vcpu *vcpu, struct kvm_one_reg = *reg) { - vcpu_ioctl(vm, vcpuid, KVM_GET_ONE_REG, reg); + vcpu_ioctl(vcpu, KVM_GET_ONE_REG, reg); } -static inline void vcpu_set_reg(struct kvm_vm *vm, uint32_t vcpuid, - struct kvm_one_reg *reg) +static inline void vcpu_set_reg(struct kvm_vcpu *vcpu, struct kvm_one_reg = *reg) { - vcpu_ioctl(vm, vcpuid, KVM_SET_ONE_REG, reg); + vcpu_ioctl(vcpu, KVM_SET_ONE_REG, reg); } #ifdef __KVM_HAVE_VCPU_EVENTS -static inline void vcpu_events_get(struct kvm_vm *vm, uint32_t vcpuid, +static inline void vcpu_events_get(struct kvm_vcpu *vcpu, struct kvm_vcpu_events *events) { - vcpu_ioctl(vm, vcpuid, KVM_GET_VCPU_EVENTS, events); + vcpu_ioctl(vcpu, KVM_GET_VCPU_EVENTS, events); } -static inline void vcpu_events_set(struct kvm_vm *vm, uint32_t vcpuid, +static inline void vcpu_events_set(struct kvm_vcpu *vcpu, struct kvm_vcpu_events *events) { - vcpu_ioctl(vm, vcpuid, KVM_SET_VCPU_EVENTS, events); + vcpu_ioctl(vcpu, KVM_SET_VCPU_EVENTS, events); } #endif #ifdef __x86_64__ -static inline void vcpu_nested_state_get(struct kvm_vm *vm, uint32_t vcpui= d, +static inline void vcpu_nested_state_get(struct kvm_vcpu *vcpu, struct kvm_nested_state *state) { - vcpu_ioctl(vm, vcpuid, KVM_GET_NESTED_STATE, state); + vcpu_ioctl(vcpu, KVM_GET_NESTED_STATE, state); } -static inline int __vcpu_nested_state_set(struct kvm_vm *vm, uint32_t vcpu= id, +static inline int __vcpu_nested_state_set(struct kvm_vcpu *vcpu, struct kvm_nested_state *state) { - return __vcpu_ioctl(vm, vcpuid, KVM_SET_NESTED_STATE, state); + return __vcpu_ioctl(vcpu, KVM_SET_NESTED_STATE, state); } =20 -static inline void vcpu_nested_state_set(struct kvm_vm *vm, uint32_t vcpui= d, +static inline void vcpu_nested_state_set(struct kvm_vcpu *vcpu, struct kvm_nested_state *state) { - vcpu_ioctl(vm, vcpuid, KVM_SET_NESTED_STATE, state); + vcpu_ioctl(vcpu, KVM_SET_NESTED_STATE, state); } #endif -static inline int vcpu_get_stats_fd(struct kvm_vm *vm, uint32_t vcpuid) +static inline int vcpu_get_stats_fd(struct kvm_vcpu *vcpu) { - int fd =3D __vcpu_ioctl(vm, vcpuid, KVM_GET_STATS_FD, NULL); + int fd =3D __vcpu_ioctl(vcpu, KVM_GET_STATS_FD, NULL); =20 TEST_ASSERT(fd >=3D 0, KVM_IOCTL_ERROR(KVM_GET_STATS_FD, fd)); return fd; @@ -450,25 +441,42 @@ static inline void kvm_device_attr_set(int dev_fd, ui= nt32_t group, TEST_ASSERT(!ret, KVM_IOCTL_ERROR(KVM_SET_DEVICE_ATTR, ret)); } =20 -int __vcpu_has_device_attr(struct kvm_vm *vm, uint32_t vcpuid, uint32_t gr= oup, - uint64_t attr); +static inline int __vcpu_has_device_attr(struct kvm_vcpu *vcpu, uint32_t g= roup, + uint64_t attr) +{ + return __kvm_has_device_attr(vcpu->fd, group, attr); +} =20 -static inline void vcpu_has_device_attr(struct kvm_vm *vm, uint32_t vcpuid, - uint32_t group, uint64_t attr) +static inline void vcpu_has_device_attr(struct kvm_vcpu *vcpu, uint32_t gr= oup, + uint64_t attr) { - int ret =3D __vcpu_has_device_attr(vm, vcpuid, group, attr); + kvm_has_device_attr(vcpu->fd, group, attr); +} =20 - TEST_ASSERT(!ret, KVM_IOCTL_ERROR(KVM_HAS_DEVICE_ATTR, ret)); +static inline int __vcpu_device_attr_get(struct kvm_vcpu *vcpu, uint32_t g= roup, + uint64_t attr, void *val) +{ + return __kvm_device_attr_get(vcpu->fd, group, attr, val); +} + +static inline void vcpu_device_attr_get(struct kvm_vcpu *vcpu, uint32_t gr= oup, + uint64_t attr, void *val) +{ + kvm_device_attr_get(vcpu->fd, group, attr, val); +} + +static inline int __vcpu_device_attr_set(struct kvm_vcpu *vcpu, uint32_t g= roup, + uint64_t attr, void *val) +{ + return __kvm_device_attr_set(vcpu->fd, group, attr, val); +} + +static inline void vcpu_device_attr_set(struct kvm_vcpu *vcpu, uint32_t gr= oup, + uint64_t attr, void *val) +{ + kvm_device_attr_set(vcpu->fd, group, attr, val); } =20 -int __vcpu_device_attr_get(struct kvm_vm *vm, uint32_t vcpuid, uint32_t gr= oup, - uint64_t attr, void *val); -void vcpu_device_attr_get(struct kvm_vm *vm, uint32_t vcpuid, uint32_t gro= up, - uint64_t attr, void *val); -int __vcpu_device_attr_set(struct kvm_vm *vm, uint32_t vcpuid, uint32_t gr= oup, - uint64_t attr, void *val); -void vcpu_device_attr_set(struct kvm_vm *vm, uint32_t vcpuid, uint32_t gro= up, - uint64_t attr, void *val); int __kvm_test_create_device(struct kvm_vm *vm, uint64_t type); int __kvm_create_device(struct kvm_vm *vm, uint64_t type); =20 @@ -480,14 +488,13 @@ static inline int kvm_create_device(struct kvm_vm *vm= , uint64_t type) return fd; } =20 -void *vcpu_map_dirty_ring(struct kvm_vm *vm, uint32_t vcpuid); +void *vcpu_map_dirty_ring(struct kvm_vcpu *vcpu); =20 /* * VM VCPU Args Set * * Input Args: * vm - Virtual Machine - * vcpuid - VCPU ID * num - number of arguments * ... - arguments, each of type uint64_t * @@ -495,12 +502,12 @@ void *vcpu_map_dirty_ring(struct kvm_vm *vm, uint32_t= vcpuid); * * Return: None * - * Sets the first @num function input registers of the VCPU with @vcpuid, - * per the C calling convention of the architecture, to the values given - * as variable args. Each of the variable args is expected to be of type - * uint64_t. The maximum @num can be is specific to the architecture. + * Sets the first @num input parameters for the function at @vcpu's entry = point, + * per the C calling convention of the architecture, to the values given as + * variable args. Each of the variable args is expected to be of type uint= 64_t. + * The maximum @num can be is specific to the architecture. */ -void vcpu_args_set(struct kvm_vm *vm, uint32_t vcpuid, unsigned int num, .= ..); +void vcpu_args_set(struct kvm_vcpu *vcpu, unsigned int num, ...); =20 void kvm_irq_line(struct kvm_vm *vm, uint32_t irq, int level); int _kvm_irq_line(struct kvm_vm *vm, uint32_t irq, int level); @@ -605,32 +612,15 @@ kvm_userspace_memory_region_find(struct kvm_vm *vm, u= int64_t start, memcpy(&(g), _p, sizeof(g)); \ }) =20 -void assert_on_unhandled_exception(struct kvm_vm *vm, uint32_t vcpuid); +void assert_on_unhandled_exception(struct kvm_vcpu *vcpu); =20 -/* - * VM VCPU Dump - * - * Input Args: - * stream - Output FILE stream - * vm - Virtual Machine - * vcpuid - VCPU ID - * indent - Left margin indent amount - * - * Output Args: None - * - * Return: None - * - * Dumps the current state of the VCPU specified by @vcpuid, within the VM - * given by @vm, to the FILE stream given by @stream. - */ - -void vcpu_arch_dump(FILE *stream, struct kvm_vm *vm, uint32_t vcpuid, +void vcpu_arch_dump(FILE *stream, struct kvm_vcpu *vcpu, uint8_t indent); =20 -static inline void vcpu_dump(FILE *stream, struct kvm_vm *vm, uint32_t vcp= uid, +static inline void vcpu_dump(FILE *stream, struct kvm_vcpu *vcpu, uint8_t indent) { - vcpu_arch_dump(stream, vm, vcpuid, indent); + vcpu_arch_dump(stream, vcpu, indent); } =20 /* @@ -638,7 +628,7 @@ static inline void vcpu_dump(FILE *stream, struct kvm_v= m *vm, uint32_t vcpuid, * * Input Args: * vm - Virtual Machine - * vcpuid - The id of the VCPU to add to the VM. + * vcpu_id - The id of the VCPU to add to the VM. * guest_code - The vCPU's entry point */ struct kvm_vcpu *vm_arch_vcpu_add(struct kvm_vm *vm, uint32_t vcpu_id, diff --git a/tools/testing/selftests/kvm/include/riscv/processor.h b/tools/= testing/selftests/kvm/include/riscv/processor.h index eca5c622efd2..d6d93498ab0b 100644 --- a/tools/testing/selftests/kvm/include/riscv/processor.h +++ b/tools/testing/selftests/kvm/include/riscv/processor.h @@ -38,24 +38,24 @@ static inline uint64_t __kvm_reg_id(uint64_t type, uint= 64_t idx, KVM_REG_RISCV_TIMER_REG(name), \ KVM_REG_SIZE_U64) =20 -static inline void get_reg(struct kvm_vm *vm, uint32_t vcpuid, uint64_t id, +static inline void get_reg(struct kvm_vcpu *vcpu, uint64_t id, unsigned long *addr) { struct kvm_one_reg reg; =20 reg.id =3D id; reg.addr =3D (unsigned long)addr; - vcpu_get_reg(vm, vcpuid, ®); + vcpu_get_reg(vcpu, ®); } =20 -static inline void set_reg(struct kvm_vm *vm, uint32_t vcpuid, uint64_t id, +static inline void set_reg(struct kvm_vcpu *vcpu, uint64_t id, unsigned long val) { struct kvm_one_reg reg; =20 reg.id =3D id; reg.addr =3D (unsigned long)&val; - vcpu_set_reg(vm, vcpuid, ®); + vcpu_set_reg(vcpu, ®); } =20 /* L3 index Bit[47:39] */ diff --git a/tools/testing/selftests/kvm/include/ucall_common.h b/tools/tes= ting/selftests/kvm/include/ucall_common.h index 9eecc9d40b79..98562f685151 100644 --- a/tools/testing/selftests/kvm/include/ucall_common.h +++ b/tools/testing/selftests/kvm/include/ucall_common.h @@ -26,7 +26,7 @@ struct ucall { void ucall_init(struct kvm_vm *vm, void *arg); void ucall_uninit(struct kvm_vm *vm); void ucall(uint64_t cmd, int nargs, ...); -uint64_t get_ucall(struct kvm_vm *vm, uint32_t vcpu_id, struct ucall *uc); +uint64_t get_ucall(struct kvm_vcpu *vcpu, struct ucall *uc); =20 #define GUEST_SYNC_ARGS(stage, arg1, arg2, arg3, arg4) \ ucall(UCALL_SYNC, 6, "hello", stage, arg1, arg2, arg3, arg4) diff --git a/tools/testing/selftests/kvm/include/x86_64/evmcs.h b/tools/tes= ting/selftests/kvm/include/x86_64/evmcs.h index cc5d14a45702..3c9260f8e116 100644 --- a/tools/testing/selftests/kvm/include/x86_64/evmcs.h +++ b/tools/testing/selftests/kvm/include/x86_64/evmcs.h @@ -241,7 +241,7 @@ struct hv_enlightened_vmcs { extern struct hv_enlightened_vmcs *current_evmcs; extern struct hv_vp_assist_page *current_vp_assist; =20 -int vcpu_enable_evmcs(struct kvm_vm *vm, int vcpu_id); +int vcpu_enable_evmcs(struct kvm_vcpu *vcpu); =20 static inline int enable_vp_assist(uint64_t vp_assist_pa, void *vp_assist) { diff --git a/tools/testing/selftests/kvm/include/x86_64/processor.h b/tools= /testing/selftests/kvm/include/x86_64/processor.h index 94888d3a13f5..5e7ebeff691f 100644 --- a/tools/testing/selftests/kvm/include/x86_64/processor.h +++ b/tools/testing/selftests/kvm/include/x86_64/processor.h @@ -405,26 +405,25 @@ static inline unsigned int x86_model(unsigned int eax) return ((eax >> 12) & 0xf0) | ((eax >> 4) & 0x0f); } =20 -struct kvm_x86_state *vcpu_save_state(struct kvm_vm *vm, uint32_t vcpuid); -void vcpu_load_state(struct kvm_vm *vm, uint32_t vcpuid, - struct kvm_x86_state *state); +struct kvm_x86_state *vcpu_save_state(struct kvm_vcpu *vcpu); +void vcpu_load_state(struct kvm_vcpu *vcpu, struct kvm_x86_state *state); void kvm_x86_state_cleanup(struct kvm_x86_state *state); =20 struct kvm_msr_list *kvm_get_msr_index_list(void); uint64_t kvm_get_feature_msr(uint64_t msr_index); struct kvm_cpuid2 *kvm_get_supported_cpuid(void); -struct kvm_cpuid2 *vcpu_get_cpuid(struct kvm_vm *vm, uint32_t vcpuid); +struct kvm_cpuid2 *vcpu_get_cpuid(struct kvm_vcpu *vcpu); =20 -static inline int __vcpu_set_cpuid(struct kvm_vm *vm, uint32_t vcpuid, +static inline int __vcpu_set_cpuid(struct kvm_vcpu *vcpu, struct kvm_cpuid2 *cpuid) { - return __vcpu_ioctl(vm, vcpuid, KVM_SET_CPUID2, cpuid); + return __vcpu_ioctl(vcpu, KVM_SET_CPUID2, cpuid); } =20 -static inline void vcpu_set_cpuid(struct kvm_vm *vm, uint32_t vcpuid, +static inline void vcpu_set_cpuid(struct kvm_vcpu *vcpu, struct kvm_cpuid2 *cpuid) { - vcpu_ioctl(vm, vcpuid, KVM_SET_CPUID2, cpuid); + vcpu_ioctl(vcpu, KVM_SET_CPUID2, cpuid); } =20 struct kvm_cpuid_entry2 * @@ -436,14 +435,13 @@ kvm_get_supported_cpuid_entry(uint32_t function) return kvm_get_supported_cpuid_index(function, 0); } =20 -uint64_t vcpu_get_msr(struct kvm_vm *vm, uint32_t vcpuid, uint64_t msr_ind= ex); -int _vcpu_set_msr(struct kvm_vm *vm, uint32_t vcpuid, uint64_t msr_index, - uint64_t msr_value); +uint64_t vcpu_get_msr(struct kvm_vcpu *vcpu, uint64_t msr_index); +int _vcpu_set_msr(struct kvm_vcpu *vcpu, uint64_t msr_index, uint64_t msr_= value); =20 -static inline void vcpu_set_msr(struct kvm_vm *vm, uint32_t vcpuid, - uint64_t msr_index, uint64_t msr_value) +static inline void vcpu_set_msr(struct kvm_vcpu *vcpu, uint64_t msr_index, + uint64_t msr_value) { - int r =3D _vcpu_set_msr(vm, vcpuid, msr_index, msr_value); + int r =3D _vcpu_set_msr(vcpu, msr_index, msr_value); =20 TEST_ASSERT(r =3D=3D 1, KVM_IOCTL_ERROR(KVM_SET_MSRS, r)); } @@ -467,13 +465,14 @@ struct ex_regs { }; =20 void vm_init_descriptor_tables(struct kvm_vm *vm); -void vcpu_init_descriptor_tables(struct kvm_vm *vm, uint32_t vcpuid); +void vcpu_init_descriptor_tables(struct kvm_vcpu *vcpu); void vm_install_exception_handler(struct kvm_vm *vm, int vector, void (*handler)(struct ex_regs *)); =20 -uint64_t vm_get_page_table_entry(struct kvm_vm *vm, int vcpuid, uint64_t v= addr); -void vm_set_page_table_entry(struct kvm_vm *vm, int vcpuid, uint64_t vaddr, - uint64_t pte); +uint64_t vm_get_page_table_entry(struct kvm_vm *vm, struct kvm_vcpu *vcpu, + uint64_t vaddr); +void vm_set_page_table_entry(struct kvm_vm *vm, struct kvm_vcpu *vcpu, + uint64_t vaddr, uint64_t pte); =20 /* * get_cpuid() - find matching CPUID entry and return pointer to it. @@ -493,8 +492,8 @@ uint64_t kvm_hypercall(uint64_t nr, uint64_t a0, uint64= _t a1, uint64_t a2, uint64_t a3); =20 struct kvm_cpuid2 *kvm_get_supported_hv_cpuid(void); -void vcpu_set_hv_cpuid(struct kvm_vm *vm, uint32_t vcpuid); -struct kvm_cpuid2 *vcpu_get_supported_hv_cpuid(struct kvm_vm *vm, uint32_t= vcpuid); +void vcpu_set_hv_cpuid(struct kvm_vcpu *vcpu); +struct kvm_cpuid2 *vcpu_get_supported_hv_cpuid(struct kvm_vcpu *vcpu); void vm_xsave_req_perm(int bit); =20 enum x86_page_size { diff --git a/tools/testing/selftests/kvm/kvm_binary_stats_test.c b/tools/te= sting/selftests/kvm/kvm_binary_stats_test.c index dfc3cf531ced..7f2ddc1535d7 100644 --- a/tools/testing/selftests/kvm/kvm_binary_stats_test.c +++ b/tools/testing/selftests/kvm/kvm_binary_stats_test.c @@ -174,7 +174,7 @@ static void vm_stats_test(struct kvm_vm *vm) =20 static void vcpu_stats_test(struct kvm_vcpu *vcpu) { - int stats_fd =3D vcpu_get_stats_fd(vcpu->vm, vcpu->id); + int stats_fd =3D vcpu_get_stats_fd(vcpu); =20 stats_test(stats_fd); close(stats_fd); diff --git a/tools/testing/selftests/kvm/kvm_page_table_test.c b/tools/test= ing/selftests/kvm/kvm_page_table_test.c index b577b5999c95..8706ae358444 100644 --- a/tools/testing/selftests/kvm/kvm_page_table_test.c +++ b/tools/testing/selftests/kvm/kvm_page_table_test.c @@ -184,7 +184,6 @@ static void guest_code(bool do_write) =20 static void *vcpu_worker(void *data) { - struct kvm_vm *vm =3D test_args.vm; struct kvm_vcpu *vcpu =3D data; bool do_write =3D !(vcpu->id % 2); struct timespec start; @@ -192,7 +191,7 @@ static void *vcpu_worker(void *data) enum test_stage stage; int ret; =20 - vcpu_args_set(vm, vcpu->id, 1, do_write); + vcpu_args_set(vcpu, 1, do_write); =20 while (!READ_ONCE(host_quit)) { ret =3D sem_wait(&test_stage_updated); @@ -202,11 +201,11 @@ static void *vcpu_worker(void *data) return NULL; =20 clock_gettime(CLOCK_MONOTONIC_RAW, &start); - ret =3D _vcpu_run(vm, vcpu->id); + ret =3D _vcpu_run(vcpu); ts_diff =3D timespec_elapsed(start); =20 TEST_ASSERT(ret =3D=3D 0, "vcpu_run failed: %d\n", ret); - TEST_ASSERT(get_ucall(vm, vcpu->id, NULL) =3D=3D UCALL_SYNC, + TEST_ASSERT(get_ucall(vcpu, NULL) =3D=3D UCALL_SYNC, "Invalid guest sync status: exit_reason=3D%s\n", exit_reason_str(vcpu->run->exit_reason)); =20 diff --git a/tools/testing/selftests/kvm/lib/aarch64/processor.c b/tools/te= sting/selftests/kvm/lib/aarch64/processor.c index 35bec85f43b0..97b68fce763a 100644 --- a/tools/testing/selftests/kvm/lib/aarch64/processor.c +++ b/tools/testing/selftests/kvm/lib/aarch64/processor.c @@ -212,9 +212,10 @@ void virt_arch_dump(FILE *stream, struct kvm_vm *vm, u= int8_t indent) } } =20 -void aarch64_vcpu_setup(struct kvm_vm *vm, uint32_t vcpuid, struct kvm_vcp= u_init *init) +void aarch64_vcpu_setup(struct kvm_vcpu *vcpu, struct kvm_vcpu_init *init) { struct kvm_vcpu_init default_init =3D { .target =3D -1, }; + struct kvm_vm *vm =3D vcpu->vm; uint64_t sctlr_el1, tcr_el1; =20 if (!init) @@ -226,16 +227,16 @@ void aarch64_vcpu_setup(struct kvm_vm *vm, uint32_t v= cpuid, struct kvm_vcpu_init init->target =3D preferred.target; } =20 - vcpu_ioctl(vm, vcpuid, KVM_ARM_VCPU_INIT, init); + vcpu_ioctl(vcpu, KVM_ARM_VCPU_INIT, init); =20 /* * Enable FP/ASIMD to avoid trapping when accessing Q0-Q15 * registers, which the variable argument list macros do. */ - set_reg(vm, vcpuid, KVM_ARM64_SYS_REG(SYS_CPACR_EL1), 3 << 20); + set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_CPACR_EL1), 3 << 20); =20 - get_reg(vm, vcpuid, KVM_ARM64_SYS_REG(SYS_SCTLR_EL1), &sctlr_el1); - get_reg(vm, vcpuid, KVM_ARM64_SYS_REG(SYS_TCR_EL1), &tcr_el1); + get_reg(vcpu, KVM_ARM64_SYS_REG(SYS_SCTLR_EL1), &sctlr_el1); + get_reg(vcpu, KVM_ARM64_SYS_REG(SYS_TCR_EL1), &tcr_el1); =20 /* Configure base granule size */ switch (vm->mode) { @@ -296,19 +297,19 @@ void aarch64_vcpu_setup(struct kvm_vm *vm, uint32_t v= cpuid, struct kvm_vcpu_init tcr_el1 |=3D (1 << 8) | (1 << 10) | (3 << 12); tcr_el1 |=3D (64 - vm->va_bits) /* T0SZ */; =20 - set_reg(vm, vcpuid, KVM_ARM64_SYS_REG(SYS_SCTLR_EL1), sctlr_el1); - set_reg(vm, vcpuid, KVM_ARM64_SYS_REG(SYS_TCR_EL1), tcr_el1); - set_reg(vm, vcpuid, KVM_ARM64_SYS_REG(SYS_MAIR_EL1), DEFAULT_MAIR_EL1); - set_reg(vm, vcpuid, KVM_ARM64_SYS_REG(SYS_TTBR0_EL1), vm->pgd); - set_reg(vm, vcpuid, KVM_ARM64_SYS_REG(SYS_TPIDR_EL1), vcpuid); + set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_SCTLR_EL1), sctlr_el1); + set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_TCR_EL1), tcr_el1); + set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_MAIR_EL1), DEFAULT_MAIR_EL1); + set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_TTBR0_EL1), vm->pgd); + set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_TPIDR_EL1), vcpu->id); } =20 -void vcpu_arch_dump(FILE *stream, struct kvm_vm *vm, uint32_t vcpuid, uint= 8_t indent) +void vcpu_arch_dump(FILE *stream, struct kvm_vcpu *vcpu, uint8_t indent) { uint64_t pstate, pc; =20 - get_reg(vm, vcpuid, ARM64_CORE_REG(regs.pstate), &pstate); - get_reg(vm, vcpuid, ARM64_CORE_REG(regs.pc), &pc); + get_reg(vcpu, ARM64_CORE_REG(regs.pstate), &pstate); + get_reg(vcpu, ARM64_CORE_REG(regs.pc), &pc); =20 fprintf(stream, "%*spstate: 0x%.16lx pc: 0x%.16lx\n", indent, "", pstate, pc); @@ -324,10 +325,10 @@ struct kvm_vcpu *aarch64_vcpu_add(struct kvm_vm *vm, = uint32_t vcpu_id, DEFAULT_ARM64_GUEST_STACK_VADDR_MIN); struct kvm_vcpu *vcpu =3D __vm_vcpu_add(vm, vcpu_id); =20 - aarch64_vcpu_setup(vm, vcpu_id, init); + aarch64_vcpu_setup(vcpu, init); =20 - set_reg(vm, vcpu_id, ARM64_CORE_REG(sp_el1), stack_vaddr + stack_size); - set_reg(vm, vcpu_id, ARM64_CORE_REG(regs.pc), (uint64_t)guest_code); + set_reg(vcpu, ARM64_CORE_REG(sp_el1), stack_vaddr + stack_size); + set_reg(vcpu, ARM64_CORE_REG(regs.pc), (uint64_t)guest_code); =20 return vcpu; } @@ -338,7 +339,7 @@ struct kvm_vcpu *vm_arch_vcpu_add(struct kvm_vm *vm, ui= nt32_t vcpu_id, return aarch64_vcpu_add(vm, vcpu_id, NULL, guest_code); } =20 -void vcpu_args_set(struct kvm_vm *vm, uint32_t vcpuid, unsigned int num, .= ..) +void vcpu_args_set(struct kvm_vcpu *vcpu, unsigned int num, ...) { va_list ap; int i; @@ -349,7 +350,7 @@ void vcpu_args_set(struct kvm_vm *vm, uint32_t vcpuid, = unsigned int num, ...) va_start(ap, num); =20 for (i =3D 0; i < num; i++) { - set_reg(vm, vcpuid, ARM64_CORE_REG(regs.regs[i]), + set_reg(vcpu, ARM64_CORE_REG(regs.regs[i]), va_arg(ap, uint64_t)); } =20 @@ -363,11 +364,11 @@ void kvm_exit_unexpected_exception(int vector, uint64= _t ec, bool valid_ec) ; } =20 -void assert_on_unhandled_exception(struct kvm_vm *vm, uint32_t vcpuid) +void assert_on_unhandled_exception(struct kvm_vcpu *vcpu) { struct ucall uc; =20 - if (get_ucall(vm, vcpuid, &uc) !=3D UCALL_UNHANDLED) + if (get_ucall(vcpu, &uc) !=3D UCALL_UNHANDLED) return; =20 if (uc.args[2]) /* valid_ec */ { @@ -385,11 +386,11 @@ struct handlers { handler_fn exception_handlers[VECTOR_NUM][ESR_EC_NUM]; }; =20 -void vcpu_init_descriptor_tables(struct kvm_vm *vm, uint32_t vcpuid) +void vcpu_init_descriptor_tables(struct kvm_vcpu *vcpu) { extern char vectors; =20 - set_reg(vm, vcpuid, KVM_ARM64_SYS_REG(SYS_VBAR_EL1), (uint64_t)&vectors); + set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_VBAR_EL1), (uint64_t)&vectors); } =20 void route_exception(struct ex_regs *regs, int vector) diff --git a/tools/testing/selftests/kvm/lib/aarch64/ucall.c b/tools/testin= g/selftests/kvm/lib/aarch64/ucall.c index e14663ab2056..12a02e77271a 100644 --- a/tools/testing/selftests/kvm/lib/aarch64/ucall.c +++ b/tools/testing/selftests/kvm/lib/aarch64/ucall.c @@ -88,9 +88,9 @@ void ucall(uint64_t cmd, int nargs, ...) *ucall_exit_mmio_addr =3D (vm_vaddr_t)&uc; } =20 -uint64_t get_ucall(struct kvm_vm *vm, uint32_t vcpu_id, struct ucall *uc) +uint64_t get_ucall(struct kvm_vcpu *vcpu, struct ucall *uc) { - struct kvm_run *run =3D vcpu_state(vm, vcpu_id); + struct kvm_run *run =3D vcpu->run; struct ucall ucall =3D {}; =20 if (uc) @@ -103,9 +103,9 @@ uint64_t get_ucall(struct kvm_vm *vm, uint32_t vcpu_id,= struct ucall *uc) TEST_ASSERT(run->mmio.is_write && run->mmio.len =3D=3D 8, "Unexpected ucall exit mmio address access"); memcpy(&gva, run->mmio.data, sizeof(gva)); - memcpy(&ucall, addr_gva2hva(vm, gva), sizeof(ucall)); + memcpy(&ucall, addr_gva2hva(vcpu->vm, gva), sizeof(ucall)); =20 - vcpu_run_complete_io(vm, vcpu_id); + vcpu_run_complete_io(vcpu); if (uc) memcpy(uc, &ucall, sizeof(ucall)); } diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index 9cc1eacacb4e..822bdcb5c38c 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -1399,88 +1399,49 @@ void *addr_gpa2alias(struct kvm_vm *vm, vm_paddr_t = gpa) return (void *) ((uintptr_t) region->host_alias + offset); } =20 -/* - * VM Create IRQ Chip - * - * Input Args: - * vm - Virtual Machine - * - * Output Args: None - * - * Return: None - * - * Creates an interrupt controller chip for the VM specified by vm. - */ +/* Create an interrupt controller chip for the specified VM. */ void vm_create_irqchip(struct kvm_vm *vm) { vm_ioctl(vm, KVM_CREATE_IRQCHIP, NULL); =20 vm->has_irqchip =3D true; } - -/* - * VM VCPU State - * - * Input Args: - * vm - Virtual Machine - * vcpuid - VCPU ID - * - * Output Args: None - * - * Return: - * Pointer to structure that describes the state of the VCPU. - * - * Locates and returns a pointer to a structure that describes the - * state of the VCPU with the given vcpuid. - */ -struct kvm_run *vcpu_state(struct kvm_vm *vm, uint32_t vcpuid) +struct kvm_run *vcpu_state(struct kvm_vcpu *vcpu) { - struct kvm_vcpu *vcpu =3D vcpu_get(vm, vcpuid); - return vcpu->run; } =20 -/* - * VM VCPU Run - * - * Input Args: - * vm - Virtual Machine - * vcpuid - VCPU ID - * - * Output Args: None - * - * Return: None - * - * Switch to executing the code for the VCPU given by vcpuid, within the VM - * given by vm. - */ -void vcpu_run(struct kvm_vm *vm, uint32_t vcpuid) -{ - int ret =3D _vcpu_run(vm, vcpuid); =20 - TEST_ASSERT(!ret, KVM_IOCTL_ERROR(KVM_RUN, ret)); -} - -int _vcpu_run(struct kvm_vm *vm, uint32_t vcpuid) +int _vcpu_run(struct kvm_vcpu *vcpu) { int rc; =20 do { - rc =3D __vcpu_run(vm, vcpuid); + rc =3D __vcpu_run(vcpu); } while (rc =3D=3D -1 && errno =3D=3D EINTR); =20 - assert_on_unhandled_exception(vm, vcpuid); + assert_on_unhandled_exception(vcpu); =20 return rc; } =20 -void vcpu_run_complete_io(struct kvm_vm *vm, uint32_t vcpuid) +/* + * Invoke KVM_RUN on a vCPU until KVM returns something other than -EINTR. + * Assert if the KVM returns an error (other than -EINTR). + */ +void vcpu_run(struct kvm_vcpu *vcpu) +{ + int ret =3D _vcpu_run(vcpu); + + TEST_ASSERT(!ret, KVM_IOCTL_ERROR(KVM_RUN, ret)); +} + +void vcpu_run_complete_io(struct kvm_vcpu *vcpu) { - struct kvm_vcpu *vcpu =3D vcpu_get(vm, vcpuid); int ret; =20 vcpu->run->immediate_exit =3D 1; - ret =3D __vcpu_run(vm, vcpuid); + ret =3D __vcpu_run(vcpu); vcpu->run->immediate_exit =3D 0; =20 TEST_ASSERT(ret =3D=3D -1 && errno =3D=3D EINTR, @@ -1489,73 +1450,57 @@ void vcpu_run_complete_io(struct kvm_vm *vm, uint32= _t vcpuid) } =20 /* - * VM VCPU Get Reg List - * - * Input Args: - * vm - Virtual Machine - * vcpuid - VCPU ID - * - * Output Args: - * None - * - * Return: - * A pointer to an allocated struct kvm_reg_list - * * Get the list of guest registers which are supported for - * KVM_GET_ONE_REG/KVM_SET_ONE_REG calls + * KVM_GET_ONE_REG/KVM_SET_ONE_REG ioctls. Returns a kvm_reg_list pointer, + * it is the callers responsibility to free the list. */ -struct kvm_reg_list *vcpu_get_reg_list(struct kvm_vm *vm, uint32_t vcpuid) +struct kvm_reg_list *vcpu_get_reg_list(struct kvm_vcpu *vcpu) { struct kvm_reg_list reg_list_n =3D { .n =3D 0 }, *reg_list; int ret; =20 - ret =3D __vcpu_ioctl(vm, vcpuid, KVM_GET_REG_LIST, ®_list_n); + ret =3D __vcpu_ioctl(vcpu, KVM_GET_REG_LIST, ®_list_n); TEST_ASSERT(ret =3D=3D -1 && errno =3D=3D E2BIG, "KVM_GET_REG_LIST n=3D0"= ); + reg_list =3D calloc(1, sizeof(*reg_list) + reg_list_n.n * sizeof(__u64)); reg_list->n =3D reg_list_n.n; - vcpu_ioctl(vm, vcpuid, KVM_GET_REG_LIST, reg_list); + vcpu_ioctl(vcpu, KVM_GET_REG_LIST, reg_list); return reg_list; } =20 -int __vcpu_ioctl(struct kvm_vm *vm, uint32_t vcpuid, - unsigned long cmd, void *arg) +int __vcpu_ioctl(struct kvm_vcpu *vcpu, unsigned long cmd, void *arg) { - struct kvm_vcpu *vcpu =3D vcpu_get(vm, vcpuid); - return ioctl(vcpu->fd, cmd, arg); } =20 -void _vcpu_ioctl(struct kvm_vm *vm, uint32_t vcpuid, unsigned long cmd, - const char *name, void *arg) +void _vcpu_ioctl(struct kvm_vcpu *vcpu, unsigned long cmd, const char *nam= e, + void *arg) { - int ret =3D __vcpu_ioctl(vm, vcpuid, cmd, arg); + int ret =3D __vcpu_ioctl(vcpu, cmd, arg); =20 TEST_ASSERT(!ret, __KVM_IOCTL_ERROR(name, ret)); } =20 -void *vcpu_map_dirty_ring(struct kvm_vm *vm, uint32_t vcpuid) +void *vcpu_map_dirty_ring(struct kvm_vcpu *vcpu) { - struct kvm_vcpu *vcpu =3D vcpu_get(vm, vcpuid); - uint32_t size =3D vm->dirty_ring_size; + uint32_t page_size =3D vcpu->vm->page_size; + uint32_t size =3D vcpu->vm->dirty_ring_size; =20 TEST_ASSERT(size > 0, "Should enable dirty ring first"); =20 if (!vcpu->dirty_gfns) { void *addr; =20 - addr =3D mmap(NULL, size, PROT_READ, - MAP_PRIVATE, vcpu->fd, - vm->page_size * KVM_DIRTY_LOG_PAGE_OFFSET); + addr =3D mmap(NULL, size, PROT_READ, MAP_PRIVATE, vcpu->fd, + page_size * KVM_DIRTY_LOG_PAGE_OFFSET); TEST_ASSERT(addr =3D=3D MAP_FAILED, "Dirty ring mapped private"); =20 - addr =3D mmap(NULL, size, PROT_READ | PROT_EXEC, - MAP_PRIVATE, vcpu->fd, - vm->page_size * KVM_DIRTY_LOG_PAGE_OFFSET); + addr =3D mmap(NULL, size, PROT_READ | PROT_EXEC, MAP_PRIVATE, vcpu->fd, + page_size * KVM_DIRTY_LOG_PAGE_OFFSET); TEST_ASSERT(addr =3D=3D MAP_FAILED, "Dirty ring mapped exec"); =20 - addr =3D mmap(NULL, size, PROT_READ | PROT_WRITE, - MAP_SHARED, vcpu->fd, - vm->page_size * KVM_DIRTY_LOG_PAGE_OFFSET); + addr =3D mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, vcpu->fd, + page_size * KVM_DIRTY_LOG_PAGE_OFFSET); TEST_ASSERT(addr !=3D MAP_FAILED, "Dirty ring map failed"); =20 vcpu->dirty_gfns =3D addr; @@ -1629,36 +1574,6 @@ int __kvm_device_attr_access(int dev_fd, uint32_t gr= oup, uint64_t attr, return __kvm_ioctl(dev_fd, cmd, &kvmattr); } =20 -int __vcpu_device_attr_get(struct kvm_vm *vm, uint32_t vcpuid, uint32_t gr= oup, - uint64_t attr, void *val) -{ - return __kvm_device_attr_get(vcpu_get(vm, vcpuid)->fd, group, attr, val); -} - -void vcpu_device_attr_get(struct kvm_vm *vm, uint32_t vcpuid, uint32_t gro= up, - uint64_t attr, void *val) -{ - kvm_device_attr_get(vcpu_get(vm, vcpuid)->fd, group, attr, val); -} - -int __vcpu_device_attr_set(struct kvm_vm *vm, uint32_t vcpuid, uint32_t gr= oup, - uint64_t attr, void *val) -{ - return __kvm_device_attr_set(vcpu_get(vm, vcpuid)->fd, group, attr, val); -} - -void vcpu_device_attr_set(struct kvm_vm *vm, uint32_t vcpuid, uint32_t gro= up, - uint64_t attr, void *val) -{ - kvm_device_attr_set(vcpu_get(vm, vcpuid)->fd, group, attr, val); -} - -int __vcpu_has_device_attr(struct kvm_vm *vm, uint32_t vcpuid, uint32_t gr= oup, - uint64_t attr) -{ - return __kvm_has_device_attr(vcpu_get(vm, vcpuid)->fd, group, attr); -} - /* * IRQ related functions. */ @@ -1774,8 +1689,9 @@ void vm_dump(FILE *stream, struct kvm_vm *vm, uint8_t= indent) virt_dump(stream, vm, indent + 4); } fprintf(stream, "%*sVCPUs:\n", indent, ""); + list_for_each_entry(vcpu, &vm->vcpus, list) - vcpu_dump(stream, vm, vcpu->id, indent + 2); + vcpu_dump(stream, vcpu, indent + 2); } =20 /* Known KVM exit reasons */ diff --git a/tools/testing/selftests/kvm/lib/perf_test_util.c b/tools/testi= ng/selftests/kvm/lib/perf_test_util.c index 679f64527f1a..7faed18f7719 100644 --- a/tools/testing/selftests/kvm/lib/perf_test_util.c +++ b/tools/testing/selftests/kvm/lib/perf_test_util.c @@ -98,7 +98,7 @@ void perf_test_setup_vcpus(struct kvm_vm *vm, int nr_vcpu= s, vcpu_args->gpa =3D pta->gpa; } =20 - vcpu_args_set(vm, vcpus[i]->id, 1, i); + vcpu_args_set(vcpus[i], 1, i); =20 pr_debug("Added VCPU %d with test mem gpa [%lx, %lx)\n", i, vcpu_args->gpa, vcpu_args->gpa + diff --git a/tools/testing/selftests/kvm/lib/riscv/processor.c b/tools/test= ing/selftests/kvm/lib/riscv/processor.c index d0e52ec87169..5b7ea725af98 100644 --- a/tools/testing/selftests/kvm/lib/riscv/processor.c +++ b/tools/testing/selftests/kvm/lib/riscv/processor.c @@ -178,8 +178,9 @@ void virt_arch_dump(FILE *stream, struct kvm_vm *vm, ui= nt8_t indent) } } =20 -void riscv_vcpu_mmu_setup(struct kvm_vm *vm, int vcpuid) +void riscv_vcpu_mmu_setup(struct kvm_vcpu *vcpu) { + struct kvm_vm *vm =3D vcpu->vm; unsigned long satp; =20 /* @@ -198,46 +199,46 @@ void riscv_vcpu_mmu_setup(struct kvm_vm *vm, int vcpu= id) satp =3D (vm->pgd >> PGTBL_PAGE_SIZE_SHIFT) & SATP_PPN; satp |=3D SATP_MODE_48; =20 - set_reg(vm, vcpuid, RISCV_CSR_REG(satp), satp); + set_reg(vcpu, RISCV_CSR_REG(satp), satp); } =20 -void vcpu_arch_dump(FILE *stream, struct kvm_vm *vm, uint32_t vcpuid, uint= 8_t indent) +void vcpu_arch_dump(FILE *stream, struct kvm_vcpu *vcpu, uint8_t indent) { struct kvm_riscv_core core; =20 - get_reg(vm, vcpuid, RISCV_CORE_REG(mode), &core.mode); - get_reg(vm, vcpuid, RISCV_CORE_REG(regs.pc), &core.regs.pc); - get_reg(vm, vcpuid, RISCV_CORE_REG(regs.ra), &core.regs.ra); - get_reg(vm, vcpuid, RISCV_CORE_REG(regs.sp), &core.regs.sp); - get_reg(vm, vcpuid, RISCV_CORE_REG(regs.gp), &core.regs.gp); - get_reg(vm, vcpuid, RISCV_CORE_REG(regs.tp), &core.regs.tp); - get_reg(vm, vcpuid, RISCV_CORE_REG(regs.t0), &core.regs.t0); - get_reg(vm, vcpuid, RISCV_CORE_REG(regs.t1), &core.regs.t1); - get_reg(vm, vcpuid, RISCV_CORE_REG(regs.t2), &core.regs.t2); - get_reg(vm, vcpuid, RISCV_CORE_REG(regs.s0), &core.regs.s0); - get_reg(vm, vcpuid, RISCV_CORE_REG(regs.s1), &core.regs.s1); - get_reg(vm, vcpuid, RISCV_CORE_REG(regs.a0), &core.regs.a0); - get_reg(vm, vcpuid, RISCV_CORE_REG(regs.a1), &core.regs.a1); - get_reg(vm, vcpuid, RISCV_CORE_REG(regs.a2), &core.regs.a2); - get_reg(vm, vcpuid, RISCV_CORE_REG(regs.a3), &core.regs.a3); - get_reg(vm, vcpuid, RISCV_CORE_REG(regs.a4), &core.regs.a4); - get_reg(vm, vcpuid, RISCV_CORE_REG(regs.a5), &core.regs.a5); - get_reg(vm, vcpuid, RISCV_CORE_REG(regs.a6), &core.regs.a6); - get_reg(vm, vcpuid, RISCV_CORE_REG(regs.a7), &core.regs.a7); - get_reg(vm, vcpuid, RISCV_CORE_REG(regs.s2), &core.regs.s2); - get_reg(vm, vcpuid, RISCV_CORE_REG(regs.s3), &core.regs.s3); - get_reg(vm, vcpuid, RISCV_CORE_REG(regs.s4), &core.regs.s4); - get_reg(vm, vcpuid, RISCV_CORE_REG(regs.s5), &core.regs.s5); - get_reg(vm, vcpuid, RISCV_CORE_REG(regs.s6), &core.regs.s6); - get_reg(vm, vcpuid, RISCV_CORE_REG(regs.s7), &core.regs.s7); - get_reg(vm, vcpuid, RISCV_CORE_REG(regs.s8), &core.regs.s8); - get_reg(vm, vcpuid, RISCV_CORE_REG(regs.s9), &core.regs.s9); - get_reg(vm, vcpuid, RISCV_CORE_REG(regs.s10), &core.regs.s10); - get_reg(vm, vcpuid, RISCV_CORE_REG(regs.s11), &core.regs.s11); - get_reg(vm, vcpuid, RISCV_CORE_REG(regs.t3), &core.regs.t3); - get_reg(vm, vcpuid, RISCV_CORE_REG(regs.t4), &core.regs.t4); - get_reg(vm, vcpuid, RISCV_CORE_REG(regs.t5), &core.regs.t5); - get_reg(vm, vcpuid, RISCV_CORE_REG(regs.t6), &core.regs.t6); + get_reg(vcpu, RISCV_CORE_REG(mode), &core.mode); + get_reg(vcpu, RISCV_CORE_REG(regs.pc), &core.regs.pc); + get_reg(vcpu, RISCV_CORE_REG(regs.ra), &core.regs.ra); + get_reg(vcpu, RISCV_CORE_REG(regs.sp), &core.regs.sp); + get_reg(vcpu, RISCV_CORE_REG(regs.gp), &core.regs.gp); + get_reg(vcpu, RISCV_CORE_REG(regs.tp), &core.regs.tp); + get_reg(vcpu, RISCV_CORE_REG(regs.t0), &core.regs.t0); + get_reg(vcpu, RISCV_CORE_REG(regs.t1), &core.regs.t1); + get_reg(vcpu, RISCV_CORE_REG(regs.t2), &core.regs.t2); + get_reg(vcpu, RISCV_CORE_REG(regs.s0), &core.regs.s0); + get_reg(vcpu, RISCV_CORE_REG(regs.s1), &core.regs.s1); + get_reg(vcpu, RISCV_CORE_REG(regs.a0), &core.regs.a0); + get_reg(vcpu, RISCV_CORE_REG(regs.a1), &core.regs.a1); + get_reg(vcpu, RISCV_CORE_REG(regs.a2), &core.regs.a2); + get_reg(vcpu, RISCV_CORE_REG(regs.a3), &core.regs.a3); + get_reg(vcpu, RISCV_CORE_REG(regs.a4), &core.regs.a4); + get_reg(vcpu, RISCV_CORE_REG(regs.a5), &core.regs.a5); + get_reg(vcpu, RISCV_CORE_REG(regs.a6), &core.regs.a6); + get_reg(vcpu, RISCV_CORE_REG(regs.a7), &core.regs.a7); + get_reg(vcpu, RISCV_CORE_REG(regs.s2), &core.regs.s2); + get_reg(vcpu, RISCV_CORE_REG(regs.s3), &core.regs.s3); + get_reg(vcpu, RISCV_CORE_REG(regs.s4), &core.regs.s4); + get_reg(vcpu, RISCV_CORE_REG(regs.s5), &core.regs.s5); + get_reg(vcpu, RISCV_CORE_REG(regs.s6), &core.regs.s6); + get_reg(vcpu, RISCV_CORE_REG(regs.s7), &core.regs.s7); + get_reg(vcpu, RISCV_CORE_REG(regs.s8), &core.regs.s8); + get_reg(vcpu, RISCV_CORE_REG(regs.s9), &core.regs.s9); + get_reg(vcpu, RISCV_CORE_REG(regs.s10), &core.regs.s10); + get_reg(vcpu, RISCV_CORE_REG(regs.s11), &core.regs.s11); + get_reg(vcpu, RISCV_CORE_REG(regs.t3), &core.regs.t3); + get_reg(vcpu, RISCV_CORE_REG(regs.t4), &core.regs.t4); + get_reg(vcpu, RISCV_CORE_REG(regs.t5), &core.regs.t5); + get_reg(vcpu, RISCV_CORE_REG(regs.t6), &core.regs.t6); =20 fprintf(stream, " MODE: 0x%lx\n", core.mode); @@ -287,7 +288,7 @@ struct kvm_vcpu *vm_arch_vcpu_add(struct kvm_vm *vm, ui= nt32_t vcpu_id, struct kvm_vcpu *vcpu; =20 vcpu =3D __vm_vcpu_add(vm, vcpu_id); - riscv_vcpu_mmu_setup(vm, vcpu_id); + riscv_vcpu_mmu_setup(vcpu); =20 /* * With SBI HSM support in KVM RISC-V, all secondary VCPUs are @@ -295,28 +296,25 @@ struct kvm_vcpu *vm_arch_vcpu_add(struct kvm_vm *vm, = uint32_t vcpu_id, * are powered-on using KVM_SET_MP_STATE ioctl(). */ mps.mp_state =3D KVM_MP_STATE_RUNNABLE; - r =3D __vcpu_ioctl(vm, vcpu_id, KVM_SET_MP_STATE, &mps); + r =3D __vcpu_ioctl(vcpu, KVM_SET_MP_STATE, &mps); TEST_ASSERT(!r, "IOCTL KVM_SET_MP_STATE failed (error %d)", r); =20 /* Setup global pointer of guest to be same as the host */ asm volatile ( "add %0, gp, zero" : "=3Dr" (current_gp) : : "memory"); - set_reg(vm, vcpu_id, RISCV_CORE_REG(regs.gp), current_gp); + set_reg(vcpu, RISCV_CORE_REG(regs.gp), current_gp); =20 /* Setup stack pointer and program counter of guest */ - set_reg(vm, vcpu_id, RISCV_CORE_REG(regs.sp), - stack_vaddr + stack_size); - set_reg(vm, vcpu_id, RISCV_CORE_REG(regs.pc), - (unsigned long)guest_code); + set_reg(vcpu, RISCV_CORE_REG(regs.sp), stack_vaddr + stack_size); + set_reg(vcpu, RISCV_CORE_REG(regs.pc), (unsigned long)guest_code); =20 /* Setup default exception vector of guest */ - set_reg(vm, vcpu_id, RISCV_CSR_REG(stvec), - (unsigned long)guest_hang); + set_reg(vcpu, RISCV_CSR_REG(stvec), (unsigned long)guest_hang); =20 return vcpu; } =20 -void vcpu_args_set(struct kvm_vm *vm, uint32_t vcpuid, unsigned int num, .= ..) +void vcpu_args_set(struct kvm_vcpu *vcpu, unsigned int num, ...) { va_list ap; uint64_t id =3D RISCV_CORE_REG(regs.a0); @@ -354,12 +352,12 @@ void vcpu_args_set(struct kvm_vm *vm, uint32_t vcpuid= , unsigned int num, ...) id =3D RISCV_CORE_REG(regs.a7); break; }; - set_reg(vm, vcpuid, id, va_arg(ap, uint64_t)); + set_reg(vcpu, id, va_arg(ap, uint64_t)); } =20 va_end(ap); } =20 -void assert_on_unhandled_exception(struct kvm_vm *vm, uint32_t vcpuid) +void assert_on_unhandled_exception(struct kvm_vcpu *vcpu) { } diff --git a/tools/testing/selftests/kvm/lib/riscv/ucall.c b/tools/testing/= selftests/kvm/lib/riscv/ucall.c index c554ed173b38..4fc723e14797 100644 --- a/tools/testing/selftests/kvm/lib/riscv/ucall.c +++ b/tools/testing/selftests/kvm/lib/riscv/ucall.c @@ -63,9 +63,9 @@ void ucall(uint64_t cmd, int nargs, ...) 0, 0, 0, 0, 0); } =20 -uint64_t get_ucall(struct kvm_vm *vm, uint32_t vcpu_id, struct ucall *uc) +uint64_t get_ucall(struct kvm_vcpu *vcpu, struct ucall *uc) { - struct kvm_run *run =3D vcpu_state(vm, vcpu_id); + struct kvm_run *run =3D vcpu->run; struct ucall ucall =3D {}; =20 if (uc) @@ -74,10 +74,10 @@ uint64_t get_ucall(struct kvm_vm *vm, uint32_t vcpu_id,= struct ucall *uc) if (run->exit_reason =3D=3D KVM_EXIT_RISCV_SBI && run->riscv_sbi.extension_id =3D=3D KVM_RISCV_SELFTESTS_SBI_EXT && run->riscv_sbi.function_id =3D=3D 0) { - memcpy(&ucall, addr_gva2hva(vm, run->riscv_sbi.args[0]), + memcpy(&ucall, addr_gva2hva(vcpu->vm, run->riscv_sbi.args[0]), sizeof(ucall)); =20 - vcpu_run_complete_io(vm, vcpu_id); + vcpu_run_complete_io(vcpu); if (uc) memcpy(uc, &ucall, sizeof(ucall)); } diff --git a/tools/testing/selftests/kvm/lib/s390x/diag318_test_handler.c b= /tools/testing/selftests/kvm/lib/s390x/diag318_test_handler.c index 21c31fe10c1a..05283f8c9948 100644 --- a/tools/testing/selftests/kvm/lib/s390x/diag318_test_handler.c +++ b/tools/testing/selftests/kvm/lib/s390x/diag318_test_handler.c @@ -32,7 +32,7 @@ static uint64_t diag318_handler(void) uint64_t diag318_info; =20 vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); - vcpu_run(vm, vcpu->id); + vcpu_run(vcpu); run =3D vcpu->run; =20 TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_S390_SIEIC, diff --git a/tools/testing/selftests/kvm/lib/s390x/processor.c b/tools/test= ing/selftests/kvm/lib/s390x/processor.c index f8170e97eeb7..89d7340d9cbd 100644 --- a/tools/testing/selftests/kvm/lib/s390x/processor.c +++ b/tools/testing/selftests/kvm/lib/s390x/processor.c @@ -173,23 +173,23 @@ struct kvm_vcpu *vm_arch_vcpu_add(struct kvm_vm *vm, = uint32_t vcpu_id, vcpu =3D __vm_vcpu_add(vm, vcpu_id); =20 /* Setup guest registers */ - vcpu_regs_get(vm, vcpu_id, ®s); + vcpu_regs_get(vcpu, ®s); regs.gprs[15] =3D stack_vaddr + (DEFAULT_STACK_PGS * getpagesize()) - 160; - vcpu_regs_set(vm, vcpu_id, ®s); + vcpu_regs_set(vcpu, ®s); =20 - vcpu_sregs_get(vm, vcpu_id, &sregs); + vcpu_sregs_get(vcpu, &sregs); sregs.crs[0] |=3D 0x00040000; /* Enable floating point regs */ sregs.crs[1] =3D vm->pgd | 0xf; /* Primary region table */ - vcpu_sregs_set(vm, vcpu_id, &sregs); + vcpu_sregs_set(vcpu, &sregs); =20 - run =3D vcpu_state(vm, vcpu_id); + run =3D vcpu->run; run->psw_mask =3D 0x0400000180000000ULL; /* DAT enabled + 64 bit mode */ run->psw_addr =3D (uintptr_t)guest_code; =20 return vcpu; } =20 -void vcpu_args_set(struct kvm_vm *vm, uint32_t vcpuid, unsigned int num, .= ..) +void vcpu_args_set(struct kvm_vcpu *vcpu, unsigned int num, ...) { va_list ap; struct kvm_regs regs; @@ -200,23 +200,21 @@ void vcpu_args_set(struct kvm_vm *vm, uint32_t vcpuid= , unsigned int num, ...) num); =20 va_start(ap, num); - vcpu_regs_get(vm, vcpuid, ®s); + vcpu_regs_get(vcpu, ®s); =20 for (i =3D 0; i < num; i++) regs.gprs[i + 2] =3D va_arg(ap, uint64_t); =20 - vcpu_regs_set(vm, vcpuid, ®s); + vcpu_regs_set(vcpu, ®s); va_end(ap); } =20 -void vcpu_arch_dump(FILE *stream, struct kvm_vm *vm, uint32_t vcpuid, uint= 8_t indent) +void vcpu_arch_dump(FILE *stream, struct kvm_vcpu *vcpu, uint8_t indent) { - struct kvm_vcpu *vcpu =3D vcpu_get(vm, vcpuid); - fprintf(stream, "%*spstate: psw: 0x%.16llx:0x%.16llx\n", indent, "", vcpu->run->psw_mask, vcpu->run->psw_addr); } =20 -void assert_on_unhandled_exception(struct kvm_vm *vm, uint32_t vcpuid) +void assert_on_unhandled_exception(struct kvm_vcpu *vcpu) { } diff --git a/tools/testing/selftests/kvm/lib/s390x/ucall.c b/tools/testing/= selftests/kvm/lib/s390x/ucall.c index 9d3b0f15249a..78dfa2402b5e 100644 --- a/tools/testing/selftests/kvm/lib/s390x/ucall.c +++ b/tools/testing/selftests/kvm/lib/s390x/ucall.c @@ -33,9 +33,9 @@ void ucall(uint64_t cmd, int nargs, ...) asm volatile ("diag 0,%0,0x501" : : "a"(&uc) : "memory"); } =20 -uint64_t get_ucall(struct kvm_vm *vm, uint32_t vcpu_id, struct ucall *uc) +uint64_t get_ucall(struct kvm_vcpu *vcpu, struct ucall *uc) { - struct kvm_run *run =3D vcpu_state(vm, vcpu_id); + struct kvm_run *run =3D vcpu->run; struct ucall ucall =3D {}; =20 if (uc) @@ -47,10 +47,10 @@ uint64_t get_ucall(struct kvm_vm *vm, uint32_t vcpu_id,= struct ucall *uc) (run->s390_sieic.ipb >> 16) =3D=3D 0x501) { int reg =3D run->s390_sieic.ipa & 0xf; =20 - memcpy(&ucall, addr_gva2hva(vm, run->s.regs.gprs[reg]), + memcpy(&ucall, addr_gva2hva(vcpu->vm, run->s.regs.gprs[reg]), sizeof(ucall)); =20 - vcpu_run_complete_io(vm, vcpu_id); + vcpu_run_complete_io(vcpu); if (uc) memcpy(uc, &ucall, sizeof(ucall)); } diff --git a/tools/testing/selftests/kvm/lib/x86_64/processor.c b/tools/tes= ting/selftests/kvm/lib/x86_64/processor.c index 73738083456b..21c17168d416 100644 --- a/tools/testing/selftests/kvm/lib/x86_64/processor.c +++ b/tools/testing/selftests/kvm/lib/x86_64/processor.c @@ -213,8 +213,9 @@ void virt_arch_pg_map(struct kvm_vm *vm, uint64_t vaddr= , uint64_t paddr) __virt_pg_map(vm, vaddr, paddr, X86_PAGE_SIZE_4K); } =20 -static uint64_t *_vm_get_page_table_entry(struct kvm_vm *vm, int vcpuid, - uint64_t vaddr) +static uint64_t *_vm_get_page_table_entry(struct kvm_vm *vm, + struct kvm_vcpu *vcpu, + uint64_t vaddr) { uint16_t index[4]; uint64_t *pml4e, *pdpe, *pde; @@ -236,7 +237,7 @@ static uint64_t *_vm_get_page_table_entry(struct kvm_vm= *vm, int vcpuid, * If IA32_EFER.NXE =3D 0 and the P flag of a paging-structure entry is 1, * the XD flag (bit 63) is reserved. */ - vcpu_sregs_get(vm, vcpuid, &sregs); + vcpu_sregs_get(vcpu, &sregs); if ((sregs.efer & EFER_NX) =3D=3D 0) { rsvd_mask |=3D PTE_NX_MASK; } @@ -288,17 +289,18 @@ static uint64_t *_vm_get_page_table_entry(struct kvm_= vm *vm, int vcpuid, return &pte[index[0]]; } =20 -uint64_t vm_get_page_table_entry(struct kvm_vm *vm, int vcpuid, uint64_t v= addr) +uint64_t vm_get_page_table_entry(struct kvm_vm *vm, struct kvm_vcpu *vcpu, + uint64_t vaddr) { - uint64_t *pte =3D _vm_get_page_table_entry(vm, vcpuid, vaddr); + uint64_t *pte =3D _vm_get_page_table_entry(vm, vcpu, vaddr); =20 return *(uint64_t *)pte; } =20 -void vm_set_page_table_entry(struct kvm_vm *vm, int vcpuid, uint64_t vaddr, - uint64_t pte) +void vm_set_page_table_entry(struct kvm_vm *vm, struct kvm_vcpu *vcpu, + uint64_t vaddr, uint64_t pte) { - uint64_t *new_pte =3D _vm_get_page_table_entry(vm, vcpuid, vaddr); + uint64_t *new_pte =3D _vm_get_page_table_entry(vm, vcpu, vaddr); =20 *(uint64_t *)new_pte =3D pte; } @@ -547,12 +549,12 @@ static void kvm_setup_tss_64bit(struct kvm_vm *vm, st= ruct kvm_segment *segp, kvm_seg_fill_gdt_64bit(vm, segp); } =20 -static void vcpu_setup(struct kvm_vm *vm, int vcpuid) +static void vcpu_setup(struct kvm_vm *vm, struct kvm_vcpu *vcpu) { struct kvm_sregs sregs; =20 /* Set mode specific system register values. */ - vcpu_sregs_get(vm, vcpuid, &sregs); + vcpu_sregs_get(vcpu, &sregs); =20 sregs.idt.limit =3D 0; =20 @@ -576,7 +578,7 @@ static void vcpu_setup(struct kvm_vm *vm, int vcpuid) } =20 sregs.cr3 =3D vm->pgd; - vcpu_sregs_set(vm, vcpuid, &sregs); + vcpu_sregs_set(vcpu, &sregs); } =20 #define CPUID_XFD_BIT (1 << 4) @@ -645,19 +647,19 @@ struct kvm_vcpu *vm_arch_vcpu_add(struct kvm_vm *vm, = uint32_t vcpu_id, DEFAULT_GUEST_STACK_VADDR_MIN); =20 vcpu =3D __vm_vcpu_add(vm, vcpu_id); - vcpu_set_cpuid(vm, vcpu_id, kvm_get_supported_cpuid()); - vcpu_setup(vm, vcpu_id); + vcpu_set_cpuid(vcpu, kvm_get_supported_cpuid()); + vcpu_setup(vm, vcpu); =20 /* Setup guest general purpose registers */ - vcpu_regs_get(vm, vcpu_id, ®s); + vcpu_regs_get(vcpu, ®s); regs.rflags =3D regs.rflags | 0x2; regs.rsp =3D stack_vaddr + (DEFAULT_STACK_PGS * getpagesize()); regs.rip =3D (unsigned long) guest_code; - vcpu_regs_set(vm, vcpu_id, ®s); + vcpu_regs_set(vcpu, ®s); =20 /* Setup the MP state */ mp_state.mp_state =3D 0; - vcpu_set_mp_state(vm, vcpu_id, &mp_state); + vcpu_set_mp_state(vcpu, &mp_state); =20 return vcpu; } @@ -755,20 +757,7 @@ uint64_t kvm_get_feature_msr(uint64_t msr_index) return buffer.entry.data; } =20 -/* - * VM VCPU CPUID Set - * - * Input Args: - * vm - Virtual Machine - * vcpuid - VCPU id - * - * Output Args: None - * - * Return: KVM CPUID (KVM_GET_CPUID2) - * - * Set the VCPU's CPUID. - */ -struct kvm_cpuid2 *vcpu_get_cpuid(struct kvm_vm *vm, uint32_t vcpuid) +struct kvm_cpuid2 *vcpu_get_cpuid(struct kvm_vcpu *vcpu) { struct kvm_cpuid2 *cpuid; int max_ent; @@ -778,7 +767,7 @@ struct kvm_cpuid2 *vcpu_get_cpuid(struct kvm_vm *vm, ui= nt32_t vcpuid) max_ent =3D cpuid->nent; =20 for (cpuid->nent =3D 1; cpuid->nent <=3D max_ent; cpuid->nent++) { - rc =3D __vcpu_ioctl(vm, vcpuid, KVM_GET_CPUID2, cpuid); + rc =3D __vcpu_ioctl(vcpu, KVM_GET_CPUID2, cpuid); if (!rc) break; =20 @@ -825,7 +814,7 @@ kvm_get_supported_cpuid_index(uint32_t function, uint32= _t index) return entry; } =20 -uint64_t vcpu_get_msr(struct kvm_vm *vm, uint32_t vcpuid, uint64_t msr_ind= ex) +uint64_t vcpu_get_msr(struct kvm_vcpu *vcpu, uint64_t msr_index) { struct { struct kvm_msrs header; @@ -836,14 +825,13 @@ uint64_t vcpu_get_msr(struct kvm_vm *vm, uint32_t vcp= uid, uint64_t msr_index) buffer.header.nmsrs =3D 1; buffer.entry.index =3D msr_index; =20 - r =3D __vcpu_ioctl(vm, vcpuid, KVM_GET_MSRS, &buffer.header); + r =3D __vcpu_ioctl(vcpu, KVM_GET_MSRS, &buffer.header); TEST_ASSERT(r =3D=3D 1, KVM_IOCTL_ERROR(KVM_GET_MSRS, r)); =20 return buffer.entry.data; } =20 -int _vcpu_set_msr(struct kvm_vm *vm, uint32_t vcpuid, uint64_t msr_index, - uint64_t msr_value) +int _vcpu_set_msr(struct kvm_vcpu *vcpu, uint64_t msr_index, uint64_t msr_= value) { struct { struct kvm_msrs header; @@ -855,10 +843,10 @@ int _vcpu_set_msr(struct kvm_vm *vm, uint32_t vcpuid,= uint64_t msr_index, buffer.entry.index =3D msr_index; buffer.entry.data =3D msr_value; =20 - return __vcpu_ioctl(vm, vcpuid, KVM_SET_MSRS, &buffer.header); + return __vcpu_ioctl(vcpu, KVM_SET_MSRS, &buffer.header); } =20 -void vcpu_args_set(struct kvm_vm *vm, uint32_t vcpuid, unsigned int num, .= ..) +void vcpu_args_set(struct kvm_vcpu *vcpu, unsigned int num, ...) { va_list ap; struct kvm_regs regs; @@ -868,7 +856,7 @@ void vcpu_args_set(struct kvm_vm *vm, uint32_t vcpuid, = unsigned int num, ...) num); =20 va_start(ap, num); - vcpu_regs_get(vm, vcpuid, ®s); + vcpu_regs_get(vcpu, ®s); =20 if (num >=3D 1) regs.rdi =3D va_arg(ap, uint64_t); @@ -888,23 +876,23 @@ void vcpu_args_set(struct kvm_vm *vm, uint32_t vcpuid= , unsigned int num, ...) if (num >=3D 6) regs.r9 =3D va_arg(ap, uint64_t); =20 - vcpu_regs_set(vm, vcpuid, ®s); + vcpu_regs_set(vcpu, ®s); va_end(ap); } =20 -void vcpu_arch_dump(FILE *stream, struct kvm_vm *vm, uint32_t vcpuid, uint= 8_t indent) +void vcpu_arch_dump(FILE *stream, struct kvm_vcpu *vcpu, uint8_t indent) { struct kvm_regs regs; struct kvm_sregs sregs; =20 - fprintf(stream, "%*scpuid: %u\n", indent, "", vcpuid); + fprintf(stream, "%*svCPU ID: %u\n", indent, "", vcpu->id); =20 fprintf(stream, "%*sregs:\n", indent + 2, ""); - vcpu_regs_get(vm, vcpuid, ®s); + vcpu_regs_get(vcpu, ®s); regs_dump(stream, ®s, indent + 4); =20 fprintf(stream, "%*ssregs:\n", indent + 2, ""); - vcpu_sregs_get(vm, vcpuid, &sregs); + vcpu_sregs_get(vcpu, &sregs); sregs_dump(stream, &sregs, indent + 4); } =20 @@ -958,9 +946,9 @@ static int vcpu_save_xsave_state(struct kvm_vm *vm, str= uct kvm_vcpu *vcpu, return ioctl(vcpu->fd, KVM_GET_XSAVE2, state->xsave); } =20 -struct kvm_x86_state *vcpu_save_state(struct kvm_vm *vm, uint32_t vcpuid) +struct kvm_x86_state *vcpu_save_state(struct kvm_vcpu *vcpu) { - struct kvm_vcpu *vcpu =3D vcpu_get(vm, vcpuid); + struct kvm_vm *vm =3D vcpu->vm; struct kvm_msr_list *list; struct kvm_x86_state *state; int nmsrs, r, i; @@ -979,7 +967,7 @@ struct kvm_x86_state *vcpu_save_state(struct kvm_vm *vm= , uint32_t vcpuid) * kernel with KVM_RUN. Complete IO prior to migrating state * to a new VM. */ - vcpu_run_complete_io(vm, vcpuid); + vcpu_run_complete_io(vcpu); =20 nmsrs =3D kvm_get_num_msrs(vm); list =3D malloc(sizeof(*list) + nmsrs * sizeof(list->indices[0])); @@ -1039,9 +1027,8 @@ struct kvm_x86_state *vcpu_save_state(struct kvm_vm *= vm, uint32_t vcpuid) return state; } =20 -void vcpu_load_state(struct kvm_vm *vm, uint32_t vcpuid, struct kvm_x86_st= ate *state) +void vcpu_load_state(struct kvm_vcpu *vcpu, struct kvm_x86_state *state) { - struct kvm_vcpu *vcpu =3D vcpu_get(vm, vcpuid); int r; =20 r =3D ioctl(vcpu->fd, KVM_SET_SREGS, &state->sregs); @@ -1209,17 +1196,18 @@ void vm_init_descriptor_tables(struct kvm_vm *vm) DEFAULT_CODE_SELECTOR); } =20 -void vcpu_init_descriptor_tables(struct kvm_vm *vm, uint32_t vcpuid) +void vcpu_init_descriptor_tables(struct kvm_vcpu *vcpu) { + struct kvm_vm *vm =3D vcpu->vm; struct kvm_sregs sregs; =20 - vcpu_sregs_get(vm, vcpuid, &sregs); + vcpu_sregs_get(vcpu, &sregs); sregs.idt.base =3D vm->idt; sregs.idt.limit =3D NUM_INTERRUPTS * sizeof(struct idt_entry) - 1; sregs.gdt.base =3D vm->gdt; sregs.gdt.limit =3D getpagesize() - 1; kvm_seg_set_kernel_data_64bit(NULL, DEFAULT_DATA_SELECTOR, &sregs.gs); - vcpu_sregs_set(vm, vcpuid, &sregs); + vcpu_sregs_set(vcpu, &sregs); *(vm_vaddr_t *)addr_gva2hva(vm, (vm_vaddr_t)(&exception_handlers)) =3D vm= ->handlers; } =20 @@ -1231,11 +1219,11 @@ void vm_install_exception_handler(struct kvm_vm *vm= , int vector, handlers[vector] =3D (vm_vaddr_t)handler; } =20 -void assert_on_unhandled_exception(struct kvm_vm *vm, uint32_t vcpuid) +void assert_on_unhandled_exception(struct kvm_vcpu *vcpu) { struct ucall uc; =20 - if (get_ucall(vm, vcpuid, &uc) =3D=3D UCALL_UNHANDLED) { + if (get_ucall(vcpu, &uc) =3D=3D UCALL_UNHANDLED) { uint64_t vector =3D uc.args[0]; =20 TEST_FAIL("Unexpected vectored event in guest (vector:0x%lx)", @@ -1306,7 +1294,7 @@ struct kvm_cpuid2 *kvm_get_supported_hv_cpuid(void) return cpuid; } =20 -void vcpu_set_hv_cpuid(struct kvm_vm *vm, uint32_t vcpuid) +void vcpu_set_hv_cpuid(struct kvm_vcpu *vcpu) { static struct kvm_cpuid2 *cpuid_full; struct kvm_cpuid2 *cpuid_sys, *cpuid_hv; @@ -1338,16 +1326,16 @@ void vcpu_set_hv_cpuid(struct kvm_vm *vm, uint32_t = vcpuid) cpuid_full->nent =3D nent + cpuid_hv->nent; } =20 - vcpu_set_cpuid(vm, vcpuid, cpuid_full); + vcpu_set_cpuid(vcpu, cpuid_full); } =20 -struct kvm_cpuid2 *vcpu_get_supported_hv_cpuid(struct kvm_vm *vm, uint32_t= vcpuid) +struct kvm_cpuid2 *vcpu_get_supported_hv_cpuid(struct kvm_vcpu *vcpu) { static struct kvm_cpuid2 *cpuid; =20 cpuid =3D allocate_kvm_cpuid2(); =20 - vcpu_ioctl(vm, vcpuid, KVM_GET_SUPPORTED_HV_CPUID, cpuid); + vcpu_ioctl(vcpu, KVM_GET_SUPPORTED_HV_CPUID, cpuid); =20 return cpuid; } diff --git a/tools/testing/selftests/kvm/lib/x86_64/ucall.c b/tools/testing= /selftests/kvm/lib/x86_64/ucall.c index a3489973e290..e39857aa646d 100644 --- a/tools/testing/selftests/kvm/lib/x86_64/ucall.c +++ b/tools/testing/selftests/kvm/lib/x86_64/ucall.c @@ -35,9 +35,9 @@ void ucall(uint64_t cmd, int nargs, ...) : : [port] "d" (UCALL_PIO_PORT), "D" (&uc) : "rax", "memory"); } =20 -uint64_t get_ucall(struct kvm_vm *vm, uint32_t vcpu_id, struct ucall *uc) +uint64_t get_ucall(struct kvm_vcpu *vcpu, struct ucall *uc) { - struct kvm_run *run =3D vcpu_state(vm, vcpu_id); + struct kvm_run *run =3D vcpu->run; struct ucall ucall =3D {}; =20 if (uc) @@ -46,11 +46,11 @@ uint64_t get_ucall(struct kvm_vm *vm, uint32_t vcpu_id,= struct ucall *uc) if (run->exit_reason =3D=3D KVM_EXIT_IO && run->io.port =3D=3D UCALL_PIO_= PORT) { struct kvm_regs regs; =20 - vcpu_regs_get(vm, vcpu_id, ®s); - memcpy(&ucall, addr_gva2hva(vm, (vm_vaddr_t)regs.rdi), + vcpu_regs_get(vcpu, ®s); + memcpy(&ucall, addr_gva2hva(vcpu->vm, (vm_vaddr_t)regs.rdi), sizeof(ucall)); =20 - vcpu_run_complete_io(vm, vcpu_id); + vcpu_run_complete_io(vcpu); if (uc) memcpy(uc, &ucall, sizeof(ucall)); } diff --git a/tools/testing/selftests/kvm/lib/x86_64/vmx.c b/tools/testing/s= elftests/kvm/lib/x86_64/vmx.c index 0d42aa821833..0d66d1704867 100644 --- a/tools/testing/selftests/kvm/lib/x86_64/vmx.c +++ b/tools/testing/selftests/kvm/lib/x86_64/vmx.c @@ -42,7 +42,7 @@ struct eptPageTablePointer { uint64_t address:40; uint64_t reserved_63_52:12; }; -int vcpu_enable_evmcs(struct kvm_vm *vm, int vcpu_id) +int vcpu_enable_evmcs(struct kvm_vcpu *vcpu) { uint16_t evmcs_ver; =20 @@ -51,7 +51,7 @@ int vcpu_enable_evmcs(struct kvm_vm *vm, int vcpu_id) .args[0] =3D (unsigned long)&evmcs_ver }; =20 - vcpu_ioctl(vm, vcpu_id, KVM_ENABLE_CAP, &enable_evmcs_cap); + vcpu_ioctl(vcpu, KVM_ENABLE_CAP, &enable_evmcs_cap); =20 /* KVM should return supported EVMCS version range */ TEST_ASSERT(((evmcs_ver >> 8) >=3D (evmcs_ver & 0xff)) && diff --git a/tools/testing/selftests/kvm/max_guest_memory_test.c b/tools/te= sting/selftests/kvm/max_guest_memory_test.c index 956fc56b8c68..2391d071b395 100644 --- a/tools/testing/selftests/kvm/max_guest_memory_test.c +++ b/tools/testing/selftests/kvm/max_guest_memory_test.c @@ -51,10 +51,10 @@ static void rendezvous_with_boss(void) } } =20 -static void run_vcpu(struct kvm_vm *vm, uint32_t vcpu_id) +static void run_vcpu(struct kvm_vcpu *vcpu) { - vcpu_run(vm, vcpu_id); - ASSERT_EQ(get_ucall(vm, vcpu_id, NULL), UCALL_DONE); + vcpu_run(vcpu); + ASSERT_EQ(get_ucall(vcpu, NULL), UCALL_DONE); } =20 static void *vcpu_worker(void *data) @@ -65,25 +65,25 @@ static void *vcpu_worker(void *data) struct kvm_sregs sregs; struct kvm_regs regs; =20 - vcpu_args_set(vm, vcpu->id, 3, info->start_gpa, info->end_gpa, + vcpu_args_set(vcpu, 3, info->start_gpa, info->end_gpa, vm_get_page_size(vm)); =20 /* Snapshot regs before the first run. */ - vcpu_regs_get(vm, vcpu->id, ®s); + vcpu_regs_get(vcpu, ®s); rendezvous_with_boss(); =20 - run_vcpu(vm, vcpu->id); + run_vcpu(vcpu); rendezvous_with_boss(); - vcpu_regs_set(vm, vcpu->id, ®s); - vcpu_sregs_get(vm, vcpu->id, &sregs); + vcpu_regs_set(vcpu, ®s); + vcpu_sregs_get(vcpu, &sregs); #ifdef __x86_64__ /* Toggle CR0.WP to trigger a MMU context reset. */ sregs.cr0 ^=3D X86_CR0_WP; #endif - vcpu_sregs_set(vm, vcpu->id, &sregs); + vcpu_sregs_set(vcpu, &sregs); rendezvous_with_boss(); =20 - run_vcpu(vm, vcpu->id); + run_vcpu(vcpu); rendezvous_with_boss(); =20 return NULL; diff --git a/tools/testing/selftests/kvm/memslot_modification_stress_test.c= b/tools/testing/selftests/kvm/memslot_modification_stress_test.c index a3efb3182119..1f9036cdcaa9 100644 --- a/tools/testing/selftests/kvm/memslot_modification_stress_test.c +++ b/tools/testing/selftests/kvm/memslot_modification_stress_test.c @@ -39,7 +39,6 @@ static bool run_vcpus =3D true; static void vcpu_worker(struct perf_test_vcpu_args *vcpu_args) { struct kvm_vcpu *vcpu =3D vcpu_args->vcpu; - struct kvm_vm *vm =3D perf_test_args.vm; struct kvm_run *run; int ret; =20 @@ -47,10 +46,10 @@ static void vcpu_worker(struct perf_test_vcpu_args *vcp= u_args) =20 /* Let the guest access its memory until a stop signal is received */ while (READ_ONCE(run_vcpus)) { - ret =3D _vcpu_run(vm, vcpu->id); + ret =3D _vcpu_run(vcpu); TEST_ASSERT(ret =3D=3D 0, "vcpu_run failed: %d\n", ret); =20 - if (get_ucall(vm, vcpu->id, NULL) =3D=3D UCALL_SYNC) + if (get_ucall(vcpu, NULL) =3D=3D UCALL_SYNC) continue; =20 TEST_ASSERT(false, diff --git a/tools/testing/selftests/kvm/memslot_perf_test.c b/tools/testin= g/selftests/kvm/memslot_perf_test.c index 009eb19b28af..5f98489e4f4d 100644 --- a/tools/testing/selftests/kvm/memslot_perf_test.c +++ b/tools/testing/selftests/kvm/memslot_perf_test.c @@ -146,9 +146,9 @@ static void *vcpu_worker(void *__data) struct ucall uc; =20 while (1) { - vcpu_run(data->vm, vcpu->id); + vcpu_run(vcpu); =20 - switch (get_ucall(data->vm, vcpu->id, &uc)) { + switch (get_ucall(vcpu, &uc)) { case UCALL_SYNC: TEST_ASSERT(uc.args[1] =3D=3D 0, "Unexpected sync ucall, got %lx", diff --git a/tools/testing/selftests/kvm/rseq_test.c b/tools/testing/selfte= sts/kvm/rseq_test.c index fd754de0b74c..68c0c8bb206e 100644 --- a/tools/testing/selftests/kvm/rseq_test.c +++ b/tools/testing/selftests/kvm/rseq_test.c @@ -233,8 +233,8 @@ int main(int argc, char *argv[]) pthread_create(&migration_thread, NULL, migration_worker, 0); =20 for (i =3D 0; !done; i++) { - vcpu_run(vm, vcpu->id); - TEST_ASSERT(get_ucall(vm, vcpu->id, NULL) =3D=3D UCALL_SYNC, + vcpu_run(vcpu); + TEST_ASSERT(get_ucall(vcpu, NULL) =3D=3D UCALL_SYNC, "Guest failed?"); =20 /* diff --git a/tools/testing/selftests/kvm/s390x/memop.c b/tools/testing/self= tests/kvm/s390x/memop.c index ba5f645b7565..aa476e1bb7d0 100644 --- a/tools/testing/selftests/kvm/s390x/memop.c +++ b/tools/testing/selftests/kvm/s390x/memop.c @@ -149,7 +149,7 @@ static void memop_ioctl(struct test_info info, struct k= vm_s390_mem_op *ksmo) if (!vcpu) vm_ioctl(info.vm, KVM_S390_MEM_OP, ksmo); else - vcpu_ioctl(vcpu->vm, vcpu->id, KVM_S390_MEM_OP, ksmo); + vcpu_ioctl(vcpu, KVM_S390_MEM_OP, ksmo); } =20 static int err_memop_ioctl(struct test_info info, struct kvm_s390_mem_op *= ksmo) @@ -159,7 +159,7 @@ static int err_memop_ioctl(struct test_info info, struc= t kvm_s390_mem_op *ksmo) if (!vcpu) return __vm_ioctl(info.vm, KVM_S390_MEM_OP, ksmo); else - return __vcpu_ioctl(vcpu->vm, vcpu->id, KVM_S390_MEM_OP, ksmo); + return __vcpu_ioctl(vcpu, KVM_S390_MEM_OP, ksmo); } =20 #define MEMOP(err, info_p, mop_target_p, access_mode_p, buf_p, size_p, ...= ) \ @@ -246,8 +246,8 @@ enum stage { struct ucall uc; \ int __stage =3D (stage); \ \ - vcpu_run(__vcpu->vm, __vcpu->id); \ - get_ucall(__vcpu->vm, __vcpu->id, &uc); \ + vcpu_run(__vcpu); \ + get_ucall(__vcpu, &uc); \ ASSERT_EQ(uc.cmd, UCALL_SYNC); \ ASSERT_EQ(uc.args[1], __stage); \ }) \ diff --git a/tools/testing/selftests/kvm/s390x/resets.c b/tools/testing/sel= ftests/kvm/s390x/resets.c index c9233f14689c..a06ed20670fe 100644 --- a/tools/testing/selftests/kvm/s390x/resets.c +++ b/tools/testing/selftests/kvm/s390x/resets.c @@ -63,7 +63,7 @@ static void test_one_reg(struct kvm_vcpu *vcpu, uint64_t = id, uint64_t value) =20 reg.addr =3D (uintptr_t)&eval_reg; reg.id =3D id; - vcpu_get_reg(vcpu->vm, vcpu->id, ®); + vcpu_get_reg(vcpu, ®); TEST_ASSERT(eval_reg =3D=3D value, "value =3D=3D 0x%lx", value); } =20 @@ -74,7 +74,7 @@ static void assert_noirq(struct kvm_vcpu *vcpu) =20 irq_state.len =3D sizeof(buf); irq_state.buf =3D (unsigned long)buf; - irqs =3D __vcpu_ioctl(vcpu->vm, vcpu->id, KVM_S390_GET_IRQ_STATE, &irq_st= ate); + irqs =3D __vcpu_ioctl(vcpu, KVM_S390_GET_IRQ_STATE, &irq_state); /* * irqs contains the number of retrieved interrupts. Any interrupt * (notably, the emergency call interrupt we have injected) should @@ -91,13 +91,13 @@ static void assert_clear(struct kvm_vcpu *vcpu) struct kvm_regs regs; struct kvm_fpu fpu; =20 - vcpu_regs_get(vcpu->vm, vcpu->id, ®s); + vcpu_regs_get(vcpu, ®s); TEST_ASSERT(!memcmp(®s.gprs, regs_null, sizeof(regs.gprs)), "grs =3D= =3D 0"); =20 - vcpu_sregs_get(vcpu->vm, vcpu->id, &sregs); + vcpu_sregs_get(vcpu, &sregs); TEST_ASSERT(!memcmp(&sregs.acrs, regs_null, sizeof(sregs.acrs)), "acrs = =3D=3D 0"); =20 - vcpu_fpu_get(vcpu->vm, vcpu->id, &fpu); + vcpu_fpu_get(vcpu, &fpu); TEST_ASSERT(!memcmp(&fpu.fprs, regs_null, sizeof(fpu.fprs)), "fprs =3D=3D= 0"); =20 /* sync regs */ @@ -135,7 +135,7 @@ static void assert_initial(struct kvm_vcpu *vcpu) struct kvm_fpu fpu; =20 /* KVM_GET_SREGS */ - vcpu_sregs_get(vcpu->vm, vcpu->id, &sregs); + vcpu_sregs_get(vcpu, &sregs); TEST_ASSERT(sregs.crs[0] =3D=3D 0xE0UL, "cr0 =3D=3D 0xE0 (KVM_GET_SREGS)"= ); TEST_ASSERT(sregs.crs[14] =3D=3D 0xC2000000UL, "cr14 =3D=3D 0xC2000000 (KVM_GET_SREGS)"); @@ -161,7 +161,7 @@ static void assert_initial(struct kvm_vcpu *vcpu) TEST_ASSERT(vcpu->run->psw_addr =3D=3D 0, "psw_addr =3D=3D 0 (kvm_run)"); TEST_ASSERT(vcpu->run->psw_mask =3D=3D 0, "psw_mask =3D=3D 0 (kvm_run)"); =20 - vcpu_fpu_get(vcpu->vm, vcpu->id, &fpu); + vcpu_fpu_get(vcpu, &fpu); TEST_ASSERT(!fpu.fpc, "fpc =3D=3D 0"); =20 test_one_reg(vcpu, KVM_REG_S390_GBEA, 1); @@ -200,7 +200,7 @@ static void inject_irq(struct kvm_vcpu *vcpu) irq_state.buf =3D (unsigned long)buf; irq->type =3D KVM_S390_INT_EMERGENCY; irq->u.emerg.code =3D vcpu->id; - irqs =3D __vcpu_ioctl(vcpu->vm, vcpu->id, KVM_S390_SET_IRQ_STATE, &irq_st= ate); + irqs =3D __vcpu_ioctl(vcpu, KVM_S390_SET_IRQ_STATE, &irq_state); TEST_ASSERT(irqs >=3D 0, "Error injecting EMERGENCY IRQ errno %d\n", errn= o); } =20 @@ -223,11 +223,11 @@ static void test_normal(void) pr_info("Testing normal reset\n"); vm =3D create_vm(&vcpu); =20 - vcpu_run(vm, vcpu->id); + vcpu_run(vcpu); =20 inject_irq(vcpu); =20 - vcpu_ioctl(vm, vcpu->id, KVM_S390_NORMAL_RESET, 0); + vcpu_ioctl(vcpu, KVM_S390_NORMAL_RESET, 0); =20 /* must clears */ assert_normal(vcpu); @@ -246,11 +246,11 @@ static void test_initial(void) pr_info("Testing initial reset\n"); vm =3D create_vm(&vcpu); =20 - vcpu_run(vm, vcpu->id); + vcpu_run(vcpu); =20 inject_irq(vcpu); =20 - vcpu_ioctl(vm, vcpu->id, KVM_S390_INITIAL_RESET, 0); + vcpu_ioctl(vcpu, KVM_S390_INITIAL_RESET, 0); =20 /* must clears */ assert_normal(vcpu); @@ -269,11 +269,11 @@ static void test_clear(void) pr_info("Testing clear reset\n"); vm =3D create_vm(&vcpu); =20 - vcpu_run(vm, vcpu->id); + vcpu_run(vcpu); =20 inject_irq(vcpu); =20 - vcpu_ioctl(vm, vcpu->id, KVM_S390_CLEAR_RESET, 0); + vcpu_ioctl(vcpu, KVM_S390_CLEAR_RESET, 0); =20 /* must clears */ assert_normal(vcpu); diff --git a/tools/testing/selftests/kvm/s390x/sync_regs_test.c b/tools/tes= ting/selftests/kvm/s390x/sync_regs_test.c index bf52cabeaed6..13c4c091aa66 100644 --- a/tools/testing/selftests/kvm/s390x/sync_regs_test.c +++ b/tools/testing/selftests/kvm/s390x/sync_regs_test.c @@ -97,14 +97,14 @@ int main(int argc, char *argv[]) =20 /* Request reading invalid register set from VCPU. */ run->kvm_valid_regs =3D INVALID_SYNC_FIELD; - rv =3D _vcpu_run(vm, vcpu->id); + rv =3D _vcpu_run(vcpu); TEST_ASSERT(rv < 0 && errno =3D=3D EINVAL, "Invalid kvm_valid_regs did not cause expected KVM_RUN error: %d\n", rv); run->kvm_valid_regs =3D 0; =20 run->kvm_valid_regs =3D INVALID_SYNC_FIELD | TEST_SYNC_FIELDS; - rv =3D _vcpu_run(vm, vcpu->id); + rv =3D _vcpu_run(vcpu); TEST_ASSERT(rv < 0 && errno =3D=3D EINVAL, "Invalid kvm_valid_regs did not cause expected KVM_RUN error: %d\n", rv); @@ -112,14 +112,14 @@ int main(int argc, char *argv[]) =20 /* Request setting invalid register set into VCPU. */ run->kvm_dirty_regs =3D INVALID_SYNC_FIELD; - rv =3D _vcpu_run(vm, vcpu->id); + rv =3D _vcpu_run(vcpu); TEST_ASSERT(rv < 0 && errno =3D=3D EINVAL, "Invalid kvm_dirty_regs did not cause expected KVM_RUN error: %d\n", rv); run->kvm_dirty_regs =3D 0; =20 run->kvm_dirty_regs =3D INVALID_SYNC_FIELD | TEST_SYNC_FIELDS; - rv =3D _vcpu_run(vm, vcpu->id); + rv =3D _vcpu_run(vcpu); TEST_ASSERT(rv < 0 && errno =3D=3D EINVAL, "Invalid kvm_dirty_regs did not cause expected KVM_RUN error: %d\n", rv); @@ -127,7 +127,7 @@ int main(int argc, char *argv[]) =20 /* Request and verify all valid register sets. */ run->kvm_valid_regs =3D TEST_SYNC_FIELDS; - rv =3D _vcpu_run(vm, vcpu->id); + rv =3D _vcpu_run(vcpu); TEST_ASSERT(rv =3D=3D 0, "vcpu_run failed: %d\n", rv); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_S390_SIEIC, "Unexpected exit reason: %u (%s)\n", @@ -140,10 +140,10 @@ int main(int argc, char *argv[]) run->s390_sieic.icptcode, run->s390_sieic.ipa, run->s390_sieic.ipb); =20 - vcpu_regs_get(vm, vcpu->id, ®s); + vcpu_regs_get(vcpu, ®s); compare_regs(®s, &run->s.regs); =20 - vcpu_sregs_get(vm, vcpu->id, &sregs); + vcpu_sregs_get(vcpu, &sregs); compare_sregs(&sregs, &run->s.regs); =20 /* Set and verify various register values */ @@ -158,7 +158,7 @@ int main(int argc, char *argv[]) run->kvm_dirty_regs |=3D KVM_SYNC_DIAG318; } =20 - rv =3D _vcpu_run(vm, vcpu->id); + rv =3D _vcpu_run(vcpu); TEST_ASSERT(rv =3D=3D 0, "vcpu_run failed: %d\n", rv); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_S390_SIEIC, "Unexpected exit reason: %u (%s)\n", @@ -174,10 +174,10 @@ int main(int argc, char *argv[]) "diag318 sync regs value incorrect 0x%llx.", run->s.regs.diag318); =20 - vcpu_regs_get(vm, vcpu->id, ®s); + vcpu_regs_get(vcpu, ®s); compare_regs(®s, &run->s.regs); =20 - vcpu_sregs_get(vm, vcpu->id, &sregs); + vcpu_sregs_get(vcpu, &sregs); compare_sregs(&sregs, &run->s.regs); =20 /* Clear kvm_dirty_regs bits, verify new s.regs values are @@ -187,7 +187,7 @@ int main(int argc, char *argv[]) run->kvm_dirty_regs =3D 0; run->s.regs.gprs[11] =3D 0xDEADBEEF; run->s.regs.diag318 =3D 0x4B1D; - rv =3D _vcpu_run(vm, vcpu->id); + rv =3D _vcpu_run(vcpu); TEST_ASSERT(rv =3D=3D 0, "vcpu_run failed: %d\n", rv); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_S390_SIEIC, "Unexpected exit reason: %u (%s)\n", diff --git a/tools/testing/selftests/kvm/s390x/tprot.c b/tools/testing/self= tests/kvm/s390x/tprot.c index 4caa77388033..25bee126c6b9 100644 --- a/tools/testing/selftests/kvm/s390x/tprot.c +++ b/tools/testing/selftests/kvm/s390x/tprot.c @@ -186,8 +186,8 @@ static void guest_code(void) struct ucall uc; \ int __stage =3D (stage); \ \ - vcpu_run(__vcpu->vm, __vcpu->id); \ - get_ucall(__vcpu->vm, __vcpu->id, &uc); \ + vcpu_run(__vcpu); \ + get_ucall(__vcpu, &uc); \ if (uc.cmd =3D=3D UCALL_ABORT) { \ TEST_FAIL("line %lu: %s, hints: %lu, %lu", uc.args[1], \ (const char *)uc.args[0], uc.args[2], uc.args[3]); \ diff --git a/tools/testing/selftests/kvm/set_memory_region_test.c b/tools/t= esting/selftests/kvm/set_memory_region_test.c index d832fc12984e..47b219dd60e4 100644 --- a/tools/testing/selftests/kvm/set_memory_region_test.c +++ b/tools/testing/selftests/kvm/set_memory_region_test.c @@ -63,10 +63,10 @@ static void *vcpu_worker(void *data) * has been deleted or while it is being moved . */ while (1) { - vcpu_run(vcpu->vm, vcpu->id); + vcpu_run(vcpu); =20 if (run->exit_reason =3D=3D KVM_EXIT_IO) { - cmd =3D get_ucall(vcpu->vm, vcpu->id, &uc); + cmd =3D get_ucall(vcpu, &uc); if (cmd !=3D UCALL_SYNC) break; =20 @@ -291,7 +291,7 @@ static void test_delete_memory_region(void) run->exit_reason =3D=3D KVM_EXIT_INTERNAL_ERROR, "Unexpected exit reason =3D %d", run->exit_reason); =20 - vcpu_regs_get(vm, vcpu->id, ®s); + vcpu_regs_get(vcpu, ®s); =20 /* * On AMD, after KVM_EXIT_SHUTDOWN the VMCB has been reinitialized alread= y, @@ -318,7 +318,7 @@ static void test_zero_memory_regions(void) vcpu =3D __vm_vcpu_add(vm, 0); =20 vm_ioctl(vm, KVM_SET_NR_MMU_PAGES, (void *)64ul); - vcpu_run(vm, vcpu->id); + vcpu_run(vcpu); =20 run =3D vcpu->run; TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_INTERNAL_ERROR, diff --git a/tools/testing/selftests/kvm/steal_time.c b/tools/testing/selft= ests/kvm/steal_time.c index 2aca51d83079..05025a5eade6 100644 --- a/tools/testing/selftests/kvm/steal_time.c +++ b/tools/testing/selftests/kvm/steal_time.c @@ -73,11 +73,11 @@ static void steal_time_init(struct kvm_vcpu *vcpu, uint= 32_t i) st_gva[i] =3D (void *)(ST_GPA_BASE + i * STEAL_TIME_SIZE); sync_global_to_guest(vcpu->vm, st_gva[i]); =20 - ret =3D _vcpu_set_msr(vcpu->vm, vcpu->id, MSR_KVM_STEAL_TIME, + ret =3D _vcpu_set_msr(vcpu, MSR_KVM_STEAL_TIME, (ulong)st_gva[i] | KVM_STEAL_RESERVED_MASK); TEST_ASSERT(ret =3D=3D 0, "Bad GPA didn't fail"); =20 - vcpu_set_msr(vcpu->vm, vcpu->id, MSR_KVM_STEAL_TIME, (ulong)st_gva[i] | K= VM_MSR_ENABLED); + vcpu_set_msr(vcpu, MSR_KVM_STEAL_TIME, (ulong)st_gva[i] | KVM_MSR_ENABLED= ); } =20 static void steal_time_dump(struct kvm_vm *vm, uint32_t vcpu_idx) @@ -170,7 +170,7 @@ static bool is_steal_time_supported(struct kvm_vcpu *vc= pu) .attr =3D KVM_ARM_VCPU_PVTIME_IPA, }; =20 - return !__vcpu_ioctl(vcpu->vm, vcpu->id, KVM_HAS_DEVICE_ATTR, &dev); + return !__vcpu_ioctl(vcpu, KVM_HAS_DEVICE_ATTR, &dev); } =20 static void steal_time_init(struct kvm_vcpu *vcpu, uint32_t i) @@ -185,20 +185,20 @@ static void steal_time_init(struct kvm_vcpu *vcpu, ui= nt32_t i) .addr =3D (uint64_t)&st_ipa, }; =20 - vcpu_ioctl(vm, vcpu->id, KVM_HAS_DEVICE_ATTR, &dev); + vcpu_ioctl(vcpu, KVM_HAS_DEVICE_ATTR, &dev); =20 /* ST_GPA_BASE is identity mapped */ st_gva[i] =3D (void *)(ST_GPA_BASE + i * STEAL_TIME_SIZE); sync_global_to_guest(vm, st_gva[i]); =20 st_ipa =3D (ulong)st_gva[i] | 1; - ret =3D __vcpu_ioctl(vm, vcpu->id, KVM_SET_DEVICE_ATTR, &dev); + ret =3D __vcpu_ioctl(vcpu, KVM_SET_DEVICE_ATTR, &dev); TEST_ASSERT(ret =3D=3D -1 && errno =3D=3D EINVAL, "Bad IPA didn't report = EINVAL"); =20 st_ipa =3D (ulong)st_gva[i]; - vcpu_ioctl(vm, vcpu->id, KVM_SET_DEVICE_ATTR, &dev); + vcpu_ioctl(vcpu, KVM_SET_DEVICE_ATTR, &dev); =20 - ret =3D __vcpu_ioctl(vm, vcpu->id, KVM_SET_DEVICE_ATTR, &dev); + ret =3D __vcpu_ioctl(vcpu, KVM_SET_DEVICE_ATTR, &dev); TEST_ASSERT(ret =3D=3D -1 && errno =3D=3D EEXIST, "Set IPA twice without = EEXIST"); } =20 @@ -234,9 +234,9 @@ static void run_vcpu(struct kvm_vcpu *vcpu) { struct ucall uc; =20 - vcpu_run(vcpu->vm, vcpu->id); + vcpu_run(vcpu); =20 - switch (get_ucall(vcpu->vm, vcpu->id, &uc)) { + switch (get_ucall(vcpu, &uc)) { case UCALL_SYNC: case UCALL_DONE: break; @@ -287,7 +287,7 @@ int main(int ac, char **av) for (i =3D 0; i < NR_VCPUS; ++i) { steal_time_init(vcpus[i], i); =20 - vcpu_args_set(vm, vcpus[i]->id, 1, i); + vcpu_args_set(vcpus[i], 1, i); =20 /* First VCPU run initializes steal-time */ run_vcpu(vcpus[i]); diff --git a/tools/testing/selftests/kvm/system_counter_offset_test.c b/too= ls/testing/selftests/kvm/system_counter_offset_test.c index 0690ce0ae4fa..7c8be0930737 100644 --- a/tools/testing/selftests/kvm/system_counter_offset_test.c +++ b/tools/testing/selftests/kvm/system_counter_offset_test.c @@ -28,8 +28,7 @@ static struct test_case test_cases[] =3D { =20 static void check_preconditions(struct kvm_vcpu *vcpu) { - if (!__vcpu_has_device_attr(vcpu->vm, vcpu->id, KVM_VCPU_TSC_CTRL, - KVM_VCPU_TSC_OFFSET)) + if (!__vcpu_has_device_attr(vcpu, KVM_VCPU_TSC_CTRL, KVM_VCPU_TSC_OFFSET)) return; =20 print_skip("KVM_VCPU_TSC_OFFSET not supported; skipping test"); @@ -38,8 +37,8 @@ static void check_preconditions(struct kvm_vcpu *vcpu) =20 static void setup_system_counter(struct kvm_vcpu *vcpu, struct test_case *= test) { - vcpu_device_attr_set(vcpu->vm, vcpu->id, KVM_VCPU_TSC_CTRL, - KVM_VCPU_TSC_OFFSET, &test->tsc_offset); + vcpu_device_attr_set(vcpu, KVM_VCPU_TSC_CTRL, KVM_VCPU_TSC_OFFSET, + &test->tsc_offset); } =20 static uint64_t guest_read_system_counter(struct test_case *test) @@ -101,10 +100,10 @@ static void enter_guest(struct kvm_vcpu *vcpu) =20 setup_system_counter(vcpu, test); start =3D host_read_guest_system_counter(test); - vcpu_run(vcpu->vm, vcpu->id); + vcpu_run(vcpu); end =3D host_read_guest_system_counter(test); =20 - switch (get_ucall(vcpu->vm, vcpu->id, &uc)) { + switch (get_ucall(vcpu, &uc)) { case UCALL_SYNC: handle_sync(&uc, start, end); break; @@ -113,7 +112,7 @@ static void enter_guest(struct kvm_vcpu *vcpu) return; default: TEST_ASSERT(0, "unhandled ucall %ld\n", - get_ucall(vcpu->vm, vcpu->id, &uc)); + get_ucall(vcpu, &uc)); } } } diff --git a/tools/testing/selftests/kvm/x86_64/amx_test.c b/tools/testing/= selftests/kvm/x86_64/amx_test.c index 7755fe8fcffb..b421c8369dba 100644 --- a/tools/testing/selftests/kvm/x86_64/amx_test.c +++ b/tools/testing/selftests/kvm/x86_64/amx_test.c @@ -351,11 +351,11 @@ int main(int argc, char *argv[]) } =20 run =3D vcpu->run; - vcpu_regs_get(vm, vcpu->id, ®s1); + vcpu_regs_get(vcpu, ®s1); =20 /* Register #NM handler */ vm_init_descriptor_tables(vm); - vcpu_init_descriptor_tables(vm, vcpu->id); + vcpu_init_descriptor_tables(vcpu); vm_install_exception_handler(vm, NM_VECTOR, guest_nm_handler); =20 /* amx cfg for guest_code */ @@ -369,16 +369,16 @@ int main(int argc, char *argv[]) /* xsave data for guest_code */ xsavedata =3D vm_vaddr_alloc_pages(vm, 3); memset(addr_gva2hva(vm, xsavedata), 0, 3 * getpagesize()); - vcpu_args_set(vm, vcpu->id, 3, amx_cfg, tiledata, xsavedata); + vcpu_args_set(vcpu, 3, amx_cfg, tiledata, xsavedata); =20 for (stage =3D 1; ; stage++) { - vcpu_run(vm, vcpu->id); + vcpu_run(vcpu); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Stage %d: unexpected exit reason: %u (%s),\n", stage, run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vm, vcpu->id, &uc)) { + switch (get_ucall(vcpu, &uc)) { case UCALL_ABORT: TEST_FAIL("%s at %s:%ld", (const char *)uc.args[0], __FILE__, uc.args[1]); @@ -403,7 +403,7 @@ int main(int argc, char *argv[]) * size subtract 8K amx size. */ amx_offset =3D xsave_restore_size - NUM_TILES*TILE_SIZE; - state =3D vcpu_save_state(vm, vcpu->id); + state =3D vcpu_save_state(vcpu); void *amx_start =3D (void *)state->xsave + amx_offset; void *tiles_data =3D (void *)addr_gva2hva(vm, tiledata); /* Only check TMM0 register, 1 tile */ @@ -424,21 +424,21 @@ int main(int argc, char *argv[]) TEST_FAIL("Unknown ucall %lu", uc.cmd); } =20 - state =3D vcpu_save_state(vm, vcpu->id); + state =3D vcpu_save_state(vcpu); memset(®s1, 0, sizeof(regs1)); - vcpu_regs_get(vm, vcpu->id, ®s1); + vcpu_regs_get(vcpu, ®s1); =20 kvm_vm_release(vm); =20 /* Restore state in a new VM. */ vcpu =3D vm_recreate_with_one_vcpu(vm); - vcpu_set_cpuid(vm, vcpu->id, kvm_get_supported_cpuid()); - vcpu_load_state(vm, vcpu->id, state); + vcpu_set_cpuid(vcpu, kvm_get_supported_cpuid()); + vcpu_load_state(vcpu, state); run =3D vcpu->run; kvm_x86_state_cleanup(state); =20 memset(®s2, 0, sizeof(regs2)); - vcpu_regs_get(vm, vcpu->id, ®s2); + vcpu_regs_get(vcpu, ®s2); TEST_ASSERT(!memcmp(®s1, ®s2, sizeof(regs2)), "Unexpected register values after vcpu_load_state; rdi: %lx rsi: %l= x", (ulong) regs2.rdi, (ulong) regs2.rsi); diff --git a/tools/testing/selftests/kvm/x86_64/cpuid_test.c b/tools/testin= g/selftests/kvm/x86_64/cpuid_test.c index 76cdd0d10757..4aa784932597 100644 --- a/tools/testing/selftests/kvm/x86_64/cpuid_test.c +++ b/tools/testing/selftests/kvm/x86_64/cpuid_test.c @@ -120,9 +120,9 @@ static void run_vcpu(struct kvm_vcpu *vcpu, int stage) { struct ucall uc; =20 - vcpu_run(vcpu->vm, vcpu->id); + vcpu_run(vcpu); =20 - switch (get_ucall(vcpu->vm, vcpu->id, &uc)) { + switch (get_ucall(vcpu, &uc)) { case UCALL_SYNC: TEST_ASSERT(!strcmp((const char *)uc.args[0], "hello") && uc.args[1] =3D=3D stage + 1, @@ -159,14 +159,14 @@ static void set_cpuid_after_run(struct kvm_vcpu *vcpu= , struct kvm_cpuid2 *cpuid) u32 eax, ebx, x; =20 /* Setting unmodified CPUID is allowed */ - rc =3D __vcpu_set_cpuid(vcpu->vm, vcpu->id, cpuid); + rc =3D __vcpu_set_cpuid(vcpu, cpuid); TEST_ASSERT(!rc, "Setting unmodified CPUID after KVM_RUN failed: %d", rc); =20 /* Changing CPU features is forbidden */ ent =3D get_cpuid(cpuid, 0x7, 0); ebx =3D ent->ebx; ent->ebx--; - rc =3D __vcpu_set_cpuid(vcpu->vm, vcpu->id, cpuid); + rc =3D __vcpu_set_cpuid(vcpu, cpuid); TEST_ASSERT(rc, "Changing CPU features should fail"); ent->ebx =3D ebx; =20 @@ -175,7 +175,7 @@ static void set_cpuid_after_run(struct kvm_vcpu *vcpu, = struct kvm_cpuid2 *cpuid) eax =3D ent->eax; x =3D eax & 0xff; ent->eax =3D (eax & ~0xffu) | (x - 1); - rc =3D __vcpu_set_cpuid(vcpu->vm, vcpu->id, cpuid); + rc =3D __vcpu_set_cpuid(vcpu, cpuid); TEST_ASSERT(rc, "Changing MAXPHYADDR should fail"); ent->eax =3D eax; } @@ -191,13 +191,13 @@ int main(void) vm =3D vm_create_with_one_vcpu(&vcpu, guest_main); =20 supp_cpuid =3D kvm_get_supported_cpuid(); - cpuid2 =3D vcpu_get_cpuid(vm, vcpu->id); + cpuid2 =3D vcpu_get_cpuid(vcpu); =20 compare_cpuids(supp_cpuid, cpuid2); =20 vcpu_alloc_cpuid(vm, &cpuid_gva, cpuid2); =20 - vcpu_args_set(vm, vcpu->id, 1, cpuid_gva); + vcpu_args_set(vcpu, 1, cpuid_gva); =20 for (stage =3D 0; stage < 3; stage++) run_vcpu(vcpu, stage); diff --git a/tools/testing/selftests/kvm/x86_64/cr4_cpuid_sync_test.c b/too= ls/testing/selftests/kvm/x86_64/cr4_cpuid_sync_test.c index d5615cd0b81b..1635aae970e9 100644 --- a/tools/testing/selftests/kvm/x86_64/cr4_cpuid_sync_test.c +++ b/tools/testing/selftests/kvm/x86_64/cr4_cpuid_sync_test.c @@ -82,19 +82,19 @@ int main(int argc, char *argv[]) run =3D vcpu->run; =20 while (1) { - vcpu_run(vm, vcpu->id); + vcpu_run(vcpu); =20 TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Unexpected exit reason: %u (%s),\n", run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vm, vcpu->id, &uc)) { + switch (get_ucall(vcpu, &uc)) { case UCALL_SYNC: /* emulate hypervisor clearing CR4.OSXSAVE */ - vcpu_sregs_get(vm, vcpu->id, &sregs); + vcpu_sregs_get(vcpu, &sregs); sregs.cr4 &=3D ~X86_CR4_OSXSAVE; - vcpu_sregs_set(vm, vcpu->id, &sregs); + vcpu_sregs_set(vcpu, &sregs); break; case UCALL_ABORT: TEST_FAIL("Guest CR4 bit (OSXSAVE) unsynchronized with CPUID bit."); diff --git a/tools/testing/selftests/kvm/x86_64/debug_regs.c b/tools/testin= g/selftests/kvm/x86_64/debug_regs.c index 487d0ae3e75f..5f07f86efc76 100644 --- a/tools/testing/selftests/kvm/x86_64/debug_regs.c +++ b/tools/testing/selftests/kvm/x86_64/debug_regs.c @@ -70,9 +70,9 @@ static void vcpu_skip_insn(struct kvm_vcpu *vcpu, int ins= n_len) { struct kvm_regs regs; =20 - vcpu_regs_get(vcpu->vm, vcpu->id, ®s); + vcpu_regs_get(vcpu, ®s); regs.rip +=3D insn_len; - vcpu_regs_set(vcpu->vm, vcpu->id, ®s); + vcpu_regs_set(vcpu, ®s); } =20 int main(void) @@ -106,8 +106,8 @@ int main(void) /* Test software BPs - int3 */ memset(&debug, 0, sizeof(debug)); debug.control =3D KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_USE_SW_BP; - vcpu_set_guest_debug(vm, vcpu->id, &debug); - vcpu_run(vm, vcpu->id); + vcpu_set_guest_debug(vcpu, &debug); + vcpu_run(vcpu); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_DEBUG && run->debug.arch.exception =3D=3D BP_VECTOR && run->debug.arch.pc =3D=3D CAST_TO_RIP(sw_bp), @@ -122,8 +122,8 @@ int main(void) debug.control =3D KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_USE_HW_BP; debug.arch.debugreg[i] =3D CAST_TO_RIP(hw_bp); debug.arch.debugreg[7] =3D 0x400 | (1UL << (2*i+1)); - vcpu_set_guest_debug(vm, vcpu->id, &debug); - vcpu_run(vm, vcpu->id); + vcpu_set_guest_debug(vcpu, &debug); + vcpu_run(vcpu); target_dr6 =3D 0xffff0ff0 | (1UL << i); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_DEBUG && run->debug.arch.exception =3D=3D DB_VECTOR && @@ -145,8 +145,8 @@ int main(void) debug.arch.debugreg[i] =3D CAST_TO_RIP(guest_value); debug.arch.debugreg[7] =3D 0x00000400 | (1UL << (2*i+1)) | (0x000d0000UL << (4*i)); - vcpu_set_guest_debug(vm, vcpu->id, &debug); - vcpu_run(vm, vcpu->id); + vcpu_set_guest_debug(vcpu, &debug); + vcpu_run(vcpu); target_dr6 =3D 0xffff0ff0 | (1UL << i); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_DEBUG && run->debug.arch.exception =3D=3D DB_VECTOR && @@ -172,8 +172,8 @@ int main(void) debug.control =3D KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_SINGLESTEP | KVM_GUESTDBG_BLOCKIRQ; debug.arch.debugreg[7] =3D 0x00000400; - vcpu_set_guest_debug(vm, vcpu->id, &debug); - vcpu_run(vm, vcpu->id); + vcpu_set_guest_debug(vcpu, &debug); + vcpu_run(vcpu); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_DEBUG && run->debug.arch.exception =3D=3D DB_VECTOR && run->debug.arch.pc =3D=3D target_rip && @@ -189,8 +189,8 @@ int main(void) memset(&debug, 0, sizeof(debug)); debug.control =3D KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_USE_HW_BP; debug.arch.debugreg[7] =3D 0x400 | DR7_GD; - vcpu_set_guest_debug(vm, vcpu->id, &debug); - vcpu_run(vm, vcpu->id); + vcpu_set_guest_debug(vcpu, &debug); + vcpu_run(vcpu); target_dr6 =3D 0xffff0ff0 | DR6_BD; TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_DEBUG && run->debug.arch.exception =3D=3D DB_VECTOR && @@ -204,11 +204,11 @@ int main(void) =20 /* Disable all debug controls, run to the end */ memset(&debug, 0, sizeof(debug)); - vcpu_set_guest_debug(vm, vcpu->id, &debug); + vcpu_set_guest_debug(vcpu, &debug); =20 - vcpu_run(vm, vcpu->id); + vcpu_run(vcpu); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "KVM_EXIT_IO"); - cmd =3D get_ucall(vm, vcpu->id, &uc); + cmd =3D get_ucall(vcpu, &uc); TEST_ASSERT(cmd =3D=3D UCALL_DONE, "UCALL_DONE"); =20 kvm_vm_free(vm); diff --git a/tools/testing/selftests/kvm/x86_64/emulator_error_test.c b/too= ls/testing/selftests/kvm/x86_64/emulator_error_test.c index 6a2fe7a9f4a6..2f794755c2df 100644 --- a/tools/testing/selftests/kvm/x86_64/emulator_error_test.c +++ b/tools/testing/selftests/kvm/x86_64/emulator_error_test.c @@ -83,9 +83,9 @@ static void process_exit_on_emulation_error(struct kvm_vc= pu *vcpu) * contained an flds instruction that is 2-bytes in * length (ie: no prefix, no SIB, no displacement). */ - vcpu_regs_get(vcpu->vm, vcpu->id, ®s); + vcpu_regs_get(vcpu, ®s); regs.rip +=3D 2; - vcpu_regs_set(vcpu->vm, vcpu->id, ®s); + vcpu_regs_set(vcpu, ®s); } } } @@ -101,7 +101,7 @@ static void check_for_guest_assert(struct kvm_vcpu *vcp= u) struct ucall uc; =20 if (vcpu->run->exit_reason =3D=3D KVM_EXIT_IO && - get_ucall(vcpu->vm, vcpu->id, &uc) =3D=3D UCALL_ABORT) { + get_ucall(vcpu, &uc) =3D=3D UCALL_ABORT) { do_guest_assert(&uc); } } @@ -118,7 +118,7 @@ static void process_ucall_done(struct kvm_vcpu *vcpu) run->exit_reason, exit_reason_str(run->exit_reason)); =20 - TEST_ASSERT(get_ucall(vcpu->vm, vcpu->id, &uc) =3D=3D UCALL_DONE, + TEST_ASSERT(get_ucall(vcpu, &uc) =3D=3D UCALL_DONE, "Unexpected ucall command: %lu, expected UCALL_DONE (%d)", uc.cmd, UCALL_DONE); } @@ -133,7 +133,7 @@ static uint64_t process_ucall(struct kvm_vcpu *vcpu) run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vcpu->vm, vcpu->id, &uc)) { + switch (get_ucall(vcpu, &uc)) { case UCALL_SYNC: break; case UCALL_ABORT: @@ -179,7 +179,7 @@ int main(int argc, char *argv[]) entry->eax =3D (entry->eax & 0xffffff00) | MAXPHYADDR; set_cpuid(cpuid, entry); =20 - vcpu_set_cpuid(vm, vcpu->id, cpuid); + vcpu_set_cpuid(vcpu, cpuid); =20 rc =3D kvm_check_cap(KVM_CAP_EXIT_ON_EMULATION_FAILURE); TEST_ASSERT(rc, "KVM_CAP_EXIT_ON_EMULATION_FAILURE is unavailable"); @@ -194,12 +194,12 @@ int main(int argc, char *argv[]) virt_map(vm, MEM_REGION_GVA, MEM_REGION_GPA, 1); hva =3D addr_gpa2hva(vm, MEM_REGION_GPA); memset(hva, 0, PAGE_SIZE); - pte =3D vm_get_page_table_entry(vm, vcpu->id, MEM_REGION_GVA); - vm_set_page_table_entry(vm, vcpu->id, MEM_REGION_GVA, pte | (1ull << 36)); + pte =3D vm_get_page_table_entry(vm, vcpu, MEM_REGION_GVA); + vm_set_page_table_entry(vm, vcpu, MEM_REGION_GVA, pte | (1ull << 36)); =20 - vcpu_run(vm, vcpu->id); + vcpu_run(vcpu); process_exit_on_emulation_error(vcpu); - vcpu_run(vm, vcpu->id); + vcpu_run(vcpu); =20 TEST_ASSERT(process_ucall(vcpu) =3D=3D UCALL_DONE, "Expected UCALL_DONE"); =20 diff --git a/tools/testing/selftests/kvm/x86_64/evmcs_test.c b/tools/testin= g/selftests/kvm/x86_64/evmcs_test.c index dc7c1eb28fd4..ee31281b56d8 100644 --- a/tools/testing/selftests/kvm/x86_64/evmcs_test.c +++ b/tools/testing/selftests/kvm/x86_64/evmcs_test.c @@ -163,12 +163,12 @@ void inject_nmi(struct kvm_vcpu *vcpu) { struct kvm_vcpu_events events; =20 - vcpu_events_get(vcpu->vm, vcpu->id, &events); + vcpu_events_get(vcpu, &events); =20 events.nmi.pending =3D 1; events.flags |=3D KVM_VCPUEVENT_VALID_NMI_PENDING; =20 - vcpu_events_set(vcpu->vm, vcpu->id, &events); + vcpu_events_set(vcpu, &events); } =20 static struct kvm_vcpu *save_restore_vm(struct kvm_vm *vm, @@ -177,21 +177,21 @@ static struct kvm_vcpu *save_restore_vm(struct kvm_vm= *vm, struct kvm_regs regs1, regs2; struct kvm_x86_state *state; =20 - state =3D vcpu_save_state(vm, vcpu->id); + state =3D vcpu_save_state(vcpu); memset(®s1, 0, sizeof(regs1)); - vcpu_regs_get(vm, vcpu->id, ®s1); + vcpu_regs_get(vcpu, ®s1); =20 kvm_vm_release(vm); =20 /* Restore state in a new VM. */ vcpu =3D vm_recreate_with_one_vcpu(vm); - vcpu_set_hv_cpuid(vm, vcpu->id); - vcpu_enable_evmcs(vm, vcpu->id); - vcpu_load_state(vm, vcpu->id, state); + vcpu_set_hv_cpuid(vcpu); + vcpu_enable_evmcs(vcpu); + vcpu_load_state(vcpu, state); kvm_x86_state_cleanup(state); =20 memset(®s2, 0, sizeof(regs2)); - vcpu_regs_get(vm, vcpu->id, ®s2); + vcpu_regs_get(vcpu, ®s2); TEST_ASSERT(!memcmp(®s1, ®s2, sizeof(regs2)), "Unexpected register values after vcpu_load_state; rdi: %lx rsi: %lx= ", (ulong) regs2.rdi, (ulong) regs2.rsi); @@ -217,14 +217,14 @@ int main(int argc, char *argv[]) exit(KSFT_SKIP); } =20 - vcpu_set_hv_cpuid(vm, vcpu->id); - vcpu_enable_evmcs(vm, vcpu->id); + vcpu_set_hv_cpuid(vcpu); + vcpu_enable_evmcs(vcpu); =20 vcpu_alloc_vmx(vm, &vmx_pages_gva); - vcpu_args_set(vm, vcpu->id, 1, vmx_pages_gva); + vcpu_args_set(vcpu, 1, vmx_pages_gva); =20 vm_init_descriptor_tables(vm); - vcpu_init_descriptor_tables(vm, vcpu->id); + vcpu_init_descriptor_tables(vcpu); vm_install_exception_handler(vm, UD_VECTOR, guest_ud_handler); vm_install_exception_handler(vm, NMI_VECTOR, guest_nmi_handler); =20 @@ -233,13 +233,13 @@ int main(int argc, char *argv[]) for (stage =3D 1;; stage++) { run =3D vcpu->run; =20 - vcpu_run(vm, vcpu->id); + vcpu_run(vcpu); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Stage %d: unexpected exit reason: %u (%s),\n", stage, run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vm, vcpu->id, &uc)) { + switch (get_ucall(vcpu, &uc)) { case UCALL_ABORT: TEST_FAIL("%s at %s:%ld", (const char *)uc.args[0], __FILE__, uc.args[1]); diff --git a/tools/testing/selftests/kvm/x86_64/fix_hypercall_test.c b/tool= s/testing/selftests/kvm/x86_64/fix_hypercall_test.c index 565c4ab8dbb7..3b7ab04f554c 100644 --- a/tools/testing/selftests/kvm/x86_64/fix_hypercall_test.c +++ b/tools/testing/selftests/kvm/x86_64/fix_hypercall_test.c @@ -95,7 +95,7 @@ static void guest_main(void) static void setup_ud_vector(struct kvm_vcpu *vcpu) { vm_init_descriptor_tables(vcpu->vm); - vcpu_init_descriptor_tables(vcpu->vm, vcpu->id); + vcpu_init_descriptor_tables(vcpu); vm_install_exception_handler(vcpu->vm, UD_VECTOR, guest_ud_handler); } =20 @@ -104,8 +104,8 @@ static void enter_guest(struct kvm_vcpu *vcpu) struct kvm_run *run =3D vcpu->run; struct ucall uc; =20 - vcpu_run(vcpu->vm, vcpu->id); - switch (get_ucall(vcpu->vm, vcpu->id, &uc)) { + vcpu_run(vcpu); + switch (get_ucall(vcpu, &uc)) { case UCALL_SYNC: pr_info("%s: %016lx\n", (const char *)uc.args[2], uc.args[3]); break; diff --git a/tools/testing/selftests/kvm/x86_64/hyperv_clock.c b/tools/test= ing/selftests/kvm/x86_64/hyperv_clock.c index 43584ddc4de0..c2e37705e5c8 100644 --- a/tools/testing/selftests/kvm/x86_64/hyperv_clock.c +++ b/tools/testing/selftests/kvm/x86_64/hyperv_clock.c @@ -176,15 +176,15 @@ static void host_check_tsc_msr_rdtsc(struct kvm_vcpu = *vcpu) u64 tsc_freq, r1, r2, t1, t2; s64 delta_ns; =20 - tsc_freq =3D vcpu_get_msr(vcpu->vm, vcpu->id, HV_X64_MSR_TSC_FREQUENCY); + tsc_freq =3D vcpu_get_msr(vcpu, HV_X64_MSR_TSC_FREQUENCY); TEST_ASSERT(tsc_freq > 0, "TSC frequency must be nonzero"); =20 /* First, check MSR-based clocksource */ r1 =3D rdtsc(); - t1 =3D vcpu_get_msr(vcpu->vm, vcpu->id, HV_X64_MSR_TIME_REF_COUNT); + t1 =3D vcpu_get_msr(vcpu, HV_X64_MSR_TIME_REF_COUNT); nop_loop(); r2 =3D rdtsc(); - t2 =3D vcpu_get_msr(vcpu->vm, vcpu->id, HV_X64_MSR_TIME_REF_COUNT); + t2 =3D vcpu_get_msr(vcpu, HV_X64_MSR_TIME_REF_COUNT); =20 TEST_ASSERT(t2 > t1, "Time reference MSR is not monotonic (%ld <=3D %ld)"= , t1, t2); =20 @@ -211,24 +211,24 @@ int main(void) vm =3D vm_create_with_one_vcpu(&vcpu, guest_main); run =3D vcpu->run; =20 - vcpu_set_hv_cpuid(vm, vcpu->id); + vcpu_set_hv_cpuid(vcpu); =20 tsc_page_gva =3D vm_vaddr_alloc_page(vm); memset(addr_gva2hva(vm, tsc_page_gva), 0x0, getpagesize()); TEST_ASSERT((addr_gva2gpa(vm, tsc_page_gva) & (getpagesize() - 1)) =3D=3D= 0, "TSC page has to be page aligned\n"); - vcpu_args_set(vm, vcpu->id, 2, tsc_page_gva, addr_gva2gpa(vm, tsc_page_gv= a)); + vcpu_args_set(vcpu, 2, tsc_page_gva, addr_gva2gpa(vm, tsc_page_gva)); =20 host_check_tsc_msr_rdtsc(vcpu); =20 for (stage =3D 1;; stage++) { - vcpu_run(vm, vcpu->id); + vcpu_run(vcpu); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Stage %d: unexpected exit reason: %u (%s),\n", stage, run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vm, vcpu->id, &uc)) { + switch (get_ucall(vcpu, &uc)) { case UCALL_ABORT: TEST_FAIL("%s at %s:%ld", (const char *)uc.args[0], __FILE__, uc.args[1]); diff --git a/tools/testing/selftests/kvm/x86_64/hyperv_cpuid.c b/tools/test= ing/selftests/kvm/x86_64/hyperv_cpuid.c index d1a22ee98cf3..af13c48f0f30 100644 --- a/tools/testing/selftests/kvm/x86_64/hyperv_cpuid.c +++ b/tools/testing/selftests/kvm/x86_64/hyperv_cpuid.c @@ -119,7 +119,7 @@ void test_hv_cpuid_e2big(struct kvm_vm *vm, struct kvm_= vcpu *vcpu) int ret; =20 if (vcpu) - ret =3D __vcpu_ioctl(vm, vcpu->id, KVM_GET_SUPPORTED_HV_CPUID, &cpuid); + ret =3D __vcpu_ioctl(vcpu, KVM_GET_SUPPORTED_HV_CPUID, &cpuid); else ret =3D __kvm_ioctl(vm_get_kvm_fd(vm), KVM_GET_SUPPORTED_HV_CPUID, &cpui= d); =20 @@ -147,7 +147,7 @@ int main(int argc, char *argv[]) /* Test vCPU ioctl version */ test_hv_cpuid_e2big(vm, vcpu); =20 - hv_cpuid_entries =3D vcpu_get_supported_hv_cpuid(vm, vcpu->id); + hv_cpuid_entries =3D vcpu_get_supported_hv_cpuid(vcpu); test_hv_cpuid(hv_cpuid_entries, false); free(hv_cpuid_entries); =20 @@ -156,8 +156,8 @@ int main(int argc, char *argv[]) print_skip("Enlightened VMCS is unsupported"); goto do_sys; } - vcpu_enable_evmcs(vm, vcpu->id); - hv_cpuid_entries =3D vcpu_get_supported_hv_cpuid(vm, vcpu->id); + vcpu_enable_evmcs(vcpu); + hv_cpuid_entries =3D vcpu_get_supported_hv_cpuid(vcpu); test_hv_cpuid(hv_cpuid_entries, true); free(hv_cpuid_entries); =20 diff --git a/tools/testing/selftests/kvm/x86_64/hyperv_features.c b/tools/t= esting/selftests/kvm/x86_64/hyperv_features.c index 52686e2f8d53..d2479f379e28 100644 --- a/tools/testing/selftests/kvm/x86_64/hyperv_features.c +++ b/tools/testing/selftests/kvm/x86_64/hyperv_features.c @@ -161,7 +161,7 @@ static void hv_set_cpuid(struct kvm_vcpu *vcpu, struct = kvm_cpuid2 *cpuid, "failed to set HYPERV_CPUID_ENLIGHTMENT_INFO leaf"); TEST_ASSERT(set_cpuid(cpuid, dbg), "failed to set HYPERV_CPUID_SYNDBG_PLATFORM_CAPABILITIES leaf"); - vcpu_set_cpuid(vcpu->vm, vcpu->id, cpuid); + vcpu_set_cpuid(vcpu, cpuid); } =20 static void guest_test_msrs_access(void) @@ -195,15 +195,15 @@ static void guest_test_msrs_access(void) memset(addr_gva2hva(vm, msr_gva), 0x0, getpagesize()); msr =3D addr_gva2hva(vm, msr_gva); =20 - vcpu_args_set(vm, vcpu->id, 1, msr_gva); - vcpu_enable_cap(vm, vcpu->id, &cap); + vcpu_args_set(vcpu, 1, msr_gva); + vcpu_enable_cap(vcpu, &cap); =20 - vcpu_set_hv_cpuid(vm, vcpu->id); + vcpu_set_hv_cpuid(vcpu); =20 best =3D kvm_get_supported_hv_cpuid(); =20 vm_init_descriptor_tables(vm); - vcpu_init_descriptor_tables(vm, vcpu->id); + vcpu_init_descriptor_tables(vcpu); vm_install_exception_handler(vm, GP_VECTOR, guest_gp_handler); =20 run =3D vcpu->run; @@ -339,7 +339,7 @@ static void guest_test_msrs_access(void) */ cap.cap =3D KVM_CAP_HYPERV_SYNIC2; cap.args[0] =3D 0; - vcpu_enable_cap(vm, vcpu->id, &cap); + vcpu_enable_cap(vcpu, &cap); break; case 22: feat.eax |=3D HV_MSR_SYNIC_AVAILABLE; @@ -477,12 +477,12 @@ static void guest_test_msrs_access(void) else pr_debug("Stage %d: finish\n", stage); =20 - vcpu_run(vm, vcpu->id); + vcpu_run(vcpu); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "unexpected exit reason: %u (%s)", run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vm, vcpu->id, &uc)) { + switch (get_ucall(vcpu, &uc)) { case UCALL_SYNC: TEST_ASSERT(uc.args[1] =3D=3D 0, "Unexpected stage: %ld (0 expected)\n", @@ -530,7 +530,7 @@ static void guest_test_hcalls_access(void) vm =3D vm_create_with_one_vcpu(&vcpu, guest_hcall); =20 vm_init_descriptor_tables(vm); - vcpu_init_descriptor_tables(vm, vcpu->id); + vcpu_init_descriptor_tables(vcpu); vm_install_exception_handler(vm, UD_VECTOR, guest_ud_handler); =20 /* Hypercall input/output */ @@ -541,10 +541,10 @@ static void guest_test_hcalls_access(void) hcall_params =3D vm_vaddr_alloc_page(vm); memset(addr_gva2hva(vm, hcall_params), 0x0, getpagesize()); =20 - vcpu_args_set(vm, vcpu->id, 2, addr_gva2gpa(vm, hcall_page), hcall_param= s); - vcpu_enable_cap(vm, vcpu->id, &cap); + vcpu_args_set(vcpu, 2, addr_gva2gpa(vm, hcall_page), hcall_params); + vcpu_enable_cap(vcpu, &cap); =20 - vcpu_set_hv_cpuid(vm, vcpu->id); + vcpu_set_hv_cpuid(vcpu); =20 best =3D kvm_get_supported_hv_cpuid(); =20 @@ -651,12 +651,12 @@ static void guest_test_hcalls_access(void) else pr_debug("Stage %d: finish\n", stage); =20 - vcpu_run(vm, vcpu->id); + vcpu_run(vcpu); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "unexpected exit reason: %u (%s)", run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vm, vcpu->id, &uc)) { + switch (get_ucall(vcpu, &uc)) { case UCALL_SYNC: TEST_ASSERT(uc.args[1] =3D=3D 0, "Unexpected stage: %ld (0 expected)\n", diff --git a/tools/testing/selftests/kvm/x86_64/hyperv_svm_test.c b/tools/t= esting/selftests/kvm/x86_64/hyperv_svm_test.c index 46f1070e7297..02b3e2f3dff3 100644 --- a/tools/testing/selftests/kvm/x86_64/hyperv_svm_test.c +++ b/tools/testing/selftests/kvm/x86_64/hyperv_svm_test.c @@ -138,19 +138,19 @@ int main(int argc, char *argv[]) } /* Create VM */ vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); - vcpu_set_hv_cpuid(vm, vcpu->id); + vcpu_set_hv_cpuid(vcpu); run =3D vcpu->run; vcpu_alloc_svm(vm, &nested_gva); - vcpu_args_set(vm, vcpu->id, 1, nested_gva); + vcpu_args_set(vcpu, 1, nested_gva); =20 for (stage =3D 1;; stage++) { - vcpu_run(vm, vcpu->id); + vcpu_run(vcpu); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Stage %d: unexpected exit reason: %u (%s),\n", stage, run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vm, vcpu->id, &uc)) { + switch (get_ucall(vcpu, &uc)) { case UCALL_ABORT: TEST_FAIL("%s at %s:%ld", (const char *)uc.args[0], __FILE__, uc.args[1]); diff --git a/tools/testing/selftests/kvm/x86_64/kvm_clock_test.c b/tools/te= sting/selftests/kvm/x86_64/kvm_clock_test.c index 2c1f850c4053..6e3c4bd60b76 100644 --- a/tools/testing/selftests/kvm/x86_64/kvm_clock_test.c +++ b/tools/testing/selftests/kvm/x86_64/kvm_clock_test.c @@ -116,14 +116,14 @@ static void enter_guest(struct kvm_vcpu *vcpu) =20 vm_ioctl(vm, KVM_GET_CLOCK, &start); =20 - vcpu_run(vcpu->vm, vcpu->id); + vcpu_run(vcpu); vm_ioctl(vm, KVM_GET_CLOCK, &end); =20 TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "unexpected exit reason: %u (%s)", run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vcpu->vm, vcpu->id, &uc)) { + switch (get_ucall(vcpu, &uc)) { case UCALL_SYNC: handle_sync(&uc, &start, &end); break; @@ -193,7 +193,7 @@ int main(void) =20 pvti_gva =3D vm_vaddr_alloc(vm, getpagesize(), 0x10000); pvti_gpa =3D addr_gva2gpa(vm, pvti_gva); - vcpu_args_set(vm, vcpu->id, 2, pvti_gpa, pvti_gva); + vcpu_args_set(vcpu, 2, pvti_gpa, pvti_gva); =20 enter_guest(vcpu); kvm_vm_free(vm); diff --git a/tools/testing/selftests/kvm/x86_64/kvm_pv_test.c b/tools/testi= ng/selftests/kvm/x86_64/kvm_pv_test.c index cce9016e31a7..79cab212772c 100644 --- a/tools/testing/selftests/kvm/x86_64/kvm_pv_test.c +++ b/tools/testing/selftests/kvm/x86_64/kvm_pv_test.c @@ -177,12 +177,12 @@ static void enter_guest(struct kvm_vcpu *vcpu) struct ucall uc; =20 while (true) { - vcpu_run(vcpu->vm, vcpu->id); + vcpu_run(vcpu); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "unexpected exit reason: %u (%s)", run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vcpu->vm, vcpu->id, &uc)) { + switch (get_ucall(vcpu, &uc)) { case UCALL_PR_MSR: pr_msr(&uc); break; @@ -214,14 +214,14 @@ int main(void) =20 cap.cap =3D KVM_CAP_ENFORCE_PV_FEATURE_CPUID; cap.args[0] =3D 1; - vcpu_enable_cap(vm, vcpu->id, &cap); + vcpu_enable_cap(vcpu, &cap); =20 best =3D kvm_get_supported_cpuid(); clear_kvm_cpuid_features(best); - vcpu_set_cpuid(vm, vcpu->id, best); + vcpu_set_cpuid(vcpu, best); =20 vm_init_descriptor_tables(vm); - vcpu_init_descriptor_tables(vm, vcpu->id); + vcpu_init_descriptor_tables(vcpu); vm_install_exception_handler(vm, GP_VECTOR, guest_gp_handler); =20 enter_guest(vcpu); diff --git a/tools/testing/selftests/kvm/x86_64/mmu_role_test.c b/tools/tes= ting/selftests/kvm/x86_64/mmu_role_test.c index 809aa0153cee..62e674095bd2 100644 --- a/tools/testing/selftests/kvm/x86_64/mmu_role_test.c +++ b/tools/testing/selftests/kvm/x86_64/mmu_role_test.c @@ -35,7 +35,7 @@ static void mmu_role_test(u32 *cpuid_reg, u32 evil_cpuid_= val) /* Map 1gb page without a backing memlot. */ __virt_pg_map(vm, MMIO_GPA, MMIO_GPA, X86_PAGE_SIZE_1G); =20 - vcpu_run(vm, vcpu->id); + vcpu_run(vcpu); =20 /* Guest access to the 1gb page should trigger MMIO. */ TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_MMIO, @@ -54,7 +54,7 @@ static void mmu_role_test(u32 *cpuid_reg, u32 evil_cpuid_= val) * returns the struct that contains the entry being modified. Eww. */ *cpuid_reg =3D evil_cpuid_val; - vcpu_set_cpuid(vm, vcpu->id, kvm_get_supported_cpuid()); + vcpu_set_cpuid(vcpu, kvm_get_supported_cpuid()); =20 /* * Add a dummy memslot to coerce KVM into bumping the MMIO generation. @@ -67,12 +67,12 @@ static void mmu_role_test(u32 *cpuid_reg, u32 evil_cpui= d_val) =20 /* Set up a #PF handler to eat the RSVD #PF and signal all done! */ vm_init_descriptor_tables(vm); - vcpu_init_descriptor_tables(vm, vcpu->id); + vcpu_init_descriptor_tables(vcpu); vm_install_exception_handler(vm, PF_VECTOR, guest_pf_handler); =20 - vcpu_run(vm, vcpu->id); + vcpu_run(vcpu); =20 - cmd =3D get_ucall(vm, vcpu->id, NULL); + cmd =3D get_ucall(vcpu, NULL); TEST_ASSERT(cmd =3D=3D UCALL_DONE, "Unexpected guest exit, exit_reason=3D%s, ucall.cmd =3D %lu\n", exit_reason_str(run->exit_reason), cmd); diff --git a/tools/testing/selftests/kvm/x86_64/platform_info_test.c b/tool= s/testing/selftests/kvm/x86_64/platform_info_test.c index 0468a51c05f6..68fb086a8451 100644 --- a/tools/testing/selftests/kvm/x86_64/platform_info_test.c +++ b/tools/testing/selftests/kvm/x86_64/platform_info_test.c @@ -50,12 +50,12 @@ static void test_msr_platform_info_enabled(struct kvm_v= cpu *vcpu) struct ucall uc; =20 set_msr_platform_info_enabled(vcpu->vm, true); - vcpu_run(vcpu->vm, vcpu->id); + vcpu_run(vcpu); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Exit_reason other than KVM_EXIT_IO: %u (%s),\n", run->exit_reason, exit_reason_str(run->exit_reason)); - get_ucall(vcpu->vm, vcpu->id, &uc); + get_ucall(vcpu, &uc); TEST_ASSERT(uc.cmd =3D=3D UCALL_SYNC, "Received ucall other than UCALL_SYNC: %lu\n", uc.cmd); TEST_ASSERT((uc.args[1] & MSR_PLATFORM_INFO_MAX_TURBO_RATIO) =3D=3D @@ -69,7 +69,7 @@ static void test_msr_platform_info_disabled(struct kvm_vc= pu *vcpu) struct kvm_run *run =3D vcpu->run; =20 set_msr_platform_info_enabled(vcpu->vm, false); - vcpu_run(vcpu->vm, vcpu->id); + vcpu_run(vcpu); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_SHUTDOWN, "Exit_reason other than KVM_EXIT_SHUTDOWN: %u (%s)\n", run->exit_reason, @@ -94,12 +94,12 @@ int main(int argc, char *argv[]) =20 vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); =20 - msr_platform_info =3D vcpu_get_msr(vm, vcpu->id, MSR_PLATFORM_INFO); - vcpu_set_msr(vm, vcpu->id, MSR_PLATFORM_INFO, - msr_platform_info | MSR_PLATFORM_INFO_MAX_TURBO_RATIO); + msr_platform_info =3D vcpu_get_msr(vcpu, MSR_PLATFORM_INFO); + vcpu_set_msr(vcpu, MSR_PLATFORM_INFO, + msr_platform_info | MSR_PLATFORM_INFO_MAX_TURBO_RATIO); test_msr_platform_info_enabled(vcpu); test_msr_platform_info_disabled(vcpu); - vcpu_set_msr(vm, vcpu->id, MSR_PLATFORM_INFO, msr_platform_info); + vcpu_set_msr(vcpu, MSR_PLATFORM_INFO, msr_platform_info); =20 kvm_vm_free(vm); =20 diff --git a/tools/testing/selftests/kvm/x86_64/pmu_event_filter_test.c b/t= ools/testing/selftests/kvm/x86_64/pmu_event_filter_test.c index e0eed19f669e..592ff0304180 100644 --- a/tools/testing/selftests/kvm/x86_64/pmu_event_filter_test.c +++ b/tools/testing/selftests/kvm/x86_64/pmu_event_filter_test.c @@ -177,12 +177,12 @@ static uint64_t run_vcpu_to_sync(struct kvm_vcpu *vcp= u) struct kvm_run *run =3D vcpu->run; struct ucall uc; =20 - vcpu_run(vcpu->vm, vcpu->id); + vcpu_run(vcpu); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Exit_reason other than KVM_EXIT_IO: %u (%s)\n", run->exit_reason, exit_reason_str(run->exit_reason)); - get_ucall(vcpu->vm, vcpu->id, &uc); + get_ucall(vcpu, &uc); TEST_ASSERT(uc.cmd =3D=3D UCALL_SYNC, "Received ucall other than UCALL_SYNC: %lu", uc.cmd); return uc.args[1]; @@ -348,7 +348,7 @@ static void test_pmu_config_disable(void (*guest_code)(= void)) =20 vcpu =3D vm_vcpu_add(vm, 0, guest_code); vm_init_descriptor_tables(vm); - vcpu_init_descriptor_tables(vm, vcpu->id); + vcpu_init_descriptor_tables(vcpu); =20 TEST_ASSERT(!sanity_check_pmu(vcpu), "Guest should not be able to use disabled PMU."); @@ -447,7 +447,7 @@ int main(int argc, char *argv[]) vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); =20 vm_init_descriptor_tables(vm); - vcpu_init_descriptor_tables(vm, vcpu->id); + vcpu_init_descriptor_tables(vcpu); =20 if (!sanity_check_pmu(vcpu)) { print_skip("Guest PMU is not functional"); diff --git a/tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c b/tools/t= esting/selftests/kvm/x86_64/set_boot_cpu_id.c index b11f12888fad..afc063178c6a 100644 --- a/tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c +++ b/tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c @@ -49,9 +49,9 @@ static void run_vcpu(struct kvm_vcpu *vcpu) =20 for (stage =3D 0; stage < 2; stage++) { =20 - vcpu_run(vcpu->vm, vcpu->id); + vcpu_run(vcpu); =20 - switch (get_ucall(vcpu->vm, vcpu->id, &uc)) { + switch (get_ucall(vcpu, &uc)) { case UCALL_SYNC: TEST_ASSERT(!strcmp((const char *)uc.args[0], "hello") && uc.args[1] =3D=3D stage + 1, diff --git a/tools/testing/selftests/kvm/x86_64/set_sregs_test.c b/tools/te= sting/selftests/kvm/x86_64/set_sregs_test.c index 2e67df3a95ba..dd344439ad33 100644 --- a/tools/testing/selftests/kvm/x86_64/set_sregs_test.c +++ b/tools/testing/selftests/kvm/x86_64/set_sregs_test.c @@ -35,11 +35,11 @@ static void test_cr4_feature_bit(struct kvm_vcpu *vcpu,= struct kvm_sregs *orig, memcpy(&sregs, orig, sizeof(sregs)); sregs.cr4 |=3D feature_bit; =20 - rc =3D _vcpu_sregs_set(vcpu->vm, vcpu->id, &sregs); + rc =3D _vcpu_sregs_set(vcpu, &sregs); TEST_ASSERT(rc, "KVM allowed unsupported CR4 bit (0x%lx)", feature_bit); =20 /* Sanity check that KVM didn't change anything. */ - vcpu_sregs_get(vcpu->vm, vcpu->id, &sregs); + vcpu_sregs_get(vcpu, &sregs); TEST_ASSERT(!memcmp(&sregs, orig, sizeof(sregs)), "KVM modified sregs"); } =20 @@ -97,15 +97,15 @@ int main(int argc, char *argv[]) vm =3D vm_create_barebones(); vcpu =3D __vm_vcpu_add(vm, 0); =20 - vcpu_sregs_get(vm, vcpu->id, &sregs); + vcpu_sregs_get(vcpu, &sregs); =20 sregs.cr4 |=3D calc_cr4_feature_bits(vm); cr4 =3D sregs.cr4; =20 - rc =3D _vcpu_sregs_set(vm, vcpu->id, &sregs); + rc =3D _vcpu_sregs_set(vcpu, &sregs); TEST_ASSERT(!rc, "Failed to set supported CR4 bits (0x%lx)", cr4); =20 - vcpu_sregs_get(vm, vcpu->id, &sregs); + vcpu_sregs_get(vcpu, &sregs); TEST_ASSERT(sregs.cr4 =3D=3D cr4, "sregs.CR4 (0x%llx) !=3D CR4 (0x%lx)", sregs.cr4, cr4); =20 @@ -125,13 +125,13 @@ int main(int argc, char *argv[]) /* Create a "real" VM and verify APIC_BASE can be set. */ vm =3D vm_create_with_one_vcpu(&vcpu, NULL); =20 - vcpu_sregs_get(vm, vcpu->id, &sregs); + vcpu_sregs_get(vcpu, &sregs); sregs.apic_base =3D 1 << 10; - rc =3D _vcpu_sregs_set(vm, vcpu->id, &sregs); + rc =3D _vcpu_sregs_set(vcpu, &sregs); TEST_ASSERT(rc, "Set IA32_APIC_BASE to %llx (invalid)", sregs.apic_base); sregs.apic_base =3D 1 << 11; - rc =3D _vcpu_sregs_set(vm, vcpu->id, &sregs); + rc =3D _vcpu_sregs_set(vcpu, &sregs); TEST_ASSERT(!rc, "Couldn't set IA32_APIC_BASE to %llx (valid)", sregs.apic_base); =20 diff --git a/tools/testing/selftests/kvm/x86_64/smm_test.c b/tools/testing/= selftests/kvm/x86_64/smm_test.c index 36165b774a28..3cd1da388b52 100644 --- a/tools/testing/selftests/kvm/x86_64/smm_test.c +++ b/tools/testing/selftests/kvm/x86_64/smm_test.c @@ -118,12 +118,12 @@ void inject_smi(struct kvm_vcpu *vcpu) { struct kvm_vcpu_events events; =20 - vcpu_events_get(vcpu->vm, vcpu->id, &events); + vcpu_events_get(vcpu, &events); =20 events.smi.pending =3D 1; events.flags |=3D KVM_VCPUEVENT_VALID_SMM; =20 - vcpu_events_set(vcpu->vm, vcpu->id, &events); + vcpu_events_set(vcpu, &events); } =20 int main(int argc, char *argv[]) @@ -151,7 +151,7 @@ int main(int argc, char *argv[]) memcpy(addr_gpa2hva(vm, SMRAM_GPA) + 0x8000, smi_handler, sizeof(smi_handler)); =20 - vcpu_set_msr(vm, vcpu->id, MSR_IA32_SMBASE, SMRAM_GPA); + vcpu_set_msr(vcpu, MSR_IA32_SMBASE, SMRAM_GPA); =20 if (kvm_check_cap(KVM_CAP_NESTED_STATE)) { if (nested_svm_supported()) @@ -163,17 +163,17 @@ int main(int argc, char *argv[]) if (!nested_gva) pr_info("will skip SMM test with VMX enabled\n"); =20 - vcpu_args_set(vm, vcpu->id, 1, nested_gva); + vcpu_args_set(vcpu, 1, nested_gva); =20 for (stage =3D 1;; stage++) { - vcpu_run(vm, vcpu->id); + vcpu_run(vcpu); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Stage %d: unexpected exit reason: %u (%s),\n", stage, run->exit_reason, exit_reason_str(run->exit_reason)); =20 memset(®s, 0, sizeof(regs)); - vcpu_regs_get(vm, vcpu->id, ®s); + vcpu_regs_get(vcpu, ®s); =20 stage_reported =3D regs.rax & 0xff; =20 @@ -201,12 +201,12 @@ int main(int argc, char *argv[]) if (stage =3D=3D 10) inject_smi(vcpu); =20 - state =3D vcpu_save_state(vm, vcpu->id); + state =3D vcpu_save_state(vcpu); kvm_vm_release(vm); =20 vcpu =3D vm_recreate_with_one_vcpu(vm); - vcpu_set_cpuid(vm, vcpu->id, kvm_get_supported_cpuid()); - vcpu_load_state(vm, vcpu->id, state); + vcpu_set_cpuid(vcpu, kvm_get_supported_cpuid()); + vcpu_load_state(vcpu, state); run =3D vcpu->run; kvm_x86_state_cleanup(state); } diff --git a/tools/testing/selftests/kvm/x86_64/state_test.c b/tools/testin= g/selftests/kvm/x86_64/state_test.c index b7869efad22a..0bcd78cf7c79 100644 --- a/tools/testing/selftests/kvm/x86_64/state_test.c +++ b/tools/testing/selftests/kvm/x86_64/state_test.c @@ -167,7 +167,7 @@ int main(int argc, char *argv[]) vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); run =3D vcpu->run; =20 - vcpu_regs_get(vm, vcpu->id, ®s1); + vcpu_regs_get(vcpu, ®s1); =20 if (kvm_check_cap(KVM_CAP_NESTED_STATE)) { if (nested_svm_supported()) @@ -179,16 +179,16 @@ int main(int argc, char *argv[]) if (!nested_gva) pr_info("will skip nested state checks\n"); =20 - vcpu_args_set(vm, vcpu->id, 1, nested_gva); + vcpu_args_set(vcpu, 1, nested_gva); =20 for (stage =3D 1;; stage++) { - vcpu_run(vm, vcpu->id); + vcpu_run(vcpu); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Stage %d: unexpected exit reason: %u (%s),\n", stage, run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vm, vcpu->id, &uc)) { + switch (get_ucall(vcpu, &uc)) { case UCALL_ABORT: TEST_FAIL("%s at %s:%ld", (const char *)uc.args[0], __FILE__, uc.args[1]); @@ -206,21 +206,21 @@ int main(int argc, char *argv[]) uc.args[1] =3D=3D stage, "Stage %d: Unexpected register values vmex= it, got %lx", stage, (ulong)uc.args[1]); =20 - state =3D vcpu_save_state(vm, vcpu->id); + state =3D vcpu_save_state(vcpu); memset(®s1, 0, sizeof(regs1)); - vcpu_regs_get(vm, vcpu->id, ®s1); + vcpu_regs_get(vcpu, ®s1); =20 kvm_vm_release(vm); =20 /* Restore state in a new VM. */ vcpu =3D vm_recreate_with_one_vcpu(vm); - vcpu_set_cpuid(vm, vcpu->id, kvm_get_supported_cpuid()); - vcpu_load_state(vm, vcpu->id, state); + vcpu_set_cpuid(vcpu, kvm_get_supported_cpuid()); + vcpu_load_state(vcpu, state); run =3D vcpu->run; kvm_x86_state_cleanup(state); =20 memset(®s2, 0, sizeof(regs2)); - vcpu_regs_get(vm, vcpu->id, ®s2); + vcpu_regs_get(vcpu, ®s2); TEST_ASSERT(!memcmp(®s1, ®s2, sizeof(regs2)), "Unexpected register values after vcpu_load_state; rdi: %lx rsi: %l= x", (ulong) regs2.rdi, (ulong) regs2.rsi); diff --git a/tools/testing/selftests/kvm/x86_64/svm_int_ctl_test.c b/tools/= testing/selftests/kvm/x86_64/svm_int_ctl_test.c index 8e90e463895a..9c68a47b69e1 100644 --- a/tools/testing/selftests/kvm/x86_64/svm_int_ctl_test.c +++ b/tools/testing/selftests/kvm/x86_64/svm_int_ctl_test.c @@ -95,23 +95,23 @@ int main(int argc, char *argv[]) vm =3D vm_create_with_one_vcpu(&vcpu, l1_guest_code); =20 vm_init_descriptor_tables(vm); - vcpu_init_descriptor_tables(vm, vcpu->id); + vcpu_init_descriptor_tables(vcpu); =20 vm_install_exception_handler(vm, VINTR_IRQ_NUMBER, vintr_irq_handler); vm_install_exception_handler(vm, INTR_IRQ_NUMBER, intr_irq_handler); =20 vcpu_alloc_svm(vm, &svm_gva); - vcpu_args_set(vm, vcpu->id, 1, svm_gva); + vcpu_args_set(vcpu, 1, svm_gva); =20 run =3D vcpu->run; =20 - vcpu_run(vm, vcpu->id); + vcpu_run(vcpu); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Got exit_reason other than KVM_EXIT_IO: %u (%s)\n", run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vm, vcpu->id, &uc)) { + switch (get_ucall(vcpu, &uc)) { case UCALL_ABORT: TEST_FAIL("%s", (const char *)uc.args[0]); break; diff --git a/tools/testing/selftests/kvm/x86_64/svm_vmcall_test.c b/tools/t= esting/selftests/kvm/x86_64/svm_vmcall_test.c index 15e389a7cd31..e6d7191866a5 100644 --- a/tools/testing/selftests/kvm/x86_64/svm_vmcall_test.c +++ b/tools/testing/selftests/kvm/x86_64/svm_vmcall_test.c @@ -44,19 +44,19 @@ int main(int argc, char *argv[]) vm =3D vm_create_with_one_vcpu(&vcpu, l1_guest_code); =20 vcpu_alloc_svm(vm, &svm_gva); - vcpu_args_set(vm, vcpu->id, 1, svm_gva); + vcpu_args_set(vcpu, 1, svm_gva); =20 for (;;) { volatile struct kvm_run *run =3D vcpu->run; struct ucall uc; =20 - vcpu_run(vm, vcpu->id); + vcpu_run(vcpu); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Got exit_reason other than KVM_EXIT_IO: %u (%s)\n", run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vm, vcpu->id, &uc)) { + switch (get_ucall(vcpu, &uc)) { case UCALL_ABORT: TEST_FAIL("%s", (const char *)uc.args[0]); /* NOT REACHED */ diff --git a/tools/testing/selftests/kvm/x86_64/sync_regs_test.c b/tools/te= sting/selftests/kvm/x86_64/sync_regs_test.c index c971706b49f5..773db9d4f228 100644 --- a/tools/testing/selftests/kvm/x86_64/sync_regs_test.c +++ b/tools/testing/selftests/kvm/x86_64/sync_regs_test.c @@ -109,14 +109,14 @@ int main(int argc, char *argv[]) =20 /* Request reading invalid register set from VCPU. */ run->kvm_valid_regs =3D INVALID_SYNC_FIELD; - rv =3D _vcpu_run(vm, vcpu->id); + rv =3D _vcpu_run(vcpu); TEST_ASSERT(rv < 0 && errno =3D=3D EINVAL, "Invalid kvm_valid_regs did not cause expected KVM_RUN error: %d\n", rv); run->kvm_valid_regs =3D 0; =20 run->kvm_valid_regs =3D INVALID_SYNC_FIELD | TEST_SYNC_FIELDS; - rv =3D _vcpu_run(vm, vcpu->id); + rv =3D _vcpu_run(vcpu); TEST_ASSERT(rv < 0 && errno =3D=3D EINVAL, "Invalid kvm_valid_regs did not cause expected KVM_RUN error: %d\n", rv); @@ -124,14 +124,14 @@ int main(int argc, char *argv[]) =20 /* Request setting invalid register set into VCPU. */ run->kvm_dirty_regs =3D INVALID_SYNC_FIELD; - rv =3D _vcpu_run(vm, vcpu->id); + rv =3D _vcpu_run(vcpu); TEST_ASSERT(rv < 0 && errno =3D=3D EINVAL, "Invalid kvm_dirty_regs did not cause expected KVM_RUN error: %d\n", rv); run->kvm_dirty_regs =3D 0; =20 run->kvm_dirty_regs =3D INVALID_SYNC_FIELD | TEST_SYNC_FIELDS; - rv =3D _vcpu_run(vm, vcpu->id); + rv =3D _vcpu_run(vcpu); TEST_ASSERT(rv < 0 && errno =3D=3D EINVAL, "Invalid kvm_dirty_regs did not cause expected KVM_RUN error: %d\n", rv); @@ -140,19 +140,19 @@ int main(int argc, char *argv[]) /* Request and verify all valid register sets. */ /* TODO: BUILD TIME CHECK: TEST_ASSERT(KVM_SYNC_X86_NUM_FIELDS !=3D 3); */ run->kvm_valid_regs =3D TEST_SYNC_FIELDS; - rv =3D _vcpu_run(vm, vcpu->id); + rv =3D _vcpu_run(vcpu); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Unexpected exit reason: %u (%s),\n", run->exit_reason, exit_reason_str(run->exit_reason)); =20 - vcpu_regs_get(vm, vcpu->id, ®s); + vcpu_regs_get(vcpu, ®s); compare_regs(®s, &run->s.regs.regs); =20 - vcpu_sregs_get(vm, vcpu->id, &sregs); + vcpu_sregs_get(vcpu, &sregs); compare_sregs(&sregs, &run->s.regs.sregs); =20 - vcpu_events_get(vm, vcpu->id, &events); + vcpu_events_get(vcpu, &events); compare_vcpu_events(&events, &run->s.regs.events); =20 /* Set and verify various register values. */ @@ -162,7 +162,7 @@ int main(int argc, char *argv[]) =20 run->kvm_valid_regs =3D TEST_SYNC_FIELDS; run->kvm_dirty_regs =3D KVM_SYNC_X86_REGS | KVM_SYNC_X86_SREGS; - rv =3D _vcpu_run(vm, vcpu->id); + rv =3D _vcpu_run(vcpu); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Unexpected exit reason: %u (%s),\n", run->exit_reason, @@ -174,13 +174,13 @@ int main(int argc, char *argv[]) "apic_base sync regs value incorrect 0x%llx.", run->s.regs.sregs.apic_base); =20 - vcpu_regs_get(vm, vcpu->id, ®s); + vcpu_regs_get(vcpu, ®s); compare_regs(®s, &run->s.regs.regs); =20 - vcpu_sregs_get(vm, vcpu->id, &sregs); + vcpu_sregs_get(vcpu, &sregs); compare_sregs(&sregs, &run->s.regs.sregs); =20 - vcpu_events_get(vm, vcpu->id, &events); + vcpu_events_get(vcpu, &events); compare_vcpu_events(&events, &run->s.regs.events); =20 /* Clear kvm_dirty_regs bits, verify new s.regs values are @@ -189,7 +189,7 @@ int main(int argc, char *argv[]) run->kvm_valid_regs =3D TEST_SYNC_FIELDS; run->kvm_dirty_regs =3D 0; run->s.regs.regs.rbx =3D 0xDEADBEEF; - rv =3D _vcpu_run(vm, vcpu->id); + rv =3D _vcpu_run(vcpu); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Unexpected exit reason: %u (%s),\n", run->exit_reason, @@ -206,8 +206,8 @@ int main(int argc, char *argv[]) run->kvm_dirty_regs =3D 0; run->s.regs.regs.rbx =3D 0xAAAA; regs.rbx =3D 0xBAC0; - vcpu_regs_set(vm, vcpu->id, ®s); - rv =3D _vcpu_run(vm, vcpu->id); + vcpu_regs_set(vcpu, ®s); + rv =3D _vcpu_run(vcpu); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Unexpected exit reason: %u (%s),\n", run->exit_reason, @@ -215,7 +215,7 @@ int main(int argc, char *argv[]) TEST_ASSERT(run->s.regs.regs.rbx =3D=3D 0xAAAA, "rbx sync regs value incorrect 0x%llx.", run->s.regs.regs.rbx); - vcpu_regs_get(vm, vcpu->id, ®s); + vcpu_regs_get(vcpu, ®s); TEST_ASSERT(regs.rbx =3D=3D 0xBAC0 + 1, "rbx guest value incorrect 0x%llx.", regs.rbx); @@ -227,7 +227,7 @@ int main(int argc, char *argv[]) run->kvm_valid_regs =3D 0; run->kvm_dirty_regs =3D TEST_SYNC_FIELDS; run->s.regs.regs.rbx =3D 0xBBBB; - rv =3D _vcpu_run(vm, vcpu->id); + rv =3D _vcpu_run(vcpu); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Unexpected exit reason: %u (%s),\n", run->exit_reason, @@ -235,7 +235,7 @@ int main(int argc, char *argv[]) TEST_ASSERT(run->s.regs.regs.rbx =3D=3D 0xBBBB, "rbx sync regs value incorrect 0x%llx.", run->s.regs.regs.rbx); - vcpu_regs_get(vm, vcpu->id, ®s); + vcpu_regs_get(vcpu, ®s); TEST_ASSERT(regs.rbx =3D=3D 0xBBBB + 1, "rbx guest value incorrect 0x%llx.", regs.rbx); diff --git a/tools/testing/selftests/kvm/x86_64/tsc_msrs_test.c b/tools/tes= ting/selftests/kvm/x86_64/tsc_msrs_test.c index 3b7bf660eced..3165d3f7e065 100644 --- a/tools/testing/selftests/kvm/x86_64/tsc_msrs_test.c +++ b/tools/testing/selftests/kvm/x86_64/tsc_msrs_test.c @@ -14,7 +14,7 @@ #define GUEST_STEP (UNITY * 4) #define ROUND(x) ((x + UNITY / 2) & -UNITY) #define rounded_rdmsr(x) ROUND(rdmsr(x)) -#define rounded_host_rdmsr(x) ROUND(vcpu_get_msr(vm, vcpu->id, x)) +#define rounded_host_rdmsr(x) ROUND(vcpu_get_msr(vcpu, x)) =20 static void guest_code(void) { @@ -68,9 +68,9 @@ static void run_vcpu(struct kvm_vcpu *vcpu, int stage) { struct ucall uc; =20 - vcpu_run(vcpu->vm, vcpu->id); + vcpu_run(vcpu); =20 - switch (get_ucall(vcpu->vm, vcpu->id, &uc)) { + switch (get_ucall(vcpu, &uc)) { case UCALL_SYNC: TEST_ASSERT(!strcmp((const char *)uc.args[0], "hello") && uc.args[1] =3D=3D stage + 1, "Stage %d: Unexpected register values = vmexit, got %lx", @@ -116,18 +116,18 @@ int main(void) * Host: writes to MSR_IA32_TSC set the host-side offset * and therefore do not change MSR_IA32_TSC_ADJUST. */ - vcpu_set_msr(vm, vcpu->id, MSR_IA32_TSC, HOST_ADJUST + val); + vcpu_set_msr(vcpu, MSR_IA32_TSC, HOST_ADJUST + val); ASSERT_EQ(rounded_host_rdmsr(MSR_IA32_TSC), HOST_ADJUST + val); ASSERT_EQ(rounded_host_rdmsr(MSR_IA32_TSC_ADJUST), val); run_vcpu(vcpu, 3); =20 /* Host: writes to MSR_IA32_TSC_ADJUST do not modify the TSC. */ - vcpu_set_msr(vm, vcpu->id, MSR_IA32_TSC_ADJUST, UNITY * 123456); + vcpu_set_msr(vcpu, MSR_IA32_TSC_ADJUST, UNITY * 123456); ASSERT_EQ(rounded_host_rdmsr(MSR_IA32_TSC), HOST_ADJUST + val); - ASSERT_EQ(vcpu_get_msr(vm, vcpu->id, MSR_IA32_TSC_ADJUST), UNITY * 123456= ); + ASSERT_EQ(vcpu_get_msr(vcpu, MSR_IA32_TSC_ADJUST), UNITY * 123456); =20 /* Restore previous value. */ - vcpu_set_msr(vm, vcpu->id, MSR_IA32_TSC_ADJUST, val); + vcpu_set_msr(vcpu, MSR_IA32_TSC_ADJUST, val); ASSERT_EQ(rounded_host_rdmsr(MSR_IA32_TSC), HOST_ADJUST + val); ASSERT_EQ(rounded_host_rdmsr(MSR_IA32_TSC_ADJUST), val); =20 diff --git a/tools/testing/selftests/kvm/x86_64/tsc_scaling_sync.c b/tools/= testing/selftests/kvm/x86_64/tsc_scaling_sync.c index 728b252597cc..e416af887ca0 100644 --- a/tools/testing/selftests/kvm/x86_64/tsc_scaling_sync.c +++ b/tools/testing/selftests/kvm/x86_64/tsc_scaling_sync.c @@ -58,7 +58,7 @@ static void *run_vcpu(void *_cpu_nr) =20 if (!first_cpu_done) { first_cpu_done =3D true; - vcpu_set_msr(vm, vcpu->id, MSR_IA32_TSC, TEST_TSC_OFFSET); + vcpu_set_msr(vcpu, MSR_IA32_TSC, TEST_TSC_OFFSET); } =20 pthread_spin_unlock(&create_lock); @@ -67,13 +67,13 @@ static void *run_vcpu(void *_cpu_nr) volatile struct kvm_run *run =3D vcpu->run; struct ucall uc; =20 - vcpu_run(vm, vcpu->id); + vcpu_run(vcpu); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Got exit_reason other than KVM_EXIT_IO: %u (%= s)\n", run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vm, vcpu->id, &uc)) { + switch (get_ucall(vcpu, &uc)) { case UCALL_DONE: goto out; =20 diff --git a/tools/testing/selftests/kvm/x86_64/userspace_io_test.c b/tools= /testing/selftests/kvm/x86_64/userspace_io_test.c index 0ba774ed6476..7538d57a41d5 100644 --- a/tools/testing/selftests/kvm/x86_64/userspace_io_test.c +++ b/tools/testing/selftests/kvm/x86_64/userspace_io_test.c @@ -65,14 +65,14 @@ int main(int argc, char *argv[]) memset(®s, 0, sizeof(regs)); =20 while (1) { - vcpu_run(vm, vcpu->id); + vcpu_run(vcpu); =20 TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Unexpected exit reason: %u (%s),\n", run->exit_reason, exit_reason_str(run->exit_reason)); =20 - if (get_ucall(vm, vcpu->id, &uc)) + if (get_ucall(vcpu, &uc)) break; =20 TEST_ASSERT(run->io.port =3D=3D 0x80, @@ -85,13 +85,13 @@ int main(int argc, char *argv[]) * scope from a testing perspective as it's not ABI in any way, * i.e. it really is abusing internal KVM knowledge. */ - vcpu_regs_get(vm, vcpu->id, ®s); + vcpu_regs_get(vcpu, ®s); if (regs.rcx =3D=3D 2) regs.rcx =3D 1; if (regs.rcx =3D=3D 3) regs.rcx =3D 8192; memset((void *)run + run->io.data_offset, 0xaa, 4096); - vcpu_regs_set(vm, vcpu->id, ®s); + vcpu_regs_set(vcpu, ®s); } =20 switch (uc.cmd) { diff --git a/tools/testing/selftests/kvm/x86_64/userspace_msr_exit_test.c b= /tools/testing/selftests/kvm/x86_64/userspace_msr_exit_test.c index e261c50fac5c..bdb898e751fe 100644 --- a/tools/testing/selftests/kvm/x86_64/userspace_msr_exit_test.c +++ b/tools/testing/selftests/kvm/x86_64/userspace_msr_exit_test.c @@ -399,7 +399,7 @@ static void check_for_guest_assert(struct kvm_vcpu *vcp= u) struct ucall uc; =20 if (vcpu->run->exit_reason =3D=3D KVM_EXIT_IO && - get_ucall(vcpu->vm, vcpu->id, &uc) =3D=3D UCALL_ABORT) { + get_ucall(vcpu, &uc) =3D=3D UCALL_ABORT) { TEST_FAIL("%s at %s:%ld", (const char *)uc.args[0], __FILE__, uc.args[1]); } @@ -483,7 +483,7 @@ static void process_ucall_done(struct kvm_vcpu *vcpu) run->exit_reason, exit_reason_str(run->exit_reason)); =20 - TEST_ASSERT(get_ucall(vcpu->vm, vcpu->id, &uc) =3D=3D UCALL_DONE, + TEST_ASSERT(get_ucall(vcpu, &uc) =3D=3D UCALL_DONE, "Unexpected ucall command: %lu, expected UCALL_DONE (%d)", uc.cmd, UCALL_DONE); } @@ -500,7 +500,7 @@ static uint64_t process_ucall(struct kvm_vcpu *vcpu) run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vcpu->vm, vcpu->id, &uc)) { + switch (get_ucall(vcpu, &uc)) { case UCALL_SYNC: break; case UCALL_ABORT: @@ -519,26 +519,26 @@ static uint64_t process_ucall(struct kvm_vcpu *vcpu) static void run_guest_then_process_rdmsr(struct kvm_vcpu *vcpu, uint32_t msr_index) { - vcpu_run(vcpu->vm, vcpu->id); + vcpu_run(vcpu); process_rdmsr(vcpu, msr_index); } =20 static void run_guest_then_process_wrmsr(struct kvm_vcpu *vcpu, uint32_t msr_index) { - vcpu_run(vcpu->vm, vcpu->id); + vcpu_run(vcpu); process_wrmsr(vcpu, msr_index); } =20 static uint64_t run_guest_then_process_ucall(struct kvm_vcpu *vcpu) { - vcpu_run(vcpu->vm, vcpu->id); + vcpu_run(vcpu); return process_ucall(vcpu); } =20 static void run_guest_then_process_ucall_done(struct kvm_vcpu *vcpu) { - vcpu_run(vcpu->vm, vcpu->id); + vcpu_run(vcpu); process_ucall_done(vcpu); } =20 @@ -564,7 +564,7 @@ static void test_msr_filter_allow(void) vm_ioctl(vm, KVM_X86_SET_MSR_FILTER, &filter_allow); =20 vm_init_descriptor_tables(vm); - vcpu_init_descriptor_tables(vm, vcpu->id); + vcpu_init_descriptor_tables(vcpu); =20 vm_install_exception_handler(vm, GP_VECTOR, guest_gp_handler); =20 @@ -581,7 +581,7 @@ static void test_msr_filter_allow(void) run_guest_then_process_rdmsr(vcpu, MSR_NON_EXISTENT); =20 vm_install_exception_handler(vm, UD_VECTOR, guest_ud_handler); - vcpu_run(vm, vcpu->id); + vcpu_run(vcpu); vm_install_exception_handler(vm, UD_VECTOR, NULL); =20 if (process_ucall(vcpu) !=3D UCALL_DONE) { @@ -612,7 +612,7 @@ static int handle_ucall(struct kvm_vcpu *vcpu) { struct ucall uc; =20 - switch (get_ucall(vcpu->vm, vcpu->id, &uc)) { + switch (get_ucall(vcpu, &uc)) { case UCALL_ABORT: TEST_FAIL("Guest assertion not met"); break; @@ -692,7 +692,7 @@ static void test_msr_filter_deny(void) vm_ioctl(vm, KVM_X86_SET_MSR_FILTER, &filter_deny); =20 while (1) { - vcpu_run(vm, vcpu->id); + vcpu_run(vcpu); =20 switch (run->exit_reason) { case KVM_EXIT_X86_RDMSR: diff --git a/tools/testing/selftests/kvm/x86_64/vmx_apic_access_test.c b/to= ols/testing/selftests/kvm/x86_64/vmx_apic_access_test.c index 10f9c86029e6..ef7514376b1e 100644 --- a/tools/testing/selftests/kvm/x86_64/vmx_apic_access_test.c +++ b/tools/testing/selftests/kvm/x86_64/vmx_apic_access_test.c @@ -95,13 +95,13 @@ int main(int argc, char *argv[]) =20 vmx =3D vcpu_alloc_vmx(vm, &vmx_pages_gva); prepare_virtualize_apic_accesses(vmx, vm); - vcpu_args_set(vm, vcpu->id, 2, vmx_pages_gva, high_gpa); + vcpu_args_set(vcpu, 2, vmx_pages_gva, high_gpa); =20 while (!done) { volatile struct kvm_run *run =3D vcpu->run; struct ucall uc; =20 - vcpu_run(vm, vcpu->id); + vcpu_run(vcpu); if (apic_access_addr =3D=3D high_gpa) { TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_INTERNAL_ERROR, @@ -119,7 +119,7 @@ int main(int argc, char *argv[]) run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vm, vcpu->id, &uc)) { + switch (get_ucall(vcpu, &uc)) { case UCALL_ABORT: TEST_FAIL("%s at %s:%ld", (const char *)uc.args[0], __FILE__, uc.args[1]); diff --git a/tools/testing/selftests/kvm/x86_64/vmx_close_while_nested_test= .c b/tools/testing/selftests/kvm/x86_64/vmx_close_while_nested_test.c index da0363076fba..40c77bb706a1 100644 --- a/tools/testing/selftests/kvm/x86_64/vmx_close_while_nested_test.c +++ b/tools/testing/selftests/kvm/x86_64/vmx_close_while_nested_test.c @@ -57,13 +57,13 @@ int main(int argc, char *argv[]) =20 /* Allocate VMX pages and shared descriptors (vmx_pages). */ vcpu_alloc_vmx(vm, &vmx_pages_gva); - vcpu_args_set(vm, vcpu->id, 1, vmx_pages_gva); + vcpu_args_set(vcpu, 1, vmx_pages_gva); =20 for (;;) { volatile struct kvm_run *run =3D vcpu->run; struct ucall uc; =20 - vcpu_run(vm, vcpu->id); + vcpu_run(vcpu); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Got exit_reason other than KVM_EXIT_IO: %u (%s)\n", run->exit_reason, @@ -72,7 +72,7 @@ int main(int argc, char *argv[]) if (run->io.port =3D=3D PORT_L0_EXIT) break; =20 - switch (get_ucall(vm, vcpu->id, &uc)) { + switch (get_ucall(vcpu, &uc)) { case UCALL_ABORT: TEST_FAIL("%s", (const char *)uc.args[0]); /* NOT REACHED */ diff --git a/tools/testing/selftests/kvm/x86_64/vmx_dirty_log_test.c b/tool= s/testing/selftests/kvm/x86_64/vmx_dirty_log_test.c index fb8c7f7236f7..215ffa0589d4 100644 --- a/tools/testing/selftests/kvm/x86_64/vmx_dirty_log_test.c +++ b/tools/testing/selftests/kvm/x86_64/vmx_dirty_log_test.c @@ -82,7 +82,7 @@ int main(int argc, char *argv[]) /* Create VM */ vm =3D vm_create_with_one_vcpu(&vcpu, l1_guest_code); vmx =3D vcpu_alloc_vmx(vm, &vmx_pages_gva); - vcpu_args_set(vm, vcpu->id, 1, vmx_pages_gva); + vcpu_args_set(vcpu, 1, vmx_pages_gva); run =3D vcpu->run; =20 /* Add an extra memory slot for testing dirty logging */ @@ -115,13 +115,13 @@ int main(int argc, char *argv[]) =20 while (!done) { memset(host_test_mem, 0xaa, TEST_MEM_PAGES * 4096); - vcpu_run(vm, vcpu->id); + vcpu_run(vcpu); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Unexpected exit reason: %u (%s),\n", run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vm, vcpu->id, &uc)) { + switch (get_ucall(vcpu, &uc)) { case UCALL_ABORT: TEST_FAIL("%s at %s:%ld", (const char *)uc.args[0], __FILE__, uc.args[1]); diff --git a/tools/testing/selftests/kvm/x86_64/vmx_exception_with_invalid_= guest_state.c b/tools/testing/selftests/kvm/x86_64/vmx_exception_with_inval= id_guest_state.c index 70b30583e50d..5bc2cee0d613 100644 --- a/tools/testing/selftests/kvm/x86_64/vmx_exception_with_invalid_guest_s= tate.c +++ b/tools/testing/selftests/kvm/x86_64/vmx_exception_with_invalid_guest_s= tate.c @@ -24,7 +24,7 @@ static void __run_vcpu_with_invalid_state(struct kvm_vcpu= *vcpu) { struct kvm_run *run =3D vcpu->run; =20 - vcpu_run(vcpu->vm, vcpu->id); + vcpu_run(vcpu); =20 TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_INTERNAL_ERROR, "Expected KVM_EXIT_INTERNAL_ERROR, got %d (%s)\n", @@ -60,9 +60,9 @@ static void set_or_clear_invalid_guest_state(struct kvm_v= cpu *vcpu, bool set) static struct kvm_sregs sregs; =20 if (!sregs.cr0) - vcpu_sregs_get(vcpu->vm, vcpu->id, &sregs); + vcpu_sregs_get(vcpu, &sregs); sregs.tr.unusable =3D !!set; - vcpu_sregs_set(vcpu->vm, vcpu->id, &sregs); + vcpu_sregs_set(vcpu, &sregs); } =20 static void set_invalid_guest_state(struct kvm_vcpu *vcpu) @@ -91,7 +91,7 @@ static void sigalrm_handler(int sig) =20 TEST_ASSERT(sig =3D=3D SIGALRM, "Unexpected signal =3D %d", sig); =20 - vcpu_events_get(vcpu->vm, vcpu->id, &events); + vcpu_events_get(vcpu, &events); =20 /* * If an exception is pending, attempt KVM_RUN with invalid guest, @@ -120,7 +120,7 @@ int main(int argc, char *argv[]) get_set_sigalrm_vcpu(vcpu); =20 vm_init_descriptor_tables(vm); - vcpu_init_descriptor_tables(vm, vcpu->id); + vcpu_init_descriptor_tables(vcpu); =20 vm_install_exception_handler(vm, UD_VECTOR, guest_ud_handler); =20 diff --git a/tools/testing/selftests/kvm/x86_64/vmx_invalid_nested_guest_st= ate.c b/tools/testing/selftests/kvm/x86_64/vmx_invalid_nested_guest_state.c index ba534be498f9..683f4f0a1616 100644 --- a/tools/testing/selftests/kvm/x86_64/vmx_invalid_nested_guest_state.c +++ b/tools/testing/selftests/kvm/x86_64/vmx_invalid_nested_guest_state.c @@ -64,9 +64,9 @@ int main(int argc, char *argv[]) =20 /* Allocate VMX pages and shared descriptors (vmx_pages). */ vcpu_alloc_vmx(vm, &vmx_pages_gva); - vcpu_args_set(vm, vcpu->id, 1, vmx_pages_gva); + vcpu_args_set(vcpu, 1, vmx_pages_gva); =20 - vcpu_run(vm, vcpu->id); + vcpu_run(vcpu); =20 run =3D vcpu->run; =20 @@ -88,13 +88,13 @@ int main(int argc, char *argv[]) * emulating invalid guest state for L2. */ memset(&sregs, 0, sizeof(sregs)); - vcpu_sregs_get(vm, vcpu->id, &sregs); + vcpu_sregs_get(vcpu, &sregs); sregs.tr.unusable =3D 1; - vcpu_sregs_set(vm, vcpu->id, &sregs); + vcpu_sregs_set(vcpu, &sregs); =20 - vcpu_run(vm, vcpu->id); + vcpu_run(vcpu); =20 - switch (get_ucall(vm, vcpu->id, &uc)) { + switch (get_ucall(vcpu, &uc)) { case UCALL_DONE: break; case UCALL_ABORT: diff --git a/tools/testing/selftests/kvm/x86_64/vmx_nested_tsc_scaling_test= .c b/tools/testing/selftests/kvm/x86_64/vmx_nested_tsc_scaling_test.c index c9cb29f06244..647a4320d3bc 100644 --- a/tools/testing/selftests/kvm/x86_64/vmx_nested_tsc_scaling_test.c +++ b/tools/testing/selftests/kvm/x86_64/vmx_nested_tsc_scaling_test.c @@ -182,26 +182,25 @@ int main(int argc, char *argv[]) =20 vm =3D vm_create_with_one_vcpu(&vcpu, l1_guest_code); vcpu_alloc_vmx(vm, &vmx_pages_gva); - vcpu_args_set(vm, vcpu->id, 1, vmx_pages_gva); + vcpu_args_set(vcpu, 1, vmx_pages_gva); =20 - tsc_khz =3D __vcpu_ioctl(vm, vcpu->id, KVM_GET_TSC_KHZ, NULL); + tsc_khz =3D __vcpu_ioctl(vcpu, KVM_GET_TSC_KHZ, NULL); TEST_ASSERT(tsc_khz !=3D -1, "vcpu ioctl KVM_GET_TSC_KHZ failed"); =20 /* scale down L1's TSC frequency */ - vcpu_ioctl(vm, vcpu->id, KVM_SET_TSC_KHZ, - (void *) (tsc_khz / l1_scale_factor)); + vcpu_ioctl(vcpu, KVM_SET_TSC_KHZ, (void *) (tsc_khz / l1_scale_factor)); =20 for (;;) { volatile struct kvm_run *run =3D vcpu->run; struct ucall uc; =20 - vcpu_run(vm, vcpu->id); + vcpu_run(vcpu); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Got exit_reason other than KVM_EXIT_IO: %u (%s)\n", run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vm, vcpu->id, &uc)) { + switch (get_ucall(vcpu, &uc)) { case UCALL_ABORT: TEST_FAIL("%s", (const char *) uc.args[0]); case UCALL_SYNC: diff --git a/tools/testing/selftests/kvm/x86_64/vmx_pmu_msrs_test.c b/tools= /testing/selftests/kvm/x86_64/vmx_pmu_msrs_test.c index 7bb81b7a4825..8a2695975a63 100644 --- a/tools/testing/selftests/kvm/x86_64/vmx_pmu_msrs_test.c +++ b/tools/testing/selftests/kvm/x86_64/vmx_pmu_msrs_test.c @@ -88,25 +88,25 @@ int main(int argc, char *argv[]) } =20 /* testcase 1, set capabilities when we have PDCM bit */ - vcpu_set_cpuid(vm, vcpu->id, cpuid); - vcpu_set_msr(vm, vcpu->id, MSR_IA32_PERF_CAPABILITIES, PMU_CAP_FW_WRITES); + vcpu_set_cpuid(vcpu, cpuid); + vcpu_set_msr(vcpu, MSR_IA32_PERF_CAPABILITIES, PMU_CAP_FW_WRITES); =20 /* check capabilities can be retrieved with KVM_GET_MSR */ - ASSERT_EQ(vcpu_get_msr(vm, vcpu->id, MSR_IA32_PERF_CAPABILITIES), PMU_CAP= _FW_WRITES); + ASSERT_EQ(vcpu_get_msr(vcpu, MSR_IA32_PERF_CAPABILITIES), PMU_CAP_FW_WRIT= ES); =20 /* check whatever we write with KVM_SET_MSR is _not_ modified */ - vcpu_run(vm, vcpu->id); - ASSERT_EQ(vcpu_get_msr(vm, vcpu->id, MSR_IA32_PERF_CAPABILITIES), PMU_CAP= _FW_WRITES); + vcpu_run(vcpu); + ASSERT_EQ(vcpu_get_msr(vcpu, MSR_IA32_PERF_CAPABILITIES), PMU_CAP_FW_WRIT= ES); =20 /* testcase 2, check valid LBR formats are accepted */ - vcpu_set_msr(vm, vcpu->id, MSR_IA32_PERF_CAPABILITIES, 0); - ASSERT_EQ(vcpu_get_msr(vm, vcpu->id, MSR_IA32_PERF_CAPABILITIES), 0); + vcpu_set_msr(vcpu, MSR_IA32_PERF_CAPABILITIES, 0); + ASSERT_EQ(vcpu_get_msr(vcpu, MSR_IA32_PERF_CAPABILITIES), 0); =20 - vcpu_set_msr(vm, vcpu->id, MSR_IA32_PERF_CAPABILITIES, host_cap.lbr_forma= t); - ASSERT_EQ(vcpu_get_msr(vm, vcpu->id, MSR_IA32_PERF_CAPABILITIES), (u64)ho= st_cap.lbr_format); + vcpu_set_msr(vcpu, MSR_IA32_PERF_CAPABILITIES, host_cap.lbr_format); + ASSERT_EQ(vcpu_get_msr(vcpu, MSR_IA32_PERF_CAPABILITIES), (u64)host_cap.l= br_format); =20 /* testcase 3, check invalid LBR format is rejected */ - ret =3D _vcpu_set_msr(vm, vcpu->id, MSR_IA32_PERF_CAPABILITIES, PMU_CAP_L= BR_FMT); + ret =3D _vcpu_set_msr(vcpu, MSR_IA32_PERF_CAPABILITIES, PMU_CAP_LBR_FMT); TEST_ASSERT(ret =3D=3D 0, "Bad PERF_CAPABILITIES didn't fail."); =20 kvm_vm_free(vm); diff --git a/tools/testing/selftests/kvm/x86_64/vmx_preemption_timer_test.c= b/tools/testing/selftests/kvm/x86_64/vmx_preemption_timer_test.c index 168adc5b2272..b775a11ec08b 100644 --- a/tools/testing/selftests/kvm/x86_64/vmx_preemption_timer_test.c +++ b/tools/testing/selftests/kvm/x86_64/vmx_preemption_timer_test.c @@ -178,19 +178,19 @@ int main(int argc, char *argv[]) vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); run =3D vcpu->run; =20 - vcpu_regs_get(vm, vcpu->id, ®s1); + vcpu_regs_get(vcpu, ®s1); =20 vcpu_alloc_vmx(vm, &vmx_pages_gva); - vcpu_args_set(vm, vcpu->id, 1, vmx_pages_gva); + vcpu_args_set(vcpu, 1, vmx_pages_gva); =20 for (stage =3D 1;; stage++) { - vcpu_run(vm, vcpu->id); + vcpu_run(vcpu); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Stage %d: unexpected exit reason: %u (%s),\n", stage, run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vm, vcpu->id, &uc)) { + switch (get_ucall(vcpu, &uc)) { case UCALL_ABORT: TEST_FAIL("%s at %s:%ld", (const char *)uc.args[0], __FILE__, uc.args[1]); @@ -232,22 +232,22 @@ int main(int argc, char *argv[]) stage, uc.args[4], uc.args[5]); } =20 - state =3D vcpu_save_state(vm, vcpu->id); + state =3D vcpu_save_state(vcpu); memset(®s1, 0, sizeof(regs1)); - vcpu_regs_get(vm, vcpu->id, ®s1); + vcpu_regs_get(vcpu, ®s1); =20 kvm_vm_release(vm); =20 /* Restore state in a new VM. */ vcpu =3D vm_recreate_with_one_vcpu(vm); =20 - vcpu_set_cpuid(vm, vcpu->id, kvm_get_supported_cpuid()); - vcpu_load_state(vm, vcpu->id, state); + vcpu_set_cpuid(vcpu, kvm_get_supported_cpuid()); + vcpu_load_state(vcpu, state); run =3D vcpu->run; kvm_x86_state_cleanup(state); =20 memset(®s2, 0, sizeof(regs2)); - vcpu_regs_get(vm, vcpu->id, ®s2); + vcpu_regs_get(vcpu, ®s2); TEST_ASSERT(!memcmp(®s1, ®s2, sizeof(regs2)), "Unexpected register values after vcpu_load_state; rdi: %lx rsi: %l= x", (ulong) regs2.rdi, (ulong) regs2.rsi); diff --git a/tools/testing/selftests/kvm/x86_64/vmx_set_nested_state_test.c= b/tools/testing/selftests/kvm/x86_64/vmx_set_nested_state_test.c index de38f0e68153..ba783ceb007f 100644 --- a/tools/testing/selftests/kvm/x86_64/vmx_set_nested_state_test.c +++ b/tools/testing/selftests/kvm/x86_64/vmx_set_nested_state_test.c @@ -28,7 +28,7 @@ bool have_evmcs; =20 void test_nested_state(struct kvm_vcpu *vcpu, struct kvm_nested_state *sta= te) { - vcpu_nested_state_set(vcpu->vm, vcpu->id, state); + vcpu_nested_state_set(vcpu, state); } =20 void test_nested_state_expect_errno(struct kvm_vcpu *vcpu, @@ -37,7 +37,7 @@ void test_nested_state_expect_errno(struct kvm_vcpu *vcpu, { int rv; =20 - rv =3D __vcpu_nested_state_set(vcpu->vm, vcpu->id, state); + rv =3D __vcpu_nested_state_set(vcpu, state); TEST_ASSERT(rv =3D=3D -1 && errno =3D=3D expected_errno, "Expected %s (%d) from vcpu_nested_state_set but got rv: %i errno: %s (%= d)", strerror(expected_errno), expected_errno, rv, strerror(errno), @@ -121,7 +121,7 @@ void test_vmx_nested_state(struct kvm_vcpu *vcpu) test_nested_state(vcpu, state); =20 /* Enable VMX in the guest CPUID. */ - vcpu_set_cpuid(vcpu->vm, vcpu->id, kvm_get_supported_cpuid()); + vcpu_set_cpuid(vcpu, kvm_get_supported_cpuid()); =20 /* * Setting vmxon_pa =3D=3D -1ull and vmcs_pa =3D=3D -1ull exits early wit= hout @@ -137,7 +137,7 @@ void test_vmx_nested_state(struct kvm_vcpu *vcpu) state->flags &=3D KVM_STATE_NESTED_EVMCS; if (have_evmcs) { test_nested_state_expect_einval(vcpu, state); - vcpu_enable_evmcs(vcpu->vm, vcpu->id); + vcpu_enable_evmcs(vcpu); } test_nested_state(vcpu, state); =20 @@ -233,7 +233,7 @@ void test_vmx_nested_state(struct kvm_vcpu *vcpu) state->hdr.vmx.vmcs12_pa =3D -1ull; state->flags =3D 0; test_nested_state(vcpu, state); - vcpu_nested_state_get(vcpu->vm, vcpu->id, state); + vcpu_nested_state_get(vcpu, state); TEST_ASSERT(state->size >=3D sizeof(*state) && state->size <=3D state_sz, "Size must be between %ld and %d. The size returned was %d.", sizeof(*state), state_sz, state->size); @@ -255,7 +255,7 @@ void disable_vmx(struct kvm_vcpu *vcpu) TEST_ASSERT(i !=3D cpuid->nent, "CPUID function 1 not found"); =20 cpuid->entries[i].ecx &=3D ~CPUID_VMX; - vcpu_set_cpuid(vcpu->vm, vcpu->id, cpuid); + vcpu_set_cpuid(vcpu, cpuid); cpuid->entries[i].ecx |=3D CPUID_VMX; } =20 diff --git a/tools/testing/selftests/kvm/x86_64/vmx_tsc_adjust_test.c b/too= ls/testing/selftests/kvm/x86_64/vmx_tsc_adjust_test.c index 29699d7c16c3..e32bfb102699 100644 --- a/tools/testing/selftests/kvm/x86_64/vmx_tsc_adjust_test.c +++ b/tools/testing/selftests/kvm/x86_64/vmx_tsc_adjust_test.c @@ -133,19 +133,19 @@ int main(int argc, char *argv[]) =20 /* Allocate VMX pages and shared descriptors (vmx_pages). */ vcpu_alloc_vmx(vm, &vmx_pages_gva); - vcpu_args_set(vm, vcpu->id, 1, vmx_pages_gva); + vcpu_args_set(vcpu, 1, vmx_pages_gva); =20 for (;;) { volatile struct kvm_run *run =3D vcpu->run; struct ucall uc; =20 - vcpu_run(vm, vcpu->id); + vcpu_run(vcpu); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Got exit_reason other than KVM_EXIT_IO: %u (%s)\n", run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vm, vcpu->id, &uc)) { + switch (get_ucall(vcpu, &uc)) { case UCALL_ABORT: TEST_FAIL("%s", (const char *)uc.args[0]); /* NOT REACHED */ diff --git a/tools/testing/selftests/kvm/x86_64/xapic_ipi_test.c b/tools/te= sting/selftests/kvm/x86_64/xapic_ipi_test.c index 4484ee563b18..3d272d7f961e 100644 --- a/tools/testing/selftests/kvm/x86_64/xapic_ipi_test.c +++ b/tools/testing/selftests/kvm/x86_64/xapic_ipi_test.c @@ -206,14 +206,14 @@ static void *vcpu_thread(void *arg) vcpu->id, r); =20 fprintf(stderr, "vCPU thread running vCPU %u\n", vcpu->id); - vcpu_run(vcpu->vm, vcpu->id); + vcpu_run(vcpu); exit_reason =3D vcpu->run->exit_reason; =20 TEST_ASSERT(exit_reason =3D=3D KVM_EXIT_IO, "vCPU %u exited with unexpected exit reason %u-%s, expected KVM_EXIT= _IO", vcpu->id, exit_reason, exit_reason_str(exit_reason)); =20 - if (get_ucall(vcpu->vm, vcpu->id, &uc) =3D=3D UCALL_ABORT) { + if (get_ucall(vcpu, &uc) =3D=3D UCALL_ABORT) { TEST_ASSERT(false, "vCPU %u exited with error: %s.\n" "Sending vCPU sent %lu IPIs to halting vCPU\n" @@ -415,7 +415,7 @@ int main(int argc, char *argv[]) vm =3D vm_create_with_one_vcpu(¶ms[0].vcpu, halter_guest_code); =20 vm_init_descriptor_tables(vm); - vcpu_init_descriptor_tables(vm, params[0].vcpu->id); + vcpu_init_descriptor_tables(params[0].vcpu); vm_install_exception_handler(vm, IPI_VECTOR, guest_ipi_handler); =20 virt_pg_map(vm, APIC_DEFAULT_GPA, APIC_DEFAULT_GPA); @@ -428,8 +428,8 @@ int main(int argc, char *argv[]) params[0].data =3D data; params[1].data =3D data; =20 - vcpu_args_set(vm, params[0].vcpu->id, 1, test_data_page_vaddr); - vcpu_args_set(vm, params[1].vcpu->id, 1, test_data_page_vaddr); + vcpu_args_set(params[0].vcpu, 1, test_data_page_vaddr); + vcpu_args_set(params[1].vcpu, 1, test_data_page_vaddr); =20 pipis_rcvd =3D (uint64_t *)addr_gva2hva(vm, (uint64_t)&ipis_rcvd); params[0].pipis_rcvd =3D pipis_rcvd; diff --git a/tools/testing/selftests/kvm/x86_64/xapic_state_test.c b/tools/= testing/selftests/kvm/x86_64/xapic_state_test.c index 56301ee1adee..5c5dc7bbb4e2 100644 --- a/tools/testing/selftests/kvm/x86_64/xapic_state_test.c +++ b/tools/testing/selftests/kvm/x86_64/xapic_state_test.c @@ -47,7 +47,7 @@ static void x2apic_guest_code(void) } while (1); } =20 -static void ____test_icr(struct kvm_vm *vm, struct xapic_vcpu *x, uint64_t= val) +static void ____test_icr(struct xapic_vcpu *x, uint64_t val) { struct kvm_vcpu *vcpu =3D x->vcpu; struct kvm_lapic_state xapic; @@ -59,16 +59,16 @@ static void ____test_icr(struct kvm_vm *vm, struct xapi= c_vcpu *x, uint64_t val) * all bits are valid and should not be modified by KVM (ignoring the * fact that vectors 0-15 are technically illegal). */ - vcpu_ioctl(vm, vcpu->id, KVM_GET_LAPIC, &xapic); + vcpu_ioctl(vcpu, KVM_GET_LAPIC, &xapic); *((u32 *)&xapic.regs[APIC_IRR]) =3D val; *((u32 *)&xapic.regs[APIC_IRR + 0x10]) =3D val >> 32; - vcpu_ioctl(vm, vcpu->id, KVM_SET_LAPIC, &xapic); + vcpu_ioctl(vcpu, KVM_SET_LAPIC, &xapic); =20 - vcpu_run(vm, vcpu->id); - ASSERT_EQ(get_ucall(vm, vcpu->id, &uc), UCALL_SYNC); + vcpu_run(vcpu); + ASSERT_EQ(get_ucall(vcpu, &uc), UCALL_SYNC); ASSERT_EQ(uc.args[1], val); =20 - vcpu_ioctl(vm, vcpu->id, KVM_GET_LAPIC, &xapic); + vcpu_ioctl(vcpu, KVM_GET_LAPIC, &xapic); icr =3D (u64)(*((u32 *)&xapic.regs[APIC_ICR])) | (u64)(*((u32 *)&xapic.regs[APIC_ICR2])) << 32; if (!x->is_x2apic) @@ -76,24 +76,24 @@ static void ____test_icr(struct kvm_vm *vm, struct xapi= c_vcpu *x, uint64_t val) ASSERT_EQ(icr, val & ~APIC_ICR_BUSY); } =20 -static void __test_icr(struct kvm_vm *vm, struct xapic_vcpu *x, uint64_t v= al) +static void __test_icr(struct xapic_vcpu *x, uint64_t val) { - ____test_icr(vm, x, val | APIC_ICR_BUSY); - ____test_icr(vm, x, val & ~(u64)APIC_ICR_BUSY); + ____test_icr(x, val | APIC_ICR_BUSY); + ____test_icr(x, val & ~(u64)APIC_ICR_BUSY); } =20 -static void test_icr(struct kvm_vm *vm, struct xapic_vcpu *x) +static void test_icr(struct xapic_vcpu *x) { struct kvm_vcpu *vcpu =3D x->vcpu; uint64_t icr, i, j; =20 icr =3D APIC_DEST_SELF | APIC_INT_ASSERT | APIC_DM_FIXED; for (i =3D 0; i <=3D 0xff; i++) - __test_icr(vm, x, icr | i); + __test_icr(x, icr | i); =20 icr =3D APIC_INT_ASSERT | APIC_DM_FIXED; for (i =3D 0; i <=3D 0xff; i++) - __test_icr(vm, x, icr | i); + __test_icr(x, icr | i); =20 /* * Send all flavors of IPIs to non-existent vCPUs. TODO: use number of @@ -102,18 +102,18 @@ static void test_icr(struct kvm_vm *vm, struct xapic_= vcpu *x) icr =3D APIC_INT_ASSERT | 0xff; for (i =3D vcpu->id + 1; i < 0xff; i++) { for (j =3D 0; j < 8; j++) - __test_icr(vm, x, i << (32 + 24) | APIC_INT_ASSERT | (j << 8)); + __test_icr(x, i << (32 + 24) | APIC_INT_ASSERT | (j << 8)); } =20 /* And again with a shorthand destination for all types of IPIs. */ icr =3D APIC_DEST_ALLBUT | APIC_INT_ASSERT; for (i =3D 0; i < 8; i++) - __test_icr(vm, x, icr | (i << 8)); + __test_icr(x, icr | (i << 8)); =20 /* And a few garbage value, just make sure it's an IRQ (blocked). */ - __test_icr(vm, x, 0xa5a5a5a5a5a5a5a5 & ~APIC_DM_FIXED_MASK); - __test_icr(vm, x, 0x5a5a5a5a5a5a5a5a & ~APIC_DM_FIXED_MASK); - __test_icr(vm, x, -1ull & ~APIC_DM_FIXED_MASK); + __test_icr(x, 0xa5a5a5a5a5a5a5a5 & ~APIC_DM_FIXED_MASK); + __test_icr(x, 0x5a5a5a5a5a5a5a5a & ~APIC_DM_FIXED_MASK); + __test_icr(x, -1ull & ~APIC_DM_FIXED_MASK); } =20 int main(int argc, char *argv[]) @@ -127,7 +127,7 @@ int main(int argc, char *argv[]) int i; =20 vm =3D vm_create_with_one_vcpu(&x.vcpu, x2apic_guest_code); - test_icr(vm, &x); + test_icr(&x); kvm_vm_free(vm); =20 /* @@ -138,15 +138,15 @@ int main(int argc, char *argv[]) vm =3D vm_create_with_one_vcpu(&x.vcpu, xapic_guest_code); x.is_x2apic =3D false; =20 - cpuid =3D vcpu_get_cpuid(vm, x.vcpu->id); + cpuid =3D vcpu_get_cpuid(x.vcpu); for (i =3D 0; i < cpuid->nent; i++) { if (cpuid->entries[i].function =3D=3D 1) break; } cpuid->entries[i].ecx &=3D ~BIT(21); - vcpu_set_cpuid(vm, x.vcpu->id, cpuid); + vcpu_set_cpuid(x.vcpu, cpuid); =20 virt_pg_map(vm, APIC_DEFAULT_GPA, APIC_DEFAULT_GPA); - test_icr(vm, &x); + test_icr(&x); kvm_vm_free(vm); } diff --git a/tools/testing/selftests/kvm/x86_64/xen_shinfo_test.c b/tools/t= esting/selftests/kvm/x86_64/xen_shinfo_test.c index 5c0abaf0eb60..4340c2f2300f 100644 --- a/tools/testing/selftests/kvm/x86_64/xen_shinfo_test.c +++ b/tools/testing/selftests/kvm/x86_64/xen_shinfo_test.c @@ -348,7 +348,7 @@ static void handle_alrm(int sig) { if (vinfo) printf("evtchn_upcall_pending 0x%x\n", vinfo->evtchn_upcall_pending); - vcpu_dump(stdout, vcpu->vm, vcpu->id, 0); + vcpu_dump(stdout, vcpu, 0); TEST_FAIL("IRQ delivery timed out"); } =20 @@ -423,13 +423,13 @@ int main(int argc, char *argv[]) .type =3D KVM_XEN_VCPU_ATTR_TYPE_VCPU_INFO, .u.gpa =3D VCPU_INFO_ADDR, }; - vcpu_ioctl(vm, vcpu->id, KVM_XEN_VCPU_SET_ATTR, &vi); + vcpu_ioctl(vcpu, KVM_XEN_VCPU_SET_ATTR, &vi); =20 struct kvm_xen_vcpu_attr pvclock =3D { .type =3D KVM_XEN_VCPU_ATTR_TYPE_VCPU_TIME_INFO, .u.gpa =3D PVTIME_ADDR, }; - vcpu_ioctl(vm, vcpu->id, KVM_XEN_VCPU_SET_ATTR, &pvclock); + vcpu_ioctl(vcpu, KVM_XEN_VCPU_SET_ATTR, &pvclock); =20 struct kvm_xen_hvm_attr vec =3D { .type =3D KVM_XEN_ATTR_TYPE_UPCALL_VECTOR, @@ -438,7 +438,7 @@ int main(int argc, char *argv[]) vm_ioctl(vm, KVM_XEN_HVM_SET_ATTR, &vec); =20 vm_init_descriptor_tables(vm); - vcpu_init_descriptor_tables(vm, vcpu->id); + vcpu_init_descriptor_tables(vcpu); vm_install_exception_handler(vm, EVTCHN_VECTOR, evtchn_handler); =20 if (do_runstate_tests) { @@ -446,7 +446,7 @@ int main(int argc, char *argv[]) .type =3D KVM_XEN_VCPU_ATTR_TYPE_RUNSTATE_ADDR, .u.gpa =3D RUNSTATE_ADDR, }; - vcpu_ioctl(vm, vcpu->id, KVM_XEN_VCPU_SET_ATTR, &st); + vcpu_ioctl(vcpu, KVM_XEN_VCPU_SET_ATTR, &st); } =20 int irq_fd[2] =3D { -1, -1 }; @@ -522,7 +522,7 @@ int main(int argc, char *argv[]) inj.u.evtchn.flags =3D 0; vm_ioctl(vm, KVM_XEN_HVM_SET_ATTR, &inj); =20 - vcpu_ioctl(vm, vcpu->id, KVM_XEN_VCPU_SET_ATTR, &tmr); + vcpu_ioctl(vcpu, KVM_XEN_VCPU_SET_ATTR, &tmr); } vinfo =3D addr_gpa2hva(vm, VCPU_INFO_VADDR); vinfo->evtchn_upcall_pending =3D 0; @@ -536,14 +536,14 @@ int main(int argc, char *argv[]) volatile struct kvm_run *run =3D vcpu->run; struct ucall uc; =20 - vcpu_run(vm, vcpu->id); + vcpu_run(vcpu); =20 TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Got exit_reason other than KVM_EXIT_IO: %u (%s)\n", run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vm, vcpu->id, &uc)) { + switch (get_ucall(vcpu, &uc)) { case UCALL_ABORT: TEST_FAIL("%s", (const char *)uc.args[0]); /* NOT REACHED */ @@ -572,7 +572,7 @@ int main(int argc, char *argv[]) printf("Testing runstate %s\n", runstate_names[uc.args[1]]); rst.type =3D KVM_XEN_VCPU_ATTR_TYPE_RUNSTATE_CURRENT; rst.u.runstate.state =3D uc.args[1]; - vcpu_ioctl(vm, vcpu->id, KVM_XEN_VCPU_SET_ATTR, &rst); + vcpu_ioctl(vcpu, KVM_XEN_VCPU_SET_ATTR, &rst); break; =20 case 4: @@ -587,7 +587,7 @@ int main(int argc, char *argv[]) 0x6b6b - rs->time[RUNSTATE_offline]; rst.u.runstate.time_runnable =3D -rst.u.runstate.time_blocked - rst.u.runstate.time_offline; - vcpu_ioctl(vm, vcpu->id, KVM_XEN_VCPU_SET_ATTR, &rst); + vcpu_ioctl(vcpu, KVM_XEN_VCPU_SET_ATTR, &rst); break; =20 case 5: @@ -599,7 +599,7 @@ int main(int argc, char *argv[]) rst.u.runstate.state_entry_time =3D 0x6b6b + 0x5a; rst.u.runstate.time_blocked =3D 0x6b6b; rst.u.runstate.time_offline =3D 0x5a; - vcpu_ioctl(vm, vcpu->id, KVM_XEN_VCPU_SET_ATTR, &rst); + vcpu_ioctl(vcpu, KVM_XEN_VCPU_SET_ATTR, &rst); break; =20 case 6: @@ -700,7 +700,7 @@ int main(int argc, char *argv[]) case 14: memset(&tmr, 0, sizeof(tmr)); tmr.type =3D KVM_XEN_VCPU_ATTR_TYPE_TIMER; - vcpu_ioctl(vm, vcpu->id, KVM_XEN_VCPU_GET_ATTR, &tmr); + vcpu_ioctl(vcpu, KVM_XEN_VCPU_GET_ATTR, &tmr); TEST_ASSERT(tmr.u.timer.port =3D=3D EVTCHN_TIMER, "Timer port not returned"); TEST_ASSERT(tmr.u.timer.priority =3D=3D KVM_IRQ_ROUTING_XEN_EVTCHN_PRI= O_2LEVEL, @@ -720,7 +720,7 @@ int main(int argc, char *argv[]) printf("Testing restored oneshot timer\n"); =20 tmr.u.timer.expires_ns =3D rs->state_entry_time + 100000000, - vcpu_ioctl(vm, vcpu->id, KVM_XEN_VCPU_SET_ATTR, &tmr); + vcpu_ioctl(vcpu, KVM_XEN_VCPU_SET_ATTR, &tmr); evtchn_irq_expected =3D true; alarm(1); break; @@ -747,7 +747,7 @@ int main(int argc, char *argv[]) printf("Testing SCHEDOP_poll wake on masked event\n"); =20 tmr.u.timer.expires_ns =3D rs->state_entry_time + 100000000, - vcpu_ioctl(vm, vcpu->id, KVM_XEN_VCPU_SET_ATTR, &tmr); + vcpu_ioctl(vcpu, KVM_XEN_VCPU_SET_ATTR, &tmr); alarm(1); break; =20 @@ -758,11 +758,11 @@ int main(int argc, char *argv[]) =20 evtchn_irq_expected =3D true; tmr.u.timer.expires_ns =3D rs->state_entry_time + 100000000; - vcpu_ioctl(vm, vcpu->id, KVM_XEN_VCPU_SET_ATTR, &tmr); + vcpu_ioctl(vcpu, KVM_XEN_VCPU_SET_ATTR, &tmr); =20 /* Read it back and check the pending time is reported correctly */ tmr.u.timer.expires_ns =3D 0; - vcpu_ioctl(vm, vcpu->id, KVM_XEN_VCPU_GET_ATTR, &tmr); + vcpu_ioctl(vcpu, KVM_XEN_VCPU_GET_ATTR, &tmr); TEST_ASSERT(tmr.u.timer.expires_ns =3D=3D rs->state_entry_time + 10000= 0000, "Timer not reported pending"); alarm(1); @@ -772,7 +772,7 @@ int main(int argc, char *argv[]) TEST_ASSERT(!evtchn_irq_expected, "Expected event channel IRQ but it didn't happen"); /* Read timer and check it is no longer pending */ - vcpu_ioctl(vm, vcpu->id, KVM_XEN_VCPU_GET_ATTR, &tmr); + vcpu_ioctl(vcpu, KVM_XEN_VCPU_GET_ATTR, &tmr); TEST_ASSERT(!tmr.u.timer.expires_ns, "Timer still reported pending"); =20 shinfo->evtchn_pending[0] =3D 0; @@ -781,7 +781,7 @@ int main(int argc, char *argv[]) =20 evtchn_irq_expected =3D true; tmr.u.timer.expires_ns =3D rs->state_entry_time - 100000000ULL; - vcpu_ioctl(vm, vcpu->id, KVM_XEN_VCPU_SET_ATTR, &tmr); + vcpu_ioctl(vcpu, KVM_XEN_VCPU_SET_ATTR, &tmr); alarm(1); break; =20 @@ -851,7 +851,7 @@ int main(int argc, char *argv[]) struct kvm_xen_vcpu_attr rst =3D { .type =3D KVM_XEN_VCPU_ATTR_TYPE_RUNSTATE_DATA, }; - vcpu_ioctl(vm, vcpu->id, KVM_XEN_VCPU_GET_ATTR, &rst); + vcpu_ioctl(vcpu, KVM_XEN_VCPU_GET_ATTR, &rst); =20 if (verbose) { printf("Runstate: %s(%d), entry %" PRIu64 " ns\n", diff --git a/tools/testing/selftests/kvm/x86_64/xen_vmcall_test.c b/tools/t= esting/selftests/kvm/x86_64/xen_vmcall_test.c index 1411ead620fe..a91f11fb26f4 100644 --- a/tools/testing/selftests/kvm/x86_64/xen_vmcall_test.c +++ b/tools/testing/selftests/kvm/x86_64/xen_vmcall_test.c @@ -90,7 +90,7 @@ int main(int argc, char *argv[]) } =20 vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); - vcpu_set_hv_cpuid(vm, vcpu->id); + vcpu_set_hv_cpuid(vcpu); =20 struct kvm_xen_hvm_config hvmc =3D { .flags =3D KVM_XEN_HVM_CONFIG_INTERCEPT_HCALL, @@ -107,7 +107,7 @@ int main(int argc, char *argv[]) volatile struct kvm_run *run =3D vcpu->run; struct ucall uc; =20 - vcpu_run(vm, vcpu->id); + vcpu_run(vcpu); =20 if (run->exit_reason =3D=3D KVM_EXIT_XEN) { ASSERT_EQ(run->xen.type, KVM_EXIT_XEN_HCALL); @@ -129,7 +129,7 @@ int main(int argc, char *argv[]) run->exit_reason, exit_reason_str(run->exit_reason)); =20 - switch (get_ucall(vm, vcpu->id, &uc)) { + switch (get_ucall(vcpu, &uc)) { case UCALL_ABORT: TEST_FAIL("%s", (const char *)uc.args[0]); /* NOT REACHED */ diff --git a/tools/testing/selftests/kvm/x86_64/xss_msr_test.c b/tools/test= ing/selftests/kvm/x86_64/xss_msr_test.c index c5672d2949db..d5cdd09b7f96 100644 --- a/tools/testing/selftests/kvm/x86_64/xss_msr_test.c +++ b/tools/testing/selftests/kvm/x86_64/xss_msr_test.c @@ -55,11 +55,11 @@ int main(int argc, char *argv[]) exit(KSFT_SKIP); } =20 - xss_val =3D vcpu_get_msr(vm, vcpu->id, MSR_IA32_XSS); + xss_val =3D vcpu_get_msr(vcpu, MSR_IA32_XSS); TEST_ASSERT(xss_val =3D=3D 0, "MSR_IA32_XSS should be initialized to zero\n"); =20 - vcpu_set_msr(vm, vcpu->id, MSR_IA32_XSS, xss_val); + vcpu_set_msr(vcpu, MSR_IA32_XSS, xss_val); /* * At present, KVM only supports a guest IA32_XSS value of 0. Verify * that trying to set the guest IA32_XSS to an unsupported value fails. @@ -67,7 +67,7 @@ int main(int argc, char *argv[]) * IA32_XSS is in the KVM_GET_MSR_INDEX_LIST. */ for (i =3D 0; i < MSR_BITS; ++i) { - r =3D _vcpu_set_msr(vm, vcpu->id, MSR_IA32_XSS, 1ull << i); + r =3D _vcpu_set_msr(vcpu, MSR_IA32_XSS, 1ull << i); TEST_ASSERT(r =3D=3D 0 || is_supported_msr(MSR_IA32_XSS), "IA32_XSS was able to be set, but was not found in KVM_GET_MSR_INDE= X_LIST.\n"); } --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 1D4DBC47089 for ; Wed, 4 May 2022 23:07:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1383793AbiEDXH0 (ORCPT ); Wed, 4 May 2022 19:07:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58762 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379418AbiEDXAO (ORCPT ); Wed, 4 May 2022 19:00:14 -0400 Received: from mail-pg1-x54a.google.com (mail-pg1-x54a.google.com [IPv6:2607:f8b0:4864:20::54a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5E8A758394 for ; Wed, 4 May 2022 15:53:31 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id h128-20020a636c86000000b003c574b3422aso1341522pgc.12 for ; Wed, 04 May 2022 15:53:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=ImITDaKyBtkThLaJUpWVVxyOwWtQRhgJK8uxleorh40=; b=I5/dXrI0Zyq6aPBwvpxtNVIny30LcjxKzdxTg+xMw2uABG3fTfwqU+CKeyDML3A7WE iESb6YqBVExXCIGsVHaIAm5hvPYKw3lYWxsVSLmYdILkTa5cZ8pDnkW/x306HFtCxwoe IRwrHnq9Nr5YRwY9oir2y/2Lo0EILNcXKJR6xL6u3/QtNve6r0WMyNWJioGm5cQwyBcv BoWOj9KuzLkR8MphZd/e+/Cd+v+9HPbJeRMgan7fxADO0fp3vn9pKeKzIN3qVtB1Xd5C Md5v6wfpzwUz3MfM/e7COSB5ZI05qcTEZzEQ4M6HGRqzAbYwygorlDrB/G6ZMqdsm4or 9PFA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=ImITDaKyBtkThLaJUpWVVxyOwWtQRhgJK8uxleorh40=; b=csYiIODw/aM3uphKbIFtf6uHaHbgoD8HCtAoXsFbqxL03M5fjg79NUFUClXAq0AxvX jZ7oBKLBJvmSqb1nE8iYrxiY2L9owaHVtScNZHnrZEaz993H1eTC9BUUFxqItnEBevfM O134MVIB6llv/mAdHFL7Mr1uGwAYpyUbs24cC31/ZXYN9iUc7Y+kWXmdQ5K3cc2fx09V pE6qZxWMoAbuB0AzZRaZzZ7THm4nrb6UxGzB1Tg7648Vw4z//ALWl/wqIUYmzV7DvSQ0 COW3/UfdeAen1cEIPJKrmWPK6VzI9AJbzxa5qNZKoMBCcpOzVmU3d3GmSsOHxRP9M//u 9OTQ== X-Gm-Message-State: AOAM5326wMLsAPZmLE5zmDrPvoeGG5iIDd6N9i5ygUsvnZs8WmFCECi4 2MXuptDJ9Yo26BioE5VNdIIiMN+v544= X-Google-Smtp-Source: ABdhPJzExXBkY1l3swQDMZ7ZYuQWL0GSRHERa+Mb9iCOj8Hp691xytqU/tqSPbxCC9s7wFUjfMF+CyAw6OA= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:e510:b0:1d9:ee23:9fa1 with SMTP id t16-20020a17090ae51000b001d9ee239fa1mr140692pjy.0.1651704779761; Wed, 04 May 2022 15:52:59 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:49:07 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-122-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 121/128] KVM: selftests: Drop vcpu_get(), rename vcpu_find() => vcpu_exists() From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Drop vcpu_get() and rename vcpu_find() to vcpu_exists() to make it that much harder for a test to give meaning to a vCPU ID. I.e. force tests to capture a vCPU when the vCPU is created. Signed-off-by: Sean Christopherson --- .../selftests/kvm/include/kvm_util_base.h | 2 -- tools/testing/selftests/kvm/lib/kvm_util.c | 34 +++++++------------ 2 files changed, 13 insertions(+), 23 deletions(-) diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index c0533f2ab418..5ab9b5380310 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -93,8 +93,6 @@ struct kvm_vm { continue; \ else =20 -struct kvm_vcpu *vcpu_get(struct kvm_vm *vm, uint32_t vcpu_id); - struct userspace_mem_region * memslot2region(struct kvm_vm *vm, uint32_t memslot); =20 diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index 822bdcb5c38c..c5156e0caa98 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -463,26 +463,6 @@ kvm_userspace_memory_region_find(struct kvm_vm *vm, ui= nt64_t start, return ®ion->region; } =20 -static struct kvm_vcpu *vcpu_find(struct kvm_vm *vm, uint32_t vcpu_id) -{ - struct kvm_vcpu *vcpu; - - list_for_each_entry(vcpu, &vm->vcpus, list) { - if (vcpu->id =3D=3D vcpu_id) - return vcpu; - } - - return NULL; -} - -struct kvm_vcpu *vcpu_get(struct kvm_vm *vm, uint32_t vcpu_id) -{ - struct kvm_vcpu *vcpu =3D vcpu_find(vm, vcpu_id); - - TEST_ASSERT(vcpu, "vCPU %d does not exist", vcpu_id); - return vcpu; -} - /* * VM VCPU Remove * @@ -1053,6 +1033,18 @@ static int vcpu_mmap_sz(void) return ret; } =20 +static bool vcpu_exists(struct kvm_vm *vm, uint32_t vcpu_id) +{ + struct kvm_vcpu *vcpu; + + list_for_each_entry(vcpu, &vm->vcpus, list) { + if (vcpu->id =3D=3D vcpu_id) + return true; + } + + return false; +} + /* * Adds a virtual CPU to the VM specified by vm with the ID given by vcpu_= id. * No additional vCPU setup is done. Returns the vCPU. @@ -1062,7 +1054,7 @@ struct kvm_vcpu *__vm_vcpu_add(struct kvm_vm *vm, uin= t32_t vcpu_id) struct kvm_vcpu *vcpu; =20 /* Confirm a vcpu with the specified id doesn't already exist. */ - TEST_ASSERT(!vcpu_find(vm, vcpu_id), "vCPU%d already exists\n", vcpu_id); + TEST_ASSERT(!vcpu_exists(vm, vcpu_id), "vCPU%d already exists\n", vcpu_id= ); =20 /* Allocate and initialize new vcpu structure. */ vcpu =3D calloc(1, sizeof(*vcpu)); --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 EEFC1C38A2D for ; Wed, 4 May 2022 23:07:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1384410AbiEDXHz (ORCPT ); Wed, 4 May 2022 19:07:55 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58380 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379677AbiEDXAQ (ORCPT ); Wed, 4 May 2022 19:00:16 -0400 Received: from mail-pj1-x1049.google.com (mail-pj1-x1049.google.com [IPv6:2607:f8b0:4864:20::1049]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4F50B58E5A for ; Wed, 4 May 2022 15:53:34 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id v10-20020a17090a0c8a00b001c7a548e4f7so3577283pja.2 for ; Wed, 04 May 2022 15:53:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=Cs3lrlk//K4240Pgi+YoisL+MewmkZIIzZJnWpx8Epc=; b=Ez6iCchAKdIAAjAmpHp4etoCIMg+Bnn/G4Mheykuxmmv3dfo6s/myDED7m3XWOCD5u JbG3fUMs8ffxJN0RSjiFHFN75y772Kjr0rDdbIW7xCCNtrsgW9P52Yz9Fw7AZJg8MFgZ z1gfwzzgKAsK/5uw2GGpGMZWp2Bb5axfVGTLROgogGcWUwHSww3YEHnMDinXcqkIEAMo ZeYtfWaOh4VabHzYWAI9/k/oYGm4K0V5rKzJXBWDvUeWa3ghL6Wb7R6VSoeGKPl+uQ/v xsV8qrGDkKr0xz+fUfA+W/Qpj+JUiPkz45Vr9bgekZrC7ijaGF4Y9rfrnMDADrMf7m/n wC1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=Cs3lrlk//K4240Pgi+YoisL+MewmkZIIzZJnWpx8Epc=; b=3d2C6e/eodZIyHJnKBU0TDDC/86JnlEBP8k90mu2rvOG5UqqBGs6H2zzWX1s7dvVwh kiAxswOPNS83mMvr8gXxentAs+A12MjQ9SbmWEneCmvKugqedshxp0l8mvdUFTfwOZq/ /E6eCvPR4lEksk6bc0mX1MpXXvSb+/mR46Bc5BFYKXhx3psiR17QpR6WS65pTOjVx6iU gJRj3w52JNej6nAX5TFQcE/zteXnuAfi7++P2O3a+rpgB1hyBUY2K6ksQtjU8KKrNmxN UvgkoPCRF90gUnrGsh+qu0YvnpT4AbgKaqz49fU0cN1aKcYboY27R13KiD1GTIFzcys0 tl6w== X-Gm-Message-State: AOAM530Mhmz8fQRIMjEvI9kLH4pp25JwMZ7bKEBw4wz27FU86v6jVr4b Cyhe/sAfJh/7JGzpPpxfZ21x2uGbdmE= X-Google-Smtp-Source: ABdhPJwOTKxPcmf9BY/3xz/aG2xI6EbTE3LGKyI2GIzyxNuOmgTlKZmr7lBMQtZAGbje4/LPKg6JzKCYDpM= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:b41:b0:50d:35fa:476d with SMTP id p1-20020a056a000b4100b0050d35fa476dmr22962184pfo.33.1651704781583; Wed, 04 May 2022 15:53:01 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:49:08 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-123-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 122/128] KVM: selftests: Remove vcpu_state() helper From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Drop vcpu_state() now that all tests reference vcpu->run directly. Signed-off-by: Sean Christopherson --- .../selftests/kvm/include/kvm_util_base.h | 1 - tools/testing/selftests/kvm/lib/kvm_util.c | 19 +------------------ 2 files changed, 1 insertion(+), 19 deletions(-) diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index 5ab9b5380310..97376446c093 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -290,7 +290,6 @@ void *addr_gva2hva(struct kvm_vm *vm, vm_vaddr_t gva); vm_paddr_t addr_hva2gpa(struct kvm_vm *vm, void *hva); void *addr_gpa2alias(struct kvm_vm *vm, vm_paddr_t gpa); =20 -struct kvm_run *vcpu_state(struct kvm_vcpu *vcpu); void vcpu_run(struct kvm_vcpu *vcpu); int _vcpu_run(struct kvm_vcpu *vcpu); =20 diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index c5156e0caa98..8ee116048864 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -1005,19 +1005,7 @@ void vm_mem_region_delete(struct kvm_vm *vm, uint32_= t slot) __vm_mem_region_delete(vm, memslot2region(vm, slot), true); } =20 -/* - * VCPU mmap Size - * - * Input Args: None - * - * Output Args: None - * - * Return: - * Size of VCPU state - * - * Returns the size of the structure pointed to by the return value - * of vcpu_state(). - */ +/* Returns the size of a vCPU's kvm_run structure. */ static int vcpu_mmap_sz(void) { int dev_fd, ret; @@ -1398,11 +1386,6 @@ void vm_create_irqchip(struct kvm_vm *vm) =20 vm->has_irqchip =3D true; } -struct kvm_run *vcpu_state(struct kvm_vcpu *vcpu) -{ - return vcpu->run; -} - =20 int _vcpu_run(struct kvm_vcpu *vcpu) { --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 44CC5C38A2E for ; Wed, 4 May 2022 23:07:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1384686AbiEDXIL (ORCPT ); Wed, 4 May 2022 19:08:11 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58520 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379764AbiEDXAQ (ORCPT ); Wed, 4 May 2022 19:00:16 -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 4F68058E6A for ; Wed, 4 May 2022 15:53:35 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id l4-20020a170903244400b0015ebe12a192so1364882pls.16 for ; Wed, 04 May 2022 15:53:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=npqvMpaxMseYbV+Ei/dIX+j2zV/KvM1ygTvGj86CPKg=; b=TutRnRp0XGSAVnX87qKYngJv2H2NXOlom3yL5OR8xmLCsVcz3Sy0nLY+Lx1P9W1IYI VXu5LBvSaBsGsdPeZpNtREBX/3Rwh9D9NmkEDsGg/FIvr019Tcd7lEjlaWKIMPkHfjRg ce1TdtmSrUmeGsII2ZHj7/nfkRjTs72OYCtHuMAsFo9WIWm6+hxeH6MhHrD42ziPCyWG Qa0EAhZq+IFNXpGWcxeHYDe0yXwMZRk2Izgz48Nt5ML1b09QxsyL9xZWjhfbWHH6aNPk BrRjKzdsWavxPkFjd78J3m7+fik/WI7tn+rl4zv+sMPYkLEqMCgicSwgJlycZZTI2Dlt iO6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=npqvMpaxMseYbV+Ei/dIX+j2zV/KvM1ygTvGj86CPKg=; b=153EvtyVdzqQo5JSRnZqL2QFWX4u2JNPhRiVHrP4CyTumB8loSkCy0a30x/rdATlGv 0NSIC8VCge2tk1YWvAWfB5DZZ4v59qnVZHr/OFOt4sL1t0JiCrWCSk/7jZCDD4k/FPHo It0Kgja/r9AXDordWdLCCpVrWiaXVAo+3FABjGYGTU0ChcfZ5nbffxUW3r7BlzbCT40f lkPbZ+zajfs97vB0uhURJ2QOiRISbkKh+CcPv+h6PoJ16KSE5cZKbFKstlw9gwBpTmj5 j429swr01TLjYSCT8Z/PirzbHM9qASAZnDTe4Eo+1vsjadqT0uZPrQiT7Wr9X+kIiROE Qdmw== X-Gm-Message-State: AOAM533VNI1tnWIVD1EvWqUrYoHE5hfRBG0dmm/kwH3wZ+cVWTJYzstF 44irqzkUSQPf1ktm+eHGDeAnJql9wss= X-Google-Smtp-Source: ABdhPJxj1oBGUHl+fVvZ59fIpUjW4wvxqG6tZV8RVdKRzZvNP1kj/OW4KN0SZzq3oa+pfOxY6Bsy3RH6KcA= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:e510:b0:1d9:ee23:9fa1 with SMTP id t16-20020a17090ae51000b001d9ee239fa1mr140705pjy.0.1651704783258; Wed, 04 May 2022 15:53:03 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:49:09 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-124-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 123/128] KVM: selftests: Open code and drop 'struct kvm_vm' accessors From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Drop a variety of 'struct kvm_vm' accessors that wrap a single variable now that tests can simply reference the variable directly. Signed-off-by: Sean Christopherson --- .../selftests/kvm/dirty_log_perf_test.c | 2 +- tools/testing/selftests/kvm/dirty_log_test.c | 9 +++---- .../selftests/kvm/include/kvm_util_base.h | 6 ----- .../selftests/kvm/kvm_page_table_test.c | 2 +- tools/testing/selftests/kvm/lib/kvm_util.c | 25 ------------------- .../selftests/kvm/lib/perf_test_util.c | 7 +++--- .../selftests/kvm/max_guest_memory_test.c | 11 ++++---- .../kvm/memslot_modification_stress_test.c | 2 +- .../selftests/kvm/x86_64/hyperv_cpuid.c | 2 +- 9 files changed, 16 insertions(+), 50 deletions(-) diff --git a/tools/testing/selftests/kvm/dirty_log_perf_test.c b/tools/test= ing/selftests/kvm/dirty_log_perf_test.c index b048f4f65f15..5bf427e9e627 100644 --- a/tools/testing/selftests/kvm/dirty_log_perf_test.c +++ b/tools/testing/selftests/kvm/dirty_log_perf_test.c @@ -222,7 +222,7 @@ static void run_test(enum vm_guest_mode mode, void *arg) =20 perf_test_set_wr_fract(vm, p->wr_fract); =20 - guest_num_pages =3D (nr_vcpus * guest_percpu_mem_size) >> vm_get_page_shi= ft(vm); + guest_num_pages =3D (nr_vcpus * guest_percpu_mem_size) >> vm->page_shift; guest_num_pages =3D vm_adjust_num_guest_pages(mode, guest_num_pages); host_num_pages =3D vm_num_host_pages(mode, guest_num_pages); pages_per_slot =3D host_num_pages / p->slots; diff --git a/tools/testing/selftests/kvm/dirty_log_test.c b/tools/testing/s= elftests/kvm/dirty_log_test.c index 378efd08f7b8..64d05fe8157b 100644 --- a/tools/testing/selftests/kvm/dirty_log_test.c +++ b/tools/testing/selftests/kvm/dirty_log_test.c @@ -716,21 +716,20 @@ static void run_test(enum vm_guest_mode mode, void *a= rg) vm =3D create_vm(mode, &vcpu, 2ul << (DIRTY_MEM_BITS - PAGE_SHIFT_4K), guest_code); =20 - guest_page_size =3D vm_get_page_size(vm); + guest_page_size =3D vm->page_size; /* * A little more than 1G of guest page sized pages. Cover the * case where the size is not aligned to 64 pages. */ - guest_num_pages =3D (1ul << (DIRTY_MEM_BITS - - vm_get_page_shift(vm))) + 3; + guest_num_pages =3D (1ul << (DIRTY_MEM_BITS - vm->page_shift)) + 3; guest_num_pages =3D vm_adjust_num_guest_pages(mode, guest_num_pages); =20 host_page_size =3D getpagesize(); host_num_pages =3D vm_num_host_pages(mode, guest_num_pages); =20 if (!p->phys_offset) { - guest_test_phys_mem =3D (vm_get_max_gfn(vm) - - guest_num_pages) * guest_page_size; + guest_test_phys_mem =3D (vm->max_gfn - guest_num_pages) * + guest_page_size; guest_test_phys_mem =3D align_down(guest_test_phys_mem, host_page_size); } else { guest_test_phys_mem =3D p->phys_offset; diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index 97376446c093..6fdb2abffcd9 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -573,13 +573,7 @@ static inline struct kvm_vm *vm_create_with_one_vcpu(s= truct kvm_vcpu **vcpu, =20 struct kvm_vcpu *vm_recreate_with_one_vcpu(struct kvm_vm *vm); =20 -unsigned int vm_get_page_size(struct kvm_vm *vm); -unsigned int vm_get_page_shift(struct kvm_vm *vm); unsigned long vm_compute_max_gfn(struct kvm_vm *vm); -uint64_t vm_get_max_gfn(struct kvm_vm *vm); -int vm_get_kvm_fd(struct kvm_vm *vm); -int vm_get_fd(struct kvm_vm *vm); - unsigned int vm_calc_num_guest_pages(enum vm_guest_mode mode, size_t size); unsigned int vm_num_host_pages(enum vm_guest_mode mode, unsigned int num_g= uest_pages); unsigned int vm_num_guest_pages(enum vm_guest_mode mode, unsigned int num_= host_pages); diff --git a/tools/testing/selftests/kvm/kvm_page_table_test.c b/tools/test= ing/selftests/kvm/kvm_page_table_test.c index 8706ae358444..0f8792aa0366 100644 --- a/tools/testing/selftests/kvm/kvm_page_table_test.c +++ b/tools/testing/selftests/kvm/kvm_page_table_test.c @@ -260,7 +260,7 @@ static struct kvm_vm *pre_init_before_test(enum vm_gues= t_mode mode, void *arg) =20 /* Align down GPA of the testing memslot */ if (!p->phys_offset) - guest_test_phys_mem =3D (vm_get_max_gfn(vm) - guest_num_pages) * + guest_test_phys_mem =3D (vm->max_gfn - guest_num_pages) * guest_page_size; else guest_test_phys_mem =3D p->phys_offset; diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index 8ee116048864..a8af75167b7a 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -1820,36 +1820,11 @@ void *addr_gva2hva(struct kvm_vm *vm, vm_vaddr_t gv= a) return addr_gpa2hva(vm, addr_gva2gpa(vm, gva)); } =20 -unsigned int vm_get_page_size(struct kvm_vm *vm) -{ - return vm->page_size; -} - -unsigned int vm_get_page_shift(struct kvm_vm *vm) -{ - return vm->page_shift; -} - unsigned long __attribute__((weak)) vm_compute_max_gfn(struct kvm_vm *vm) { return ((1ULL << vm->pa_bits) >> vm->page_shift) - 1; } =20 -uint64_t vm_get_max_gfn(struct kvm_vm *vm) -{ - return vm->max_gfn; -} - -int vm_get_kvm_fd(struct kvm_vm *vm) -{ - return vm->kvm_fd; -} - -int vm_get_fd(struct kvm_vm *vm) -{ - return vm->fd; -} - static unsigned int vm_calc_num_pages(unsigned int num_pages, unsigned int page_shift, unsigned int new_page_shift, diff --git a/tools/testing/selftests/kvm/lib/perf_test_util.c b/tools/testi= ng/selftests/kvm/lib/perf_test_util.c index 7faed18f7719..f62d773eb29c 100644 --- a/tools/testing/selftests/kvm/lib/perf_test_util.c +++ b/tools/testing/selftests/kvm/lib/perf_test_util.c @@ -153,14 +153,13 @@ struct kvm_vm *perf_test_create_vm(enum vm_guest_mode= mode, int nr_vcpus, * If there should be more memory in the guest test region than there * can be pages in the guest, it will definitely cause problems. */ - TEST_ASSERT(guest_num_pages < vm_get_max_gfn(vm), + TEST_ASSERT(guest_num_pages < vm->max_gfn, "Requested more guest memory than address space allows.\n" " guest pages: %" PRIx64 " max gfn: %" PRIx64 " nr_vcpus: %d wss: %" PRIx64 "]\n", - guest_num_pages, vm_get_max_gfn(vm), nr_vcpus, - vcpu_memory_bytes); + guest_num_pages, vm->max_gfn, nr_vcpus, vcpu_memory_bytes); =20 - pta->gpa =3D (vm_get_max_gfn(vm) - guest_num_pages) * pta->guest_page_siz= e; + pta->gpa =3D (vm->max_gfn - guest_num_pages) * pta->guest_page_size; pta->gpa =3D align_down(pta->gpa, backing_src_pagesz); #ifdef __s390x__ /* Align to 1M (segment size) */ diff --git a/tools/testing/selftests/kvm/max_guest_memory_test.c b/tools/te= sting/selftests/kvm/max_guest_memory_test.c index 2391d071b395..be5c632c2fd2 100644 --- a/tools/testing/selftests/kvm/max_guest_memory_test.c +++ b/tools/testing/selftests/kvm/max_guest_memory_test.c @@ -65,8 +65,7 @@ static void *vcpu_worker(void *data) struct kvm_sregs sregs; struct kvm_regs regs; =20 - vcpu_args_set(vcpu, 3, info->start_gpa, info->end_gpa, - vm_get_page_size(vm)); + vcpu_args_set(vcpu, 3, info->start_gpa, info->end_gpa, vm->page_size); =20 /* Snapshot regs before the first run. */ vcpu_regs_get(vcpu, ®s); @@ -104,7 +103,7 @@ static pthread_t *spawn_workers(struct kvm_vm *vm, stru= ct kvm_vcpu **vcpus, TEST_ASSERT(info, "Failed to allocate vCPU gpa ranges"); =20 nr_bytes =3D ((end_gpa - start_gpa) / nr_vcpus) & - ~((uint64_t)vm_get_page_size(vm) - 1); + ~((uint64_t)vm->page_size - 1); TEST_ASSERT(nr_bytes, "C'mon, no way you have %d CPUs", nr_vcpus); =20 for (i =3D 0, gpa =3D start_gpa; i < nr_vcpus; i++, gpa +=3D nr_bytes) { @@ -220,7 +219,7 @@ int main(int argc, char *argv[]) =20 vm =3D vm_create_with_vcpus(nr_vcpus, guest_code, vcpus); =20 - max_gpa =3D vm_get_max_gfn(vm) << vm_get_page_shift(vm); + max_gpa =3D vm->max_gfn << vm->page_shift; TEST_ASSERT(max_gpa > (4 * slot_size), "MAXPHYADDR <4gb "); =20 fd =3D kvm_memfd_alloc(slot_size, hugepages); @@ -230,7 +229,7 @@ int main(int argc, char *argv[]) TEST_ASSERT(!madvise(mem, slot_size, MADV_NOHUGEPAGE), "madvise() failed"= ); =20 /* Pre-fault the memory to avoid taking mmap_sem on guest page faults. */ - for (i =3D 0; i < slot_size; i +=3D vm_get_page_size(vm)) + for (i =3D 0; i < slot_size; i +=3D vm->page_size) ((uint8_t *)mem)[i] =3D 0xaa; =20 gpa =3D 0; @@ -249,7 +248,7 @@ int main(int argc, char *argv[]) for (i =3D 0; i < slot_size; i +=3D size_1gb) __virt_pg_map(vm, gpa + i, gpa + i, X86_PAGE_SIZE_1G); #else - for (i =3D 0; i < slot_size; i +=3D vm_get_page_size(vm)) + for (i =3D 0; i < slot_size; i +=3D vm->page_size) virt_pg_map(vm, gpa + i, gpa + i); #endif } diff --git a/tools/testing/selftests/kvm/memslot_modification_stress_test.c= b/tools/testing/selftests/kvm/memslot_modification_stress_test.c index 1f9036cdcaa9..6ee7e1dde404 100644 --- a/tools/testing/selftests/kvm/memslot_modification_stress_test.c +++ b/tools/testing/selftests/kvm/memslot_modification_stress_test.c @@ -75,7 +75,7 @@ static void add_remove_memslot(struct kvm_vm *vm, usecond= s_t delay, * Add the dummy memslot just below the perf_test_util memslot, which is * at the top of the guest physical address space. */ - gpa =3D perf_test_args.gpa - pages * vm_get_page_size(vm); + gpa =3D perf_test_args.gpa - pages * vm->page_size; =20 for (i =3D 0; i < nr_modifications; i++) { usleep(delay); diff --git a/tools/testing/selftests/kvm/x86_64/hyperv_cpuid.c b/tools/test= ing/selftests/kvm/x86_64/hyperv_cpuid.c index af13c48f0f30..6df5a6356181 100644 --- a/tools/testing/selftests/kvm/x86_64/hyperv_cpuid.c +++ b/tools/testing/selftests/kvm/x86_64/hyperv_cpuid.c @@ -121,7 +121,7 @@ void test_hv_cpuid_e2big(struct kvm_vm *vm, struct kvm_= vcpu *vcpu) if (vcpu) ret =3D __vcpu_ioctl(vcpu, KVM_GET_SUPPORTED_HV_CPUID, &cpuid); else - ret =3D __kvm_ioctl(vm_get_kvm_fd(vm), KVM_GET_SUPPORTED_HV_CPUID, &cpui= d); + ret =3D __kvm_ioctl(vm->kvm_fd, KVM_GET_SUPPORTED_HV_CPUID, &cpuid); =20 TEST_ASSERT(ret =3D=3D -1 && errno =3D=3D E2BIG, "%s KVM_GET_SUPPORTED_HV_CPUID didn't fail with -E2BIG when" --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 581C1C4321E for ; Wed, 4 May 2022 23:07:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1384783AbiEDXIO (ORCPT ); Wed, 4 May 2022 19:08:14 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59380 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235775AbiEDXAX (ORCPT ); Wed, 4 May 2022 19:00:23 -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 E4AC05933E for ; Wed, 4 May 2022 15:53:38 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id ij27-20020a170902ab5b00b0015d41282214so1376117plb.9 for ; Wed, 04 May 2022 15:53:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=dFBe1lmgUuHfgVEf/tWxUdsjz8V/jIyv1HB3zTqy8d4=; b=gUIn0iKG/RJ6GvoYEmstIRITXyAtpehhtZpI5KlyTDmXmDCxmvXoCaRAIjNy0bvsj+ 0Rr36FjT3G4TWn/IGVUKeS2vqTtfGoXyg3JPXDvB4JymtdUUYWCjbiaOMu4yuQlwPMya cA1wjotdw4yJtuaM73VHgXy3K+c/QBRXaS0OZv+CHmETsBFVkRRjOHDUcMqkuqDSJ6sD oXGRxNctSTYu8yYSoc12aYEJrNL8KXfaDwT6ETxmSfUk+5sKqwSPJqMLIHkn1orexrda OKDN3Lif6bTpYlCxUX7vhPB2u4/mZKuE6EyCxgzMt0pjsqAvzXp7ACyxguLd06COt6eC NL2g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=dFBe1lmgUuHfgVEf/tWxUdsjz8V/jIyv1HB3zTqy8d4=; b=kv3w0LGna62ILe33274NX7/DDwFUOR2k9niV8gu3eVJ+trlyYcbU3aYLp7CIIqGklY 8+wXqBAa2/WwwiueAur2pceU6f8c5lM8LPlz9v0lAAqUEcNcVMbZT0mMWiRt6hewn2sP VpBq0/gsOenRqFSolSN5pNGspH7dEDR23qgQhKYIkt+DSYTkrF12WN1rCMavqcbR85Jz T34Zu0loZarEAgkiUenHYCqDnGxyaowWL6W4Eo7FyNMcOCGxjSaefwuay6URHUd31NX0 S1KPIXNuO45Y03V8TDfh9jB0hyzmz9T9Z/o4Y/w8cMJWjEdF4UAjPgHlcTMvdgAYzbnh 2GTw== X-Gm-Message-State: AOAM532mILX2xldHOSmYt+TBsgbxjdzKcOlcW76DC9maTvahJaRtoWeT 6ZQwbka0JyFI5LXLpJmg/FUl7UbBlMU= X-Google-Smtp-Source: ABdhPJy7czNhLhfLpBDbJ9Qzf8nvp7Cs7jqZHyJfSrtrQRieDYfcDTd6otPWsu9HkJCAwnDIctCRazIWH0w= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:903:244b:b0:15e:9b15:4890 with SMTP id l11-20020a170903244b00b0015e9b154890mr20515502pls.160.1651704785043; Wed, 04 May 2022 15:53:05 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:49:10 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-125-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 124/128] KVM: selftests: Drop @slot0_mem_pages from __vm_create_with_vcpus() From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" All callers of __vm_create_with_vcpus() pass DEFAULT_GUEST_PHY_PAGES for @slot_mem_pages; drop the param and just hardcode the "default" as the base number of pages for slot0. Signed-off-by: Sean Christopherson --- .../selftests/kvm/include/kvm_util_base.h | 9 +++----- .../selftests/kvm/kvm_page_table_test.c | 5 ++--- tools/testing/selftests/kvm/lib/kvm_util.c | 21 +++++++------------ .../selftests/kvm/lib/perf_test_util.c | 4 ++-- 4 files changed, 14 insertions(+), 25 deletions(-) diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index 6fdb2abffcd9..7867f6c7ae2c 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -542,18 +542,15 @@ static inline struct kvm_vm *vm_create(uint64_t nr_pa= ges) return __vm_create(VM_MODE_DEFAULT, nr_pages); } =20 -/* Like vm_create_default_with_vcpus, but accepts mode and slot0 memory as= a parameter */ struct kvm_vm *__vm_create_with_vcpus(enum vm_guest_mode mode, uint32_t nr= _vcpus, - uint64_t slot0_mem_pages, uint64_t extra_mem_pages, - uint32_t num_percpu_pages, void *guest_code, - struct kvm_vcpu *vcpus[]); + uint64_t extra_mem_pages, uint32_t num_percpu_pages, + void *guest_code, struct kvm_vcpu *vcpus[]); =20 static inline struct kvm_vm *vm_create_with_vcpus(uint32_t nr_vcpus, void *guest_code, struct kvm_vcpu *vcpus[]) { - return __vm_create_with_vcpus(VM_MODE_DEFAULT, nr_vcpus, - DEFAULT_GUEST_PHY_PAGES, 0, 0, + return __vm_create_with_vcpus(VM_MODE_DEFAULT, nr_vcpus, 0, 0, guest_code, vcpus); } =20 diff --git a/tools/testing/selftests/kvm/kvm_page_table_test.c b/tools/test= ing/selftests/kvm/kvm_page_table_test.c index 0f8792aa0366..a68c57572ab4 100644 --- a/tools/testing/selftests/kvm/kvm_page_table_test.c +++ b/tools/testing/selftests/kvm/kvm_page_table_test.c @@ -254,9 +254,8 @@ static struct kvm_vm *pre_init_before_test(enum vm_gues= t_mode mode, void *arg) =20 /* Create a VM with enough guest pages */ guest_num_pages =3D test_mem_size / guest_page_size; - vm =3D __vm_create_with_vcpus(mode, nr_vcpus, DEFAULT_GUEST_PHY_PAGES, - guest_num_pages, 0, guest_code, - test_args.vcpus); + vm =3D __vm_create_with_vcpus(mode, nr_vcpus, guest_num_pages, 0, + guest_code, test_args.vcpus); =20 /* Align down GPA of the testing memslot */ if (!p->phys_offset) diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index a8af75167b7a..a63acd40bcf5 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -284,7 +284,6 @@ struct kvm_vm *__vm_create(enum vm_guest_mode mode, uin= t64_t nr_pages) * Input Args: * mode - VM Mode (e.g. VM_MODE_P52V48_4K) * nr_vcpus - VCPU count - * slot0_mem_pages - Slot0 physical memory size * extra_mem_pages - Non-slot0 physical memory total size * num_percpu_pages - Per-cpu physical memory pages * guest_code - Guest entry point @@ -295,15 +294,13 @@ struct kvm_vm *__vm_create(enum vm_guest_mode mode, u= int64_t nr_pages) * 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), - * with customized slot0 memory size, at least 512 pages currently. + * Creates a VM with the mode specified by mode (e.g. VM_MODE_P52V48_4K). * extra_mem_pages is only used to calculate the maximum page table size, * no real memory allocation for non-slot0 memory in this function. */ struct kvm_vm *__vm_create_with_vcpus(enum vm_guest_mode mode, uint32_t nr= _vcpus, - uint64_t slot0_mem_pages, uint64_t extra_mem_pages, - uint32_t num_percpu_pages, void *guest_code, - struct kvm_vcpu *vcpus[]) + uint64_t extra_mem_pages, uint32_t num_percpu_pages, + void *guest_code, struct kvm_vcpu *vcpus[]) { uint64_t vcpu_pages, extra_pg_pages, pages; struct kvm_vm *vm; @@ -311,10 +308,6 @@ struct kvm_vm *__vm_create_with_vcpus(enum vm_guest_mo= de mode, uint32_t nr_vcpus =20 TEST_ASSERT(!nr_vcpus || vcpus, "Must provide vCPU array"); =20 - /* Force slot0 memory size not small than DEFAULT_GUEST_PHY_PAGES */ - if (slot0_mem_pages < DEFAULT_GUEST_PHY_PAGES) - slot0_mem_pages =3D DEFAULT_GUEST_PHY_PAGES; - /* The maximum page table size for a memory region will be when the * smallest pages are used. Considering each page contains x page * table descriptors, the total extra size for page tables (for extra @@ -322,8 +315,8 @@ struct kvm_vm *__vm_create_with_vcpus(enum vm_guest_mod= e mode, uint32_t nr_vcpus * than N/x*2. */ vcpu_pages =3D (DEFAULT_STACK_PGS + num_percpu_pages) * nr_vcpus; - extra_pg_pages =3D (slot0_mem_pages + extra_mem_pages + vcpu_pages) / PTE= S_PER_MIN_PAGE * 2; - pages =3D slot0_mem_pages + vcpu_pages + extra_pg_pages; + extra_pg_pages =3D (DEFAULT_GUEST_PHY_PAGES + extra_mem_pages + vcpu_page= s) / PTES_PER_MIN_PAGE * 2; + pages =3D DEFAULT_GUEST_PHY_PAGES + vcpu_pages + extra_pg_pages; =20 TEST_ASSERT(nr_vcpus <=3D kvm_check_cap(KVM_CAP_MAX_VCPUS), "nr_vcpus =3D %d too large for host, max-vcpus =3D %d", @@ -344,8 +337,8 @@ struct kvm_vm *__vm_create_with_one_vcpu(struct kvm_vcp= u **vcpu, struct kvm_vcpu *vcpus[1]; struct kvm_vm *vm; =20 - vm =3D __vm_create_with_vcpus(VM_MODE_DEFAULT, 1, DEFAULT_GUEST_PHY_PAGES, - extra_mem_pages, 0, guest_code, vcpus); + vm =3D __vm_create_with_vcpus(VM_MODE_DEFAULT, 1, extra_mem_pages, 0, + guest_code, vcpus); =20 *vcpu =3D vcpus[0]; return vm; diff --git a/tools/testing/selftests/kvm/lib/perf_test_util.c b/tools/testi= ng/selftests/kvm/lib/perf_test_util.c index f62d773eb29c..656f309584aa 100644 --- a/tools/testing/selftests/kvm/lib/perf_test_util.c +++ b/tools/testing/selftests/kvm/lib/perf_test_util.c @@ -144,8 +144,8 @@ struct kvm_vm *perf_test_create_vm(enum vm_guest_mode m= ode, int nr_vcpus, * The memory is also added to memslot 0, but that's a benign side * effect as KVM allows aliasing HVAs in meslots. */ - vm =3D __vm_create_with_vcpus(mode, nr_vcpus, DEFAULT_GUEST_PHY_PAGES, - guest_num_pages, 0, guest_code, vcpus); + vm =3D __vm_create_with_vcpus(mode, nr_vcpus, guest_num_pages, 0, + guest_code, vcpus); =20 pta->vm =3D vm; =20 --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 881B9C47087 for ; Wed, 4 May 2022 23:07:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1382934AbiEDXGm (ORCPT ); Wed, 4 May 2022 19:06:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45496 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1380267AbiEDW7x (ORCPT ); Wed, 4 May 2022 18:59:53 -0400 Received: from mail-pg1-x54a.google.com (mail-pg1-x54a.google.com [IPv6:2607:f8b0:4864:20::54a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 24BA656F97 for ; Wed, 4 May 2022 15:53:07 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id f7-20020a6547c7000000b003c600995546so782699pgs.5 for ; Wed, 04 May 2022 15:53:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=uOr41+tdJVYLxDkWuJx6M0IYtFi7QOjS3AiAeI8OZ2o=; b=BYM2feCQSonfux390GUnTv2hcP+gXRIGb6zQ/OjqfKZmbdV9xPk3UnkzvDTRRyE9rZ uKnhq1c7y8Vo1Tgr1MGiwb8YO/EOxA3No9KRP5xYd36YdpXi+b9ejGy3SxkONe2zE9rG Y4SBVuDvnvUXvjq01xFEW637Rs0eChQ3udqFL4j7SKBIh61d0KrmdlW6cd8jTL3+mtKA Ks9zpTj4vUFRd544Y/hveN9jecRYExI4eFk3PErVs378LjjcHii/eaRnQWyMFK/+PZ3A V7v3dL6dnzCM9LXBsQynEmCCct3E/Rda+j2WoFAcm8HiHinwmdbtvHGHROOnjvvMeIQj RYEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=uOr41+tdJVYLxDkWuJx6M0IYtFi7QOjS3AiAeI8OZ2o=; b=QDCq7aLCVmc0B5Fp4rxvphxGt6+jFpJLEFli06PE6c/hx71O6Uoxmq5gUGipEavVnb NFAUrkEBLaX3L4vKKJjtGelNLx8RippJwhseOITIXBhIN6ZPZCJqv5RsRtpSoxCQCPdY yEcpCQ2fC2I681msORtQ7pxEem6n8mtEZ6MeP2+JBVafJbnvPFsJlKpjda4CGThghMuD Ry46SgNhCqrKALY8HGfOZ/n3rA95sKZf35BW/TN/L8ptkWgKTpIA0SF6Ab5ghdjOENIH 7MI0LH4JzhN/0jqjiMUztzBy3/iFLZvr4RWY3M8AXqzMVF/eEXcXSk09nOAd12NHSFTq 6fBg== X-Gm-Message-State: AOAM532YBl88Py2x1CECopELN755tkc7DmSuvUDFeAnys5PHAYWzQRCB w1diUTSRY10k/kzkVmJS8BNmwfXUmXM= X-Google-Smtp-Source: ABdhPJyoOaiCnsxksGom3aVlnpl26L3vB02cHkhbJZpmvsj/W0iDbjAknTMM4gxcfUhtvEw8jU63ySySaho= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:198f:b0:50e:7e6:6d5c with SMTP id d15-20020a056a00198f00b0050e07e66d5cmr11509289pfl.20.1651704786747; Wed, 04 May 2022 15:53:06 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:49:11 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-126-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 125/128] KVM: selftests: Drop @num_percpu_pages from __vm_create_with_vcpus() From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Drop @num_percpu_pages from __vm_create_with_vcpus(), all callers pass '0' and there's unlikely to be a test that allocates just enough memory that it needs a per-CPU allocation, but not so much that it won't just do its own memory management. Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/include/kvm_util_base.h | 4 ++-- tools/testing/selftests/kvm/kvm_page_table_test.c | 2 +- tools/testing/selftests/kvm/lib/kvm_util.c | 7 +++---- tools/testing/selftests/kvm/lib/perf_test_util.c | 2 +- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index 7867f6c7ae2c..b9c806982dbd 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -543,14 +543,14 @@ static inline struct kvm_vm *vm_create(uint64_t nr_pa= ges) } =20 struct kvm_vm *__vm_create_with_vcpus(enum vm_guest_mode mode, uint32_t nr= _vcpus, - uint64_t extra_mem_pages, uint32_t num_percpu_pages, + uint64_t extra_mem_pages, void *guest_code, struct kvm_vcpu *vcpus[]); =20 static inline struct kvm_vm *vm_create_with_vcpus(uint32_t nr_vcpus, void *guest_code, struct kvm_vcpu *vcpus[]) { - return __vm_create_with_vcpus(VM_MODE_DEFAULT, nr_vcpus, 0, 0, + return __vm_create_with_vcpus(VM_MODE_DEFAULT, nr_vcpus, 0, guest_code, vcpus); } =20 diff --git a/tools/testing/selftests/kvm/kvm_page_table_test.c b/tools/test= ing/selftests/kvm/kvm_page_table_test.c index a68c57572ab4..f42c6ac6d71d 100644 --- a/tools/testing/selftests/kvm/kvm_page_table_test.c +++ b/tools/testing/selftests/kvm/kvm_page_table_test.c @@ -254,7 +254,7 @@ static struct kvm_vm *pre_init_before_test(enum vm_gues= t_mode mode, void *arg) =20 /* Create a VM with enough guest pages */ guest_num_pages =3D test_mem_size / guest_page_size; - vm =3D __vm_create_with_vcpus(mode, nr_vcpus, guest_num_pages, 0, + vm =3D __vm_create_with_vcpus(mode, nr_vcpus, guest_num_pages, guest_code, test_args.vcpus); =20 /* Align down GPA of the testing memslot */ diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index a63acd40bcf5..a8bbafc67d97 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -285,7 +285,6 @@ struct kvm_vm *__vm_create(enum vm_guest_mode mode, uin= t64_t nr_pages) * mode - VM Mode (e.g. VM_MODE_P52V48_4K) * nr_vcpus - VCPU count * extra_mem_pages - Non-slot0 physical memory total size - * num_percpu_pages - Per-cpu physical memory pages * guest_code - Guest entry point * vcpuids - VCPU IDs * @@ -299,7 +298,7 @@ struct kvm_vm *__vm_create(enum vm_guest_mode mode, uin= t64_t nr_pages) * no real memory allocation for non-slot0 memory in this function. */ struct kvm_vm *__vm_create_with_vcpus(enum vm_guest_mode mode, uint32_t nr= _vcpus, - uint64_t extra_mem_pages, uint32_t num_percpu_pages, + uint64_t extra_mem_pages, void *guest_code, struct kvm_vcpu *vcpus[]) { uint64_t vcpu_pages, extra_pg_pages, pages; @@ -314,7 +313,7 @@ struct kvm_vm *__vm_create_with_vcpus(enum vm_guest_mod= e mode, uint32_t nr_vcpus * N pages) will be: N/x+N/x^2+N/x^3+... which is definitely smaller * than N/x*2. */ - vcpu_pages =3D (DEFAULT_STACK_PGS + num_percpu_pages) * nr_vcpus; + vcpu_pages =3D nr_vcpus * DEFAULT_STACK_PGS; extra_pg_pages =3D (DEFAULT_GUEST_PHY_PAGES + extra_mem_pages + vcpu_page= s) / PTES_PER_MIN_PAGE * 2; pages =3D DEFAULT_GUEST_PHY_PAGES + vcpu_pages + extra_pg_pages; =20 @@ -337,7 +336,7 @@ struct kvm_vm *__vm_create_with_one_vcpu(struct kvm_vcp= u **vcpu, struct kvm_vcpu *vcpus[1]; struct kvm_vm *vm; =20 - vm =3D __vm_create_with_vcpus(VM_MODE_DEFAULT, 1, extra_mem_pages, 0, + vm =3D __vm_create_with_vcpus(VM_MODE_DEFAULT, 1, extra_mem_pages, guest_code, vcpus); =20 *vcpu =3D vcpus[0]; diff --git a/tools/testing/selftests/kvm/lib/perf_test_util.c b/tools/testi= ng/selftests/kvm/lib/perf_test_util.c index 656f309584aa..1f25ed69ca98 100644 --- a/tools/testing/selftests/kvm/lib/perf_test_util.c +++ b/tools/testing/selftests/kvm/lib/perf_test_util.c @@ -144,7 +144,7 @@ struct kvm_vm *perf_test_create_vm(enum vm_guest_mode m= ode, int nr_vcpus, * The memory is also added to memslot 0, but that's a benign side * effect as KVM allows aliasing HVAs in meslots. */ - vm =3D __vm_create_with_vcpus(mode, nr_vcpus, guest_num_pages, 0, + vm =3D __vm_create_with_vcpus(mode, nr_vcpus, guest_num_pages, guest_code, vcpus); =20 pta->vm =3D vm; --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 7087CC3A59D for ; Wed, 4 May 2022 23:07:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1384873AbiEDXIT (ORCPT ); Wed, 4 May 2022 19:08:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59964 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1352240AbiEDXAm (ORCPT ); Wed, 4 May 2022 19:00:42 -0400 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 07A3059B95 for ; Wed, 4 May 2022 15:53:40 -0700 (PDT) Received: by mail-pg1-x549.google.com with SMTP id x2-20020a63aa42000000b003aafe948eeeso1366353pgo.0 for ; Wed, 04 May 2022 15:53:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=Bc79OQBz7VSqpVv6C0zGwSdEZ/a3qvofOVuHrbsk62I=; b=pBUQHFenXBa0UvW69+LqsOesNWkIaBUbns0noxqhkI01pnC0XNfSJEIn0XutmwkOcv dK1fpzu3CWz+yPqkburX9OJTMfwvSM2a0Cua7DcTbNQo8zdlaldW8TDDJeJtzmWl8Yi1 97gBzinHiT4lMZ71mPml8sQyboj6aCPeuaw88Sjc1G0zDecRePbaC5VuoJMiQ8xQHfeQ sgTZ2q53vnJywNIrCaQHWc6jjKR93Mroe1yEkiMhec6m9B8dNT6PwL2zM9WXIrNIDTHA SX42ntn1SRP37ibXJbHuibo+pJjt2BdlwRyfBhzd6pXs2pULbGK02EVdxRmsG4rS6qG3 tv7Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=Bc79OQBz7VSqpVv6C0zGwSdEZ/a3qvofOVuHrbsk62I=; b=zmtEXSqdY3X+dQwwQyJa9EY018Qnwc7Gra/Qi2iMYEkfyjxyV9WQZgJUFOZ0J7wp+7 7/C/iTiZOYT9IenZZUN1rwbbibSNWOBwVng4LYnOsL6xpRowS1jNmroLXnDkthMA8OAj rkYgW9RCbGrNYV0tgJcBv+axrklERMGUXcPuiwZKdZ6DtvT139luf+ln+TbVP/APIOMn Biw7Tft6z8aRL/oXamvx8VFjW6m3yb0+wUzELMpU62MYFNMLbGJSn9NKva1+6uQBmNaW 9XGxDANZWXV7fTeYyu/MJxZilu8o5JC76iudNM4KvRrBbvuZuKOxhcebzhXKQsd2pyD6 XaIg== X-Gm-Message-State: AOAM532fLAVcuZvrdGIgUEVlwQhEZI9os319bA7W7cXRDqWemAZlUX+9 18VspouZLe6VLCaLyvPV+vEsibqIq40= X-Google-Smtp-Source: ABdhPJzNcV42/hdE4EK2GDFm3eJi9VwO0rXbzzD6LvbGDFhxnRdCoLTEC6Iyye9Zsl2QHx+iIWr7j/qsTVM= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:d507:b0:15e:afc4:85b5 with SMTP id b7-20020a170902d50700b0015eafc485b5mr13750955plg.52.1651704788229; Wed, 04 May 2022 15:53:08 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:49:12 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-127-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 126/128] KVM: selftests: Move per-VM/per-vCPU nr pages calculation to __vm_create() From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Handle all memslot0 size adjustments in __vm_create(). Currently, the adjustments reside in __vm_create_with_vcpus(), which means tests that call vm_create() or __vm_create() directly are left to their own devices. Some tests just pass DEFAULT_GUEST_PHY_PAGES and don't bother with any adjustments, while others mimic the per-vCPU calculations. For vm_create(), and thus __vm_create(), take the number of vCPUs that will be runnable to calculate that number of per-vCPU pages needed for memslot0. To give readers a hint that neither vm_create() nor __vm_create() create vCPUs, name the parameter @nr_runnable_vcpus instead of @nr_vcpus. That also gives readers a hint as to why tests that create larger numbers of vCPUs but never actually run those vCPUs can skip straight to the vm_create_barebones() variant. Signed-off-by: Sean Christopherson --- .../selftests/kvm/aarch64/psci_cpu_on_test.c | 2 +- .../testing/selftests/kvm/aarch64/vgic_init.c | 4 +- tools/testing/selftests/kvm/dirty_log_test.c | 3 +- .../selftests/kvm/hardware_disable_test.c | 2 +- .../selftests/kvm/include/kvm_util_base.h | 9 ++- tools/testing/selftests/kvm/lib/kvm_util.c | 56 ++++++++++++------- tools/testing/selftests/kvm/s390x/resets.c | 2 +- .../kvm/x86_64/pmu_event_filter_test.c | 2 +- .../selftests/kvm/x86_64/set_boot_cpu_id.c | 5 +- .../selftests/kvm/x86_64/tsc_scaling_sync.c | 2 +- 10 files changed, 52 insertions(+), 35 deletions(-) diff --git a/tools/testing/selftests/kvm/aarch64/psci_cpu_on_test.c b/tools= /testing/selftests/kvm/aarch64/psci_cpu_on_test.c index 3ed8dcbd4227..844268d5deab 100644 --- a/tools/testing/selftests/kvm/aarch64/psci_cpu_on_test.c +++ b/tools/testing/selftests/kvm/aarch64/psci_cpu_on_test.c @@ -74,7 +74,7 @@ int main(void) struct kvm_vm *vm; struct ucall uc; =20 - vm =3D vm_create(DEFAULT_GUEST_PHY_PAGES); + vm =3D vm_create(2); ucall_init(vm, NULL); =20 vm_ioctl(vm, KVM_ARM_PREFERRED_TARGET, &init); diff --git a/tools/testing/selftests/kvm/aarch64/vgic_init.c b/tools/testin= g/selftests/kvm/aarch64/vgic_init.c index 7ee10f02d4bf..56b76fbfffea 100644 --- a/tools/testing/selftests/kvm/aarch64/vgic_init.c +++ b/tools/testing/selftests/kvm/aarch64/vgic_init.c @@ -403,7 +403,7 @@ static void test_v3_typer_accesses(void) uint32_t val; int ret, i; =20 - v.vm =3D vm_create(DEFAULT_GUEST_PHY_PAGES); + v.vm =3D vm_create(NR_VCPUS); (void)vm_vcpu_add(v.vm, 0, guest_code); =20 v.gic_fd =3D kvm_create_device(v.vm, KVM_DEV_TYPE_ARM_VGIC_V3); @@ -472,7 +472,7 @@ static struct vm_gic vm_gic_v3_create_with_vcpuids(int = nr_vcpus, struct vm_gic v; int i; =20 - v.vm =3D vm_create(DEFAULT_GUEST_PHY_PAGES); + v.vm =3D vm_create(nr_vcpus); for (i =3D 0; i < nr_vcpus; i++) vm_vcpu_add(v.vm, vcpuids[i], guest_code); =20 diff --git a/tools/testing/selftests/kvm/dirty_log_test.c b/tools/testing/s= elftests/kvm/dirty_log_test.c index 64d05fe8157b..e13cb007007b 100644 --- a/tools/testing/selftests/kvm/dirty_log_test.c +++ b/tools/testing/selftests/kvm/dirty_log_test.c @@ -672,11 +672,10 @@ static struct kvm_vm *create_vm(enum vm_guest_mode mo= de, struct kvm_vcpu **vcpu, uint64_t extra_mem_pages, void *guest_code) { struct kvm_vm *vm; - uint64_t extra_pg_pages =3D extra_mem_pages / 512 * 2; =20 pr_info("Testing guest mode: %s\n", vm_guest_mode_string(mode)); =20 - vm =3D __vm_create(mode, DEFAULT_GUEST_PHY_PAGES + extra_pg_pages); + vm =3D __vm_create(mode, 1, extra_mem_pages); =20 log_mode_create_vm_done(vm); *vcpu =3D vm_vcpu_add(vm, 0, guest_code); diff --git a/tools/testing/selftests/kvm/hardware_disable_test.c b/tools/te= sting/selftests/kvm/hardware_disable_test.c index f5eecd51fe70..5d58e52dc382 100644 --- a/tools/testing/selftests/kvm/hardware_disable_test.c +++ b/tools/testing/selftests/kvm/hardware_disable_test.c @@ -98,7 +98,7 @@ static void run_test(uint32_t run) for (i =3D 0; i < VCPU_NUM; i++) CPU_SET(i, &cpu_set); =20 - vm =3D vm_create(DEFAULT_GUEST_PHY_PAGES); + vm =3D vm_create(VCPU_NUM); =20 pr_debug("%s: [%d] start vcpus\n", __func__, run); for (i =3D 0; i < VCPU_NUM; ++i) { diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index b9c806982dbd..527f63a30668 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -528,18 +528,21 @@ vm_paddr_t vm_alloc_page_table(struct kvm_vm *vm); /* * ____vm_create() does KVM_CREATE_VM and little else. __vm_create() also * loads the test binary into guest memory and creates an IRQ chip (x86 on= ly). + * __vm_create() does NOT create vCPUs, @nr_runnable_vcpus is used purely = to + * calculate the amount of memory needed for per-vCPU data, e.g. stacks. */ struct kvm_vm *____vm_create(enum vm_guest_mode mode, uint64_t nr_pages); -struct kvm_vm *__vm_create(enum vm_guest_mode mode, uint64_t nr_pages); +struct kvm_vm *__vm_create(enum vm_guest_mode mode, uint32_t nr_runnable_v= cpus, + uint64_t nr_extra_pages); =20 static inline struct kvm_vm *vm_create_barebones(void) { return ____vm_create(VM_MODE_DEFAULT, 0); } =20 -static inline struct kvm_vm *vm_create(uint64_t nr_pages) +static inline struct kvm_vm *vm_create(uint32_t nr_runnable_vcpus) { - return __vm_create(VM_MODE_DEFAULT, nr_pages); + return __vm_create(VM_MODE_DEFAULT, nr_runnable_vcpus, 0); } =20 struct kvm_vm *__vm_create_with_vcpus(enum vm_guest_mode mode, uint32_t nr= _vcpus, diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index a8bbafc67d97..f4bd4d7559b9 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -262,12 +262,45 @@ struct kvm_vm *____vm_create(enum vm_guest_mode mode,= uint64_t nr_pages) return vm; } =20 -struct kvm_vm *__vm_create(enum vm_guest_mode mode, uint64_t nr_pages) +static uint64_t vm_nr_pages_required(uint32_t nr_runnable_vcpus, + uint64_t extra_mem_pages) { + uint64_t nr_pages; + + TEST_ASSERT(nr_runnable_vcpus, + "Use vm_create_barebones() for VMs that _never_ have vCPUs\n"); + + TEST_ASSERT(nr_runnable_vcpus <=3D kvm_check_cap(KVM_CAP_MAX_VCPUS), + "nr_vcpus =3D %d too large for host, max-vcpus =3D %d", + nr_runnable_vcpus, kvm_check_cap(KVM_CAP_MAX_VCPUS)); + + nr_pages =3D DEFAULT_GUEST_PHY_PAGES; + nr_pages +=3D nr_runnable_vcpus * DEFAULT_STACK_PGS; + + /* + * Account for the number of pages needed for the page tables. The + * maximum page table size for a memory region will be when the + * smallest page size is used. Considering each page contains x page + * table descriptors, the total extra size for page tables (for extra + * N pages) will be: N/x+N/x^2+N/x^3+... which is definitely smaller + * than N/x*2. + */ + nr_pages +=3D (nr_pages + extra_mem_pages) / PTES_PER_MIN_PAGE * 2; + + TEST_ASSERT(nr_runnable_vcpus <=3D kvm_check_cap(KVM_CAP_MAX_VCPUS), + "Host doesn't support %d vCPUs, max-vcpus =3D %d", + nr_runnable_vcpus, kvm_check_cap(KVM_CAP_MAX_VCPUS)); + + return vm_adjust_num_guest_pages(VM_MODE_DEFAULT, nr_pages); +} + +struct kvm_vm *__vm_create(enum vm_guest_mode mode, uint32_t nr_runnable_v= cpus, + uint64_t nr_extra_pages) +{ + uint64_t nr_pages =3D vm_nr_pages_required(nr_runnable_vcpus, + nr_extra_pages); struct kvm_vm *vm; =20 - nr_pages =3D vm_adjust_num_guest_pages(VM_MODE_DEFAULT, nr_pages); - vm =3D ____vm_create(mode, nr_pages); =20 kvm_vm_elf_load(vm, program_invocation_name); @@ -301,27 +334,12 @@ struct kvm_vm *__vm_create_with_vcpus(enum vm_guest_m= ode mode, uint32_t nr_vcpus uint64_t extra_mem_pages, void *guest_code, struct kvm_vcpu *vcpus[]) { - uint64_t vcpu_pages, extra_pg_pages, pages; struct kvm_vm *vm; int i; =20 TEST_ASSERT(!nr_vcpus || vcpus, "Must provide vCPU array"); =20 - /* The maximum page table size for a memory region will be when the - * smallest pages are used. Considering each page contains x page - * table descriptors, the total extra size for page tables (for extra - * N pages) will be: N/x+N/x^2+N/x^3+... which is definitely smaller - * than N/x*2. - */ - vcpu_pages =3D nr_vcpus * DEFAULT_STACK_PGS; - extra_pg_pages =3D (DEFAULT_GUEST_PHY_PAGES + extra_mem_pages + vcpu_page= s) / PTES_PER_MIN_PAGE * 2; - pages =3D DEFAULT_GUEST_PHY_PAGES + vcpu_pages + extra_pg_pages; - - TEST_ASSERT(nr_vcpus <=3D kvm_check_cap(KVM_CAP_MAX_VCPUS), - "nr_vcpus =3D %d too large for host, max-vcpus =3D %d", - nr_vcpus, kvm_check_cap(KVM_CAP_MAX_VCPUS)); - - vm =3D __vm_create(mode, pages); + vm =3D __vm_create(mode, nr_vcpus, extra_mem_pages); =20 for (i =3D 0; i < nr_vcpus; ++i) vcpus[i] =3D vm_vcpu_add(vm, i, guest_code); diff --git a/tools/testing/selftests/kvm/s390x/resets.c b/tools/testing/sel= ftests/kvm/s390x/resets.c index a06ed20670fe..d95f57c46aad 100644 --- a/tools/testing/selftests/kvm/s390x/resets.c +++ b/tools/testing/selftests/kvm/s390x/resets.c @@ -208,7 +208,7 @@ static struct kvm_vm *create_vm(struct kvm_vcpu **vcpu) { struct kvm_vm *vm; =20 - vm =3D vm_create(DEFAULT_GUEST_PHY_PAGES); + vm =3D vm_create(1); =20 *vcpu =3D vm_vcpu_add(vm, ARBITRARY_NON_ZERO_VCPU_ID, guest_code_initial); =20 diff --git a/tools/testing/selftests/kvm/x86_64/pmu_event_filter_test.c b/t= ools/testing/selftests/kvm/x86_64/pmu_event_filter_test.c index 592ff0304180..d438bcdf4378 100644 --- a/tools/testing/selftests/kvm/x86_64/pmu_event_filter_test.c +++ b/tools/testing/selftests/kvm/x86_64/pmu_event_filter_test.c @@ -340,7 +340,7 @@ static void test_pmu_config_disable(void (*guest_code)(= void)) if (!(r & KVM_PMU_CAP_DISABLE)) return; =20 - vm =3D vm_create(DEFAULT_GUEST_PHY_PAGES); + vm =3D vm_create(1); =20 cap.cap =3D KVM_CAP_PMU_CAPABILITY; cap.args[0] =3D KVM_PMU_CAP_DISABLE; diff --git a/tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c b/tools/t= esting/selftests/kvm/x86_64/set_boot_cpu_id.c index afc063178c6a..8bcaf4421dc5 100644 --- a/tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c +++ b/tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c @@ -78,13 +78,10 @@ static void run_vcpu(struct kvm_vcpu *vcpu) static struct kvm_vm *create_vm(uint32_t nr_vcpus, uint32_t bsp_vcpu_id, struct kvm_vcpu *vcpus[]) { - uint64_t vcpu_pages =3D (DEFAULT_STACK_PGS) * nr_vcpus; - uint64_t extra_pg_pages =3D vcpu_pages / PTES_PER_MIN_PAGE * nr_vcpus; - uint64_t pages =3D DEFAULT_GUEST_PHY_PAGES + vcpu_pages + extra_pg_pages; struct kvm_vm *vm; uint32_t i; =20 - vm =3D vm_create(pages); + vm =3D vm_create(nr_vcpus); =20 vm_ioctl(vm, KVM_SET_BOOT_CPU_ID, (void *)(unsigned long)bsp_vcpu_id); =20 diff --git a/tools/testing/selftests/kvm/x86_64/tsc_scaling_sync.c b/tools/= testing/selftests/kvm/x86_64/tsc_scaling_sync.c index e416af887ca0..4a962952212e 100644 --- a/tools/testing/selftests/kvm/x86_64/tsc_scaling_sync.c +++ b/tools/testing/selftests/kvm/x86_64/tsc_scaling_sync.c @@ -98,7 +98,7 @@ int main(int argc, char *argv[]) exit(KSFT_SKIP); } =20 - vm =3D vm_create(DEFAULT_GUEST_PHY_PAGES + DEFAULT_STACK_PGS * NR_TEST_VC= PUS); + vm =3D vm_create(NR_TEST_VCPUS); vm_ioctl(vm, KVM_SET_TSC_KHZ, (void *) TEST_TSC_KHZ); =20 pthread_spin_init(&create_lock, PTHREAD_PROCESS_PRIVATE); --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 8842AC433F5 for ; Wed, 4 May 2022 23:09:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379411AbiEDXJ4 (ORCPT ); Wed, 4 May 2022 19:09:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:32816 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379355AbiEDXBM (ORCPT ); Wed, 4 May 2022 19:01:12 -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 7244259BB8 for ; Wed, 4 May 2022 15:53:42 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id fy8-20020a17090b020800b001d8de2118ccso1318489pjb.8 for ; Wed, 04 May 2022 15:53:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=gLfv5SLMJcSQPQ/Ju5zaAkWd2HIOB4z3HRnHNL4SQDI=; b=WHNG80cfO6Tcty1emt0cr2ZRfola+mwo3Xx7vEmfo/M08fDw7RKpCZo2ciCaodmNRB l1KZtURFo+tUKrso6qkLkun3Y8U6L0WKSEGiniIYxYLRVgLw8TLtzp639C/oGejrt51a XSeyGK9WJMhMcmIzhJuEqPCrF91myLXOcw8ON851YzKaers7haXqum41vyTzytm/p+/t a1tEqd3oSpXOYqvVqQJlq4R1h8/pBxp8gSnslxC5rCzxbC//TZWvNb/3mVbmQQgCTBuq szX1+7oz8V14TbyCDuy/IstASVOqPEduFPfUmh1yufwgK7PPvv973HqKefcdfbPhk/RZ TD3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=gLfv5SLMJcSQPQ/Ju5zaAkWd2HIOB4z3HRnHNL4SQDI=; b=n8UNtnrTBuOgAb4wlDC8Hdna+2NGM9/b3DuGy20t+1K6859gS0WXn6hCFCabxlxH47 okcIEXsRoCNQVeRW5X9Mu6VUaTvlRCc8/qKfODGvPDJ2dvIqcwKyOt6rvzOEbAtjtPuo u6nlx7D0IvbtU7BR+jREYOe8VOkOEBE5gH7PoJ6Q/YrRroteqOtIMYethvMywFtUWgI2 4gLSNEE+TCIKYxA0w9baXeHv+W7i0Gcpq15VFInGzCn95aDnTxbQF03V8e/8t38GQVUA 4vmq42fj75OGovAy1XlATxqjBIu3BCQbc2g/ecFe0Vbs2pyRCCnChRAVjKxcur/lMXUw vdzw== X-Gm-Message-State: AOAM530r/Plz9R6h+0mEliJ9Zrcpnp443xM+xV3dWDd7HAA495I3ZSVv 6rVeAEzhUoojCZmkRGPiDBRKw9WxKGA= X-Google-Smtp-Source: ABdhPJwiqUWSlwjB4cPjqFgJiVLVDwoP4qOmo5KEo17lpHxloA+ZHrsQaErPHoJ7IxDiZXmG2ApfCJEZDDA= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:2408:b0:4f7:a8cb:9b63 with SMTP id z8-20020a056a00240800b004f7a8cb9b63mr23382390pfh.33.1651704789825; Wed, 04 May 2022 15:53:09 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:49:13 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-128-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 127/128] KVM: selftests: Trust that MAXPHYADDR > memslot0 in vmx_apic_access_test From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use vm->max_gfn to compute the highest gpa in vmx_apic_access_test, and blindly trust that the highest gfn/gpa will be well above the memory carved out for memslot0. The existing check is beyond paranoid; KVM doesn't support CPUs with host.MAXPHYADDR < 32, and the selftests are all kinds of hosed if memslot0 overlaps the local xAPIC, which resides above "lower" (below 4gb) DRAM. Signed-off-by: Sean Christopherson --- .../testing/selftests/kvm/x86_64/vmx_apic_access_test.c | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/vmx_apic_access_test.c b/to= ols/testing/selftests/kvm/x86_64/vmx_apic_access_test.c index ef7514376b1e..ccb05ef7234e 100644 --- a/tools/testing/selftests/kvm/x86_64/vmx_apic_access_test.c +++ b/tools/testing/selftests/kvm/x86_64/vmx_apic_access_test.c @@ -72,8 +72,6 @@ static void l1_guest_code(struct vmx_pages *vmx_pages, un= signed long high_gpa) int main(int argc, char *argv[]) { unsigned long apic_access_addr =3D ~0ul; - unsigned int paddr_width; - unsigned int vaddr_width; vm_vaddr_t vmx_pages_gva; unsigned long high_gpa; struct vmx_pages *vmx; @@ -86,12 +84,7 @@ int main(int argc, char *argv[]) =20 vm =3D vm_create_with_one_vcpu(&vcpu, l1_guest_code); =20 - kvm_get_cpu_address_width(&paddr_width, &vaddr_width); - high_gpa =3D (1ul << paddr_width) - getpagesize(); - if ((unsigned long)DEFAULT_GUEST_PHY_PAGES * getpagesize() > high_gpa) { - print_skip("No unbacked physical page available"); - exit(KSFT_SKIP); - } + high_gpa =3D (vm->max_gfn - 1) << vm->page_shift; =20 vmx =3D vcpu_alloc_vmx(vm, &vmx_pages_gva); prepare_virtualize_apic_accesses(vmx, vm); --=20 2.36.0.464.gb9c8b46e94-goog From nobody Sun May 10 09:12:48 2026 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 87F6AC4708B for ; Wed, 4 May 2022 23:07:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1384970AbiEDXIW (ORCPT ); Wed, 4 May 2022 19:08:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58840 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1380040AbiEDXCF (ORCPT ); Wed, 4 May 2022 19:02:05 -0400 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 04B845A087 for ; Wed, 4 May 2022 15:53:42 -0700 (PDT) Received: by mail-pg1-x549.google.com with SMTP id r9-20020a655089000000b003c612b48014so158779pgp.18 for ; Wed, 04 May 2022 15:53:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=hThR3eXvdbL6PIPwsArk6NS/Y6ItR8JxmYPs055HfNQ=; b=HZvGef4wMTUUww0ii1QoiwMBQSBC/Pvw3CoC72aul1ExRfDQ2K5By8y4/GGBcgJaeN owaaHAG/e7rStRrir9ExqsMKk4ynjLGKLmJaW5Z/6z+xjstjP5ZbhJ3Kb6wDVrH9QauE DkJedMIVsKGVgA4gID4rx3C4DyKI6MUL7S3Bffz5GU/1jUw6uYENZeYMnZJcSD1FBHxo uqhvPCUHKfzKn25stT7tccHRDWctknK2xDWQEGGvAoVl9rL2byoPoQ07LbFg5Ho4zHpN PGa+qnQwevzHvvolT3qf93eqYFEuuCX9mYdLStjxrXePI+/05RKJk2pFbAaGb7yOggAB V58A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=hThR3eXvdbL6PIPwsArk6NS/Y6ItR8JxmYPs055HfNQ=; b=kGsfdXV2RyJ7n2bVcD/F88iQ+PUa4IYbxSOCoOCHMr6KPpW3uRb45D6JnIJ/BE0xK9 NROYxUHLtEBe68CJ9tYfyCB4OZSCuFBUZQlr8B3Kv5AWGw00ppw7J7fUQZptuVagJxPB 5N7yDBeFDtcpzeLeD3rNlTjjr1XTF77AcBKoX+lrW9Te0scGkSXcZPwdZbLMR7PmsQPw wKe1rxDLvNtcBVxKH/uum6quGhaEVNcCk1t/1v1XXtVA2uAVLTlu03raOmAtNTvADGXG jwGHRImmID9/d0f+LGMpZwVyqplkqmNcYzrFKBAwHyytMDKoX1/C6n0fI6wpWs6YjQ6t 6/Tw== X-Gm-Message-State: AOAM530TwTY7GP4BsM+kbmx+kH1I4Ig9NkX/dqErYvFNnREE6qJ70GA6 ZBfzIIfgeyoTSXOyi2JMsMdOnvQefLQ= X-Google-Smtp-Source: ABdhPJwgHLHvRfb8WYuIp2kW1pjw/YQRzjjh1gfBOLY12cy5NstVGLntHtlD+eVhWnvP5CGghG3yOhajnck= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:d487:b0:15e:a0a4:69e3 with SMTP id c7-20020a170902d48700b0015ea0a469e3mr18832343plg.155.1651704791544; Wed, 04 May 2022 15:53:11 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 4 May 2022 22:49:14 +0000 In-Reply-To: <20220504224914.1654036-1-seanjc@google.com> Message-Id: <20220504224914.1654036-129-seanjc@google.com> Mime-Version: 1.0 References: <20220504224914.1654036-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 128/128] KVM: selftests: Drop DEFAULT_GUEST_PHY_PAGES, open code the magic number From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Remove DEFAULT_GUEST_PHY_PAGES and open code the magic number (with a comment) in vm_nr_pages_required(). Exposing DEFAULT_GUEST_PHY_PAGES to tests was a symptom of the VM creation APIs not cleanly supporting tests that create runnable vCPUs, but can't do so immediately. Now that tests don't have to manually compute the amount of memory needed for basic operation, make it harder for tests to do things that should be handled by the framework, i.e. force developers to improve the framework instead of hacking around flaws in individual tests. Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/include/kvm_util_base.h | 1 - tools/testing/selftests/kvm/lib/kvm_util.c | 8 +++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index 527f63a30668..d30f8e0612af 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -100,7 +100,6 @@ memslot2region(struct kvm_vm *vm, uint32_t memslot); #define KVM_UTIL_MIN_VADDR 0x2000 #define KVM_GUEST_PAGE_TABLE_MIN_PADDR 0x180000 =20 -#define DEFAULT_GUEST_PHY_PAGES 512 #define DEFAULT_GUEST_STACK_VADDR_MIN 0xab6000 #define DEFAULT_STACK_PGS 5 =20 diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index f4bd4d7559b9..a0c8333d1bf6 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -274,7 +274,13 @@ static uint64_t vm_nr_pages_required(uint32_t nr_runna= ble_vcpus, "nr_vcpus =3D %d too large for host, max-vcpus =3D %d", nr_runnable_vcpus, kvm_check_cap(KVM_CAP_MAX_VCPUS)); =20 - nr_pages =3D DEFAULT_GUEST_PHY_PAGES; + /* + * Arbitrarily allocate 512 pages (2mb when page size is 4kb) for the + * test code and other per-VM assets that will be loaded into memslot0. + */ + nr_pages =3D 512; + + /* Account for the per-vCPU stacks on behalf of the test. */ nr_pages +=3D nr_runnable_vcpus * DEFAULT_STACK_PGS; =20 /* --=20 2.36.0.464.gb9c8b46e94-goog