From nobody Tue Apr 28 07:43:45 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 75296C43334 for ; Fri, 3 Jun 2022 00:43:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239941AbiFCAns (ORCPT ); Thu, 2 Jun 2022 20:43:48 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46532 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239905AbiFCAnk (ORCPT ); Thu, 2 Jun 2022 20:43: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 BE430344CC for ; Thu, 2 Jun 2022 17:43:39 -0700 (PDT) Received: by mail-pl1-x64a.google.com with SMTP id z12-20020a170903018c00b001651395dcb8so3468678plg.12 for ; Thu, 02 Jun 2022 17:43: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=uBJGXJghPokaEwyj/cEInqgPIVHXmOKBiWBIFEM2HE8=; b=SPT3bjMX3fn8/PM3Qzh/pG4k0Dz5u6r49wRmLSF5HvwEw8RVu6pMmjcXoJJuLdjSBY mCwZPKi7I5WNiIwcyK1Rb1TA9mHbCaoADvmV3EXgObt40bdCS18bTOvLxhquEtrxRvwr WnSeu9/2p5mWcW/3R4KLtUfSOwp2Klw9FvQu5+2FEV3YLDCu7nmjU+aqAeE8anP50kU2 0JAHsXQMUqgcRCeTzoOb17QDaRauCUWFxCmb/1mhaftvBM7M8jM0qcATSAiByk2YctUY NUg4ftshZ53knC9m+pIxlhHnq/cR7UbKOpo6IobGUNeMfMOAmRh4ArxQWcNQyvxobsug fb6g== 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=uBJGXJghPokaEwyj/cEInqgPIVHXmOKBiWBIFEM2HE8=; b=sJE6oWd6YeqGj/8XMnOsvwS35/BtWhWDl0wCPTPupdpWJJ8fAsp36ryTnOZ/nLvgpE D9tXUS5JYcKlnHybyzkBeT65EkMPtlf7OuCNtMn3pPDRaY8VCtA3tAfD8YzoaQCsuInP QwDGdH3IpLAmk2j/3CARsV6CuEolu544I9P4CeJOkW/Z9X9PnXLUPMN1IyYOSkOs39LH YIiv0dKnLc+JqzgKmFZSUje3qmOAK5oHz1IOIZ0zkrGs51FTD4JeSxCsB3KUq/OPpJLH sAs1Z9ZpRBbIT+ZCEN7+gTKmUbEEoouNPvvycnsFnRcOmyCSIS0tLPLZ5TM01e6E8ntb KMPg== X-Gm-Message-State: AOAM533Ao+p8jJXakM2Zkn/TaJyo9bQlUvw7UAaW9KE7A8NN4B3eGPnT +Nb+lrlVdF+GZOPkJOnQTG8S8VvQ/XU= X-Google-Smtp-Source: ABdhPJzVihoLsJgs5GdDWHiehPJH5I0BkgDlQHt6TW97eJpcS3MryCANNqFocuOgczg3ov4E1YBaBrkP/nk= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:249:b0:1e0:a8a3:3c6c with SMTP id t9-20020a17090a024900b001e0a8a33c6cmr307282pje.0.1654217018748; Thu, 02 Jun 2022 17:43:38 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:08 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-2-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 001/144] KVM: Fix references to non-existent KVM_CAP_TRIPLE_FAULT_EVENT From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The x86-only KVM_CAP_TRIPLE_FAULT_EVENT was (appropriately) renamed to KVM_CAP_X86_TRIPLE_FAULT_EVENT when the patches were applied, but the docs and selftests got left behind. Fix them. Signed-off-by: Sean Christopherson Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- Documentation/virt/kvm/api.rst | 4 ++-- .../testing/selftests/kvm/x86_64/triple_fault_event_test.c | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Documentation/virt/kvm/api.rst b/Documentation/virt/kvm/api.rst index 5ffdc37cf7ca..42a1984fafc8 100644 --- a/Documentation/virt/kvm/api.rst +++ b/Documentation/virt/kvm/api.rst @@ -1152,7 +1152,7 @@ The following bits are defined in the flags field: =20 - KVM_VCPUEVENT_VALID_TRIPLE_FAULT may be set to signal that the triple_fault_pending field contains a valid state. This bit will - be set whenever KVM_CAP_TRIPLE_FAULT_EVENT is enabled. + be set whenever KVM_CAP_X86_TRIPLE_FAULT_EVENT is enabled. =20 ARM64: ^^^^^^ @@ -1249,7 +1249,7 @@ can be set in the flags field to signal that the exception_has_payload, exception_payload, and exception.pending fields contain a valid state and shall be written into the VCPU. =20 -If KVM_CAP_TRIPLE_FAULT_EVENT is enabled, KVM_VCPUEVENT_VALID_TRIPLE_FAULT +If KVM_CAP_X86_TRIPLE_FAULT_EVENT is enabled, KVM_VCPUEVENT_VALID_TRIPLE_F= AULT can be set in flags field to signal that the triple_fault field contains a valid state and shall be written into the VCPU. =20 diff --git a/tools/testing/selftests/kvm/x86_64/triple_fault_event_test.c b= /tools/testing/selftests/kvm/x86_64/triple_fault_event_test.c index 6e1de0631ce9..66378140764d 100644 --- a/tools/testing/selftests/kvm/x86_64/triple_fault_event_test.c +++ b/tools/testing/selftests/kvm/x86_64/triple_fault_event_test.c @@ -47,7 +47,7 @@ int main(void) struct ucall uc; =20 struct kvm_enable_cap cap =3D { - .cap =3D KVM_CAP_TRIPLE_FAULT_EVENT, + .cap =3D KVM_CAP_X86_TRIPLE_FAULT_EVENT, .args =3D {1} }; =20 @@ -56,8 +56,8 @@ int main(void) exit(KSFT_SKIP); } =20 - if (!kvm_check_cap(KVM_CAP_TRIPLE_FAULT_EVENT)) { - print_skip("KVM_CAP_TRIPLE_FAULT_EVENT not supported"); + if (!kvm_check_cap(KVM_CAP_X86_TRIPLE_FAULT_EVENT)) { + print_skip("KVM_CAP_X86_TRIPLE_FAULT_EVENT not supported"); exit(KSFT_SKIP); } =20 --=20 2.36.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 528EDC43334 for ; Fri, 3 Jun 2022 00:44:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238499AbiFCAoA (ORCPT ); Thu, 2 Jun 2022 20:44:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46566 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239915AbiFCAnn (ORCPT ); Thu, 2 Jun 2022 20:43:43 -0400 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6D87222517 for ; Thu, 2 Jun 2022 17:43:41 -0700 (PDT) Received: by mail-yb1-xb4a.google.com with SMTP id e5-20020a255005000000b0065cb3669fe9so5600657ybb.0 for ; Thu, 02 Jun 2022 17:43: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=wX/P+I0PRT/FmLuKfIiWzz4JYduTHcEOvgTKpRq6UvI=; b=ohGfmhNoBW/gE6jRNf0MXcnIOq1BnZuWfAoAaD+ubq9T5WfQumj38VOZn3zDju7uuv ikPnnwQR6COPlsfjWThFXvtwZJSgrRIoPLvN188nCZFF6Cf7U523IDVu5L5v+71pgXpf Npki5bhhOGYw6DTAoNZSH1tkMy4H9BOh4sV4I0LiXaP96P0b5GEBx2gfqWdezOP98M3n 1yC/+1zZxsQt5V5e2mR6pnXE7c5hpvTLCR/W/TEc/FGrhn//GOuv+zGRZ36x+aeM0NFw NfYNxYNxRqmlCVA61GLgexMaYEFrb5zRWmbjn24fsmLCsQhzHHWss/7zCfGRZna1wXqm E+gA== 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=wX/P+I0PRT/FmLuKfIiWzz4JYduTHcEOvgTKpRq6UvI=; b=Pt6TZ43b3lzUDvoZWlSD2zwIuGG7u/s3KDZTbC3vhH62N0fb54uuWGnmXky1Z5D5DA odd+WX9lPNXVrBGDIn/P6FfF4dmfKhAhYKmsP6An11C3ghmYbOry7my1FFuhWitcdY9/ m0nMo+RszVZxlu9rPA4LGTTfyC+xVrSxizIqyrdIr9tduE7tyk9q2rErGXcbh+odKuH4 GCcJlDnfpYIwlZepQpo553f+I56jR+jXUkuPd7OClv3oqZmc3TcQpRhEMMiq04kuqndX h1o7o6lXfCa8zyAHqMSF2httt+Bd6GLzcRPKN4XCxnOo9xWfB9Tj/FllDp5UbdSpuQeW xShw== X-Gm-Message-State: AOAM530kpEru3h2oCJfnvokelWEq65tMBd2Xj9xCO7y3sWR/FjiXcXZ1 n0DDIIM9U2KncQLo+hIDF9H5JqYpmg8= X-Google-Smtp-Source: ABdhPJxjGduPcX+/AqwEDSijp3oxgmIpIdd99OYZPvci++iHCcAWUoD30JjcDXOao0HxI6mslc7hN3RC9UI= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a81:2188:0:b0:2f5:1b53:9141 with SMTP id h130-20020a812188000000b002f51b539141mr8715333ywh.504.1654217020677; Thu, 02 Jun 2022 17:43:40 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:09 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-3-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 002/144] KVM: selftests: Fix buggy-but-benign check in test_v3_new_redist_regions() From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- 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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 0EF7FC433EF for ; Fri, 3 Jun 2022 00:43:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239928AbiFCAny (ORCPT ); Thu, 2 Jun 2022 20:43:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46570 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239918AbiFCAnn (ORCPT ); Thu, 2 Jun 2022 20:43:43 -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 F014933887 for ; Thu, 2 Jun 2022 17:43:42 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id x16-20020a63f710000000b003f6082673afso3039787pgh.15 for ; Thu, 02 Jun 2022 17:43: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=5n2c/bNAwgFAvfU6CoWalYhox7GUhMiGZPzXVhSXkXM=; b=G0uLfFZcUuPsl19sVR93iZbJ11T7hqXURRRV0pDNRgUt3yKRR5Vxbhb5xdN+8lEuWm QwoG0JIiL+VDEvFd3i0/NNCXztPiEGErys0/u4agJD16+6SjqaKUEa4oY9SBBfyTqmDG 7WicQKsA1cUpx7HIToVurviIrbDDD9G2LddpaVSrqvLV6xLnzqOdA7sm5uHAkiYmxrw0 lg38DbRmY45bjq4wBzjTW73fwsBjTtxdKf4euBleSDcMrB51NtzrZaFkqNkEETKDrOEp UlpAQZJ5R43D31e/TodebkWpq3T4UbvAN2ZPhUmgofaZ7NQd9DwtFpf8k+ZxYhVL8htC JRJw== 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=5n2c/bNAwgFAvfU6CoWalYhox7GUhMiGZPzXVhSXkXM=; b=CSdQZGVYHO5gn3VNFTHEw/yGoFBHpm2oRrrkx3kENsWmQQv5c2bi4eZEMHi5BCFrXr 1Ym4jehzoDrscUGd5F85x3Vrt0hHBHJq9hdAVTBV5/QOdv/VhpZ+b1rCm8MPX8Ys6Jkf qz7M4vZ2oSO7d8PJ8xPwQBKlv8SkqDpioLQ/gQxu4ntVrGEfNY7MaWEr3gGFk0bSqClR M3caK534Lo17wC8dGYCYAfoyV0/KuZ7vb7Rc0W9m5/orK9xa7R5Wj+/NoL9a5mWiiuPw cmZXuJM+wtWxl3lLTiMyh/OmqgU/8+7defWYFjPqiOBlcLZ9NOX0kSgNTa8COhflr/X6 WWlg== X-Gm-Message-State: AOAM532tXC7peaLfeLP1778qlNaihpZZaq3gQE0Z3WJVyRsNDeGxs4l7 FxNNYSl9WNkjDWD8H27u6SyWlWqU3Rk= X-Google-Smtp-Source: ABdhPJwW6+Sh+L/OQ/rp4QMwq/Rdk4aJjk37EogYWOqfZ9WjG7G4Dj+apcjHf/0kRCNGSg1f6yYEXNB7x2E= 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-20020a170903020f00b00158d86af473mr7727577plh.92.1654217022350; Thu, 02 Jun 2022 17:43:42 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:10 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-4-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 003/144] KVM: selftests: Fix typo in vgic_init test From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 access_v3_redist_reg() on the "current" vCPU instead of vCPU0, which is presumably what was intended by iterating over all vCPUs. Signed-off-by: Sean Christopherson Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- 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 0f046e3e953d..5e3c26564192 100644 --- a/tools/testing/selftests/kvm/aarch64/vgic_init.c +++ b/tools/testing/selftests/kvm/aarch64/vgic_init.c @@ -426,7 +426,7 @@ static void test_v3_typer_accesses(void) KVM_DEV_ARM_VGIC_CTRL_INIT, NULL, true); =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 access_v3_redist_reg(v.gic_fd, i, GICR_TYPER, &val, false); TEST_ASSERT(!ret && !val, "read GICR_TYPER before rdist region setting"); } =20 --=20 2.36.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 7F539C433EF for ; Fri, 3 Jun 2022 00:44:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239990AbiFCAoF (ORCPT ); Thu, 2 Jun 2022 20:44:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46590 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239927AbiFCAnp (ORCPT ); Thu, 2 Jun 2022 20:43: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 C0A42344D4 for ; Thu, 2 Jun 2022 17:43:44 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id nn14-20020a17090b38ce00b001e00df82de8so6409093pjb.1 for ; Thu, 02 Jun 2022 17:43: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=ulJggE6LhTR+16Vtkph2cEVy2a+ANo/coZcby2aJbGE=; b=SARr3Yrp/NFPUl9skOlX3RHfpOAWZhBuwbwrslMgUBPAHtnRp5Caw+Q/hHmieJ74s9 shPVTAB2wSEOjzdT710CzRzAKYd63QRV9VRoRGmx94bRUSYLLLoDr8R6HGQo3W59MEJt 9IWJx54IFKcqPdWPUrrG3UNp5z9nvBD45x8JWAKpbznxVYE7m6EsRDU234McMD+9cUfN e353gQoT9s08/gq2+ZCujkQ2oh0Xvy0Wr/dobe7nPKgOJ99fbn7fZ8Xa22/ZlrXz3sBS vgy4bSpH7mu778h6turQOx0NQKfDCPug8WlPDK4XdwQGXVdRobEa1ooJ5/4HYYPA23mr YRkQ== 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=ulJggE6LhTR+16Vtkph2cEVy2a+ANo/coZcby2aJbGE=; b=iKjtjaqSRb8KSf3MGyyYC75K+RlAirq2KH2xFh8tXfonjtwn87y+AFECmRQiq7Vosx uwJtHLtWIKsTziDckdsxLqDSjV0wvCPlXZjtz1gRRcSvNzlusI2Bg+CVZHKwE/3PNLPh qAVE7x9+CIkVg3yfkM/cLTj39PfbrKuzaRyviHV4MPWBOlb4aexNOXAm/qcprFkVEDbQ a2MW8jqi0XFDOt1iwK4TEd3NLYO+Vdo43xnRIhyhFnRtZUGWJOEeNXijfkApO0kLBdw7 9rOp5z64qZXZiciGXnx+0HVQQ17mu+MOBR2ZnaoCklNHBCnYjiIYbBklbPe3yEu+Po+R 8mVw== X-Gm-Message-State: AOAM5316aRwECHoki7fsPtEqpoXC6/nMInIL8Nvnbg4sf5R8OaA4q2Vg e1uFSRm7UJfj6J/kbyObklg2grFfmSk= X-Google-Smtp-Source: ABdhPJxF7YjHolpL9Nr4LGBBw5yquGD3KuzHOjpscMeGmzJC85pLAWv19iRBw2P1y+AMloJ4YweYHtAjnKc= 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-20020a170902ce0200b00151a86ddc2bmr7674812plg.57.1654217024150; Thu, 02 Jun 2022 17:43:44 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:11 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-5-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 004/144] KVM: selftests: Drop stale declarations from kvm_util_base.h From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- 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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 C2BE1C43334 for ; Fri, 3 Jun 2022 00:44:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234767AbiFCAob (ORCPT ); Thu, 2 Jun 2022 20:44:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46634 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239939AbiFCAns (ORCPT ); Thu, 2 Jun 2022 20:43:48 -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 81CE533887 for ; Thu, 2 Jun 2022 17:43:46 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id y1-20020a17090a390100b001e66bb0fcefso3254549pjb.0 for ; Thu, 02 Jun 2022 17:43: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=e9pGt9aqXwSO3dcgHU1r00dOmAi9mOGpgibN3wMXmec=; b=NLZFfZrM44P39C36s+IJzqK9FlQnWkc8ze9pB5ampM0MLA8l5FbtVokj+SVIGlRP5q rYv3eD3XaE9tghYZ/eX4AAPpScrBkLQuyibPTdI+4hZ8wFTw817nlUy9V4A7zxH/a+CP H7ubhKsBswcSfyqq9df5evfPJvskCykFU5LlBlHdI9pbl92lqptRQaf5SGvLULvIqfns 8G1l1oiVt2+nWewA/A2O5OrZMhnILY2r9HvOuI0whFER3QsqbvzRM1ffSvwxIXQzuzU+ qzIPhtJmCLJLzgZgTqW97Tnk4xo3W2xoSdtMXMNx2UZ/kqVsvidYJ09PDZmKxR97VqoJ dE7w== 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=e9pGt9aqXwSO3dcgHU1r00dOmAi9mOGpgibN3wMXmec=; b=pH/Quu+QuSigDAXYTVjlZTGEkESLY1JYS6K2FU+j8zuBz3i2LO68gtAF2fqD8FK5BO jEPuM+522TivcnMNxV2JADZETYH0uOuh1lhOxj/894mJdlJvDShA/UNojX3WFPaGrnBm x2oI5veVFKsCZ+GZBi0YLeA2R/52EI89X8JKcIArrOJSqVQg6gQ9ZQfxFQm/H7MqiQig iBG1j1gC8tt2IS/86124zRtDvfPDz5KOh1G3sKLlUTLcnGzBMEnH/ilJLledPnRnjYMA LnirMBxofv2scDXYXmPGmulJLfm9V4Ua4LtK4T+ElDYWJe25VYiIKc9uzG7TzzrL6RDh q6BQ== X-Gm-Message-State: AOAM532LNwPivIRe7eujwNvvQZqnSuzHCKB756QsEthfFvykU4jQWH9O DZ+0c0CgRi9SeI93QVg4AJyqbirLB3U= X-Google-Smtp-Source: ABdhPJw/7BXWrZy8ytEHB7MoInxJMn6jH97e7+ZxXF2V804IG7yn+b8l+4XP4nbFUNcullBBC6ubr7UwKzg= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:24c1:b0:518:c52f:f5 with SMTP id d1-20020a056a0024c100b00518c52f00f5mr7810266pfv.15.1654217025915; Thu, 02 Jun 2022 17:43:45 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:12 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-6-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 005/144] KVM: selftests: Always open VM file descriptors with O_RDWR From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../selftests/kvm/aarch64/get-reg-list.c | 2 +- .../testing/selftests/kvm/aarch64/psci_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 +- .../kvm/x86_64/max_vcpuid_cap_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 +- 19 files changed, 34 insertions(+), 36 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 d3a7dbfcbb3d..dd549cc75869 100644 --- a/tools/testing/selftests/kvm/aarch64/get-reg-list.c +++ b/tools/testing/selftests/kvm/aarch64/get-reg-list.c @@ -416,7 +416,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_test.c b/tools/testin= g/selftests/kvm/aarch64/psci_test.c index 88541de21c41..de3b5e176d04 100644 --- a/tools/testing/selftests/kvm/aarch64/psci_test.c +++ b/tools/testing/selftests/kvm/aarch64/psci_test.c @@ -78,7 +78,7 @@ static struct kvm_vm *setup_vm(void *guest_code) struct kvm_vcpu_init init; struct kvm_vm *vm; =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 e161c6dd7a02..78668605f673 100644 --- a/tools/testing/selftests/kvm/x86_64/evmcs_test.c +++ b/tools/testing/selftests/kvm/x86_64/evmcs_test.c @@ -183,7 +183,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/max_vcpuid_cap_test.c b/too= ls/testing/selftests/kvm/x86_64/max_vcpuid_cap_test.c index 3f6c1ad86cc6..28cc316c5dbe 100644 --- a/tools/testing/selftests/kvm/x86_64/max_vcpuid_cap_test.c +++ b/tools/testing/selftests/kvm/x86_64/max_vcpuid_cap_test.c @@ -18,7 +18,7 @@ int main(int argc, char *argv[]) struct kvm_enable_cap cap =3D { 0 }; int ret; =20 - vm =3D vm_create(VM_MODE_DEFAULT, 0, O_RDWR); + vm =3D vm_create(VM_MODE_DEFAULT, 0); =20 /* Get KVM_CAP_MAX_VCPU_ID cap supported in KVM */ ret =3D vm_check_cap(vm, KVM_CAP_MAX_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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 BC032C43334 for ; Fri, 3 Jun 2022 00:44:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239974AbiFCAoW (ORCPT ); Thu, 2 Jun 2022 20:44:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46646 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239948AbiFCAnt (ORCPT ); Thu, 2 Jun 2022 20:43: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 39BBC344D4 for ; Thu, 2 Jun 2022 17:43:48 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id 72-20020a63014b000000b003fce454aaf2so1344155pgb.6 for ; Thu, 02 Jun 2022 17:43: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=A2Yk1q82MRFC3fNkgpz/m7apoMQbehthuwSRqSROJ5Q=; b=WySL6Y3rEGrRF+t3glx+dd9FFmMMcgzjQXtcosLk9Sl1b/ot1F0NbU+2TB0qTTFVOB 8bKf/iygmJRQWyrEyirRfSdBUoeZ0SvVj034Lk17Puia6arQ3V9wMgl9EzSEHY1fLXz5 NKJLac+KOIBcOqzKm7C0Pd+tBdkq92sXftbFQ9PgD5kEcXPyPQiBNR23sT0aUF1d1q+x CWpgsoObHQ8x8JjYsNcfksBDdSLK79XNyK9CIfIn0yZ2sF5UyQjwVaHD8acQMah7l62x KaeDZYScZ2TFAb6kFag+7G4hfRE2UeliBfI+sj2oDk92wq9JTfjoLsxBTqadU2xH4Rg8 mUAg== 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=A2Yk1q82MRFC3fNkgpz/m7apoMQbehthuwSRqSROJ5Q=; b=OkByYWyzjyjSuMtoVD+e6Szd1dN50g3GBRzzUfGGup+2h1oOpu7pfZYEjPsDd9WHIn a58aJzN5h7cWq5k9mpDY1ssFRLE05V2Qg8D2qNI8kq85HzRGUjZuDFTBiHWL2u/aky/r Dbi2YhDtx1G2PXrp5yx58yObkades/3AMxXKOdsNs4JXGfDfLD2x12zJJXcKpjT4kdVW jhBWTAZK/IVOzA7JqT7APSZuw32aTUu9KjfI/m6EtmZj1oGuC4zZpSQ5c9eVJFyhljDC +5Vf3lTSCessTqWloeIsMV+lFkmloVlOzTcdARJUA3MmK5+wJd/poTteimeR1xXqrx1R f+uw== X-Gm-Message-State: AOAM530xbSdHbtNNJAszTh5KyJAMHQ9gRQa2npxhYMqxovX6ZKXs7kcW KGDUwtqdogj83FTInoerf4IYVM8FQ1w= X-Google-Smtp-Source: ABdhPJyPH8jIZmiaGtHNv0usv0A2i2xZZceA8jOug1+7mbkK2PMqRG4H2FZs4HclSwj+uMFlQU8zZn+4USo= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:e94e:b0:154:3a4:c5e8 with SMTP id b14-20020a170902e94e00b0015403a4c5e8mr7659827pll.19.1654217027676; Thu, 02 Jun 2022 17:43:47 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:13 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-7-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 006/144] KVM: selftests: Add another underscore to inner ioctl() helpers From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../selftests/kvm/aarch64/get-reg-list.c | 6 ++--- .../selftests/kvm/aarch64/hypercalls.c | 2 +- .../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 +- 13 files changed, 39 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 dd549cc75869..441c98ffb812 100644 --- a/tools/testing/selftests/kvm/aarch64/get-reg-list.c +++ b/tools/testing/selftests/kvm/aarch64/get-reg-list.c @@ -457,7 +457,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); @@ -469,7 +469,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); @@ -481,7 +481,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/hypercalls.c b/tools/testi= ng/selftests/kvm/aarch64/hypercalls.c index 41e0210b7a5e..1eb9738453b4 100644 --- a/tools/testing/selftests/kvm/aarch64/hypercalls.c +++ b/tools/testing/selftests/kvm/aarch64/hypercalls.c @@ -148,7 +148,7 @@ static int set_fw_reg(struct kvm_vm *vm, uint64_t id, u= int64_t val) .addr =3D (uint64_t)&val, }; =20 - return _vcpu_ioctl(vm, 0, KVM_SET_ONE_REG, ®); + return __vcpu_ioctl(vm, 0, KVM_SET_ONE_REG, ®); } =20 static void get_fw_reg(struct kvm_vm *vm, uint64_t id, uint64_t *addr) 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 5e3c26564192..8c16b5a750e5 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 abc0ae5a4fe1..c89e6b1fbfb1 100644 --- a/tools/testing/selftests/kvm/lib/riscv/processor.c +++ b/tools/testing/selftests/kvm/lib/riscv/processor.c @@ -295,7 +295,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 49f26f544127..206ebc2df2d3 100644 --- a/tools/testing/selftests/kvm/s390x/memop.c +++ b/tools/testing/selftests/kvm/s390x/memop.c @@ -158,9 +158,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 8c4e811bd586..75303fe8359d 100644 --- a/tools/testing/selftests/kvm/steal_time.c +++ b/tools/testing/selftests/kvm/steal_time.c @@ -166,7 +166,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); @@ -184,13 +184,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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 41457CCA47B for ; Fri, 3 Jun 2022 00:44:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240080AbiFCAof (ORCPT ); Thu, 2 Jun 2022 20:44:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46888 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239960AbiFCAoB (ORCPT ); Thu, 2 Jun 2022 20:44:01 -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 16987344D8 for ; Thu, 2 Jun 2022 17:43:50 -0700 (PDT) Received: by mail-pg1-x549.google.com with SMTP id 84-20020a630057000000b003f9caa5bccfso3047879pga.9 for ; Thu, 02 Jun 2022 17:43: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=nL2B8kY14hSwejw9RxK3Pa8QE1mSuDfrelWBw2aEYGA=; b=D/m73JaC0OEO3d5k9DGtAXjLDms0wLG5WNUOiEPwskP6Uftzig68QJPQ081eeGCOKm vaBZy/CwY3qo9xXUdARuyb9F1wMRwic7D4OCFo1YKGELMyUauKC6KF730oEZlhf1ABaA qw8tgh/F9uIgV730jNtYnjl+SyhEApeGOh02u8E1sjBvp5abr39OUhuGNJqE9VhglML5 HMevj0xIqTd9CUgWlK0LGF1lCMixoNG/YUNFUUVlURLrJrt6Xs6OiL7CDcwDfIVlg7U1 ys1XRlXe0ExarhQ2lQP+/MjbJXeF56vMQY2Vy2TXvMwMKhFp4p8bQL+uF37DBelUy4ks MPYg== 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=nL2B8kY14hSwejw9RxK3Pa8QE1mSuDfrelWBw2aEYGA=; b=AyVHij/nYWrxa9EUJyINGke1knQ55CxPC1yCXABl3lH/rFrZUg9vfc8SVUwP0JUB2Q wBfkCi5fe0hmIJ/2/1YfAXLZAk3mAiuZW39rNVGdb93/srGMMp3Tsnht/DX/WQBUzkMQ BwKYPppkSlw4Oqh1yuMQOsQbdKweyIyeyIrk7z5md3GUeOpmVihEnXKY9HRPToeO9Wwu ZeCJtJWPydzRbwnMfaAeHIwt2CkUV0t0bi/t63Ma1iRSCkTfUFcdN9LkNQZFKVnVaLNl hDnfb3X0uYY1Rp/fwZigWE4KMbC6hq40ABy6Xm5+OcP+jwhG/DcEXHnLG5XH7CJbmO5t TObg== X-Gm-Message-State: AOAM533OVxYG+sWziXrUbIYw7yU6R3j1M7emRB9lbnQiVnRBFkFkn/4a nNPUcQlLl5ZVsdPi9ILyaufc9bmXiHc= X-Google-Smtp-Source: ABdhPJzZeEHnmZWp0xNEa8TRWZbJ84+KIiGHjcsHJYw+FsOMdpDJ2uIL3OaCSRhhD9EsujNUj49DsUP1rr0= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:b396:b0:1e4:d7de:ea3d with SMTP id e22-20020a17090ab39600b001e4d7deea3dmr8358835pjr.222.1654217029475; Thu, 02 Jun 2022 17:43:49 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:14 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-8-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 007/144] KVM: selftests: Make vcpu_ioctl() a wrapper to pretty print ioctl name From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 4F6BEC43334 for ; Fri, 3 Jun 2022 00:45:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240172AbiFCAo6 (ORCPT ); Thu, 2 Jun 2022 20:44:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46886 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239968AbiFCAoB (ORCPT ); Thu, 2 Jun 2022 20:44:01 -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 8A737344E2 for ; Thu, 2 Jun 2022 17:43:51 -0700 (PDT) Received: by mail-pg1-x549.google.com with SMTP id 84-20020a630057000000b003f9caa5bccfso3047879pga.9 for ; Thu, 02 Jun 2022 17:43: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=vbfQAA+Ul0i6NiTUD66eDcmWOeT2Ff4k3bH2oNqGk+o=; b=fW2QsczCpHi98YpW1zOXzGYTv5ENYw2myDpPqijbCTy0emWh94ZJG4nW9M9sxxqbum LNy+X0g1Jybvh6Ub6IEYEECWVjouqZBk69GHkDTkGX9iRxdmTQ6RJud7RsvuZFOHilGO q4QI4rwqML4aJInGwF7r8DCZGa1OJ488FXdJe47viQaMHTLMFrL/8HdJPREUWPqU15pR HWRfc6sTgJ2kEfJCLr9Xn3pOm+pqRKnK5EDwPgDmP9zxXYvssJKCGAFfZN6AyTAKI2LT hWMzZ0WiN147EsrIgCrNUvRpcZRzMc8v1HNvZyjM1wDP1pN+fQJksZXAiugL0eNLNVgX EXVA== 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=vbfQAA+Ul0i6NiTUD66eDcmWOeT2Ff4k3bH2oNqGk+o=; b=QqTMnjRxDculhTFe+Ww26Zs5N8HHSbGq/vvGZjKS2jS/0RIsW8rF9cNR1/hQqRvScz beY87RNBm3ZDQNGmP/zqI7mFNa7jAqiJzw1ZKVEqL+7+Hp6NIvbEyhyrXA8p66ZHowW6 oeVdkWTxO0XQar3k1r3TgUn1yzZ+LFdGgc/JQFCYMLyH80Cy/TYOZ4wcHYJ1oMYZ+kzR 53iMVHgaxeuD1E6IP++0YxKBpR1dJ9Y/IZvjx0m4ug+tVApMGJtpWrmJS6QupK8D4/mY dSqi9kepZM7yCq+6JPaPW42L2H9BZ1bsfVKJumkqL62pGGraBNZH/cQjrYgMDljK9YaM 8F/w== X-Gm-Message-State: AOAM531jjY6ZHQOaEVpqMmBj28iR2vYnn5ClSbhBkcRn5Y7pK9efiPJM 4QeCpqaWFuGbBqRiQTgZx60WqhTTq34= X-Google-Smtp-Source: ABdhPJzfqkYAWuIO+biovAPb20/l2OueSYCjolNp67orX6mbvrYDZz7S5lhAUewuIUv5KkfU0wCv3pd9NGI= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:903:11c9:b0:154:be2d:eb9 with SMTP id q9-20020a17090311c900b00154be2d0eb9mr7463291plh.91.1654217031170; Thu, 02 Jun 2022 17:43:51 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:15 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-9-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 008/144] KVM: selftests: Drop @mode from common vm_create() helper From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../selftests/kvm/aarch64/get-reg-list.c | 2 +- .../testing/selftests/kvm/aarch64/psci_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 +- .../kvm/x86_64/max_vcpuid_cap_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 ++-- 14 files changed, 42 insertions(+), 40 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 441c98ffb812..ecfb773ec41e 100644 --- a/tools/testing/selftests/kvm/aarch64/get-reg-list.c +++ b/tools/testing/selftests/kvm/aarch64/get-reg-list.c @@ -416,7 +416,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_test.c b/tools/testin= g/selftests/kvm/aarch64/psci_test.c index de3b5e176d04..024a84064f1f 100644 --- a/tools/testing/selftests/kvm/aarch64/psci_test.c +++ b/tools/testing/selftests/kvm/aarch64/psci_test.c @@ -78,7 +78,7 @@ static struct kvm_vm *setup_vm(void *guest_code) struct kvm_vcpu_init init; struct kvm_vm *vm; =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/max_vcpuid_cap_test.c b/too= ls/testing/selftests/kvm/x86_64/max_vcpuid_cap_test.c index 28cc316c5dbe..e83afd4bb4cf 100644 --- a/tools/testing/selftests/kvm/x86_64/max_vcpuid_cap_test.c +++ b/tools/testing/selftests/kvm/x86_64/max_vcpuid_cap_test.c @@ -18,7 +18,7 @@ int main(int argc, char *argv[]) struct kvm_enable_cap cap =3D { 0 }; int ret; =20 - vm =3D vm_create(VM_MODE_DEFAULT, 0); + vm =3D vm_create(0); =20 /* Get KVM_CAP_MAX_VCPU_ID cap supported in KVM */ ret =3D vm_check_cap(vm, KVM_CAP_MAX_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 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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 81FBBC433EF for ; Fri, 3 Jun 2022 00:44:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239007AbiFCAoo (ORCPT ); Thu, 2 Jun 2022 20:44:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46922 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239975AbiFCAoC (ORCPT ); Thu, 2 Jun 2022 20:44:02 -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 7BB6F344E7 for ; Thu, 2 Jun 2022 17:43:53 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id o8-20020a17090a9f8800b001dc9f554c7fso3520087pjp.4 for ; Thu, 02 Jun 2022 17:43: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=ZToLd+b6cE0macinzYD5MjEUTm772bDRWbsALHzHspU=; b=MUpGemkGOlOWFgEEZSXBT4G8ZoMbr6BUHUM0fU83XgI3L/FL2odp9+OWKxJuZoi7i4 lnWVp7vFfIsPFuUNsSoRiJF71usk7FBnWnhUsqkAbwoSTrFXrzxniwtg/HmW9Bojxpmn bTgvHEMziq3moqwfzH0Z0PuCTBAYCOy3aEdq+vViMD28h+PqPzvJoTI60kZx6DO0GXlE ptAKxC3/NKZssdN8WNNpoBtH8a3QdlbaI+wUyM5W19bl7C0bdgL785r3ernzuquKjjkT J6h9+g04ZOM2a32iaJi4o6rtBTfgnNXqgdA1d/Xj2iRjOrYldfTL1umZG/BknWMLBkAX KXmQ== 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=ZToLd+b6cE0macinzYD5MjEUTm772bDRWbsALHzHspU=; b=nBW5/GH4ig0ZkPdqXho0UmPoeV3fqOZgSXFYIkFCw+gzN+I/EhUq1smBcIoKwQ0cqu z23kfUFgV6MooEzBo7PtnT3GxOHEKY422aXqttEE8MIpZwUzMcHv1mw8DSOEG6iUgslh hHK2d8jm0/2rqXNWv+WwtJmiiaO4XUchyntZvpaEywudO2bePIY2QpIEBV/xcvmwE8Sr ElKlPxW5nqPiGFHdqUEZkR+1ZOyNrbur0UNl8HA1G3qqqS3v7MxU9c3GkZyy46kY7JRv mByNLKyKWRmp5k7VtccONxOqCsRNGIXhGbOr1H9lvNhoAOfgBFWVeXhnKXM6jkgb5UXB cHxQ== X-Gm-Message-State: AOAM532xVBEprfeFz1cBY+dMtrtKlgEkbzyprKnL50aur2QpSZYf2fm5 AuzM2fbzNzSoC5nSq6u5Mv1WrkmEVUY= X-Google-Smtp-Source: ABdhPJxHcJcyC0Vrg7eTR6RNdt1Ajan21uMkaqKI7aGsbkpydsH/MuysYjLHyzbiYczf03T2zP3cotzI0zg= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a62:e116:0:b0:51b:c452:47e6 with SMTP id q22-20020a62e116000000b0051bc45247e6mr7025147pfh.25.1654217032760; Thu, 02 Jun 2022 17:43:52 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:16 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-10-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 009/144] KVM: selftests: Split vcpu_set_nested_state() into two helpers From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 8E973CCA47B for ; Fri, 3 Jun 2022 00:45:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240189AbiFCApA (ORCPT ); Thu, 2 Jun 2022 20:45:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46906 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239996AbiFCAoD (ORCPT ); Thu, 2 Jun 2022 20:44: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 294CD34640 for ; Thu, 2 Jun 2022 17:43:55 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id s2-20020a17090302c200b00158ea215fa2so3488355plk.3 for ; Thu, 02 Jun 2022 17:43: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=W6JhbVFxQhSfE2oBmj3ibrg8WXfAqBzUMGf+K0KJSzY=; b=prAe5vYIf3Ry91F9BTSC4Sd5C/CPcper7nauQlMhi1YFeseisjaYWVDEQksfhROoVR ihvo7pWzfSdGp7qpuJoXU+XtTspJ7ARmvznENmWoFexKH5VVomCLmmTYY+C5maCkCBLO LxrptDoNrymn+w3FpKDcmuK8yXZOFVhvUz/btcOtjJy/1OtMrg+kJ+i0CR++W7AO28U4 2wx1V5XhiJGW+Ha3EzHyKeIPgDd7r2fQFTpdwq2fgZT6bizTwa2dY/gJ78SfHvTeis91 8aXrWREpvxAlz4cOh0+7slwzWbJ2ILgZSwXeFftB/SzgKIMDz9jzoT7WMu1Mex+BqimI dZ8w== 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=W6JhbVFxQhSfE2oBmj3ibrg8WXfAqBzUMGf+K0KJSzY=; b=tQ5EvqA0v3PvkFp9JZUvyoJ++A3VVpMUoELNfgofAAE6wBPj/kGbFEhaNBeUBEgXwL FH0qErdiwqgRrfhuCOa6eLuTNViT8JLNOzSODA+ryOcHc1aTzQb6JKwMkZMvn+RB8nbz COyOid6gAL165xWFlDuQjgpuNJZAu1Jwf6sIsA6RTH0cQHnbqxb/f5qSAuPY+FGOoS/C ia4iIjqR/Ao9qor16TerCy+JByuOrFw3/KNR0QrFPmxTHutiSbAzlwQI8deXEy1Ggm8d d2rVEo+rZHWqXyuioIzqMpnUO8wS2R+dzsV+knH5slUUHH540Y4HaAQymX6Mv+mVprmV bGmg== X-Gm-Message-State: AOAM532KyDpHTLxnZR5chlVmfzE50ZcNfJNyVzJ4j2NZg3Q1VNzJbwxf HTmOWRMO9wT2ROVBuYBF/U5SrYBkwbk= X-Google-Smtp-Source: ABdhPJy4R6SNgApFtMJwx9+DiK1sNArMQg6zi0NCIKm8DjGGIdUOCOEiug7CU4QSS/xoMS7JgvJlAYW2vvk= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:ce8a:b0:161:8622:891e with SMTP id f10-20020a170902ce8a00b001618622891emr7451724plg.41.1654217034580; Thu, 02 Jun 2022 17:43:54 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:17 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-11-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 010/144] KVM: sefltests: Use vcpu_ioctl() and __vcpu_ioctl() helpers From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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 4fd870f37b9e..6fbbe28a0f39 100644 --- a/tools/testing/selftests/kvm/include/x86_64/processor.h +++ b/tools/testing/selftests/kvm/include/x86_64/processor.h @@ -430,12 +430,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); @@ -449,8 +456,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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 75F6CC43334 for ; Fri, 3 Jun 2022 00:44:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236771AbiFCAov (ORCPT ); Thu, 2 Jun 2022 20:44:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46894 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240002AbiFCAoD (ORCPT ); Thu, 2 Jun 2022 20:44:03 -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 9B5AF3465B for ; Thu, 2 Jun 2022 17:43:56 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id lw3-20020a17090b180300b001e31fad7d5aso6397515pjb.6 for ; Thu, 02 Jun 2022 17:43: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=aE6X5aIfjmoZMi1iYEAJcoIlasrtQaqLVj89AeYY4Cw=; b=fpAMkds5U0PawHg7Nz1aRzfBl76q66Z6oRmBVphY6V79rJfPEj8u01Rt4f9jhxDVSz Lo3Xr5Mk0uV8SF7Tvbn3NWGAf5Zih/jLLsaxRzdY8fgCuypix60YO8u6YFLoQu4xaAuJ mF6b4i8YQr3L5vI5e7MAwon/z6kqFQASjjfZkKXzaZGM1IiA8OW1lWqQ8kbl0ur0m2Pz UPjKQQ80plgrYHwTAoYkduOMRdwTjPqGz1EAsbSZAgmG1g4Vg8xEXxIc0nDu98ODVRvD 7FeA6JydHBLp0swoKuTRzZRzi5/giPbF7LpvJ3kc1a8dXND/bkS7YKOLBZalIFeZEjdK W+bw== 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=aE6X5aIfjmoZMi1iYEAJcoIlasrtQaqLVj89AeYY4Cw=; b=WHBeyvIRXYQ9bybQGNxdN34f8CWSzVjIXTOlAjZcZMLPz6j6eCndTxVhOL2QaMaL8C smcn6Ba9MqeFswfvCzC5nAJdlcTDBr4dHfDrd1nnu5/ou6pQ/9vYeTvmF+2d+4xvEMSe nyyFzI6H86bt3nJC7OACXahPUL4KITiJSF8Kc7snW9vhda3sS4f1OKiblLF95bP6qgs0 3KEg+jz5ST1nFYWHO4iXUi9J6beqswCSZYbzfkcuaeJiy0u26hRiAqFBu/chSuUTDQwN 7viP9qj+u8SMs7KCxA52lH7qzF1/jXAFma4mKc040cQNeX8Fs92rFw6cHsIreaXYeO4m 2nAw== X-Gm-Message-State: AOAM531fXoxumg8eHDE6J6vRYE2jcfbGIq6K9v4igHJFXqYz1jG5p9w5 XH6/iMO6YI9GsIhtEYK1svK15WPZBGc= X-Google-Smtp-Source: ABdhPJxA8TpuxBnJt5vYMgGydp3GjUq4sn2VeD/NOU6Cqi6YmFmNey14bakMa8BQ9Uv4e3ltX/2kLCSS1r8= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:a583:b0:15d:197b:9259 with SMTP id az3-20020a170902a58300b0015d197b9259mr7707341plb.51.1654217036046; Thu, 02 Jun 2022 17:43:56 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:18 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-12-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 011/144] KVM: selftests: Add __vcpu_run() helper From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- 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 8c16b5a750e5..a4d015e1d2f6 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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 868F5C433EF for ; Fri, 3 Jun 2022 00:45:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240129AbiFCApP (ORCPT ); Thu, 2 Jun 2022 20:45:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46928 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239997AbiFCAoD (ORCPT ); Thu, 2 Jun 2022 20:44:03 -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 6717337A19 for ; Thu, 2 Jun 2022 17:43:58 -0700 (PDT) Received: by mail-pg1-x549.google.com with SMTP id i9-20020a632209000000b003facc62e253so3048324pgi.11 for ; Thu, 02 Jun 2022 17:43: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=6TqR2TtIAFDMyHtwdQ6ENJHifFWcPp2E/NJNAkiSnxY=; b=rZo71jz3I3CHllW5m5dbKxPzI1pahTR9DNVlag83m6Pe4XBUeASe+SZzMU+ciNtnPB vRd+DaUa5qB/4JZWvhlp4awSpPgP8dAXrS+gA3hI7C94HkfWuZovsblQc6nck67ouwXu g2HdrIfPNqLLoCdz8GmF1dtWRcMcF5gUvArVKfC+4LeIX5187lG9KKDStS51RZqI3BCD tu15Q7ZB1O6xnrrqp0ed9DLJJ8F+h6/RIZq5tI1LAOblgqurGWg25wH1ZCF2Ut3IaNOO xGr3RL/ZGbPPbdJv+rjrIXwq/R/wQCD37vPbF3M2jvCrvP3IT5AWMZat/uT8Jl3mw+WR A6Sg== 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=6TqR2TtIAFDMyHtwdQ6ENJHifFWcPp2E/NJNAkiSnxY=; b=a3y3IxFEzTBnqcBn4xuvRM6buzKzJ5lmSWC830U5cxLfn76Dm4wwu7AiG0oSJYm/6V Xdm2/n8d8UVpaGmak17UFBg649KYKZgiJAoLvmUptjxxl8MnYfM4RIZ5taVDGsStDk5F xKq515Trqno/kUkcPqT5+XTANgyX6Cr3OHXETyqrtriQnpeL9ykGeC7+Qfgiv8oLSLN+ 87FndzWY/DHumXRH9gKyxtGdE7Jb9ZwpFTZ8rl+0lb896hra/WOgTpaw6ZU75myWTxvR fxBcbh96+EGk1k7s4LYKoIzsgGK5y5+48YItW5FzlLe42Pqm8tmuXwsHiKWjxgzP3KQ6 iRhA== X-Gm-Message-State: AOAM532z9iK6GAmdiPeONvH4FRJr/LEbrgZDMNlwxAXhADmX2LAvumSh KXrb4XwgT98cugQZGG0KYN9o49iF17U= X-Google-Smtp-Source: ABdhPJz/dR2aPeg6ELGl/oGUTP9IRPOfyOKM8EWXAZUO3HGRY3QyZtgvPshueIfkhUrHPXkgdF/bWDBeMiA= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:903:18a:b0:166:ba97:8b19 with SMTP id z10-20020a170903018a00b00166ba978b19mr2371326plg.62.1654217037855; Thu, 02 Jun 2022 17:43:57 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:19 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-13-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 012/144] KVM: selftests: Use vcpu_access_device_attr() in arm64 code From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- 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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 E0D30C433EF for ; Fri, 3 Jun 2022 00:48:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240530AbiFCAr7 (ORCPT ); Thu, 2 Jun 2022 20:47:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46950 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240005AbiFCAoD (ORCPT ); Thu, 2 Jun 2022 20:44:03 -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 1515537A28 for ; Thu, 2 Jun 2022 17:44:00 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id a23-20020a656557000000b003fa608197b9so3046868pgw.8 for ; Thu, 02 Jun 2022 17:44: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=MJVn8lgVKxvVraUGQdIqlR3qlBQ10uhP3yXGydsZbkA=; b=h41HAfLJixbFx0lWwxUXPX0fWFVDWWf3TDfX5ng8Jv57JSORyI8+ZbGdgxk5Qyr0oT iNL/1/hSNgXOO/B5gfK8B28rP93y+Kod+oa4D94mBBY95QjlzSDRRUMRUkfB4sHGbTsJ eTWI4QFwY3tM0rnC0VjGpV596gg4Ja+9JWP97ZRz0PLN2mPGYywWcHonP2kZlZSrb7Xe WryTnZhmTMFhJvfT9PXxNYnAEo2D/3wuPj5uF4iFW/3ZzSXxlfSyu6h0Xdk/0OwvXSVK EJHk/GA3LupFh0jVl/LxZRDJH5iUpnV4HnSJt/utr/BxnXOngQImapwcDpqiptJ28BRt LDUA== 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=MJVn8lgVKxvVraUGQdIqlR3qlBQ10uhP3yXGydsZbkA=; b=rbDE6ILFmDGm7/pGgzRdZTWlW8GF7AREDMUZKzKhUjg0orxSzWhny1nFhJ7KJUYRdf 0YMc5WZmiK35j/UYjxglsHdjH4a16gSMttUUa7ZwGFdeta5zZUkvGeSCSivUlC96v5OP TSLwmG/dkS9Qb9nKNJ/G3RkRO2aYKU6huPpcBY2QpOd0SpcaYH4Q/2qyD1U4mJXSqIS5 kyMN6Dofw0eO4LE0m/VEvpxFH3bDsFRJecc/krJMSKPLtdOD3YWSaOhuLzlkZbjxUbj0 MO6dexhzW9k2X4D+hRuQVSsi+nrh0luUiRWr+htLtbeCa9Hjm/cmkrg3oBH5IgMGChts OHBg== X-Gm-Message-State: AOAM531FNS3scGBSSrD30HWPL9cnZ5kWoyq2oRKU5F6uI2ITOyy8cO3s K4TJLaXPmG4PZR8SqozbtSVljAiupWs= X-Google-Smtp-Source: ABdhPJxwF/uWAoXaSjvBRKiURJu1bgq1NlCZH3n26JoqeD0U6eqjh92J+lNNV9Q7Zl1EI1VrVOnPiVNGwpo= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90b:4b82:b0:1e6:7853:c004 with SMTP id lr2-20020a17090b4b8200b001e67853c004mr8914781pjb.136.1654217039534; Thu, 02 Jun 2022 17:43:59 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:20 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-14-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 013/144] KVM: selftests: Remove vcpu_get_fd() From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- 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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 E432BC433EF for ; Fri, 3 Jun 2022 00:47:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240466AbiFCArt (ORCPT ); Thu, 2 Jun 2022 20:47:49 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46910 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240011AbiFCAoD (ORCPT ); Thu, 2 Jun 2022 20:44:03 -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 D8982344CC for ; Thu, 2 Jun 2022 17:44:01 -0700 (PDT) Received: by mail-pl1-x64a.google.com with SMTP id h13-20020a170902f70d00b0015f4cc5d19aso3462669plo.18 for ; Thu, 02 Jun 2022 17:44: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=tpsyQW12jmAgv3in7dKrEx0XzJmqC8wtaaXcKs50cw0=; b=fQ3b+dCpSd9d5Qeu1Scb2/xil7v+BDCrJI9u3G4vYHLuSNhmtHuKvh8/0TF0rP6AUx UPnAQw1Wnqy/xL3ylPKMieyu0itC2wpq5v3sRgmiwdv1PtZISEYl/CWn+cavurHPwwRx tgjHd996wYOKElB47oCugsWAVLZ1aa0MBQ6TNZwfmmwMT51AWtyKhFYq4Q9BcboKLm5X W7QShrvXiMae6hAfk/jmUr2l8RgGz74JWfkfocGy7Oy+kMkye+zAayN5hqABRGNYKTNn eunYG181Zk0GZ6YHiR4d4x7GkpiPB2+Fq359+XXX7KBgEGwQ1OAk+9gfQbB6ZLEo0GpY 6dYQ== 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=tpsyQW12jmAgv3in7dKrEx0XzJmqC8wtaaXcKs50cw0=; b=kFo2r3BKhQUSTvqTRlbwOio5l1KIsPJB+bEcmjrwO27dAbU5BXkGXZIMw5aos1mO3T Vvr9ht5S/pKuoNss7isYbT0RHSUQ5sRqX8tVEm4swLprxP9e8+j7Hx2qPowGJspijdKS q9giSEsQJ3IV9Hm7LalnVDzlM7tb7A9NWqnFIMdT9f9Tz3Bfiz8HXGo5LenFMvr84H2Y WDzpLeP8L9QlA0bYP9CWufchUg333DERK0x+h2JDl7hSZgb7u5BLaTirR8UubhsD2Dsk dAAoKBO9MkOrSi+2ip3zfCGYVijUJ+l9Mc9wv2ihyia7KQBOlUVMhOBdLmTOY/vDYOho CkMA== X-Gm-Message-State: AOAM5304dwbE6Dejhofm3t7DL8FdRJUHGYsGXoiJvUO0ewyuAf7nXxYD ke6iHIqYrMDQih3i+oPggdlueA+hKYU= X-Google-Smtp-Source: ABdhPJyLqYJ2WLLGQ8O6uIZlykZ8FpE+phkMnOc8VQueTLSJ5VfdpIfcezoHmp3eE4IwOaPLJuDMCIA850c= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:9a2:b0:505:974f:9fd6 with SMTP id u34-20020a056a0009a200b00505974f9fd6mr7734217pfg.12.1654217041266; Thu, 02 Jun 2022 17:44:01 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:21 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-15-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 014/144] KVM: selftests: Add vcpu_get() to retrieve and assert on vCPU existence From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- 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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 F4059C43334 for ; Fri, 3 Jun 2022 00:47:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240487AbiFCArb (ORCPT ); Thu, 2 Jun 2022 20:47:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46900 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240013AbiFCAoE (ORCPT ); Thu, 2 Jun 2022 20:44: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 AB7642250E for ; Thu, 2 Jun 2022 17:44:03 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id u1-20020a17090a2b8100b001d9325a862fso3516868pjd.6 for ; Thu, 02 Jun 2022 17:44: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=36XEOpYEohNCR+Q01vTzoi5csXjLmHgWiPTQjP0f6so=; b=DPkxiw2UxFi8eI9M47WQApqgocwHJV3aKzzdUq70auJn5gJ2hNpfwD46/NLb0EpB++ lRbsjiWihAy9Iw+Ij5xFss7Zpy6qqf5HuIdHL4jg6YE6ipxBRe5iCKK0DmniMFY7a+6i eNGT2D7WbjM98RplHYgTuPU93X1F5K02mJojLc4hmWULxIpMGollFkG90litawmtIU9U iC0+YN60QmQap5LyZSmjItpYZFJJ9oIAfLqQw/bvhf0ppZW/GOxls5xS8wMTcq361Khf LAFBw4FqIEmHmOgXjWli9hbXdLOhSEM+6RMdduLnIyId6p1Ut2rURktkTNyPAabWM1Vi Xw4w== 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=36XEOpYEohNCR+Q01vTzoi5csXjLmHgWiPTQjP0f6so=; b=YvE8g0xMM08n6UiJJNxodZ2zCJyXmPMrHVXqHxVR2kfHAhy1AXfih6Ogp1BqBaPXhE Ek7ZzXpG/Cwaws2tz/8V23pOVckpZ0WNnubd8m2uXENcPJ1AtPoAnUacSqKkrBpioMh4 5SD8trINp7+1e9bmoPQ4qTcGWd0XmpZsYhnhkDIPSA0Ufzql7CV+uohu9uRtlDsvATT9 487YlGBEilfe6fbycJf9xlUSZ9NdFkkRdZFO8IR0/HSmdPB7BBKw4rL8PhmfXz0BDLAI TLpGPwWEPCxY0Qb6Fbl1+5J5XZK+mMKx/BkbWRMPwElJtvdKa5kKfkxFnm4Lg/tqFQQ+ fuqg== X-Gm-Message-State: AOAM531K0E2QQRnruPsVOvaCyTiTTrvzM2INrX4oTEQlhh7qeIFqcNGT P/hR1ves2R8oKNAD5iJ3fsSK7GCo1nE= X-Google-Smtp-Source: ABdhPJzdGSeC0T86+jtLCBMRqiGhNV3/FHNY2wGn3K9xEccz0doOK8gB6KaZW9JbCCwx6YGNr20uXQ0Oukg= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:9a2:b0:505:974f:9fd6 with SMTP id u34-20020a056a0009a200b00505974f9fd6mr7734316pfg.12.1654217043072; Thu, 02 Jun 2022 17:44:03 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:22 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-16-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 015/144] KVM: selftests: Make vm_ioctl() a wrapper to pretty print ioctl name From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 459E4C43334 for ; Fri, 3 Jun 2022 00:47:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240542AbiFCArS (ORCPT ); Thu, 2 Jun 2022 20:47:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47060 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239989AbiFCAoH (ORCPT ); Thu, 2 Jun 2022 20:44:07 -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 65FC3344E2 for ; Thu, 2 Jun 2022 17:44:05 -0700 (PDT) Received: by mail-pg1-x549.google.com with SMTP id s204-20020a632cd5000000b003fc8fd3c242so3052572pgs.7 for ; Thu, 02 Jun 2022 17:44: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=GLvF4oeoKqtM3zoRVdtG++VX46VyCxDnDRFONMau5/s=; b=YNS+CwuSd7DhH/rAzRFBU4e3JSlCCBpujhOp2b4wC+EJ5i2mpIuri+WybfSfLDcFXE F/tGZR0WcIlPVxgNjgIuAyR1QI8YqeKxa3H6xnSLqcsGKuLydDNUizTRUslUWw6HMT9t 7lgXjj70liQ4Zl70ASJNp/fTCpGnJBfSpLqj+KGKOATvGlwszwbPA0KFjOjw2bCQvjl1 KC7qavSmsYBNQhYqtE2fu2N/FObG2lu01BsCK5FcHiIBDgGnHI/S8QTewE7cX/QZfLRS f6WnzJkwFDh8hb7Qq1nXrIEZaEXVYz5Jz9/qo3SqVet37m/KK8MWkgrajZAr+gwvrZ6x UM+Q== 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=GLvF4oeoKqtM3zoRVdtG++VX46VyCxDnDRFONMau5/s=; b=dkCA73o3Nldg61mRd+6WHVaI2yYF65oUPQtoLV57lWgR7uB5JMQe3s8V4LSsvmQ4+h 2QaeN9NVHTWLm7L6M2GtT/4axM9wIlZ5E8W1qpxgxLiPn0R5rEbILNos/QNHk7S+iijM 8Fklbezbk1rOX/9a5PYc5cNzeOLPGru3rkXE4zZRNsvQ+mbn/E8HJZZ8k5tKRt4MzquO z6DQe95iQSHfXAf3lu+9ArjQsRF+JheMtjPX0l/QHbMroW7L/D30lT+xhFOH03w4SR7G lrUjokfDWtkaEqNgDJkKjxZbBnesb1pJuHpAGJJtK/PoPuVXhxttPO2VEJCnni2MHVFN PgFQ== X-Gm-Message-State: AOAM532bfkcyO+FnxQRapMnkmDHKd8LWQBAzQYxk1cK4WRLGZ6A5O+oZ Qt8wCDbqGGeVqQnFJV/D8AZQ5pXCnzg= X-Google-Smtp-Source: ABdhPJxf277cjdczvtM08hzjAShw4Y3pHZllZCYk6BfNxRjk9R3WBs9zHZquxUTjR8azMQaxDyL5LRN06Ik= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:6a85:b0:163:d764:e1a9 with SMTP id n5-20020a1709026a8500b00163d764e1a9mr7743840plk.50.1654217044735; Thu, 02 Jun 2022 17:44:04 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:23 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-17-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 016/144] KVM: sefltests: Use vm_ioctl() and __vm_ioctl() helpers From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 3F742CCA47B for ; Fri, 3 Jun 2022 00:47:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240423AbiFCArM (ORCPT ); Thu, 2 Jun 2022 20:47:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47070 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240017AbiFCAoI (ORCPT ); Thu, 2 Jun 2022 20:44: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 0EC82344E4 for ; Thu, 2 Jun 2022 17:44:07 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id oa9-20020a17090b1bc900b001e67bbd7f83so2629907pjb.4 for ; Thu, 02 Jun 2022 17:44: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=Oi80sezCk7gxJZoW0ux8DSw87sfFjgySpbytwAP1Yiw=; b=Jgs/uoLQLZPA+XzAKH/oLm1DACsirv130BnIyfuPtZBTM4MZrMZFbwPa7qP3UZufY3 qRaywPZky147jh1jsU/dT706qaPC8Ctmn1gz8rfWIGWAJXCB2sAWQdXliCdtkFSmLjFH h5Msbe/lJ12ia0Ol8rPQgDcPtMsotWD81gT02C+Kv5Yw6wIMu67RAH9thizCZxF75L8D 2s7ewy4sXa2+wyfYXJDJrSjr+9sojn6sw7E8cQp3cPOz2aUB8ALIjiva3JgM7WXEpsKf aJ3AW9uF1sG2piXfvLnGE05OqiL4sAVZzKy5V/2LPJI8DTwXO57Ws8HB21ZreCEt25aY +tnA== 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=Oi80sezCk7gxJZoW0ux8DSw87sfFjgySpbytwAP1Yiw=; b=nw+rpRPw0UcjyUAmLPLfgUM2QedQMI9gbQCriOvAZKZSo9uXnOYBDIf1p1ohhJjX+M UzhTQD2lKPJ3oVQAd5c4Z2Cwv1YlVpZ0QPk5W5PJa321h3XKrQ35RVY1cwHrIsYjIxfc iLVsBE9BFrrXlE9WtuZoDfsAH//ULa6uvcbQKdHCjxUPbZdlxoGbBvM1CWqowmTnL/lN evv++l+EpLZNLjzpuzAlrsVToYhO+uqaZSgqfoaHh7LkHAXYHp8BbNXhJ1xcIhPE3Hsd D2J5Trv4NZnAyfB9osPPwisQojnnlO+/naoJ3Q6TSnz6PdWlHiFYl2VLeYk2Fw6Er3j0 mxDQ== X-Gm-Message-State: AOAM533aWa8QA0nA0m7jUVhbI5/hEdhtGa4eSCL1BYMkyOwF4hOFna9G 2GJ/WutKGktwk74rfkdMusOjAYfVN1Q= X-Google-Smtp-Source: ABdhPJxOwQyOENK2eLXEWE7gAKLoVv0yFZUF+Yp1uVnmfLyhreaRluoSd7OPMOjugXIGGV2dszUanAfZVDw= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:778e:b0:162:2cf7:28be with SMTP id o14-20020a170902778e00b001622cf728bemr7550680pll.0.1654217046554; Thu, 02 Jun 2022 17:44:06 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:24 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-18-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 017/144] KVM: selftests: Make kvm_ioctl() a wrapper to pretty print ioctl name From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 A752EC43334 for ; Fri, 3 Jun 2022 00:45:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229777AbiFCApX (ORCPT ); Thu, 2 Jun 2022 20:45:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46906 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239964AbiFCAoV (ORCPT ); Thu, 2 Jun 2022 20:44:21 -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 A4DB3344E6 for ; Thu, 2 Jun 2022 17:44:08 -0700 (PDT) Received: by mail-pf1-x44a.google.com with SMTP id j25-20020aa78d19000000b0051bb0c362a5so3480699pfe.19 for ; Thu, 02 Jun 2022 17:44: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=QYfBZhfEoxcJclTEblxPGQpJYzp1UV5q8tCK6+roE/8=; b=blkwkAJiFLQpO5lTvGJ0fd8MlLTj7DRKa2ciDUdUjjeocEdjh1CujZmGi3eQvhB9/0 03KmLYLj/VbLhFVCyokMtxcK9FtPEYsFAed3qw/ZYuFHr/iQDq7kUVTQjmkuSQ5awre1 VndiOzUP8fwCOHkZljMN5XDMmWh7UFWhdJYDFRKMTYw+EptAGfs1aWoFed9IhyAgtbQJ S92TXZTVOlp9+Giv+2/io2Sydw+Hx12FJQieNlF3hdHqNTLtI8/if+Volt4SF+hOviRh 0gz/D9Sy6ZR3iThenp0yYC7+UaLyAOuu1kMaD6mIebsRbBLN+y76V+jqI/uJz70tZkOR Nb1Q== 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=QYfBZhfEoxcJclTEblxPGQpJYzp1UV5q8tCK6+roE/8=; b=DfHhJ/rXPQUbQoLjX7NLBxrR9MOGF1oJl7KPcrQk+Z1O3abwsCcFj8B/+4bg5FipaS jRVPC/+KAnxg+xOcV8ZAJ5SQIv47gG6hCrqvM27YcsffTEnxdvgiy7tA7L//VYjzA/cQ uSg4NItz0xTj4eiStaI/+7ajQIfmcf/6C96DjoM267PGEQHz7tpNKFU4D8tLnt3LKQ8P L5ga1SGnJ9RBMbgntH5EI2UFpc30qj6QEfbiZyu3AyJt1mAAtcEXQ+pjKvmE83JJxKtl MUFwBQfvMZq5NuVn1//vUka4mLBSgcHXPThv4AxbSkUDBJbbzm0iaSJeru6Khj3gPTGn VenQ== X-Gm-Message-State: AOAM533W7G2turOsg63qN5aXQvGvpOMUeqOI4vn7FbVVFqFQ/JvqZhwp hQjer7TtgRwqqluXKZF24+99mP0XX/I= X-Google-Smtp-Source: ABdhPJyrGnwfof7h5GshLqPWCtDr100oxkl5tjjdVjCpQ0Hpd6yKmHeUV76RE8Np+HCadQKpn+quIAfWhjc= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:2311:b0:4e1:52bf:e466 with SMTP id h17-20020a056a00231100b004e152bfe466mr17323401pfh.77.1654217048323; Thu, 02 Jun 2022 17:44:08 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:25 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-19-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 018/144] KVM: selftests: Use kvm_ioctl() helpers From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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 6a041289fa80..d28cc12cea1d 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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 8C94CC43334 for ; Fri, 3 Jun 2022 00:47:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240411AbiFCArD (ORCPT ); Thu, 2 Jun 2022 20:47:03 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46904 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240025AbiFCAoW (ORCPT ); Thu, 2 Jun 2022 20:44: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 6D53034642 for ; Thu, 2 Jun 2022 17:44:10 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id e18-20020a170902ef5200b0016153d857a6so3482151plx.5 for ; Thu, 02 Jun 2022 17:44: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=z2cEfu0JRqcMR1VMftZYgii1CU/WQEu9toALTxwauhM=; b=IzY+jZ0l6fP0SgDIumYhA90ZPdv80niNGfUJk8krrmePdJ2laUevr1COX65r+OZnlR UwaaNjd95ns/Hlvx5TkAShO/e7OC9pyOaGlV8aOx2XpFAu0Sxy56IFfI6hj9MS9GyLpx vwHhD5cdmiPGOGRhz+fPBEmlys5Ss45GiULqyVGEHPwKGQuBXhA3qMZY0udA7sKd9B/M x1dBj5X7dc3jbKJjsA0dqSVOv7sncBn+GET/HGtGgdOS4wC9csvCGhhK5SRJNWKD0IoE CWJAseFuhjdk6DrC2x8rVZPR3Rmxy4WGIHD6IJY/8MOZI0DShFWJAQcrlK7+MUuoEcw/ MaRA== 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=z2cEfu0JRqcMR1VMftZYgii1CU/WQEu9toALTxwauhM=; b=uJ4g2F/6ekJbUfho7dUAIVz5rYs3fCRjvaM8QyzBHB5eSAfUXTNWvaEGe7XSJMSP/T sj40SmBhgKjTvYj3ukzgcN5pafrYlroPu4F0qlNRzLKsIB+QMuPpiToR4PcXn03hbDuk lzEB1BxPwPI/pLPFDbMuQJvZXhvOC7cTnBX4lbLVTwbVC1YyjXasWQOpSNStITOBuhiP H33Nq/EYvdRHRxsoV6X6kPhsT9byXDnFFwkCRq88P2qwsy/OkWFwmaExwKV7EXL+KJV+ U0bVKWgrh2lRIWDpS/SEUaqxoei+cNnEb+Ge9ssQIQ/HyCB6YyZK9gAIps3oj7sp7SqA 0VVg== X-Gm-Message-State: AOAM533U0YhHAJEiPo3gpRD28A4QgObvtmdeqSacENjMRiXFX1iBGJrp kBFxPTr7YgBWU38IpZLCn2HcRCec7j8= X-Google-Smtp-Source: ABdhPJxkDUKvx2lW87RChG9yzMFCbvFQOMHosawraMfumsXbMDyt1eytRZB6A7o/g8PgfEkTk7YqboK5yLA= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:903:186:b0:161:f394:3e75 with SMTP id z6-20020a170903018600b00161f3943e75mr7552389plg.113.1654217050066; Thu, 02 Jun 2022 17:44:10 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:26 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-20-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 019/144] KVM: selftests: Use __KVM_SYSCALL_ERROR() to handle non-KVM syscall errors From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 D1545C43334 for ; Fri, 3 Jun 2022 00:46:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240381AbiFCAqZ (ORCPT ); Thu, 2 Jun 2022 20:46:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46930 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240026AbiFCAoW (ORCPT ); Thu, 2 Jun 2022 20:44: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 8DA3D344F6 for ; Thu, 2 Jun 2022 17:44:12 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id c4-20020a170902c2c400b0015f16fb4a54so3464809pla.22 for ; Thu, 02 Jun 2022 17:44:12 -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=Tb5TEdt+uXDSL4SoIzZZFsxwZQPMR2JHTQw9ksqwQts=; b=pJrqvp20adHQPHwxo67IrBL6Ni2dd8QcTANk5X7fy/+VvSeosGEB9JVrjMTdMfncZd LHeLK/Z+hPmM2PC2dtvom4/9K/ElgYxycRPtYfhgU0o7xMme6A/X1PPz30F9rGKk0ACV 0nhvHwnGhljMHW88UlLNxtmE4cACxtxZ9KMi+jj+z93ZM3zg91ziQ9Hj5p9pjRAK7gDH zHA5fUli1JgX2XbyrF0A5bQ88KFhcI7mfEg6GfSShptRNjPHh7tU8RsG9Ly5J0W5/enm mO7ZCt2flqB7ZQFZyAitnsIPw0Y0vEqEIh746X6suO9r4SLwRgwqvscozkteBGo5clZ6 R4tw== 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=Tb5TEdt+uXDSL4SoIzZZFsxwZQPMR2JHTQw9ksqwQts=; b=VFNz7KTMUQ1C+rXeK4mHOOFJNL7+R/DKbqCxQs6OyYm2NnQQj32DwWyKMdAyWe/McT uOdyPEPk6HNIx8+/QqLqPQaJreRMZuTA3H+Z0bKlrZqzcCh4YuV2SNMPON6fNg/t/T/8 4uObddEVaJXJ+DETP4foNFIOhQ/qiGUIMN+OWfgdxoM71KQWlviQGVUpT6YRsQGtaaa8 hxnyD6EIFugDFmk5wLgNT2JqsDZETJgIUI3e9z8zckj2paBeDr1Ix0mFUW+6He2FrSOb 4XhzI6/YiKCiXJuasOe4z2xUm9D7Un/BdF687bYjQLn41gBn8snpHUPS//E0NMBVrBTC Ld0Q== X-Gm-Message-State: AOAM532YR3BO21oM+cDcAOuNVsVt7K3nlVtRfsrJklcg3dJYcNl+4s0c S35tXSYXUlstBPflUZyVfn7QmS58NSI= X-Google-Smtp-Source: ABdhPJzIw3yAqKK0Db9aZAs5dBKRwwzsmcWWK4AOkJUdNw7i4athrd2iUcoQdf6yvQdLXDnCqIBYu9xyHlM= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:903:246:b0:153:84fe:a9b0 with SMTP id j6-20020a170903024600b0015384fea9b0mr7562370plh.163.1654217051960; Thu, 02 Jun 2022 17:44:11 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:27 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-21-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 020/144] KVM: selftests: Make x86-64's register dump helpers static From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 DF591C433EF for ; Fri, 3 Jun 2022 00:46:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240389AbiFCAqj (ORCPT ); Thu, 2 Jun 2022 20:46:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47312 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240033AbiFCAoW (ORCPT ); Thu, 2 Jun 2022 20:44: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 48943344E7 for ; Thu, 2 Jun 2022 17:44:14 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id lw3-20020a17090b180300b001e31fad7d5aso6397515pjb.6 for ; Thu, 02 Jun 2022 17:44: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=rtTFGDyz/q8Y5NWxrcS4bYZ0DlnGrwIoWlUoM/5g01I=; b=gyIXPhPoIYKMp0MOhikP2eG1qFVSum9UCkYfXVUScUtD4l0pf/fmsuNsqdd0ZP6eYI nT49cXLdsBWs6BiMKuKBIyDnlHSVmZUB0i3Xt2TlZ80zFGBmiLuvCRQIDY+QTST7k/+n W1JtovkKLSEYS8r4jmvCwGcTfzcy2kdGxZfcmgpqcc9fC6ErzunKTBfXR64nQjI32gok o+4LfbKTBB20QojU6eL6XTBqEUFOJOuAoq3g0CxzgkHZIjv6UecgmcmiAjodnjGeuBt4 ovgxizXBWBWnd6aULuitT5grKSSyOKKqMwiF2TSaEvuO6aMh8MMDsP+Tbd54goCqaNMV bLPA== 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=rtTFGDyz/q8Y5NWxrcS4bYZ0DlnGrwIoWlUoM/5g01I=; b=ZShS29fSgfCDF6oXBIRqkwwSwXB9rAbSSQJKjU9XfzzpVIoFiXvahBoSlJWnPIWXb7 OGrC62HQdFuL3FqTTvJJScgwF1AC31BTS6Ug+ySpK4OpibT+ktKSRiJKB/1BZZY0ODE/ O6V8HPqk8iE2g7397Gns6IO5yEdqz/eMPYld/HdY74JK9D8f0giG1xcGSIxg6Qpb2vC2 5Q445ZCWx99l9DIxiDI0DyTNPe3ZHySK45U8iNZ4KdC4WjEwX8uz5XI/jIqqigkvLck2 58L8h2Sjmvc73yWAY0PDAYE/57RwIl82zID0m74PT0HqhfK425rmYuHIpLHb28+erhFu uyag== X-Gm-Message-State: AOAM5304B0tUNtgpbjmrN0KXAfTz1YfZGhh+SefQXw/nWtZ5ylJEHaif kS808yfaIN6EvmemQnlAX/U5v8I0Gh8= X-Google-Smtp-Source: ABdhPJxjHa+98iRwt/CT1D/OXvOix+sswXN8vidJr9Ob1D1jCiCbVbY5of+PXl2z8AabMqPmTadCnn9NRqA= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:d4d1:b0:166:3bff:4479 with SMTP id o17-20020a170902d4d100b001663bff4479mr7160432plg.161.1654217053784; Thu, 02 Jun 2022 17:44:13 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:28 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-22-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 021/144] KVM: selftests: Get rid of kvm_util_internal.h From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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... Not to mention that the approach was a complete failure as evidenced by the non-zero number of tests that were including kvm_util_internal.h. Signed-off-by: Sean Christopherson Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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 - .../kvm/x86_64/max_vcpuid_cap_test.c | 1 - .../selftests/kvm/x86_64/sev_migrate_tests.c | 1 - .../kvm/x86_64/svm_nested_soft_inject_test.c | 1 - 16 files changed, 91 insertions(+), 116 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 d28cc12cea1d..388bd7d87c02 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 00be3ef195ca..868ebab5369e 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 c89e6b1fbfb1..5ee8250dd74c 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 c2ed59f5783d..48d91b77fa1d 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/max_vcpuid_cap_test.c b/too= ls/testing/selftests/kvm/x86_64/max_vcpuid_cap_test.c index e83afd4bb4cf..419fbdc51246 100644 --- a/tools/testing/selftests/kvm/x86_64/max_vcpuid_cap_test.c +++ b/tools/testing/selftests/kvm/x86_64/max_vcpuid_cap_test.c @@ -8,7 +8,6 @@ */ =20 #include "kvm_util.h" -#include "../lib/kvm_util_internal.h" =20 #define MAX_VCPU_ID 2 =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 diff --git a/tools/testing/selftests/kvm/x86_64/svm_nested_soft_inject_test= .c b/tools/testing/selftests/kvm/x86_64/svm_nested_soft_inject_test.c index f94f1b449aef..18061677154f 100644 --- a/tools/testing/selftests/kvm/x86_64/svm_nested_soft_inject_test.c +++ b/tools/testing/selftests/kvm/x86_64/svm_nested_soft_inject_test.c @@ -17,7 +17,6 @@ #include "processor.h" #include "svm_util.h" #include "test_util.h" -#include "../lib/kvm_util_internal.h" =20 #define VCPU_ID 0 #define INT_NR 0x20 --=20 2.36.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 DEE96C433EF for ; Fri, 3 Jun 2022 00:46:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240399AbiFCAqy (ORCPT ); Thu, 2 Jun 2022 20:46:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47314 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240038AbiFCAoW (ORCPT ); Thu, 2 Jun 2022 20:44:22 -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 02D533465F for ; Thu, 2 Jun 2022 17:44:16 -0700 (PDT) Received: by mail-pl1-x64a.google.com with SMTP id d11-20020a170902cecb00b00163fe890197so3487183plg.1 for ; Thu, 02 Jun 2022 17:44: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=v2jaQRJGWpcmy76dpAvw8l7NidvPTlJiWvZRZAZ3L9w=; b=Pb5aoG1ap2O/sO+RGYrxN0XX/Ei9F4k6tM3mzx5d5jWrfhDiEQCqy0GBKphx4Sloh3 HYXQTS8/ucaMWlPkkwaHXp1Q0LYTn7Iu+4i/XOXnF7yjbML1gYrKlUl83Q6iA/Nk1fgw nTt9MxPGziMKrB9fe2eI6Iq/+r/h2739YcEzeBpYFZ4C23ClSKFKE12kkY3v2Iv1b3QT sSpbF14FSMevMIpveJa/S9hn2TrhnCki3s3eU8pPeW2Uj4l7LUozecRR0sZc/fagwlLh +ZUsgftgNPaW54nAvyzpJ+7Dc0NfdxZsx+L00bgm/zyiAjO1DXq4k6qS/E+DjIw8qG1x zsXA== 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=v2jaQRJGWpcmy76dpAvw8l7NidvPTlJiWvZRZAZ3L9w=; b=ERS6Dzx6TlgLL9j3tVFsABGdX2p7fqp2Ni5o4+gtlxbdyevEfqBwOo3X5+gonK1PGS iueVn5GGydP2Ke3rqzEUqxoUJC82jf9Nb2g8FIYYMsSGLZBOd+1fNK4GplH3yky3p1qw T2mn16I9o16Nqk78x6MXqdfB7EVxijTAxYw2gmXMmO83JkzkIWsBO1QRx4V9TePsS2de GgK57DwhlqOqHroUc8OUMGRG6Xu6KepPLTXrRopCKEfRtmi1viHJIT6SVp/6q+ItQs6O CI80BwWryA/AJkZsnsgGsH4tGyeu25R6Lvz4Pw/PKo+e0edszOUruPm87wkflEamUi4Y 9YJw== X-Gm-Message-State: AOAM533JvOk0CFLP/8vgSfDFfpAkJIQy0hLXn34/Omj7WoPd9ucfpNDW WSoID3tWiEdR0qSeaPrZSaiKlRXdl4c= X-Google-Smtp-Source: ABdhPJxRuhX9NJxoaddaDhffSdeHQF7rzzWs2tqLQsPe1agbkSns4K4u1Md2xcK5DPMpvIordbVQUQ/myTc= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90b:4b09:b0:1e0:4905:dcef with SMTP id lx9-20020a17090b4b0900b001e04905dcefmr8073825pjb.21.1654217055510; Thu, 02 Jun 2022 17:44:15 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:29 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-23-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 022/144] KVM: selftests: Use KVM_IOCTL_ERROR() for one-off arm64 ioctls From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- 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 388bd7d87c02..2e73853f485e 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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 373D0C433EF for ; Fri, 3 Jun 2022 00:45:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240232AbiFCAp1 (ORCPT ); Thu, 2 Jun 2022 20:45:27 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47028 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240047AbiFCAoX (ORCPT ); Thu, 2 Jun 2022 20:44: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 E52D637A2E for ; Thu, 2 Jun 2022 17:44:17 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id v9-20020a17090a00c900b001df693b4588so3396281pjd.8 for ; Thu, 02 Jun 2022 17:44: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=OXQvDq5c+53444Ptu0CgkXQ3o+FDWBuSilxQ50BpCEk=; b=gAwOLU/9gNV9qZ+3OgdToMAUFmtOsQg0+7szKH5bmwaZ4zhwAvIbOMa+m31nlH5Sl7 DWXxvV0CkQ51c5CMkjwmO3uUoBC8lqjQZONU7gaKEpEIXRdZSgl4OT6Pjdy2foCuvcPI 2wYawDyrGCMdXi6CNt2n5MwP07TLsiK2TGZ1kZFhkLPu1t4Sx1Cu3Rl9YgoP8hKdfzeG 7YRq4lQKg6mFRljpe+Dr02/hKLQWBmamm7C+Bi1Xhy/xIvbOU0g/KNpMPBXn4PDEu/LS fUddgCqxlBeWf3zDLKKiBl5jyz+mwyGWL16Jl86OAmbFghF54EAlKULKw0VICLsGng5g 0rdA== 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=OXQvDq5c+53444Ptu0CgkXQ3o+FDWBuSilxQ50BpCEk=; b=w6kNquUzekmv2gpAbAlCtU/R1P6Ym+vj0rWzW0MtKe2Zr0tDxZT52dBcXPna1UOjw/ CNYCnCPVcQOe3b6S/agGJ4zozTTaUEsCTuAbaP7r+AtLN3UPfC160E13/JfqOPHfLmWe zalEEWohUqOD/PvX2E6WXq74AaaxYFxoDuXo138NjF3bYEpKGaxVpvpNfaqQQNKmknfg qGsrZVntYUYCODWU72is7CcSyX2XZBCXe7wIjOvA6lWTUk/s5B3RCYU1JqPODvaM/+A6 r/x7NRd8nm0TUpHYO9rcDj0mwFvEaSZMak6i30ko9c3H4mKcSKrkSgTQrkrxyi9l1LLi tyGQ== X-Gm-Message-State: AOAM532MfsCvg1U3SIRYHsFGGL6/lSFDPy6X+k6mACBhkPv9lLVgxfAb PnV67cqt/izgTY1fmUB8rSA4h3NAtwo= X-Google-Smtp-Source: ABdhPJxWvqkRcE09cQJPwI9fgPyLh0yyxFOXswNUzliwdQqHPUn6K17rmTlZKxx6D6spi1/kFyPA6Wt+Tuc= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:26cf:b0:4f6:fc52:7b6a with SMTP id p15-20020a056a0026cf00b004f6fc527b6amr74256027pfw.39.1654217057377; Thu, 02 Jun 2022 17:44:17 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:30 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-24-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 023/144] KVM: selftests: Drop @test param from kvm_create_device() From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- 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 a4d015e1d2f6..48b795eadafd 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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 21F6FC43334 for ; Fri, 3 Jun 2022 00:46:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240325AbiFCAqF (ORCPT ); Thu, 2 Jun 2022 20:46:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46958 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240050AbiFCAoX (ORCPT ); Thu, 2 Jun 2022 20:44: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 B2E4237A3B for ; Thu, 2 Jun 2022 17:44:19 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id c11-20020a17090a4d0b00b001e4e081d525so3929345pjg.7 for ; Thu, 02 Jun 2022 17:44: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=k1Q42T/S1yGxYqwtKybSTPfRe2IMMYvCe2uCWIlmgTA=; b=ebkLZ0HK3dOEvtoudU28vFAk9x01xfHmY1dxW8/4g9TCe5ceH/j4/zL0WvK/IL3N5K +aE9C0CI/fP6PAc4sQwaP5xIWAFcYCB6lcDcfd0bbyaSsi2G8FiB6c9SsTnaq7mWgW/C TGHRc+Ifha8DHVYsVXsBFZI3PkdNFwHYROzPTbDyJxPlhhLBnYxilmZy2zFkmbzvoyCi jHEeFUjJKT4FvkOmBwiNXtkzG2j7GHuv1Ok9MYLJBT9uVGCHiIC0L1T2Tx2xabuIPzf3 O5vfigYVGuqR4eFy5A2XTyEtZN5+2+OzN3DWNyUNKZJPpVPaFvnU9OV1HSaLyESdJ/CT msww== 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=k1Q42T/S1yGxYqwtKybSTPfRe2IMMYvCe2uCWIlmgTA=; b=TILyDNNX8NHe2Zw4HPzf9JQ8C65+TGVdkeWTlFbc5Rf/8iypETkH2JqRzfPtKQ7lW2 pVS1TzILCeiv5jjrHeCuqY3BktSQcoN+rUq6MHpKIEe5uDxKU5fyUQY6fzjKRGN2lD1A YbOUYqDBOU6O2P/6uQIF9EAE5eVMCkB6/gplknN2kszdqp8FRvDfSdUOs723DIECgxe0 vlExbcqc2JCT7l0NbdWxeL+vYtyzNUFWu0Apv4nXb3DPieFESKFJK47ayKwVxpazEKr5 OTjOmDot9rsazCnwxZkCGtgD/+WVERNRQP3kI/uL1/V+cwTZF7EDshVEXPdFbqT9EDfG SKrw== X-Gm-Message-State: AOAM530uqNGJYfb8EsKIBs3oV3Liy6j+dx3u+gF0xiQIovM3YktF0CPB iPfxPcRsYpwPVWMESJCMW7JOApA0hTo= X-Google-Smtp-Source: ABdhPJyE/Hx8D/Xb1v7h3qXbULKPRJHSfomSLoJ8sU/LXNsLbL6qodc91CH5RRQ9x2zACWn74bxsNWHgmCo= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:338e:b0:51b:c452:4210 with SMTP id cm14-20020a056a00338e00b0051bc4524210mr6976736pfb.69.1654217059225; Thu, 02 Jun 2022 17:44:19 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:31 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-25-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 024/144] KVM: selftests: Move KVM_CREATE_DEVICE_TEST code to separate helper From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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 48b795eadafd..77ba8a160887 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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 6D885CCA47C for ; Fri, 3 Jun 2022 00:45:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240280AbiFCApn (ORCPT ); Thu, 2 Jun 2022 20:45:43 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47340 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240054AbiFCAoX (ORCPT ); Thu, 2 Jun 2022 20:44: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 E98CF37A3F for ; Thu, 2 Jun 2022 17:44:21 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id g9-20020a17090a3c8900b001e0b21c4d68so3393164pjc.9 for ; Thu, 02 Jun 2022 17:44: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=YQR+b5OeEVvL6VtC5wb44JTG7irNUdL3F/WIGJP+RwM=; b=DQMUjhQ71Bxj1FyyI1Qz5olUwdGxj1si1kXxQl4K6XyzqNOSDWAKYkIMSiKxRp30uP D2YSg4uTj9GU0E89lGlNNmGYKd/K6HS/PaaxX1ZKm6kVAVyWcEHl4kyvfJnbkrsFizyE 0siOpbqtoMaN5ldAu8t87N5y4Q7tG9A6d6jxmv2gjIv4Fpmz2Rbpz1Vjjt4bDnUtYD9d Wlw8PHxmlSOcz09dPCtgs3crefBXOwUFojvq/2ujtwu7AdACRD7RODQVHzGGU1D2ACyu nguEyk7PwjTEh1tiH4lgNgPQShmjgKky5Z92OR0wbzpkiUmFUBH3y2DKfWp0vV4Hp10y pPRw== 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=YQR+b5OeEVvL6VtC5wb44JTG7irNUdL3F/WIGJP+RwM=; b=Whp3jY7qnxhuYljOAHneeMZzK5xmT80zE3BmJ9XmRaYuudUREDtLboGQ8f9VpJ4nqf y1AP5X4WQZnxdLoFTkbsDVSaVwAiHH8RUDEjcixzMGZ8boxf/+T4+QvT2wNbcMxbUzsH aXBlwg3WYaktnegLHcePj/xiDHX9o2um1vwXcZmlmKXxH8DrE4H+wuNIYmPhmsKtmUS9 F8hIez1XP2d8LF+08hUsEewb5i4ZMiAFNiqRUgSuA6HYNW40hAcr/vs1hH7BYq8WCFFW yUL53JiGJ2iKEYqmouRW4IL+o1FvRU9Qemg7f8mbfsOVWUK/yEB/9RkVYbc9yDaPvfFw k+nQ== X-Gm-Message-State: AOAM533Urt19pET5XmA9/o4TCXJys+xAMO9jYeyBp4k62w+pym9hUHSy L708/wyj0nqBFduE8UxqAMTcMe+2jpo= X-Google-Smtp-Source: ABdhPJzuRv/UJXBKRY7AWWjmJsAVUBl25WV0DIZIRv/Vc9cnp+Afr0NlTJSt5jym7vWQlKkCoY0CEelXJVI= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:249:b0:1e0:a8a3:3c6c with SMTP id t9-20020a17090a024900b001e0a8a33c6cmr307291pje.0.1654217060998; Thu, 02 Jun 2022 17:44:20 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:32 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-26-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 025/144] KVM: selftests: Multiplex return code and fd in __kvm_create_device() From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- 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 77ba8a160887..4519ca2a48d1 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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 338C9C433EF for ; Fri, 3 Jun 2022 00:45:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234872AbiFCApj (ORCPT ); Thu, 2 Jun 2022 20:45:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46906 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239982AbiFCAoZ (ORCPT ); Thu, 2 Jun 2022 20:44:25 -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 D627F344CC for ; Thu, 2 Jun 2022 17:44:23 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id il9-20020a17090b164900b001e31dd8be25so6404404pjb.3 for ; Thu, 02 Jun 2022 17:44: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=9vC5gh1M6nD5/1rprbes9IFlVZ4jp452VtX7D5WkmNw=; b=JvyeroOccDHXG9qH1OYCI/jRxnh+VtCCeSdhT+IHI9yUeSI0MkuqsnOg3e63Frhdof V6SuFZASErceK75n4dDPSV3TecK4LvHNguu5Dt1AxUljBIxx87zdjz/TEg+mt6gyVO8F N8lHPHuE1Haheuz6WugEnFRtGMXAYMDKIUshxuIbOT0t75RIC4W15R5w3aV8/nriQPSC gC45gUhFhcdpp+mA7HD7grcw2lv/5VkTz9eAqRUN0GMSBqSXXMp6BgEnM7KZ9XlqmWq+ GTCoP+6YiSgUvA7lmbdxYuKu53C2tDMsB8ZMsA4EXbo0Jrt1KxA8LywccH6YEX1WidKG Y/gw== 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=9vC5gh1M6nD5/1rprbes9IFlVZ4jp452VtX7D5WkmNw=; b=KM7HXOecWdk9Zjg2uuLvpysnj6vwKsMBNW1+CVtE1KnLLReq/e3lJgBTTG8kPTIJ59 BHkVTqUrVwjyazoQWJMG2+l7DW2feXdx6B8NpCBqyfICxXluGmBq58JSm9INBoigKQxT YJpGbx6lxhhjWE6SaWfBLa8Lc/qsVwP8vKuVjHP1NuhxjrAz2KBg49tw732zEEOPbjr1 5Lfu31oi5l62HofHvwa3o+Wyi+THAl+RYAVIF0BCIKtk4F18pxc74PZIxmlE/BdBcaPh gv69z/Hgf2jKh5iZfSIyoGzX2Dr1euLqrMaf12/klqfiT2PNhKqNiDd3wRlf5eTM5iJf 4CRA== X-Gm-Message-State: AOAM531KSHzAMFSdPR0SSGXvB8TCSDsBzPDgEPP5koJigdCbN4laNI/C R4c4uO1x1an0u9wWrPRz6yCfnum0QoU= X-Google-Smtp-Source: ABdhPJxrU303zgyRmJxY67E2gV9NjsgMxPwY5MmE57xWheTepsXwRdoAgyzO6mRhv20bJJt8swxS99v7wG0= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:d502:b0:161:8e01:b4f1 with SMTP id b2-20020a170902d50200b001618e01b4f1mr7729793plg.137.1654217063385; Thu, 02 Jun 2022 17:44:23 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:33 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-27-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 026/144] KVM: selftests: Rename KVM_HAS_DEVICE_ATTR helpers for consistency From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- 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 4519ca2a48d1..3aecf097969a 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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 6EAF4C43334 for ; Fri, 3 Jun 2022 00:46:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240261AbiFCAqA (ORCPT ); Thu, 2 Jun 2022 20:46:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46912 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240062AbiFCAo1 (ORCPT ); Thu, 2 Jun 2022 20:44:27 -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 A3D44344D7 for ; Thu, 2 Jun 2022 17:44:25 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id c4-20020a170902c2c400b0015f16fb4a54so3464809pla.22 for ; Thu, 02 Jun 2022 17:44: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=fWVU4G9FQ3711ydUOpFRiGOBFG7oKk9mO87RLDsuxUU=; b=TEkHSIOjYwi4/FOo/GsXvu1uiP1Iwkpn3Q3rZDi2pJ3dL57pxhZRtq04be6Pr1QFaj NyRMNZeK534nnse4Yn6IzfaXkWhwaaY7mr2f7GlMigBRzWiHIh9sq1wPEsejVVLLRQIh mrKZ3a21XUM99zPMTNoONp6N9k/fULyL3cJHuBV2Q+lezovgGu8BzWBbRdqBU4avizXO 0SV/yaY93+ntMBqc03uEvRZ5O9aIL1NrAbZdf9q4Gv3pG6eJliF9EzzljEpDeWwMsnp4 nZJZgdQS0NsF0XTNSNHIHJGzQQf7vvQPZZJp8PI3N1wV+RT8W0dQheQXp+izM1UqdVzN S89w== 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=fWVU4G9FQ3711ydUOpFRiGOBFG7oKk9mO87RLDsuxUU=; b=TfqQXwEijvtZFuWMLC8R5r9nvlaS8ZVwdCoSHu0OgcjUx/lTbw9Xf9zD/wVYM4DxPN QrKU1KD/tFcBak7BZ+uEdFNCYxtZ2kmzeIbTF1FkTaR2MPYCXbbSVj2asWwWOkAZ7K/g 7m28sb1BcHIt9WbbpFOnschPtZzKg9/gea4vUWzvXuuRMtTJSVOc6+Ygfymjcc0M/vs/ LiidPFJsftReSkiWPV/Il2tCbr8pnK8jK2IRzOvdap1X8mzJWc8GMaPxysczxNgIX5U0 6/Hxj9uPZWKq2teydwy6B13S1MaOnXLbdIlZ2C2+avlFpEQGO134lEVgUPYJHKKxxVYu xsFg== X-Gm-Message-State: AOAM530/0OTZGMXmGHh+a2tjmoRwFo8kMr+uLossciZljw7BWkV23722 1iFB+uGWLhacRWx2maQZDCPd3qCPcTc= X-Google-Smtp-Source: ABdhPJyGLKO8icLCJiPXLDXyjUv0YbG/oYOZvjEGh7qGX8nPj+jO28x3Axg5YukBRqRzpmtcqpOPAVlxO1w= 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:164:1958:c858 with SMTP id u18-20020a170902e5d200b001641958c858mr7701148plf.62.1654217065282; Thu, 02 Jun 2022 17:44:25 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:34 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-28-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 027/144] KVM: selftests: Drop 'int' return from asserting *_has_device_attr() From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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 3aecf097969a..a692bb74fed8 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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 15514C43334 for ; Fri, 3 Jun 2022 00:46:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240334AbiFCAqJ (ORCPT ); Thu, 2 Jun 2022 20:46:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47476 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240068AbiFCAoc (ORCPT ); Thu, 2 Jun 2022 20:44: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 DEE5A344CC for ; Thu, 2 Jun 2022 17:44:27 -0700 (PDT) Received: by mail-pl1-x64a.google.com with SMTP id d13-20020a170902728d00b001635c985770so3489544pll.2 for ; Thu, 02 Jun 2022 17:44: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=5di0TYtrKhML5gcEOXQcDFZq72T2n5XzO9NT5P2i/AE=; b=pupgdVwYYlmOuJIFKMYM8YOltfQh18eIqgiWfE2pKQRrBoh+5HGHpNcnxNRimdh4Lm bg6EEoTOsxDi8Xbb5zWWZumE+UYueHgZefJpTTksJdwnFbKrXT4SyJR7SuaKCT1VAHNp itvOAVnOFTeLXMRfMT+meswp2xc1YQaSTtb9GGjED/DzhURuCa08Sv0Itx/cpgEle/pC fxZ5My+JYvVp/1B/E1HbNa+Yqf7f3RQ6pgmZbxp+w2yAAgK5qx+RLLsO36Jw32p6DlRX SMU+p31NrydFLirNTn4kdn4X9R8DWFett+15w50F+kU303YGIHULoVUFrS29e852Ytg9 dWsw== 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=5di0TYtrKhML5gcEOXQcDFZq72T2n5XzO9NT5P2i/AE=; b=3U4GchhpwfMUz+gM5NMP++Owu0rPkWGvswLMmei38HCU/ZVvEHbHYtgTIYuPxDSX6f mDuIOoiiUVTE2jjDEzp+nbG5LNi0Hcy+fQKipwvlvCeF1RKLIUFUyJh4SwRGbzpWsOsd asGc7hhhZpSpC4lLKzsW/I632dkGSQNch0JzfB3tPmrhq22e94DDNHis7I24GftAZkyv 7A+99fvn+5DFLAUSq6OD9SFi5W5/+h9mWBQ5tcy7WO03sX8OqeqmOM1U3g4sv3FxArv/ Oc68WCoZ7gIFJZb6H9JxBpqKfamEmIEK54vv1J/ZMa0u1mR8mt7Akl2SrEZ5vLyfRSJ6 oI9w== X-Gm-Message-State: AOAM530SbOUx+NyhT2BqR4h2SOVTZX5Ks7D5Ob5P3Fqkbb/PpO8bUvlo ifN7UKoF3wwj/02f+WKcmyOs+lD/XOw= X-Google-Smtp-Source: ABdhPJw/xeec48xIE4JnPWS0ttPL1ATcoYd1o17186HIXRgljStAXmKHTsnnJ5FnUfn34xPxtQIDQ1JWvG4= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:5792:b0:1e0:63f3:b3ba with SMTP id g18-20020a17090a579200b001e063f3b3bamr8239174pji.102.1654217067236; Thu, 02 Jun 2022 17:44:27 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:35 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-29-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 028/144] KVM: selftests: Split get/set device_attr helpers From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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, and having constant (at compile time) inputs will allow the selftests framework to sanity check ioctl() invocations. Signed-off-by: Sean Christopherson Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../selftests/kvm/aarch64/arch_timer.c | 8 +- .../testing/selftests/kvm/aarch64/vgic_init.c | 246 +++++++++--------- .../selftests/kvm/include/kvm_util_base.h | 91 ++++--- .../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 | 62 +++-- .../kvm/system_counter_offset_test.c | 4 +- 7 files changed, 233 insertions(+), 213 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 a692bb74fed8..f10596edd8ed 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, i, GICR_TYPER, &val, false); + 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 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..6e63e7e57752 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -460,6 +460,65 @@ 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_get(int dev_fd, uint32_t group, uint64_t attr, void = *val); + +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)); +} + +int __kvm_device_attr_set(int dev_fd, uint32_t group, uint64_t attr, void = *val); + +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 +541,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..220e079dc749 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -1645,16 +1645,19 @@ 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 __kvm_device_attr_get(int dev_fd, uint32_t group, uint64_t attr, void = *val) { - int fd =3D __kvm_create_device(vm, type); + struct kvm_device_attr kvmattr =3D { + .group =3D group, + .attr =3D attr, + .flags =3D 0, + .addr =3D (uintptr_t)val, + }; =20 - TEST_ASSERT(fd >=3D 0, "KVM_CREATE_DEVICE IOCTL failed, rc: %i errno: %i"= , fd, errno); - return fd; + return __kvm_ioctl(dev_fd, KVM_GET_DEVICE_ATTR, &kvmattr); } =20 -int _kvm_device_access(int dev_fd, uint32_t group, uint64_t attr, - void *val, bool write) +int __kvm_device_attr_set(int dev_fd, uint32_t group, uint64_t attr, void = *val) { struct kvm_device_attr kvmattr =3D { .group =3D group, @@ -1662,20 +1665,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, KVM_SET_DEVICE_ATTR, &kvmattr); +} + +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); } =20 -int kvm_device_access(int dev_fd, uint32_t group, uint64_t attr, - void *val, bool write) +void vcpu_device_attr_get(struct kvm_vm *vm, uint32_t vcpuid, uint32_t gro= up, + uint64_t attr, void *val) { - int ret =3D _kvm_device_access(dev_fd, group, attr, val, write); + 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 +1701,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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 27949C43334 for ; Fri, 3 Jun 2022 00:45:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240293AbiFCApx (ORCPT ); Thu, 2 Jun 2022 20:45:53 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47028 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240040AbiFCAoa (ORCPT ); Thu, 2 Jun 2022 20:44:30 -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 DFC75344DE for ; Thu, 2 Jun 2022 17:44:29 -0700 (PDT) Received: by mail-pg1-x549.google.com with SMTP id i9-20020a632209000000b003facc62e253so3048324pgi.11 for ; Thu, 02 Jun 2022 17:44: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=NzLwUqexNZjT3yoB75uY5U+PUQVNL95wKt+DgerDaYg=; b=EzvBNpaooL4lVwvoYGQMAHtMX118fSlveCNxwVzP7t5W8Zm0sf82ioVXVqk4QUIy8n e4MOUanVKR4rvd5K9GV+CtKdsyd1a9MESFfi0xknSazh/kUFe6xoGh09nXkrv4ozudPi nYvEZBlzpD94uJI/SC67PURcPf6MG6fnyGERMm7JxIwlR8c4UbJtBrCAfLyo3G2zYDwF IayqYyeJTj3glOyPYtwVzUgnGTp8mc1ptLN3PWWmTq68838vYP4v878e5JOXuuUsOxNV O9NN4oJG/J//YXK6rv3QiVkHhOZCPYFT0/OumRFvif3UBsxbsJJmjJzLy33DS3D2fMQ9 Wvow== 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=NzLwUqexNZjT3yoB75uY5U+PUQVNL95wKt+DgerDaYg=; b=ccKFpTEWI3IeKct2urlE/70ym7lZzw15xtYuf/9ITDJ7ue68fwYS8mBP+aAqYWdKaH W+YKv1evGVSslOH2xzs4tIYlf81dDiE7SobEkrWxaR3+8oeB2BYNCdw4tg5SKHmxRHQU T8SfwhAS7n2mYeNOk4Oxx1GHYLtL9kgeMHXtQyiXCdMM96Xtsl12+x7Vp2k2RhsFnfaB LzA+UIA6nZHrQduWvJeK/ZAGwo4QXgRLdnaSh4sjL6vBIJtCy/D3tycwLTQNu2ofiES3 WBqd6KFQj1TheEn+BX28Ljo8RqYH957us7ekJuTKZEBjOawb7Nl72051Aq9avftFG9IP QVAw== X-Gm-Message-State: AOAM532RrDLzAVdH5VURoDQYDOqzgDjkwa4FhAse9OiZYhPFDHIUHuQ6 jNF7oK3UIgbRXmFVd4eXy0ES4oKjp1Q= X-Google-Smtp-Source: ABdhPJypAaFR6wHZxtdXQ/bGs/sCM42waWGrIU8vJ4HjNW5iT2hB1fIe+44YI9B7zL4KDubGTVL1ISfY2BY= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:114e:b0:4c8:55f7:faad with SMTP id b14-20020a056a00114e00b004c855f7faadmr36322623pfm.86.1654217069206; Thu, 02 Jun 2022 17:44:29 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:36 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-30-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 029/144] KVM: selftests: Add a VM backpointer to 'struct vcpu' From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- 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 6e63e7e57752..2e1453cb0511 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 220e079dc749..2d82b5720737 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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 249EEC433EF for ; Fri, 3 Jun 2022 00:46:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240361AbiFCAqV (ORCPT ); Thu, 2 Jun 2022 20:46:21 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47504 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240000AbiFCAod (ORCPT ); Thu, 2 Jun 2022 20:44:33 -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 9542B344D6 for ; Thu, 2 Jun 2022 17:44:31 -0700 (PDT) Received: by mail-pf1-x44a.google.com with SMTP id t1-20020a62ea01000000b0051be221a3ebso117037pfh.17 for ; Thu, 02 Jun 2022 17:44: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=oQCFxAMCy4Jw3XIpLJBHS6CjwFdvmqncc8xgI0mkXvE=; b=cb+u0MrvY0qwG6yYIcajRJxDjinOHBOnxIj9/C3BQTYNbiiYPTEUcwH7HJstTeOXBG rgcITQi7lKuW/VCIetZmctjuEhh9swe3EXBEAOn8xX2d399IYUiu+j+VUIOh6laT8NS2 ets/zk81mg14ujWW9DCOfD7U2GRm/x7gTq+UoOp7S/FEfsK0kjDEEXHAhf6kZdXfBuLT mPTBPxwFCOkQasXg5QfD8v1mE2X2Uhii3rh6XzJdKmaOGT/fP3vquhZsJUyBp1L0x5C5 bSrmtk5T4+ZlZ1aF6oaP9yfgxqaxXDxJerIBNJg6ZfJvzrqix1lIbN/8T/hHG4+yu8mI e4KQ== 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=oQCFxAMCy4Jw3XIpLJBHS6CjwFdvmqncc8xgI0mkXvE=; b=FSNgiy4SswSwIWXd93K9B/16t5dNGMRM6V7d6tOfZH0NHM0L7tq15cAqrtg/Oi1BhL JynlveZyfIOcYNY/91mquvt3fTnM9JtqOEKiN81ERgkbho4lPLE0tlaRNdOBAcvY/eWK FF23WWKjMYEnJSZnf4GzkdJfzu8kK9OzUGZ/3PFq4kIRRYvx3Bn4EZMz/UeXNecyWao6 cXxK4UtlGJSa/DnaA3/H3wrnxTv/YiQwYd+eQf2rpiqynCt/lZTi8rfJWUxHKPCSCO6x rmLubHyjoIu/CKvt9DpzP+t/SrYu9LwSbClwnyiNxY/SgyQD7G2FuLnMgUnw1tKlcgke Rx0Q== X-Gm-Message-State: AOAM530IYI1ZdWtfESTyH/PbkFK708uwWydt/PQOHt/BDIP3aAwVf0IM AkIpMK9t971+fvJpNe7gMyK2vrDtEKs= X-Google-Smtp-Source: ABdhPJz62ez6a8c0vVlCM4g19P81v5zbKvAwgB2uHKL7aZeKCHPT+5kmBsl7qS4t0jo3TclNosUHB0ORW60= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90b:20d4:b0:1e2:fadf:3f09 with SMTP id ju20-20020a17090b20d400b001e2fadf3f09mr8183139pjb.236.1654217071073; Thu, 02 Jun 2022 17:44:31 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:37 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-31-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 030/144] KVM: selftests: Consolidate KVM_ENABLE_CAP usage From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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_enable_cap() and use it for negative tests that expect KVM_ENABLE_CAP to fail. Opportunistically clean up the MAX_VCPU_ID test error messages. Signed-off-by: Sean Christopherson Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../selftests/kvm/include/kvm_util_base.h | 4 + tools/testing/selftests/kvm/lib/x86_64/vmx.c | 2 +- .../kvm/x86_64/max_vcpuid_cap_test.c | 19 ++--- .../selftests/kvm/x86_64/sev_migrate_tests.c | 78 +++++++++---------- 4 files changed, 52 insertions(+), 51 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 2e1453cb0511..f0afc1dce8ba 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -231,6 +231,10 @@ static inline int vm_check_cap(struct kvm_vm *vm, long= cap) return ret; } =20 +static inline int __vm_enable_cap(struct kvm_vm *vm, struct kvm_enable_cap= *cap) +{ + return __vm_ioctl(vm, KVM_ENABLE_CAP, cap); +} static inline void vm_enable_cap(struct kvm_vm *vm, struct kvm_enable_cap = *cap) { vm_ioctl(vm, KVM_ENABLE_CAP, cap); 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..14a9a0fd2e50 100644 --- a/tools/testing/selftests/kvm/lib/x86_64/vmx.c +++ b/tools/testing/selftests/kvm/lib/x86_64/vmx.c @@ -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_enable_cap(vm, vcpu_id, &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/x86_64/max_vcpuid_cap_test.c b/too= ls/testing/selftests/kvm/x86_64/max_vcpuid_cap_test.c index 419fbdc51246..c6fd36a31c8c 100644 --- a/tools/testing/selftests/kvm/x86_64/max_vcpuid_cap_test.c +++ b/tools/testing/selftests/kvm/x86_64/max_vcpuid_cap_test.c @@ -25,28 +25,25 @@ int main(int argc, char *argv[]) /* Try to set KVM_CAP_MAX_VCPU_ID beyond KVM cap */ cap.cap =3D KVM_CAP_MAX_VCPU_ID; cap.args[0] =3D ret + 1; - ret =3D ioctl(vm->fd, KVM_ENABLE_CAP, &cap); + ret =3D __vm_enable_cap(vm, &cap); TEST_ASSERT(ret < 0, - "Unexpected success to enable KVM_CAP_MAX_VCPU_ID" - "beyond KVM cap!\n"); + "Setting KVM_CAP_MAX_VCPU_ID beyond KVM cap should fail"); =20 /* Set KVM_CAP_MAX_VCPU_ID */ cap.cap =3D KVM_CAP_MAX_VCPU_ID; cap.args[0] =3D MAX_VCPU_ID; - ret =3D ioctl(vm->fd, KVM_ENABLE_CAP, &cap); - TEST_ASSERT(ret =3D=3D 0, - "Unexpected failure to enable KVM_CAP_MAX_VCPU_ID!\n"); + vm_enable_cap(vm, &cap); + =20 /* Try to set KVM_CAP_MAX_VCPU_ID again */ cap.args[0] =3D MAX_VCPU_ID + 1; - ret =3D ioctl(vm->fd, KVM_ENABLE_CAP, &cap); + ret =3D __vm_enable_cap(vm, &cap); TEST_ASSERT(ret < 0, - "Unexpected success to enable KVM_CAP_MAX_VCPU_ID again\n"); + "Setting KVM_CAP_MAX_VCPU_ID multiple times should fail"); =20 /* Create vCPU with id beyond KVM_CAP_MAX_VCPU_ID cap*/ - ret =3D ioctl(vm->fd, KVM_CREATE_VCPU, MAX_VCPU_ID); - TEST_ASSERT(ret < 0, - "Unexpected success in creating a vCPU with VCPU ID out of range\n"); + ret =3D __vm_ioctl(vm, KVM_CREATE_VCPU, (void *)MAX_VCPU_ID); + TEST_ASSERT(ret < 0, "Creating vCPU with ID > MAX_VCPU_ID should fail"); =20 kvm_vm_free(vm); return 0; 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..f127f2fccca6 100644 --- a/tools/testing/selftests/kvm/x86_64/sev_migrate_tests.c +++ b/tools/testing/selftests/kvm/x86_64/sev_migrate_tests.c @@ -80,22 +80,22 @@ static struct kvm_vm *aux_vm_create(bool with_vcpus) return vm; } =20 -static int __sev_migrate_from(int dst_fd, int src_fd) +static int __sev_migrate_from(struct kvm_vm *dst, struct kvm_vm *src) { struct kvm_enable_cap cap =3D { .cap =3D KVM_CAP_VM_MOVE_ENC_CONTEXT_FROM, - .args =3D { src_fd } + .args =3D { src->fd } }; =20 - return ioctl(dst_fd, KVM_ENABLE_CAP, &cap); + return __vm_enable_cap(dst, &cap); } =20 =20 -static void sev_migrate_from(int dst_fd, int src_fd) +static void sev_migrate_from(struct kvm_vm *dst, struct kvm_vm *src) { int ret; =20 - ret =3D __sev_migrate_from(dst_fd, src_fd); + ret =3D __sev_migrate_from(dst, src); TEST_ASSERT(!ret, "Migration failed, ret: %d, errno: %d\n", ret, errno); } =20 @@ -110,13 +110,13 @@ static void test_sev_migrate_from(bool es) dst_vms[i] =3D aux_vm_create(true); =20 /* Initial migration from the src to the first dst. */ - sev_migrate_from(dst_vms[0]->fd, src_vm->fd); + sev_migrate_from(dst_vms[0], src_vm); =20 for (i =3D 1; i < NR_MIGRATE_TEST_VMS; i++) - sev_migrate_from(dst_vms[i]->fd, dst_vms[i - 1]->fd); + sev_migrate_from(dst_vms[i], dst_vms[i - 1]); =20 /* Migrate the guest back to the original VM. */ - ret =3D __sev_migrate_from(src_vm->fd, dst_vms[NR_MIGRATE_TEST_VMS - 1]->= fd); + ret =3D __sev_migrate_from(src_vm, dst_vms[NR_MIGRATE_TEST_VMS - 1]); TEST_ASSERT(ret =3D=3D -1 && errno =3D=3D EIO, "VM that was migrated from should be dead. ret %d, errno: %d\n", ret, errno); @@ -128,7 +128,7 @@ static void test_sev_migrate_from(bool es) =20 struct locking_thread_input { struct kvm_vm *vm; - int source_fds[NR_LOCK_TESTING_THREADS]; + struct kvm_vm *source_vms[NR_LOCK_TESTING_THREADS]; }; =20 static void *locking_test_thread(void *arg) @@ -138,7 +138,7 @@ static void *locking_test_thread(void *arg) =20 for (i =3D 0; i < NR_LOCK_TESTING_ITERATIONS; ++i) { j =3D i % NR_LOCK_TESTING_THREADS; - __sev_migrate_from(input->vm->fd, input->source_fds[j]); + __sev_migrate_from(input->vm, input->source_vms[j]); } =20 return NULL; @@ -152,11 +152,11 @@ static void test_sev_migrate_locking(void) =20 for (i =3D 0; i < NR_LOCK_TESTING_THREADS; ++i) { input[i].vm =3D sev_vm_create(/* es=3D */ false); - input[0].source_fds[i] =3D input[i].vm->fd; + input[0].source_vms[i] =3D input[i].vm; } for (i =3D 1; i < NR_LOCK_TESTING_THREADS; ++i) - memcpy(input[i].source_fds, input[0].source_fds, - sizeof(input[i].source_fds)); + memcpy(input[i].source_vms, input[0].source_vms, + sizeof(input[i].source_vms)); =20 for (i =3D 0; i < NR_LOCK_TESTING_THREADS; ++i) pthread_create(&pt[i], NULL, locking_test_thread, &input[i]); @@ -175,7 +175,7 @@ static void test_sev_migrate_parameters(void) =20 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); + ret =3D __sev_migrate_from(vm_no_vcpu, vm_no_sev); TEST_ASSERT(ret =3D=3D -1 && errno =3D=3D EINVAL, "Migrations require SEV enabled. ret %d, errno: %d\n", ret, errno); @@ -189,25 +189,25 @@ static void test_sev_migrate_parameters(void) sev_ioctl(sev_es_vm_no_vmsa->fd, KVM_SEV_ES_INIT, NULL); vm_vcpu_add(sev_es_vm_no_vmsa, 1); =20 - ret =3D __sev_migrate_from(sev_vm->fd, sev_es_vm->fd); + ret =3D __sev_migrate_from(sev_vm, sev_es_vm); TEST_ASSERT( ret =3D=3D -1 && errno =3D=3D EINVAL, "Should not be able migrate to SEV enabled VM. ret: %d, errno: %d\n", ret, errno); =20 - ret =3D __sev_migrate_from(sev_es_vm->fd, sev_vm->fd); + ret =3D __sev_migrate_from(sev_es_vm, sev_vm); TEST_ASSERT( ret =3D=3D -1 && errno =3D=3D EINVAL, "Should not be able migrate to SEV-ES enabled VM. ret: %d, errno: %d\n", ret, errno); =20 - ret =3D __sev_migrate_from(vm_no_vcpu->fd, sev_es_vm->fd); + ret =3D __sev_migrate_from(vm_no_vcpu, sev_es_vm); TEST_ASSERT( ret =3D=3D -1 && errno =3D=3D EINVAL, "SEV-ES migrations require same number of vCPUS. ret: %d, errno: %d\n", ret, errno); =20 - ret =3D __sev_migrate_from(vm_no_vcpu->fd, sev_es_vm_no_vmsa->fd); + ret =3D __sev_migrate_from(vm_no_vcpu, sev_es_vm_no_vmsa); TEST_ASSERT( ret =3D=3D -1 && errno =3D=3D EINVAL, "SEV-ES migrations require UPDATE_VMSA. ret %d, errno: %d\n", @@ -221,22 +221,22 @@ static void test_sev_migrate_parameters(void) kvm_vm_free(vm_no_sev); } =20 -static int __sev_mirror_create(int dst_fd, int src_fd) +static int __sev_mirror_create(struct kvm_vm *dst, struct kvm_vm *src) { struct kvm_enable_cap cap =3D { .cap =3D KVM_CAP_VM_COPY_ENC_CONTEXT_FROM, - .args =3D { src_fd } + .args =3D { src->fd } }; =20 - return ioctl(dst_fd, KVM_ENABLE_CAP, &cap); + return __vm_enable_cap(dst, &cap); } =20 =20 -static void sev_mirror_create(int dst_fd, int src_fd) +static void sev_mirror_create(struct kvm_vm *dst, struct kvm_vm *src) { int ret; =20 - ret =3D __sev_mirror_create(dst_fd, src_fd); + ret =3D __sev_mirror_create(dst, src); TEST_ASSERT(!ret, "Copying context failed, ret: %d, errno: %d\n", ret, er= rno); } =20 @@ -284,7 +284,7 @@ static void test_sev_mirror(bool es) src_vm =3D sev_vm_create(es); dst_vm =3D aux_vm_create(false); =20 - sev_mirror_create(dst_vm->fd, src_vm->fd); + sev_mirror_create(dst_vm, src_vm); =20 /* Check that we can complete creation of the mirror VM. */ for (i =3D 0; i < NR_MIGRATE_TEST_VCPUS; ++i) @@ -308,18 +308,18 @@ static void test_sev_mirror_parameters(void) vm_with_vcpu =3D aux_vm_create(true); vm_no_vcpu =3D aux_vm_create(false); =20 - ret =3D __sev_mirror_create(sev_vm->fd, sev_vm->fd); + ret =3D __sev_mirror_create(sev_vm, sev_vm); TEST_ASSERT( ret =3D=3D -1 && errno =3D=3D EINVAL, "Should not be able copy context to self. ret: %d, errno: %d\n", ret, errno); =20 - ret =3D __sev_mirror_create(vm_no_vcpu->fd, vm_with_vcpu->fd); + ret =3D __sev_mirror_create(vm_no_vcpu, vm_with_vcpu); TEST_ASSERT(ret =3D=3D -1 && errno =3D=3D EINVAL, "Copy context requires SEV enabled. ret %d, errno: %d\n", ret, errno); =20 - ret =3D __sev_mirror_create(vm_with_vcpu->fd, sev_vm->fd); + ret =3D __sev_mirror_create(vm_with_vcpu, sev_vm); TEST_ASSERT( ret =3D=3D -1 && errno =3D=3D EINVAL, "SEV copy context requires no vCPUS on the destination. ret: %d, errno: = %d\n", @@ -329,13 +329,13 @@ static void test_sev_mirror_parameters(void) goto out; =20 sev_es_vm =3D sev_vm_create(/* es=3D */ true); - ret =3D __sev_mirror_create(sev_vm->fd, sev_es_vm->fd); + ret =3D __sev_mirror_create(sev_vm, sev_es_vm); TEST_ASSERT( ret =3D=3D -1 && errno =3D=3D EINVAL, "Should not be able copy context to SEV enabled VM. ret: %d, errno: %d\n= ", ret, errno); =20 - ret =3D __sev_mirror_create(sev_es_vm->fd, sev_vm->fd); + ret =3D __sev_mirror_create(sev_es_vm, sev_vm); TEST_ASSERT( ret =3D=3D -1 && errno =3D=3D EINVAL, "Should not be able copy context to SEV-ES enabled VM. ret: %d, errno: %= d\n", @@ -363,16 +363,16 @@ static void test_sev_move_copy(void) dst2_mirror_vm =3D aux_vm_create(false); dst3_mirror_vm =3D aux_vm_create(false); =20 - sev_mirror_create(mirror_vm->fd, sev_vm->fd); + sev_mirror_create(mirror_vm, sev_vm); =20 - sev_migrate_from(dst_mirror_vm->fd, mirror_vm->fd); - sev_migrate_from(dst_vm->fd, sev_vm->fd); + sev_migrate_from(dst_mirror_vm, mirror_vm); + sev_migrate_from(dst_vm, sev_vm); =20 - sev_migrate_from(dst2_vm->fd, dst_vm->fd); - sev_migrate_from(dst2_mirror_vm->fd, dst_mirror_vm->fd); + sev_migrate_from(dst2_vm, dst_vm); + sev_migrate_from(dst2_mirror_vm, dst_mirror_vm); =20 - sev_migrate_from(dst3_mirror_vm->fd, dst2_mirror_vm->fd); - sev_migrate_from(dst3_vm->fd, dst2_vm->fd); + sev_migrate_from(dst3_mirror_vm, dst2_mirror_vm); + sev_migrate_from(dst3_vm, dst2_vm); =20 kvm_vm_free(dst_vm); kvm_vm_free(sev_vm); @@ -392,10 +392,10 @@ static void test_sev_move_copy(void) mirror_vm =3D aux_vm_create(false); dst_mirror_vm =3D aux_vm_create(false); =20 - sev_mirror_create(mirror_vm->fd, sev_vm->fd); + sev_mirror_create(mirror_vm, sev_vm); =20 - sev_migrate_from(dst_mirror_vm->fd, mirror_vm->fd); - sev_migrate_from(dst_vm->fd, sev_vm->fd); + sev_migrate_from(dst_mirror_vm, mirror_vm); + sev_migrate_from(dst_vm, sev_vm); =20 kvm_vm_free(mirror_vm); kvm_vm_free(dst_mirror_vm); --=20 2.36.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 2432EC43334 for ; Fri, 3 Jun 2022 00:48:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240443AbiFCAs1 (ORCPT ); Thu, 2 Jun 2022 20:48:27 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47882 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240059AbiFCAox (ORCPT ); Thu, 2 Jun 2022 20:44:53 -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 C6767344CC for ; Thu, 2 Jun 2022 17:44:33 -0700 (PDT) Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-310061f47faso12877007b3.9 for ; Thu, 02 Jun 2022 17:44: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=FLfNaN4AMYS/YpahD61k9EPS8BL7sEKjsl8i5J/emZI=; b=cf51+piYsCKe+6tdn1Nmhaci4rLfeoYHyZ4KCrfj0eRiJJPi01bFAplygN236exDXL goiIkY5ZX+g2O9UnnxRl2rSN9dwLbqd/B+t3OP7mnsESw6XG35Fc6zDhofG7qH7o5t4M 15clQtSkpnRgF45hk/QlJU2mTw5zxSsVpDDsN31z1Ig3Z/eBE3J1dO5exSXnwJkL5gfr VU6yJNDhEZ8Gw/VU3imr2DFTZtGu3XpzzNESWMUcDyPrnOTZJ3hl/MQop0uy3JpxcamM CJbr127Mshb6V31bONLYBheR8fII6nQpgiCv3drEUa2Es30dHKqrR6r7PI0iUXntofI2 +SMQ== 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=FLfNaN4AMYS/YpahD61k9EPS8BL7sEKjsl8i5J/emZI=; b=OGFNzNTYtLQiIzpDSyZ1yz7kocMNTAYkguJljCyLy7WEOwjiI1TmQpykThfUKq+9wn R0JUx/98bE4aoKvFVQEitcXwQKK4X0PzMZpZ9YjlApXNfbeBy45ymbO79quWAFGBcyLD 1ETbp3zKjRZ7FwB6yiIKmnDX0PH6Z0Zdt9QyGV/uZdvunnXOc4DGk4y/1HLlWRTDRyrw H56kXtWwA6zcXVVTJ/mH+q+czbdvCLkTwzudxZnPApox9P1pLU/k9jn+u0ZKKclSRQuZ 9y7+FBXTjuIdgCTaommtr9AoJ6toMXDRBeuVuFogDc9f4d9ze6aPX4cgnDP56p21u6EZ deuA== X-Gm-Message-State: AOAM5318r2ayxmH0gyXVwYyaKI7lBu6BIhJ9SVjYE7fEDGDKzH7JSQI8 Jk9NFr4tNdCmiIgvBzgmEyVOAWihvSk= X-Google-Smtp-Source: ABdhPJyEVY5GTGSM2ki2udgbeZ3Ukuf0TmeDDvc3PK+JTizpkDWhm/hIO+0QyD17ghBtrGjGw77seZtosDU= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a0d:ef03:0:b0:2fa:245:adf3 with SMTP id y3-20020a0def03000000b002fa0245adf3mr8911991ywe.100.1654217072961; Thu, 02 Jun 2022 17:44:32 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:38 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-32-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 031/144] KVM: selftests: Simplify KVM_ENABLE_CAP helper APIs From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 the KVM_ENABLE_CAP helpers to take the cap and arg0; literally every current user, and likely every future user, wants to set 0 or 1 arguments and nothing else. Signed-off-by: Sean Christopherson Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../testing/selftests/kvm/aarch64/psci_test.c | 11 +------ .../selftests/kvm/dirty_log_perf_test.c | 9 ++---- tools/testing/selftests/kvm/dirty_log_test.c | 5 +-- .../selftests/kvm/include/kvm_util_base.h | 18 +++++++---- tools/testing/selftests/kvm/lib/kvm_util.c | 6 +--- tools/testing/selftests/kvm/lib/x86_64/vmx.c | 8 ++--- .../kvm/x86_64/emulator_error_test.c | 6 +--- .../selftests/kvm/x86_64/fix_hypercall_test.c | 6 ++-- .../selftests/kvm/x86_64/hyperv_features.c | 16 ++-------- .../selftests/kvm/x86_64/kvm_pv_test.c | 5 +-- .../kvm/x86_64/max_vcpuid_cap_test.c | 12 ++----- .../selftests/kvm/x86_64/platform_info_test.c | 14 ++------- .../kvm/x86_64/pmu_event_filter_test.c | 5 +-- .../selftests/kvm/x86_64/sev_migrate_tests.c | 14 ++------- .../kvm/x86_64/triple_fault_event_test.c | 7 +---- .../kvm/x86_64/userspace_msr_exit_test.c | 31 +++++++------------ 16 files changed, 47 insertions(+), 126 deletions(-) diff --git a/tools/testing/selftests/kvm/aarch64/psci_test.c b/tools/testin= g/selftests/kvm/aarch64/psci_test.c index 024a84064f1f..1a351f3f443d 100644 --- a/tools/testing/selftests/kvm/aarch64/psci_test.c +++ b/tools/testing/selftests/kvm/aarch64/psci_test.c @@ -156,15 +156,6 @@ static void host_test_cpu_on(void) kvm_vm_free(vm); } =20 -static void enable_system_suspend(struct kvm_vm *vm) -{ - struct kvm_enable_cap cap =3D { - .cap =3D KVM_CAP_ARM_SYSTEM_SUSPEND, - }; - - vm_enable_cap(vm, &cap); -} - static void guest_test_system_suspend(void) { uint64_t ret; @@ -183,7 +174,7 @@ static void host_test_system_suspend(void) struct kvm_vm *vm; =20 vm =3D setup_vm(guest_test_system_suspend); - enable_system_suspend(vm); + vm_enable_cap(vm, KVM_CAP_ARM_SYSTEM_SUSPEND, 0); =20 vcpu_power_off(vm, VCPU_ID_TARGET); run =3D vcpu_state(vm, VCPU_ID_SOURCE); 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..c9acf0c3f016 100644 --- a/tools/testing/selftests/kvm/dirty_log_perf_test.c +++ b/tools/testing/selftests/kvm/dirty_log_perf_test.c @@ -213,7 +213,6 @@ static void run_test(enum vm_guest_mode mode, void *arg) struct timespec get_dirty_log_total =3D (struct timespec){0}; struct timespec vcpu_dirty_total =3D (struct timespec){0}; struct timespec avg; - struct kvm_enable_cap cap =3D {}; struct timespec clear_dirty_log_total =3D (struct timespec){0}; =20 vm =3D perf_test_create_vm(mode, nr_vcpus, guest_percpu_mem_size, @@ -229,11 +228,9 @@ static void run_test(enum vm_guest_mode mode, void *ar= g) =20 bitmaps =3D alloc_bitmaps(p->slots, pages_per_slot); =20 - if (dirty_log_manual_caps) { - cap.cap =3D KVM_CAP_MANUAL_DIRTY_LOG_PROTECT2; - cap.args[0] =3D dirty_log_manual_caps; - vm_enable_cap(vm, &cap); - } + if (dirty_log_manual_caps) + vm_enable_cap(vm, KVM_CAP_MANUAL_DIRTY_LOG_PROTECT2, + dirty_log_manual_caps); =20 arch_setup_vm(vm, nr_vcpus); =20 diff --git a/tools/testing/selftests/kvm/dirty_log_test.c b/tools/testing/s= elftests/kvm/dirty_log_test.c index 5752486764c9..9dfc861a3cf3 100644 --- a/tools/testing/selftests/kvm/dirty_log_test.c +++ b/tools/testing/selftests/kvm/dirty_log_test.c @@ -217,16 +217,13 @@ static bool clear_log_supported(void) =20 static void clear_log_create_vm_done(struct kvm_vm *vm) { - struct kvm_enable_cap cap =3D {}; u64 manual_caps; =20 manual_caps =3D kvm_check_cap(KVM_CAP_MANUAL_DIRTY_LOG_PROTECT2); TEST_ASSERT(manual_caps, "MANUAL_CAPS is zero!"); manual_caps &=3D (KVM_DIRTY_LOG_MANUAL_PROTECT_ENABLE | KVM_DIRTY_LOG_INITIALLY_SET); - cap.cap =3D KVM_CAP_MANUAL_DIRTY_LOG_PROTECT2; - cap.args[0] =3D manual_caps; - vm_enable_cap(vm, &cap); + vm_enable_cap(vm, KVM_CAP_MANUAL_DIRTY_LOG_PROTECT2, manual_caps); } =20 static void dirty_log_collect_dirty_pages(struct kvm_vm *vm, int slot, diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index f0afc1dce8ba..c9d94c9f2031 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -231,13 +231,17 @@ static inline int vm_check_cap(struct kvm_vm *vm, lon= g cap) return ret; } =20 -static inline int __vm_enable_cap(struct kvm_vm *vm, struct kvm_enable_cap= *cap) +static inline int __vm_enable_cap(struct kvm_vm *vm, uint32_t cap, uint64_= t arg0) { - return __vm_ioctl(vm, KVM_ENABLE_CAP, cap); + struct kvm_enable_cap enable_cap =3D { .cap =3D cap, .args =3D { arg0 } }; + + return __vm_ioctl(vm, KVM_ENABLE_CAP, &enable_cap); } -static inline void vm_enable_cap(struct kvm_vm *vm, struct kvm_enable_cap = *cap) +static inline void vm_enable_cap(struct kvm_vm *vm, uint32_t cap, uint64_t= arg0) { - vm_ioctl(vm, KVM_ENABLE_CAP, cap); + struct kvm_enable_cap enable_cap =3D { .cap =3D cap, .args =3D { arg0 } }; + + vm_ioctl(vm, KVM_ENABLE_CAP, &enable_cap); } =20 void vm_enable_dirty_ring(struct kvm_vm *vm, uint32_t ring_size); @@ -363,9 +367,11 @@ 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 static inline void vcpu_enable_cap(struct kvm_vm *vm, uint32_t vcpu_id, - struct kvm_enable_cap *cap) + uint32_t cap, uint64_t arg0) { - vcpu_ioctl(vm, vcpu_id, KVM_ENABLE_CAP, cap); + struct kvm_enable_cap enable_cap =3D { .cap =3D cap, .args =3D { arg0 } }; + + vcpu_ioctl(vm, vcpu_id, KVM_ENABLE_CAP, &enable_cap); } =20 static inline void vcpu_set_guest_debug(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 2d82b5720737..8f670cef6faa 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -85,11 +85,7 @@ int kvm_check_cap(long cap) =20 void vm_enable_dirty_ring(struct kvm_vm *vm, uint32_t ring_size) { - struct kvm_enable_cap cap =3D { 0 }; - - cap.cap =3D KVM_CAP_DIRTY_LOG_RING; - cap.args[0] =3D ring_size; - vm_enable_cap(vm, &cap); + vm_enable_cap(vm, KVM_CAP_DIRTY_LOG_RING, ring_size); vm->dirty_ring_size =3D ring_size; } =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 14a9a0fd2e50..2ab3f13e221d 100644 --- a/tools/testing/selftests/kvm/lib/x86_64/vmx.c +++ b/tools/testing/selftests/kvm/lib/x86_64/vmx.c @@ -46,12 +46,8 @@ int vcpu_enable_evmcs(struct kvm_vm *vm, int vcpu_id) { uint16_t evmcs_ver; =20 - struct kvm_enable_cap enable_evmcs_cap =3D { - .cap =3D KVM_CAP_HYPERV_ENLIGHTENED_VMCS, - .args[0] =3D (unsigned long)&evmcs_ver - }; - - vcpu_enable_cap(vm, vcpu_id, &enable_evmcs_cap); + vcpu_enable_cap(vm, vcpu_id, KVM_CAP_HYPERV_ENLIGHTENED_VMCS, + (unsigned long)&evmcs_ver); =20 /* KVM should return supported EVMCS version range */ TEST_ASSERT(((evmcs_ver >> 8) >=3D (evmcs_ver & 0xff)) && 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..9c156f9cfa15 100644 --- a/tools/testing/selftests/kvm/x86_64/emulator_error_test.c +++ b/tools/testing/selftests/kvm/x86_64/emulator_error_test.c @@ -161,10 +161,6 @@ static uint64_t process_ucall(struct kvm_vm *vm) =20 int main(int argc, char *argv[]) { - struct kvm_enable_cap emul_failure_cap =3D { - .cap =3D KVM_CAP_EXIT_ON_EMULATION_FAILURE, - .args[0] =3D 1, - }; struct kvm_cpuid_entry2 *entry; struct kvm_cpuid2 *cpuid; struct kvm_vm *vm; @@ -192,7 +188,7 @@ int main(int argc, char *argv[]) =20 rc =3D kvm_check_cap(KVM_CAP_EXIT_ON_EMULATION_FAILURE); TEST_ASSERT(rc, "KVM_CAP_EXIT_ON_EMULATION_FAILURE is unavailable"); - vm_enable_cap(vm, &emul_failure_cap); + vm_enable_cap(vm, KVM_CAP_EXIT_ON_EMULATION_FAILURE, 1); =20 vm_userspace_mem_region_add(vm, VM_MEM_SRC_ANONYMOUS, MEM_REGION_GPA, MEM_REGION_SLOT, 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..81f9f5b1f655 100644 --- a/tools/testing/selftests/kvm/x86_64/fix_hypercall_test.c +++ b/tools/testing/selftests/kvm/x86_64/fix_hypercall_test.c @@ -140,15 +140,13 @@ static void test_fix_hypercall(void) =20 static void test_fix_hypercall_disabled(void) { - struct kvm_enable_cap cap =3D {0}; struct kvm_vm *vm; =20 vm =3D vm_create_default(VCPU_ID, 0, guest_main); setup_ud_vector(vm); =20 - cap.cap =3D KVM_CAP_DISABLE_QUIRKS2; - cap.args[0] =3D KVM_X86_QUIRK_FIX_HYPERCALL_INSN; - vm_enable_cap(vm, &cap); + vm_enable_cap(vm, KVM_CAP_DISABLE_QUIRKS2, + KVM_X86_QUIRK_FIX_HYPERCALL_INSN); =20 ud_expected =3D true; sync_global_to_guest(vm, ud_expected); 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..7ff6e4d70333 100644 --- a/tools/testing/selftests/kvm/x86_64/hyperv_features.c +++ b/tools/testing/selftests/kvm/x86_64/hyperv_features.c @@ -182,10 +182,6 @@ static void guest_test_msrs_access(void) }; struct kvm_cpuid2 *best; vm_vaddr_t msr_gva; - struct kvm_enable_cap cap =3D { - .cap =3D KVM_CAP_HYPERV_ENFORCE_CPUID, - .args =3D {1} - }; struct msr_data *msr; =20 while (true) { @@ -196,7 +192,7 @@ static void guest_test_msrs_access(void) 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_enable_cap(vm, VCPU_ID, KVM_CAP_HYPERV_ENFORCE_CPUID, 1); =20 vcpu_set_hv_cpuid(vm, VCPU_ID); =20 @@ -337,9 +333,7 @@ static void guest_test_msrs_access(void) * Remains unavailable even with KVM_CAP_HYPERV_SYNIC2 * capability enabled and guest visible CPUID bit unset. */ - 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, KVM_CAP_HYPERV_SYNIC2, 0); break; case 22: feat.eax |=3D HV_MSR_SYNIC_AVAILABLE; @@ -518,10 +512,6 @@ static void guest_test_hcalls_access(void) struct kvm_cpuid_entry2 dbg =3D { .function =3D HYPERV_CPUID_SYNDBG_PLATFORM_CAPABILITIES }; - struct kvm_enable_cap cap =3D { - .cap =3D KVM_CAP_HYPERV_ENFORCE_CPUID, - .args =3D {1} - }; vm_vaddr_t hcall_page, hcall_params; struct hcall_data *hcall; struct kvm_cpuid2 *best; @@ -542,7 +532,7 @@ static void guest_test_hcalls_access(void) 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_enable_cap(vm, VCPU_ID, KVM_CAP_HYPERV_ENFORCE_CPUID, 1); =20 vcpu_set_hv_cpuid(vm, VCPU_ID); =20 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..5eea3ac7958e 100644 --- a/tools/testing/selftests/kvm/x86_64/kvm_pv_test.c +++ b/tools/testing/selftests/kvm/x86_64/kvm_pv_test.c @@ -206,7 +206,6 @@ static void enter_guest(struct kvm_vm *vm) =20 int main(void) { - struct kvm_enable_cap cap =3D {0}; struct kvm_cpuid2 *best; struct kvm_vm *vm; =20 @@ -217,9 +216,7 @@ int main(void) =20 vm =3D vm_create_default(VCPU_ID, 0, 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, KVM_CAP_ENFORCE_PV_FEATURE_CPUID, 1); =20 best =3D kvm_get_supported_cpuid(); clear_kvm_cpuid_features(best); diff --git a/tools/testing/selftests/kvm/x86_64/max_vcpuid_cap_test.c b/too= ls/testing/selftests/kvm/x86_64/max_vcpuid_cap_test.c index c6fd36a31c8c..7211fd8d5d24 100644 --- a/tools/testing/selftests/kvm/x86_64/max_vcpuid_cap_test.c +++ b/tools/testing/selftests/kvm/x86_64/max_vcpuid_cap_test.c @@ -14,7 +14,6 @@ int main(int argc, char *argv[]) { struct kvm_vm *vm; - struct kvm_enable_cap cap =3D { 0 }; int ret; =20 vm =3D vm_create(0); @@ -23,21 +22,16 @@ int main(int argc, char *argv[]) ret =3D vm_check_cap(vm, KVM_CAP_MAX_VCPU_ID); =20 /* Try to set KVM_CAP_MAX_VCPU_ID beyond KVM cap */ - cap.cap =3D KVM_CAP_MAX_VCPU_ID; - cap.args[0] =3D ret + 1; - ret =3D __vm_enable_cap(vm, &cap); + ret =3D __vm_enable_cap(vm, KVM_CAP_MAX_VCPU_ID, ret + 1); TEST_ASSERT(ret < 0, "Setting KVM_CAP_MAX_VCPU_ID beyond KVM cap should fail"); =20 /* Set KVM_CAP_MAX_VCPU_ID */ - cap.cap =3D KVM_CAP_MAX_VCPU_ID; - cap.args[0] =3D MAX_VCPU_ID; - vm_enable_cap(vm, &cap); + vm_enable_cap(vm, KVM_CAP_MAX_VCPU_ID, MAX_VCPU_ID); =20 =20 /* Try to set KVM_CAP_MAX_VCPU_ID again */ - cap.args[0] =3D MAX_VCPU_ID + 1; - ret =3D __vm_enable_cap(vm, &cap); + ret =3D __vm_enable_cap(vm, KVM_CAP_MAX_VCPU_ID, MAX_VCPU_ID + 1); TEST_ASSERT(ret < 0, "Setting KVM_CAP_MAX_VCPU_ID multiple times should fail"); =20 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..e79c04581ca8 100644 --- a/tools/testing/selftests/kvm/x86_64/platform_info_test.c +++ b/tools/testing/selftests/kvm/x86_64/platform_info_test.c @@ -35,22 +35,12 @@ static void guest_code(void) } } =20 -static void set_msr_platform_info_enabled(struct kvm_vm *vm, bool enable) -{ - struct kvm_enable_cap cap =3D {}; - - cap.cap =3D KVM_CAP_MSR_PLATFORM_INFO; - cap.flags =3D 0; - cap.args[0] =3D (int)enable; - vm_enable_cap(vm, &cap); -} - static void test_msr_platform_info_enabled(struct kvm_vm *vm) { struct kvm_run *run =3D vcpu_state(vm, VCPU_ID); struct ucall uc; =20 - set_msr_platform_info_enabled(vm, true); + vm_enable_cap(vm, KVM_CAP_MSR_PLATFORM_INFO, true); vcpu_run(vm, VCPU_ID); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Exit_reason other than KVM_EXIT_IO: %u (%s),\n", @@ -69,7 +59,7 @@ static void test_msr_platform_info_disabled(struct kvm_vm= *vm) { struct kvm_run *run =3D vcpu_state(vm, VCPU_ID); =20 - set_msr_platform_info_enabled(vm, false); + vm_enable_cap(vm, KVM_CAP_MSR_PLATFORM_INFO, false); vcpu_run(vm, VCPU_ID); TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_SHUTDOWN, "Exit_reason other than KVM_EXIT_SHUTDOWN: %u (%s)\n", 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..4f4519c0cdb1 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 @@ -334,7 +334,6 @@ static void test_pmu_config_disable(void (*guest_code)(= void)) { int r; struct kvm_vm *vm; - struct kvm_enable_cap cap =3D { 0 }; =20 r =3D kvm_check_cap(KVM_CAP_PMU_CAPABILITY); if (!(r & KVM_PMU_CAP_DISABLE)) @@ -342,9 +341,7 @@ static void test_pmu_config_disable(void (*guest_code)(= void)) =20 vm =3D vm_create_without_vcpus(VM_MODE_DEFAULT, DEFAULT_GUEST_PHY_PAGES); =20 - cap.cap =3D KVM_CAP_PMU_CAPABILITY; - cap.args[0] =3D KVM_PMU_CAP_DISABLE; - vm_enable_cap(vm, &cap); + vm_enable_cap(vm, KVM_CAP_PMU_CAPABILITY, KVM_PMU_CAP_DISABLE); =20 vm_vcpu_add_default(vm, VCPU_ID, guest_code); vm_init_descriptor_tables(vm); 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 f127f2fccca6..e814748bf7ba 100644 --- a/tools/testing/selftests/kvm/x86_64/sev_migrate_tests.c +++ b/tools/testing/selftests/kvm/x86_64/sev_migrate_tests.c @@ -82,12 +82,7 @@ static struct kvm_vm *aux_vm_create(bool with_vcpus) =20 static int __sev_migrate_from(struct kvm_vm *dst, struct kvm_vm *src) { - struct kvm_enable_cap cap =3D { - .cap =3D KVM_CAP_VM_MOVE_ENC_CONTEXT_FROM, - .args =3D { src->fd } - }; - - return __vm_enable_cap(dst, &cap); + return __vm_enable_cap(dst, KVM_CAP_VM_MOVE_ENC_CONTEXT_FROM, src->fd); } =20 =20 @@ -223,12 +218,7 @@ static void test_sev_migrate_parameters(void) =20 static int __sev_mirror_create(struct kvm_vm *dst, struct kvm_vm *src) { - struct kvm_enable_cap cap =3D { - .cap =3D KVM_CAP_VM_COPY_ENC_CONTEXT_FROM, - .args =3D { src->fd } - }; - - return __vm_enable_cap(dst, &cap); + return __vm_enable_cap(dst, KVM_CAP_VM_COPY_ENC_CONTEXT_FROM, src->fd); } =20 =20 diff --git a/tools/testing/selftests/kvm/x86_64/triple_fault_event_test.c b= /tools/testing/selftests/kvm/x86_64/triple_fault_event_test.c index 66378140764d..68e0f1c5ec5a 100644 --- a/tools/testing/selftests/kvm/x86_64/triple_fault_event_test.c +++ b/tools/testing/selftests/kvm/x86_64/triple_fault_event_test.c @@ -46,11 +46,6 @@ int main(void) vm_vaddr_t vmx_pages_gva; struct ucall uc; =20 - struct kvm_enable_cap cap =3D { - .cap =3D KVM_CAP_X86_TRIPLE_FAULT_EVENT, - .args =3D {1} - }; - if (!nested_vmx_supported()) { print_skip("Nested VMX not supported"); exit(KSFT_SKIP); @@ -62,7 +57,7 @@ int main(void) } =20 vm =3D vm_create_default(VCPU_ID, 0, (void *) l1_guest_code); - vm_enable_cap(vm, &cap); + vm_enable_cap(vm, KVM_CAP_X86_TRIPLE_FAULT_EVENT, 1); =20 run =3D vcpu_state(vm, VCPU_ID); vcpu_alloc_vmx(vm, &vmx_pages_gva); 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..23e9292580c9 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 @@ -550,11 +550,8 @@ static void run_guest_then_process_ucall_done(struct k= vm_vm *vm) process_ucall_done(vm); } =20 -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, - }; +static void test_msr_filter_allow(void) +{ struct kvm_vm *vm; int rc; =20 @@ -564,7 +561,7 @@ static void test_msr_filter_allow(void) { =20 rc =3D kvm_check_cap(KVM_CAP_X86_USER_SPACE_MSR); TEST_ASSERT(rc, "KVM_CAP_X86_USER_SPACE_MSR is available"); - vm_enable_cap(vm, &cap); + vm_enable_cap(vm, KVM_CAP_X86_USER_SPACE_MSR, KVM_MSR_EXIT_REASON_FILTER); =20 rc =3D kvm_check_cap(KVM_CAP_X86_MSR_FILTER); TEST_ASSERT(rc, "KVM_CAP_X86_MSR_FILTER is available"); @@ -673,13 +670,8 @@ static void handle_wrmsr(struct kvm_run *run) } } =20 -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, - }; +static void test_msr_filter_deny(void) +{ struct kvm_vm *vm; struct kvm_run *run; int rc; @@ -691,7 +683,9 @@ static void test_msr_filter_deny(void) { =20 rc =3D kvm_check_cap(KVM_CAP_X86_USER_SPACE_MSR); TEST_ASSERT(rc, "KVM_CAP_X86_USER_SPACE_MSR is available"); - vm_enable_cap(vm, &cap); + vm_enable_cap(vm, KVM_CAP_X86_USER_SPACE_MSR, KVM_MSR_EXIT_REASON_INVAL | + KVM_MSR_EXIT_REASON_UNKNOWN | + KVM_MSR_EXIT_REASON_FILTER); =20 rc =3D kvm_check_cap(KVM_CAP_X86_MSR_FILTER); TEST_ASSERT(rc, "KVM_CAP_X86_MSR_FILTER is available"); @@ -726,11 +720,8 @@ static void test_msr_filter_deny(void) { kvm_vm_free(vm); } =20 -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, - }; +static void test_msr_permission_bitmap(void) +{ struct kvm_vm *vm; int rc; =20 @@ -740,7 +731,7 @@ static void test_msr_permission_bitmap(void) { =20 rc =3D kvm_check_cap(KVM_CAP_X86_USER_SPACE_MSR); TEST_ASSERT(rc, "KVM_CAP_X86_USER_SPACE_MSR is available"); - vm_enable_cap(vm, &cap); + vm_enable_cap(vm, KVM_CAP_X86_USER_SPACE_MSR, KVM_MSR_EXIT_REASON_FILTER); =20 rc =3D kvm_check_cap(KVM_CAP_X86_MSR_FILTER); TEST_ASSERT(rc, "KVM_CAP_X86_MSR_FILTER is available"); --=20 2.36.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 5D634CCA47B for ; Fri, 3 Jun 2022 00:48:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235695AbiFCAsP (ORCPT ); Thu, 2 Jun 2022 20:48:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47880 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240061AbiFCAox (ORCPT ); Thu, 2 Jun 2022 20:44:53 -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 5E2FB344D7 for ; Thu, 2 Jun 2022 17:44:35 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id n8-20020a170903110800b001636d9ff4f8so3480000plh.11 for ; Thu, 02 Jun 2022 17:44: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=GAQ5rtYY2/SIzOaV7udbyKc/0bACGVyEmjMH97mKxMg=; b=BQlq45lzwFoBRQriXmAnNEAhaKGIO1RR+vgdA3r1AmD7PwFn1XaVAeScOss3Wt6jD5 9ncdMwLbcg3MEnEzWqSBZJBMy65veAAxPneVBpf/m618vECk4U9QS0VYSD/08Kl3eH+1 0rs9/OdSGwzPev7wYbsCL+Zx02R0rVxVcrBa1Lrz1neCw7vY/RjtlnVMUBS65Kx/9X9/ ZA2moSJYmmMkF2WuRxkaw2cO7qWNYK9GUXraquoHhbMABB9UKcFV8CNwCkB8rPQDmCBE Ae/0TvWLG0vH/Ks1ZcsuRb0JdXy0Ns6WPrabMX6qy2+oiHM18A8qk47qm2AmAzK0whc0 Gryg== 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=GAQ5rtYY2/SIzOaV7udbyKc/0bACGVyEmjMH97mKxMg=; b=gZPe8KQLRqdNSf0RDXWoXNXqVsKcKkYHK8fqCWHVh0AkjzxJG3VPxNmA8qYe4xgtB+ QqXZZEiTzWA/yxxe+kX/3QkeXjTciictumrk07yyf/uMsEt1oRtYFWVYwL9hT7pWZAfe zOc6v+jPLz806YgiD1hPviMCZwEK0WuLBUVpzy6v6aXRBhKKDd8jWQMDL8D9y8IhZVLQ 9dSZAieNu2NYB1re3FrEbwNfYidEDSjiTYUv1Bd6RyxQP4/bkYygC7RW/v2Cp4y2/1+W qVhKe9XeCzzhgygoDOnS5P4FaapI9qqtFjhiXAltw1kV3EC/gtdYGpkHRNgokLGOdUgA //mA== X-Gm-Message-State: AOAM5333Nl6tzrKIa9SOlFzufLW3AHiUnN/+37pseEgZ191W2PWVRSgd rKBw9JchRPS6Yf3mAkPvWCo73hygfkI= X-Google-Smtp-Source: ABdhPJz8NwL6LdQD4GHjiWp5kcSNph8/fOPGHUsCFHYwPKucittVsr5C/domjE+h4MH3pppfG06TuGSUlD8= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a63:6886:0:b0:3fb:fc21:7945 with SMTP id d128-20020a636886000000b003fbfc217945mr6678247pgc.120.1654217074837; Thu, 02 Jun 2022 17:44:34 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:39 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-33-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 032/144] KVM: selftests: Cache list of MSRs to save/restore From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Cache the list of MSRs to save restore, mostly to justify not freeing the list in the caller, which simplifies consumption of the list. Opportunistically move the XSS test's so called is_supported_msr() to common code as kvm_msr_is_in_save_restore_list(). The XSS is "supported" by KVM, it's simply not in the save/restore list because KVM doesn't yet allow a non-zero value. Signed-off-by: Sean Christopherson Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../selftests/kvm/include/x86_64/processor.h | 4 +- .../selftests/kvm/lib/x86_64/processor.c | 83 +++++++++---------- .../selftests/kvm/x86_64/xss_msr_test.c | 27 ++---- 3 files changed, 46 insertions(+), 68 deletions(-) diff --git a/tools/testing/selftests/kvm/include/x86_64/processor.h b/tools= /testing/selftests/kvm/include/x86_64/processor.h index 6fbbe28a0f39..afc55f561a2c 100644 --- a/tools/testing/selftests/kvm/include/x86_64/processor.h +++ b/tools/testing/selftests/kvm/include/x86_64/processor.h @@ -427,8 +427,10 @@ void vcpu_load_state(struct kvm_vm *vm, uint32_t vcpui= d, 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); +const struct kvm_msr_list *kvm_get_msr_index_list(void); +bool kvm_msr_is_in_save_restore_list(uint32_t msr_index); 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); =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 1e3d68bdfc7d..5d161d0b8a0c 100644 --- a/tools/testing/selftests/kvm/lib/x86_64/processor.c +++ b/tools/testing/selftests/kvm/lib/x86_64/processor.c @@ -720,18 +720,6 @@ struct kvm_cpuid2 *kvm_get_supported_cpuid(void) return cpuid; } =20 -/* - * KVM Get MSR - * - * Input Args: - * 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 kvm_get_feature_msr(uint64_t msr_index) { struct { @@ -904,40 +892,49 @@ void vcpu_dump(FILE *stream, struct kvm_vm *vm, uint3= 2_t vcpuid, uint8_t indent) sregs_dump(stream, &sregs, indent + 4); } =20 -static int kvm_get_num_msrs_fd(int kvm_fd) +const struct kvm_msr_list *kvm_get_msr_index_list(void) { + static struct kvm_msr_list *list; struct kvm_msr_list nmsrs; - int r; + int kvm_fd, r; + + if (list) + return list; + + kvm_fd =3D open_kvm_dev_path_or_exit(); =20 nmsrs.nmsrs =3D 0; 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); + "Expected -E2BIG, got rc: %i errno: %i (%s)", + r, errno, strerror(errno)); =20 - return nmsrs.nmsrs; -} + list =3D malloc(sizeof(*list) + nmsrs.nmsrs * sizeof(list->indices[0])); + TEST_ASSERT(list, "-ENOMEM when allocating MSR index list"); + list->nmsrs =3D nmsrs.nmsrs; =20 -static int kvm_get_num_msrs(struct kvm_vm *vm) -{ - return kvm_get_num_msrs_fd(vm->kvm_fd); -} - -struct kvm_msr_list *kvm_get_msr_index_list(void) -{ - struct kvm_msr_list *list; - int nmsrs, kvm_fd; - - kvm_fd =3D open_kvm_dev_path_or_exit(); - - nmsrs =3D kvm_get_num_msrs_fd(kvm_fd); - list =3D malloc(sizeof(*list) + nmsrs * sizeof(list->indices[0])); - list->nmsrs =3D nmsrs; kvm_ioctl(kvm_fd, KVM_GET_MSR_INDEX_LIST, list); close(kvm_fd); =20 + TEST_ASSERT(list->nmsrs =3D=3D nmsrs.nmsrs, + "Number of save/restore MSRs changed, was %d, now %d", + nmsrs.nmsrs, list->nmsrs); return list; } =20 +bool kvm_msr_is_in_save_restore_list(uint32_t msr_index) +{ + const struct kvm_msr_list *list =3D kvm_get_msr_index_list(); + int i; + + for (i =3D 0; i < list->nmsrs; ++i) { + if (list->indices[i] =3D=3D msr_index) + return true; + } + + return false; +} + static int vcpu_save_xsave_state(struct kvm_vm *vm, struct vcpu *vcpu, struct kvm_x86_state *state) { @@ -956,10 +953,10 @@ static int vcpu_save_xsave_state(struct kvm_vm *vm, s= truct vcpu *vcpu, =20 struct kvm_x86_state *vcpu_save_state(struct kvm_vm *vm, uint32_t vcpuid) { + const struct kvm_msr_list *msr_list =3D kvm_get_msr_index_list(); struct vcpu *vcpu =3D vcpu_get(vm, vcpuid); - struct kvm_msr_list *list; struct kvm_x86_state *state; - int nmsrs, r, i; + int r, i; static int nested_size =3D -1; =20 if (nested_size =3D=3D -1) { @@ -977,12 +974,7 @@ struct kvm_x86_state *vcpu_save_state(struct kvm_vm *v= m, uint32_t vcpuid) */ vcpu_run_complete_io(vm, vcpuid); =20 - nmsrs =3D kvm_get_num_msrs(vm); - list =3D malloc(sizeof(*list) + nmsrs * sizeof(list->indices[0])); - list->nmsrs =3D nmsrs; - kvm_ioctl(vm->kvm_fd, KVM_GET_MSR_INDEX_LIST, list); - - state =3D malloc(sizeof(*state) + nmsrs * sizeof(state->msrs.entries[0])); + state =3D malloc(sizeof(*state) + msr_list->nmsrs * sizeof(state->msrs.en= tries[0])); r =3D ioctl(vcpu->fd, KVM_GET_VCPU_EVENTS, &state->events); TEST_ASSERT(r =3D=3D 0, "Unexpected result from KVM_GET_VCPU_EVENTS, r: %= i", r); @@ -1020,18 +1012,17 @@ struct kvm_x86_state *vcpu_save_state(struct kvm_vm= *vm, uint32_t vcpuid) } else state->nested.size =3D 0; =20 - state->msrs.nmsrs =3D nmsrs; - for (i =3D 0; i < nmsrs; i++) - state->msrs.entries[i].index =3D list->indices[i]; + state->msrs.nmsrs =3D msr_list->nmsrs; + for (i =3D 0; i < msr_list->nmsrs; i++) + state->msrs.entries[i].index =3D msr_list->indices[i]; r =3D ioctl(vcpu->fd, KVM_GET_MSRS, &state->msrs); - TEST_ASSERT(r =3D=3D nmsrs, "Unexpected result from KVM_GET_MSRS, r: %i (= failed MSR was 0x%x)", - r, r =3D=3D nmsrs ? -1 : list->indices[r]); + TEST_ASSERT(r =3D=3D msr_list->nmsrs, "Unexpected result from KVM_GET_MSR= S, r: %i (failed MSR was 0x%x)", + r, r =3D=3D msr_list->nmsrs ? -1 : msr_list->indices[r]); =20 r =3D ioctl(vcpu->fd, KVM_GET_DEBUGREGS, &state->debugregs); TEST_ASSERT(r =3D=3D 0, "Unexpected result from KVM_GET_DEBUGREGS, r: %i", r); =20 - free(list); return state; } =20 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..7bd15f8a805c 100644 --- a/tools/testing/selftests/kvm/x86_64/xss_msr_test.c +++ b/tools/testing/selftests/kvm/x86_64/xss_msr_test.c @@ -17,28 +17,11 @@ =20 #define X86_FEATURE_XSAVES (1<<3) =20 -bool is_supported_msr(u32 msr_index) -{ - struct kvm_msr_list *list; - bool found =3D false; - int i; - - list =3D kvm_get_msr_index_list(); - for (i =3D 0; i < list->nmsrs; ++i) { - if (list->indices[i] =3D=3D msr_index) { - found =3D true; - break; - } - } - - free(list); - return found; -} - int main(int argc, char *argv[]) { struct kvm_cpuid_entry2 *entry; bool xss_supported =3D false; + bool xss_in_msr_list; struct kvm_vm *vm; uint64_t xss_val; int i, r; @@ -64,12 +47,14 @@ int main(int argc, char *argv[]) * 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. * Also, in the future when a non-zero value succeeds check that - * IA32_XSS is in the KVM_GET_MSR_INDEX_LIST. + * IA32_XSS is in the list of MSRs to save/restore. */ + xss_in_msr_list =3D kvm_msr_is_in_save_restore_list(MSR_IA32_XSS); for (i =3D 0; i < MSR_BITS; ++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"); + + TEST_ASSERT(r =3D=3D 0 || xss_in_msr_list, + "IA32_XSS was able to be set, but was not in save/restore list"); } =20 kvm_vm_free(vm); --=20 2.36.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 C7BA3CCA47F for ; Fri, 3 Jun 2022 00:54:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242453AbiFCAxF (ORCPT ); Thu, 2 Jun 2022 20:53:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47880 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240103AbiFCAoy (ORCPT ); Thu, 2 Jun 2022 20:44: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 3FC02344DB for ; Thu, 2 Jun 2022 17:44:37 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id y1-20020a17090a390100b001e66bb0fcefso3255482pjb.0 for ; Thu, 02 Jun 2022 17:44: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=bT79LH/T6E4n1fLTC+jwsUR41xuHEOgcpCNU/PDapbY=; b=GFoSj2C5Zv8Iq17dJiZu0q96Wl1Suh9vXG1Ut7AlMixIeK1F0UzHlF2AMMQzmZMF4w moG70On5GwqpQXllDJIlBdObfNaQx3Ebw4JBcSiZ2sj+TvORlzUvGm4yGnKSn15SlD4Y 27k3KNmWyfqts6J86I5ogHdSaFtrsZZjFF2Wj53EZANp4ZacxElrUVi+XB+ZU64YttoI PVrpfCUHj9xD2HSa+xpvn/A+r2Fldf9OYqQ/jFXTOoxp54bEf7RLk1jxElvlY9IH9rTf xqmZBNAgJFUduxLihydvjLTn7FzKRcZVBIq7/cr/bFzAXvQnVohzGTfGY1oVQYpqAPhz TVzA== 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=bT79LH/T6E4n1fLTC+jwsUR41xuHEOgcpCNU/PDapbY=; b=pUopRmMIcEPaVweA+Vihu3OnZynljPO6+xPhku2oWc9JmZW4WW8afxGDhP3qU7dnWO IFSOu4/08YbgjgEjnOx8RUoyiDGOkgA98l3pfmXNLpZgxVgw8VmP+angSHsDzk8JlpIc Pb41TbFLPZv/OdG/+uHehl0rRIktO6170bbc8c8P0Eo7S0O+87yN8/2B59PznWzBa/Yq 0Gc+orCuCveUGZtj29Tmblv0eZ7QBgwThzq3vU5l1OwKyQoSDE0NpPeu6wOLazmUhUPO ZvPP4nQwdyRL0oxZTdIERPV4DQ8jYmKzhCFjoFZmozVlPPZLkMERLvlgtQHdjDVglueh ibrQ== X-Gm-Message-State: AOAM5311Lqr87SRUmR+isEul2ZDDLh5iouM9E3AbpkLtkM2MKpcQugd7 Omg/AQmXOPuEQwYORGxedBxLnau9s5s= X-Google-Smtp-Source: ABdhPJwVtPAXAcemPWEZpF8OkCe5Rhfl4bMfj3eoGH3W5yBUgiJaIUPKbTXCE4sgrHzW0vBUSqSQpa7dv9s= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:c951:b0:163:efad:406d with SMTP id i17-20020a170902c95100b00163efad406dmr7642474pla.55.1654217076668; Thu, 02 Jun 2022 17:44:36 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:40 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-34-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 033/144] KVM: selftests: Harden and comment XSS / KVM_SET_MSRS interaction From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Assert that KVM_SET_MSRS returns '0' or '1' when setting XSS to a non-zero value. The ioctl() itself should "succeed", its only the setting of the XSS MSR that should fail/fault. Signed-off-by: Sean Christopherson Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- tools/testing/selftests/kvm/x86_64/xss_msr_test.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) 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 7bd15f8a805c..a6abcb559e7c 100644 --- a/tools/testing/selftests/kvm/x86_64/xss_msr_test.c +++ b/tools/testing/selftests/kvm/x86_64/xss_msr_test.c @@ -53,7 +53,12 @@ int main(int argc, char *argv[]) for (i =3D 0; i < MSR_BITS; ++i) { r =3D _vcpu_set_msr(vm, VCPU_ID, MSR_IA32_XSS, 1ull << i); =20 - TEST_ASSERT(r =3D=3D 0 || xss_in_msr_list, + /* + * Setting a list of MSRs returns the entry that "faulted", or + * the last entry +1 if all MSRs were successfully written. + */ + TEST_ASSERT(!r || r =3D=3D 1, KVM_IOCTL_ERROR(KVM_SET_MSRS, r)); + TEST_ASSERT(r !=3D 1 || xss_in_msr_list, "IA32_XSS was able to be set, but was not in save/restore list"); } =20 --=20 2.36.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 71C68CCA495 for ; Fri, 3 Jun 2022 00:54:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241843AbiFCAv1 (ORCPT ); Thu, 2 Jun 2022 20:51:27 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47944 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240117AbiFCAoy (ORCPT ); Thu, 2 Jun 2022 20:44:54 -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 14BCC34642 for ; Thu, 2 Jun 2022 17:44:39 -0700 (PDT) Received: by mail-pg1-x549.google.com with SMTP id f9-20020a636a09000000b003c61848e622so3067583pgc.0 for ; Thu, 02 Jun 2022 17:44: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=/TXk1YTRDqd6XE4qU0TsZKT5BH5jUZR26Th7i6gBUIY=; b=nWGJfYnheUtAx43bAsTy5YZCtvTlmYUdB49GpmRkYkIE4oCZU7/JBgM7GwVYfSMQbL oxW/hH/d9dCYLAX/DQs7ZwrzUCdjNydUNxZel/YXexmmbDkPSLLTo265VgRgAc9DRfgR otW2Rzm44uhNv4P2tBSsd18ZQcmDCIqD5xWD4xJO06kRnc6ttsYzD3UClrPksYqQLLd3 d4c6hJzA9XSewlv3Vm1N7VTTeFkyr9O6A7OT1qNMzX1GXI7uemTa0/lhEdsRx+ASOPKC BCpaBd2eBhH+uz3uAoRUrKvNIev3Rh8Tbclsh7wdabUvLZDGFrW9UGms82ZLAWbSqURz rahQ== 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=/TXk1YTRDqd6XE4qU0TsZKT5BH5jUZR26Th7i6gBUIY=; b=Ucv6WfkNUAiKRb8zcFrlWizYsY3/tFLLqhTBncxUJRCH7SI6AxVAZ5yO7oQcIovQRv SxoJpkRozqB1srRJ/UVx7aa0Q/vDri267RqTDLi8cEoyasLbxPz+bVcygG0tOfxWMr4f OS8g6oUDUmN/we367I34jsSseobmSsZWj7OP1tB+Z3olc0uqAIh3Bel/q7htjTvmESRm 8rNPm8j4oglrkKOswqMuIhz033UMXGfDT8zpcabzAcC/W/UHA+xRgv5JWEhuoBF2P4RU D5KM9uRJ4Nue7dxb+cSeRq8VlJYpCRRqFnUGC3vPmfoGI49Rb8gGeuMwLVbOq4t8Xlp6 EU2A== X-Gm-Message-State: AOAM531TChJz2fQwyeJop7wEq/StPv01KQ3h/xq9F4panNASGfaBPYRp sINZGKLvP8vAv+qqdenK1DQDuEVbMHo= X-Google-Smtp-Source: ABdhPJx9Saru2iwqOGwzfMvOAQnA0xm+CesrE+6/QMr3FB0oyyBsHP7NGKTdaETxUiMOL1ir4EPYFz4ChWU= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:903:2488:b0:163:b2c0:7efe with SMTP id p8-20020a170903248800b00163b2c07efemr7454231plw.164.1654217078523; Thu, 02 Jun 2022 17:44:38 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:41 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-35-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 034/144] KVM: selftests: Dedup MSR index list helpers, simplify dedicated test From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Consolidate the helper for retrieving the list of save/restore MSRs and the list of feature MSRs, and use the common helpers in the related get_msr_index_features test. Switching to the common helpers eliminates the testcase that KVM returns the same -E2BIG result if the input number of MSRs is '1' versus '0', but considered that testcase isn't very interesting, e.g. '0' and '1' are equally arbitrary, and certainly not worth the additional code. Signed-off-by: Sean Christopherson Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../selftests/kvm/include/x86_64/processor.h | 1 + .../selftests/kvm/lib/x86_64/processor.c | 39 ++++-- .../kvm/x86_64/get_msr_index_features.c | 112 +++--------------- 3 files changed, 46 insertions(+), 106 deletions(-) diff --git a/tools/testing/selftests/kvm/include/x86_64/processor.h b/tools= /testing/selftests/kvm/include/x86_64/processor.h index afc55f561a2c..e4268432cfe8 100644 --- a/tools/testing/selftests/kvm/include/x86_64/processor.h +++ b/tools/testing/selftests/kvm/include/x86_64/processor.h @@ -428,6 +428,7 @@ void vcpu_load_state(struct kvm_vm *vm, uint32_t vcpuid, void kvm_x86_state_cleanup(struct kvm_x86_state *state); =20 const struct kvm_msr_list *kvm_get_msr_index_list(void); +const struct kvm_msr_list *kvm_get_feature_msr_index_list(void); bool kvm_msr_is_in_save_restore_list(uint32_t msr_index); uint64_t kvm_get_feature_msr(uint64_t msr_index); =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 5d161d0b8a0c..a6c35f269013 100644 --- a/tools/testing/selftests/kvm/lib/x86_64/processor.c +++ b/tools/testing/selftests/kvm/lib/x86_64/processor.c @@ -892,19 +892,20 @@ void vcpu_dump(FILE *stream, struct kvm_vm *vm, uint3= 2_t vcpuid, uint8_t indent) sregs_dump(stream, &sregs, indent + 4); } =20 -const struct kvm_msr_list *kvm_get_msr_index_list(void) +static struct kvm_msr_list *__kvm_get_msr_index_list(bool feature_msrs) { - static struct kvm_msr_list *list; + struct kvm_msr_list *list; struct kvm_msr_list nmsrs; int kvm_fd, r; =20 - if (list) - return list; - kvm_fd =3D open_kvm_dev_path_or_exit(); =20 nmsrs.nmsrs =3D 0; - r =3D __kvm_ioctl(kvm_fd, KVM_GET_MSR_INDEX_LIST, &nmsrs); + if (!feature_msrs) + r =3D __kvm_ioctl(kvm_fd, KVM_GET_MSR_INDEX_LIST, &nmsrs); + else + r =3D __kvm_ioctl(kvm_fd, KVM_GET_MSR_FEATURE_INDEX_LIST, &nmsrs); + TEST_ASSERT(r =3D=3D -1 && errno =3D=3D E2BIG, "Expected -E2BIG, got rc: %i errno: %i (%s)", r, errno, strerror(errno)); @@ -913,15 +914,37 @@ const struct kvm_msr_list *kvm_get_msr_index_list(voi= d) TEST_ASSERT(list, "-ENOMEM when allocating MSR index list"); list->nmsrs =3D nmsrs.nmsrs; =20 - kvm_ioctl(kvm_fd, KVM_GET_MSR_INDEX_LIST, list); + if (!feature_msrs) + kvm_ioctl(kvm_fd, KVM_GET_MSR_INDEX_LIST, list); + else + kvm_ioctl(kvm_fd, KVM_GET_MSR_FEATURE_INDEX_LIST, list); close(kvm_fd); =20 TEST_ASSERT(list->nmsrs =3D=3D nmsrs.nmsrs, - "Number of save/restore MSRs changed, was %d, now %d", + "Number of MSRs in list changed, was %d, now %d", nmsrs.nmsrs, list->nmsrs); return list; } =20 +const struct kvm_msr_list *kvm_get_msr_index_list(void) +{ + static const struct kvm_msr_list *list; + + if (!list) + list =3D __kvm_get_msr_index_list(false); + return list; +} + + +const struct kvm_msr_list *kvm_get_feature_msr_index_list(void) +{ + static const struct kvm_msr_list *list; + + if (!list) + list =3D __kvm_get_msr_index_list(true); + return list; +} + bool kvm_msr_is_in_save_restore_list(uint32_t msr_index) { const struct kvm_msr_list *list =3D kvm_get_msr_index_list(); 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 4ef60adbe108..1e366fdfe7be 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 @@ -15,108 +15,24 @@ #include "kvm_util.h" #include "processor.h" =20 -static int kvm_num_index_msrs(int kvm_fd, int nmsrs) +int main(int argc, char *argv[]) { - struct kvm_msr_list *list; - int r; - - 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); - TEST_ASSERT(r =3D=3D -1 && errno =3D=3D E2BIG, - "Unexpected result from KVM_GET_MSR_INDEX_LIST probe, r: %i", - r); - - r =3D list->nmsrs; - free(list); - return r; -} - -static void test_get_msr_index(void) -{ - int old_res, res, kvm_fd; - struct kvm_msr_list *list; - - kvm_fd =3D open_kvm_dev_path_or_exit(); - - old_res =3D kvm_num_index_msrs(kvm_fd, 0); - TEST_ASSERT(old_res !=3D 0, "Expecting nmsrs to be > 0"); - - if (old_res !=3D 1) { - res =3D kvm_num_index_msrs(kvm_fd, 1); - TEST_ASSERT(res > 1, "Expecting nmsrs to be > 1"); - TEST_ASSERT(res =3D=3D old_res, "Expecting nmsrs to be identical"); - } - - list =3D malloc(sizeof(*list) + old_res * sizeof(list->indices[0])); - list->nmsrs =3D old_res; - kvm_ioctl(kvm_fd, KVM_GET_MSR_INDEX_LIST, list); - - TEST_ASSERT(list->nmsrs =3D=3D old_res, "Expecting nmsrs to be identical"= ); - free(list); - - close(kvm_fd); -} - -static int kvm_num_feature_msrs(int kvm_fd, int nmsrs) -{ - struct kvm_msr_list *list; - int r; - - list =3D malloc(sizeof(*list) + nmsrs * sizeof(list->indices[0])); - list->nmsrs =3D nmsrs; - 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); - - r =3D list->nmsrs; - free(list); - return r; -} - -struct kvm_msr_list *kvm_get_msr_feature_list(int kvm_fd, int nmsrs) -{ - struct kvm_msr_list *list; - - list =3D malloc(sizeof(*list) + nmsrs * sizeof(list->indices[0])); - list->nmsrs =3D nmsrs; - kvm_ioctl(kvm_fd, KVM_GET_MSR_FEATURE_INDEX_LIST, list); - - return list; -} - -static void test_get_msr_feature(void) -{ - int res, old_res, i, kvm_fd; - struct kvm_msr_list *feature_list; - - kvm_fd =3D open_kvm_dev_path_or_exit(); - - old_res =3D kvm_num_feature_msrs(kvm_fd, 0); - TEST_ASSERT(old_res !=3D 0, "Expecting nmsrs to be > 0"); - - if (old_res !=3D 1) { - res =3D kvm_num_feature_msrs(kvm_fd, 1); - TEST_ASSERT(res > 1, "Expecting nmsrs to be > 1"); - TEST_ASSERT(res =3D=3D old_res, "Expecting nmsrs to be identical"); + const struct kvm_msr_list *feature_list; + int i; + + /* + * Skip the entire test if MSR_FEATURES isn't supported, other tests + * will cover the "regular" list of MSRs, the coverage here is purely + * opportunistic and not interesting on its own. + */ + if (!kvm_check_cap(KVM_CAP_GET_MSR_FEATURES)) { + print_skip("KVM_CAP_GET_MSR_FEATURES not supported"); + exit(KSFT_SKIP); } =20 - feature_list =3D kvm_get_msr_feature_list(kvm_fd, old_res); - TEST_ASSERT(old_res =3D=3D feature_list->nmsrs, - "Unmatching number of msr indexes"); + (void)kvm_get_msr_index_list(); =20 + feature_list =3D kvm_get_feature_msr_index_list(); for (i =3D 0; i < feature_list->nmsrs; i++) kvm_get_feature_msr(feature_list->indices[i]); - - free(feature_list); - close(kvm_fd); -} - -int main(int argc, char *argv[]) -{ - if (kvm_check_cap(KVM_CAP_GET_MSR_FEATURES)) - test_get_msr_feature(); - - test_get_msr_index(); } --=20 2.36.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 617CECCA493 for ; Fri, 3 Jun 2022 00:54:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241723AbiFCAvX (ORCPT ); Thu, 2 Jun 2022 20:51:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47936 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240134AbiFCAoz (ORCPT ); Thu, 2 Jun 2022 20:44: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 0193737A12 for ; Thu, 2 Jun 2022 17:44:40 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id ob5-20020a17090b390500b001e2f03294a7so6391460pjb.8 for ; Thu, 02 Jun 2022 17:44: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=u1IgrS502o6DaNoA2228GMoWiPrKqkjMnHgUvFiLMQ8=; b=WMeD7TT4HAy7DZ12Jd0IR3/ER65DJfhCCfFr0y+EXS9bS9hxIlItQcv3/ZT+wvfPIb WT1t0BUUxAZKmhGjW6aqiX903SpYYuPqwMghwaoRqJG/XxU9/fp3YIzTF4bB184Eb4cN Bv0EkAyiNQIdDWV2icV/Uhgdk2RyhJFYp82Jsay4a4AzOXfaRCl/z4bKSShp52POROhv Qu1BqbOXJA8uaWVAJeewwYgMNCy4Y3vmkuTL/teXDhFVBYp07jAkuxEoRDbHTlwY5JFx Ykf0k1eTKcu8wPzkpiCYCczRkGXRW0g1MIr+NWjYNEx7NjwK1De1MhYkbEJiWW6JL7Jk WiJg== 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=u1IgrS502o6DaNoA2228GMoWiPrKqkjMnHgUvFiLMQ8=; b=csAuWsOone/p9kzwbDb5Jr4FfJdnYdVOIc3iuumtjHCBRLShdwbsdtH20T0ZqbU88K V7llLuyMqbSda660GBVLcqf5zNWic7TWkfnZ5pz+eo7tos0CTyas0m1VaYrx6Nda2a2U aZwEt8IznjG75ZY5RMXsxsbZKwRKQ1i9jv0z1DI8sluBzbA/U92jMUbQm2nXEfotqvQ8 zF1PrhxlXv6Il77cFAEQMM4ku++xVrWm2KWLNPIzqBIoin+ULkzHcorieKpD49jOyuLY iBSPV00ZDo40Ufgz2YZ8r9N4XFI/hU6u4zrnSDGx4BZX6/zXjDul86DcfhugHmaDIYb0 TVhQ== X-Gm-Message-State: AOAM533tsESJbpE5l+hyuuvVWskKhedPR+nIsnf/od4hMWkjR+mSqbg4 sTPt/CgRZFznlU08ekMB/x98x6Ec9ZY= X-Google-Smtp-Source: ABdhPJzLHTRTXmbyaRPugggbXGP4hYk4nxHkvVjrWJvbcKD+d9AGltsmbr1NqMUqCDOblmlVxqVOsbEhOEA= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:d54b:b0:164:bf9:3e1e with SMTP id z11-20020a170902d54b00b001640bf93e1emr7800481plf.58.1654217080298; Thu, 02 Jun 2022 17:44:40 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:42 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-36-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 035/144] KVM: selftests: Rename MP_STATE and GUEST_DEBUG helpers for consistency From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 get/set part of the MP_STATE and GUEST_DEBUG helpers to the end to align with the many other ioctl() wrappers/helpers. Note, this is not an endorsement of the predominant style, the goal is purely to provide consistency in the selftests. Signed-off-by: Sean Christopherson Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- tools/testing/selftests/kvm/aarch64/psci_test.c | 2 +- tools/testing/selftests/kvm/include/kvm_util_base.h | 9 +++++++-- tools/testing/selftests/kvm/lib/x86_64/processor.c | 2 +- tools/testing/selftests/kvm/x86_64/debug_regs.c | 2 +- .../selftests/kvm/x86_64/svm_nested_soft_inject_test.c | 2 +- 5 files changed, 11 insertions(+), 6 deletions(-) diff --git a/tools/testing/selftests/kvm/aarch64/psci_test.c b/tools/testin= g/selftests/kvm/aarch64/psci_test.c index 1a351f3f443d..1485d0b05b66 100644 --- a/tools/testing/selftests/kvm/aarch64/psci_test.c +++ b/tools/testing/selftests/kvm/aarch64/psci_test.c @@ -70,7 +70,7 @@ static void vcpu_power_off(struct kvm_vm *vm, uint32_t vc= puid) .mp_state =3D KVM_MP_STATE_STOPPED, }; =20 - vcpu_set_mp_state(vm, vcpuid, &mp_state); + vcpu_mp_state_set(vm, vcpuid, &mp_state); } =20 static struct kvm_vm *setup_vm(void *guest_code) diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index c9d94c9f2031..edbbbbe4cd5d 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -374,13 +374,18 @@ static inline void vcpu_enable_cap(struct kvm_vm *vm,= uint32_t vcpu_id, vcpu_ioctl(vm, vcpu_id, KVM_ENABLE_CAP, &enable_cap); } =20 -static inline void vcpu_set_guest_debug(struct kvm_vm *vm, uint32_t vcpuid, +static inline void vcpu_guest_debug_set(struct kvm_vm *vm, uint32_t vcpuid, struct kvm_guest_debug *debug) { vcpu_ioctl(vm, vcpuid, KVM_SET_GUEST_DEBUG, debug); } =20 -static inline void vcpu_set_mp_state(struct kvm_vm *vm, uint32_t vcpuid, +static inline void vcpu_mp_state_get(struct kvm_vm *vm, uint32_t vcpuid, + struct kvm_mp_state *mp_state) +{ + vcpu_ioctl(vm, vcpuid, KVM_GET_MP_STATE, mp_state); +} +static inline void vcpu_mp_state_set(struct kvm_vm *vm, uint32_t vcpuid, struct kvm_mp_state *mp_state) { vcpu_ioctl(vm, vcpuid, KVM_SET_MP_STATE, mp_state); diff --git a/tools/testing/selftests/kvm/lib/x86_64/processor.c b/tools/tes= ting/selftests/kvm/lib/x86_64/processor.c index a6c35f269013..9268537f9bd7 100644 --- a/tools/testing/selftests/kvm/lib/x86_64/processor.c +++ b/tools/testing/selftests/kvm/lib/x86_64/processor.c @@ -655,7 +655,7 @@ void vm_vcpu_add_default(struct kvm_vm *vm, uint32_t vc= puid, void *guest_code) =20 /* Setup the MP state */ mp_state.mp_state =3D 0; - vcpu_set_mp_state(vm, vcpuid, &mp_state); + vcpu_mp_state_set(vm, vcpuid, &mp_state); } =20 /* 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..f726645bb9c3 100644 --- a/tools/testing/selftests/kvm/x86_64/debug_regs.c +++ b/tools/testing/selftests/kvm/x86_64/debug_regs.c @@ -67,7 +67,7 @@ static void guest_code(void) } =20 #define CLEAR_DEBUG() memset(&debug, 0, sizeof(debug)) -#define APPLY_DEBUG() vcpu_set_guest_debug(vm, VCPU_ID, &debug) +#define APPLY_DEBUG() vcpu_guest_debug_set(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); \ diff --git a/tools/testing/selftests/kvm/x86_64/svm_nested_soft_inject_test= .c b/tools/testing/selftests/kvm/x86_64/svm_nested_soft_inject_test.c index 18061677154f..f834b9a1a7fa 100644 --- a/tools/testing/selftests/kvm/x86_64/svm_nested_soft_inject_test.c +++ b/tools/testing/selftests/kvm/x86_64/svm_nested_soft_inject_test.c @@ -166,7 +166,7 @@ static void run_test(bool is_nmi) vcpu_args_set(vm, VCPU_ID, 3, svm_gva, (uint64_t)is_nmi, (uint64_t)idt_al= t_vm); =20 memset(&debug, 0, sizeof(debug)); - vcpu_set_guest_debug(vm, VCPU_ID, &debug); + vcpu_guest_debug_set(vm, VCPU_ID, &debug); =20 struct kvm_run *run =3D vcpu_state(vm, VCPU_ID); struct ucall uc; --=20 2.36.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 50D09C43334 for ; Fri, 3 Jun 2022 00:54:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241583AbiFCAvR (ORCPT ); Thu, 2 Jun 2022 20:51:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47880 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240133AbiFCAoz (ORCPT ); Thu, 2 Jun 2022 20:44:55 -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 9EEDA37A2D for ; Thu, 2 Jun 2022 17:44:42 -0700 (PDT) Received: by mail-pf1-x449.google.com with SMTP id 18-20020a621512000000b0051b90b3a793so3492370pfv.8 for ; Thu, 02 Jun 2022 17:44: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=nJYDyIQlf43tnO29QtGw5+/JwyZGgarjVqW9ae910lU=; b=BhsHU27O0y5pb/oAsD9J6/+9IuGPasnzQt5aGw3tGq4kynzlPn2c6E6apW/lmB1UMu S7P2pqNgaAaLH7apUAkEm7a+fc3HDXIHLROwWkQ9L3G0pc9VFxuaLj9z8tvHwvjWjQeA oMHUU53QTppyztjJ/3KPo4JtnESJfdyTFzZyeSHj19d0si5pDLJAj35ZkeA8j7QBaADt JYulzFT1HvNilCCsOrkwT17RdaAcA/nGQ3q+ZOl0caGz3hiyGM02MLInsrWT40Rf9c+f ym+6By+oriXt7Hb+FwKQ7W6uYlWwG3oOhbEJcMaXtyKZMewX2cZ8NeviHmbTQ74labvZ Ropg== 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=nJYDyIQlf43tnO29QtGw5+/JwyZGgarjVqW9ae910lU=; b=EifLKy92IU/J1950hK9PlYkyt2Zwo1XznW37oVnnvpcIq9ehjOEWK4Ce2zVXjJJol4 tiMZJPlJEIgK7jGF9N987uhI1LeVPSYFiVx8tGJtu9K+AEwdyAYRpO0JsnMwD+OZ30L1 XWpSyKjxs5QjRbC3zc0VvCyj2gcb9Rg8pZDRpyEPqHw+0d1tYzA4uiPhI0e08/8Ayap4 qdQG+9YER6D67IneTYAyyCVJe3EvqboRADtHURghMcXrF4NzLCemv9amE8afum/yRQjK 74nIEi/e6c+Vn0JCRPdZIEiW0cCSrmHEIraVNI+/bQq0oiuMsgLnCE9iON46FkVB/RiA yRow== X-Gm-Message-State: AOAM530N9Q5gu4i2JTUU8C+IX9mfJ/bP2TSWXjcX//foyJuwETE+2ihz DzmfO/jlLSyTyzAzb0iZi/GJ4gXpDbg= X-Google-Smtp-Source: ABdhPJxX+yxFeLnyVhqRi1E5gZaRVysi/pa49vkeW8EBzDi0YSpm8f9eLfRkfNI+M5WeReQz4F1qmdTgeEU= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:f688:b0:163:ee37:91c5 with SMTP id l8-20020a170902f68800b00163ee3791c5mr7812180plg.86.1654217082066; Thu, 02 Jun 2022 17:44:42 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:43 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-37-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 036/144] KVM: selftest: Add proper helpers for x86-specific save/restore ioctls From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 helpers for the various one-off helpers used by x86's vCPU state save/restore helpers, and convert the other open coded ioctl()s to use existing helpers. Signed-off-by: Sean Christopherson Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../selftests/kvm/include/x86_64/processor.h | 54 ++++++++ .../selftests/kvm/lib/x86_64/processor.c | 126 +++++------------- 2 files changed, 91 insertions(+), 89 deletions(-) diff --git a/tools/testing/selftests/kvm/include/x86_64/processor.h b/tools= /testing/selftests/kvm/include/x86_64/processor.h index e4268432cfe8..1d46d60bb480 100644 --- a/tools/testing/selftests/kvm/include/x86_64/processor.h +++ b/tools/testing/selftests/kvm/include/x86_64/processor.h @@ -432,6 +432,60 @@ const struct kvm_msr_list *kvm_get_feature_msr_index_l= ist(void); bool kvm_msr_is_in_save_restore_list(uint32_t msr_index); uint64_t kvm_get_feature_msr(uint64_t msr_index); =20 +static inline void vcpu_msrs_get(struct kvm_vm *vm, uint32_t vcpuid, + struct kvm_msrs *msrs) +{ + int r =3D __vcpu_ioctl(vm, vcpuid, KVM_GET_MSRS, msrs); + + TEST_ASSERT(r =3D=3D msrs->nmsrs, + "KVM_GET_MSRS failed, r: %i (failed on MSR %x)", + r, r < 0 || r >=3D msrs->nmsrs ? -1 : msrs->entries[r].index); +} +static inline void vcpu_msrs_set(struct kvm_vm *vm, uint32_t vcpuid, + struct kvm_msrs *msrs) +{ + int r =3D __vcpu_ioctl(vm, vcpuid, KVM_SET_MSRS, msrs); + + TEST_ASSERT(r =3D=3D msrs->nmsrs, + "KVM_GET_MSRS failed, r: %i (failed on MSR %x)", + r, r < 0 || r >=3D msrs->nmsrs ? -1 : msrs->entries[r].index); +} +static inline void vcpu_debugregs_get(struct kvm_vm *vm, uint32_t vcpuid, + struct kvm_debugregs *debugregs) +{ + vcpu_ioctl(vm, vcpuid, KVM_GET_DEBUGREGS, debugregs); +} +static inline void vcpu_debugregs_set(struct kvm_vm *vm, uint32_t vcpuid, + struct kvm_debugregs *debugregs) +{ + vcpu_ioctl(vm, vcpuid, KVM_SET_DEBUGREGS, debugregs); +} +static inline void vcpu_xsave_get(struct kvm_vm *vm, uint32_t vcpuid, + struct kvm_xsave *xsave) +{ + vcpu_ioctl(vm, vcpuid, KVM_GET_XSAVE, xsave); +} +static inline void vcpu_xsave2_get(struct kvm_vm *vm, uint32_t vcpuid, + struct kvm_xsave *xsave) +{ + vcpu_ioctl(vm, vcpuid, KVM_GET_XSAVE2, xsave); +} +static inline void vcpu_xsave_set(struct kvm_vm *vm, uint32_t vcpuid, + struct kvm_xsave *xsave) +{ + vcpu_ioctl(vm, vcpuid, KVM_SET_XSAVE, xsave); +} +static inline void vcpu_xcrs_get(struct kvm_vm *vm, uint32_t vcpuid, + struct kvm_xcrs *xcrs) +{ + vcpu_ioctl(vm, vcpuid, KVM_GET_XCRS, xcrs); +} +static inline void vcpu_xcrs_set(struct kvm_vm *vm, uint32_t vcpuid, + struct kvm_xcrs *xcrs) +{ + vcpu_ioctl(vm, vcpuid, KVM_SET_XCRS, xcrs); +} + struct kvm_cpuid2 *kvm_get_supported_cpuid(void); struct kvm_cpuid2 *vcpu_get_cpuid(struct kvm_vm *vm, uint32_t 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 9268537f9bd7..5c92e96300c5 100644 --- a/tools/testing/selftests/kvm/lib/x86_64/processor.c +++ b/tools/testing/selftests/kvm/lib/x86_64/processor.c @@ -815,13 +815,11 @@ uint64_t vcpu_get_msr(struct kvm_vm *vm, uint32_t vcp= uid, uint64_t msr_index) struct kvm_msrs header; struct kvm_msr_entry entry; } buffer =3D {}; - int r; =20 buffer.header.nmsrs =3D 1; buffer.entry.index =3D msr_index; =20 - r =3D __vcpu_ioctl(vm, vcpuid, KVM_GET_MSRS, &buffer.header); - TEST_ASSERT(r =3D=3D 1, KVM_IOCTL_ERROR(KVM_GET_MSRS, r)); + vcpu_msrs_get(vm, vcpuid, &buffer.header); =20 return buffer.entry.data; } @@ -958,28 +956,26 @@ bool kvm_msr_is_in_save_restore_list(uint32_t msr_ind= ex) return false; } =20 -static int vcpu_save_xsave_state(struct kvm_vm *vm, struct vcpu *vcpu, - struct kvm_x86_state *state) +static void vcpu_save_xsave_state(struct kvm_vm *vm, uint32_t vcpuid, + struct kvm_x86_state *state) { - int size; + int size =3D vm_check_cap(vm, KVM_CAP_XSAVE2); =20 - size =3D vm_check_cap(vm, KVM_CAP_XSAVE2); - if (!size) - size =3D sizeof(struct kvm_xsave); - - state->xsave =3D malloc(size); - if (size =3D=3D sizeof(struct kvm_xsave)) - return ioctl(vcpu->fd, KVM_GET_XSAVE, state->xsave); - else - return ioctl(vcpu->fd, KVM_GET_XSAVE2, state->xsave); + if (size) { + state->xsave =3D malloc(size); + vcpu_xsave2_get(vm, vcpuid, state->xsave); + } else { + state->xsave =3D malloc(sizeof(struct kvm_xsave)); + vcpu_xsave_get(vm, vcpuid, state->xsave); + } } =20 struct kvm_x86_state *vcpu_save_state(struct kvm_vm *vm, uint32_t vcpuid) { const struct kvm_msr_list *msr_list =3D kvm_get_msr_index_list(); - struct vcpu *vcpu =3D vcpu_get(vm, vcpuid); struct kvm_x86_state *state; - int r, i; + int i; + static int nested_size =3D -1; =20 if (nested_size =3D=3D -1) { @@ -998,102 +994,54 @@ struct kvm_x86_state *vcpu_save_state(struct kvm_vm = *vm, uint32_t vcpuid) vcpu_run_complete_io(vm, vcpuid); =20 state =3D malloc(sizeof(*state) + msr_list->nmsrs * sizeof(state->msrs.en= tries[0])); - r =3D ioctl(vcpu->fd, KVM_GET_VCPU_EVENTS, &state->events); - TEST_ASSERT(r =3D=3D 0, "Unexpected result from KVM_GET_VCPU_EVENTS, r: %= i", - r); =20 - r =3D ioctl(vcpu->fd, KVM_GET_MP_STATE, &state->mp_state); - TEST_ASSERT(r =3D=3D 0, "Unexpected result from KVM_GET_MP_STATE, r: %i", - r); + vcpu_events_get(vm, vcpuid, &state->events); + vcpu_mp_state_get(vm, vcpuid, &state->mp_state); + vcpu_regs_get(vm, vcpuid, &state->regs); + vcpu_save_xsave_state(vm, vcpuid, state); =20 - r =3D ioctl(vcpu->fd, KVM_GET_REGS, &state->regs); - TEST_ASSERT(r =3D=3D 0, "Unexpected result from KVM_GET_REGS, r: %i", - r); + if (kvm_check_cap(KVM_CAP_XCRS)) + vcpu_xcrs_get(vm, vcpuid, &state->xcrs); =20 - r =3D vcpu_save_xsave_state(vm, vcpu, state); - TEST_ASSERT(r =3D=3D 0, "Unexpected result from KVM_GET_XSAVE, r: %i", - r); - - if (kvm_check_cap(KVM_CAP_XCRS)) { - r =3D ioctl(vcpu->fd, KVM_GET_XCRS, &state->xcrs); - TEST_ASSERT(r =3D=3D 0, "Unexpected result from KVM_GET_XCRS, r: %i", - r); - } - - r =3D ioctl(vcpu->fd, KVM_GET_SREGS, &state->sregs); - TEST_ASSERT(r =3D=3D 0, "Unexpected result from KVM_GET_SREGS, r: %i", - r); + vcpu_sregs_get(vm, vcpuid, &state->sregs); =20 if (nested_size) { state->nested.size =3D sizeof(state->nested_); - r =3D ioctl(vcpu->fd, KVM_GET_NESTED_STATE, &state->nested); - TEST_ASSERT(r =3D=3D 0, "Unexpected result from KVM_GET_NESTED_STATE, r:= %i", - r); + + vcpu_nested_state_get(vm, vcpuid, &state->nested); TEST_ASSERT(state->nested.size <=3D nested_size, "Nested state size too big, %i (KVM_CHECK_CAP gave %i)", state->nested.size, nested_size); - } else + } else { state->nested.size =3D 0; + } =20 state->msrs.nmsrs =3D msr_list->nmsrs; for (i =3D 0; i < msr_list->nmsrs; i++) state->msrs.entries[i].index =3D msr_list->indices[i]; - r =3D ioctl(vcpu->fd, KVM_GET_MSRS, &state->msrs); - TEST_ASSERT(r =3D=3D msr_list->nmsrs, "Unexpected result from KVM_GET_MSR= S, r: %i (failed MSR was 0x%x)", - r, r =3D=3D msr_list->nmsrs ? -1 : msr_list->indices[r]); + vcpu_msrs_get(vm, vcpuid, &state->msrs); =20 - r =3D ioctl(vcpu->fd, KVM_GET_DEBUGREGS, &state->debugregs); - TEST_ASSERT(r =3D=3D 0, "Unexpected result from KVM_GET_DEBUGREGS, r: %i", - r); + vcpu_debugregs_get(vm, vcpuid, &state->debugregs); =20 return state; } =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); - int r; + vcpu_sregs_set(vm, vcpuid, &state->sregs); + vcpu_msrs_set(vm, vcpuid, &state->msrs); =20 - r =3D ioctl(vcpu->fd, KVM_SET_SREGS, &state->sregs); - TEST_ASSERT(r =3D=3D 0, "Unexpected result from KVM_SET_SREGS, r: %i", - r); + if (kvm_check_cap(KVM_CAP_XCRS)) + vcpu_xcrs_set(vm, vcpuid, &state->xcrs); =20 - r =3D ioctl(vcpu->fd, KVM_SET_MSRS, &state->msrs); - TEST_ASSERT(r =3D=3D state->msrs.nmsrs, - "Unexpected result from KVM_SET_MSRS, r: %i (failed at %x)", - r, r =3D=3D state->msrs.nmsrs ? -1 : state->msrs.entries[r].index); + vcpu_xsave_set(vm, vcpuid, state->xsave); + vcpu_events_set(vm, vcpuid, &state->events); + vcpu_mp_state_set(vm, vcpuid, &state->mp_state); + vcpu_debugregs_set(vm, vcpuid, &state->debugregs); + vcpu_regs_set(vm, vcpuid, &state->regs); =20 - if (kvm_check_cap(KVM_CAP_XCRS)) { - r =3D ioctl(vcpu->fd, KVM_SET_XCRS, &state->xcrs); - TEST_ASSERT(r =3D=3D 0, "Unexpected result from KVM_SET_XCRS, r: %i", - r); - } - - r =3D ioctl(vcpu->fd, KVM_SET_XSAVE, state->xsave); - TEST_ASSERT(r =3D=3D 0, "Unexpected result from KVM_SET_XSAVE, r: %i", - r); - - r =3D ioctl(vcpu->fd, KVM_SET_VCPU_EVENTS, &state->events); - TEST_ASSERT(r =3D=3D 0, "Unexpected result from KVM_SET_VCPU_EVENTS, r: %= i", - r); - - r =3D ioctl(vcpu->fd, KVM_SET_MP_STATE, &state->mp_state); - TEST_ASSERT(r =3D=3D 0, "Unexpected result from KVM_SET_MP_STATE, r: %i", - r); - - r =3D ioctl(vcpu->fd, KVM_SET_DEBUGREGS, &state->debugregs); - TEST_ASSERT(r =3D=3D 0, "Unexpected result from KVM_SET_DEBUGREGS, r: %i", - r); - - r =3D ioctl(vcpu->fd, KVM_SET_REGS, &state->regs); - TEST_ASSERT(r =3D=3D 0, "Unexpected result from KVM_SET_REGS, r: %i", - r); - - if (state->nested.size) { - r =3D ioctl(vcpu->fd, KVM_SET_NESTED_STATE, &state->nested); - TEST_ASSERT(r =3D=3D 0, "Unexpected result from KVM_SET_NESTED_STATE, r:= %i", - r); - } + if (state->nested.size) + vcpu_nested_state_set(vm, vcpuid, &state->nested); } =20 void kvm_x86_state_cleanup(struct kvm_x86_state *state) --=20 2.36.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 E55B7CCA490 for ; Fri, 3 Jun 2022 00:54:05 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241404AbiFCAvG (ORCPT ); Thu, 2 Jun 2022 20:51:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47990 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240144AbiFCAoz (ORCPT ); Thu, 2 Jun 2022 20:44:55 -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 CD1ED37A30 for ; Thu, 2 Jun 2022 17:44:44 -0700 (PDT) Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-2fed274f3fbso55734727b3.17 for ; Thu, 02 Jun 2022 17:44: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=T3DLT5cYIGbppXKfmAUbAPCbbCg7OYuJUt00ahVxBVg=; b=BpsFlQd35xCU9fw8o7q3BAHgRloE+fywZA5txvGNVyl8seNxDNpCEmsHd86pY6gzpu 9oyQhqdpQ6XAFvpdJ4sDmm6qPTQA+UhbqcpX7gLMVlwbysRQWH7IBpiacVsDkh4yu9DK oQMLdSHuEQEqq84Ak1n1AQPZhovQX/+S87T26oDLwVTV3e88HzlGcV+Lp1lYPj5NY4ii JInvcs+qCi8TYIdYJUoSH27bhMjfq/cuc35Ro/qQAMueE2OzS2z5UMzcknIwZxtr8H4X Rhu2sW7UAYVSvzWcwsRAU8V2Zgy6ab49LmUp/M9Wme4avbZ86Kx2dw1kEYTVDKk2bvIw e+Yg== 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=T3DLT5cYIGbppXKfmAUbAPCbbCg7OYuJUt00ahVxBVg=; b=Mfrk/6IDtijD3Z/B55Gt/czoc7msQF5bkYm1P4JNpox21ZY59NrrwabFUIwwwwrdOX 4kI6FlNJmUQIHAdU6PKytpJfPrKNkOrcXbe2+7UzZ9eIDH10r3mtpm0oZX7wBTKwwjGF O3wl5Pd+mCgqvBU2QHWs/iicVOVn2Ft9gFctQitNSDQIKNhWkHrqTY7dVXrAQ0nrZYSl nsxkANSN/bNc4vmGLxmF381lfnQ4DiztRahQRtLrDqPnjAzMoxZiUdqQ1VTdiUIq1C6f qcyrPHCqM2BaUkYRz+dPGv+OZyGCDL3C7gfkJ8Q7424pR8KoXHZzeGOyweBad2Ut3Q5V PF1A== X-Gm-Message-State: AOAM532h6rdP/ZfI0E8wkCZcYJwch0JrGw6ElsrV2vCDDfhtai4KXsCo j0xQe5SHgYgGChVzcWXQ9yUOBRKytzw= X-Google-Smtp-Source: ABdhPJxelU0V8oCsTrZdIIV5G022Xk83e4prdbZk9iJd/1yX2mUnHIkS2GUbDIqk9xQmtENYwZetI7TiE1w= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a25:8045:0:b0:65d:1743:f045 with SMTP id a5-20020a258045000000b0065d1743f045mr8471589ybn.412.1654217083954; Thu, 02 Jun 2022 17:44:43 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:44 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-38-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 037/144] KVM: selftests: Add vm_create_*() variants to expose/return 'struct vcpu' From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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 edbbbbe4cd5d..c46c03750043 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -628,6 +628,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 8f670cef6faa..1c5caf2ddca4 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -369,6 +369,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 * @@ -403,6 +413,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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 A9D64CCA48D for ; Fri, 3 Jun 2022 00:54:05 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241327AbiFCAu7 (ORCPT ); Thu, 2 Jun 2022 20:50:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47898 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240154AbiFCAoz (ORCPT ); Thu, 2 Jun 2022 20:44: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 A125137A3D for ; Thu, 2 Jun 2022 17:44:46 -0700 (PDT) Received: by mail-pg1-x549.google.com with SMTP id b9-20020a656689000000b003f672946300so3034817pgw.16 for ; Thu, 02 Jun 2022 17:44: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=2V4R3DmFXt5+6CqfKg8Az1wm17KtvGgb3jxI6xyMuyw=; b=mncGi7QGRUiFpwVPv+JrkoqIs+Sb5wG30Uc2+1n3Wf/sFo3XqlBfdNaCmrKgQYkgh+ S2wwkG/hHqricTFWNmkXYYWG62tj1pgK+xgbfr00jU79O1MaZvJaN38SKsoD9f6SNl8l SfOAifDADJ8fRVZgKSaePKvvzxYa0pYTupP263tqvo6e2SwiMcKErMl0M38ok9dkq49P 2zKKHjMCY0Or/Sssu+pD9qngBjyUO6MnxCfUbPKFOwx/TANo20AgfdxZZ8au5P+xSupz dh5GGQrH955+Nc0guHv6zLbOcS7c/egaIZ3KnUEDigec3atlcbb3gbpmHE3FX/IwJsvu SWHg== 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=2V4R3DmFXt5+6CqfKg8Az1wm17KtvGgb3jxI6xyMuyw=; b=5RwTzuYHUlNCkeBDY3ADgR9/4KFYlxO0+sLPRw5xw7ss+PFjnUvO2rn5F/LQtl0VZk rnTDZ9CpSOz1tQAxp/pJDQ1YmoLXWZ0fdGKCvcasptzYKkAKlobKlihpYWW8aePiy7iy CsOOIjwvyp9e93XdezGtgF4bTbSAhc3FbkH8z5I0eQlZvhy3gyE0Nne7vV9nBP+6LaRG xRIqzAp0HAZx2DSbmRibvQg/g77iWZzQcGOumS3qENvrw3PV1DZTaBMHtKc262pPhgHg ULgkhxjssjnw/gKOeGZOiEITlVPqIPiGQuYtTfkxes45zQEv1T8LaU/oL0rdfpYiOnOh GLwA== X-Gm-Message-State: AOAM530G1o574FCcoBhSWsjX3FADJMOmxKV9im2gUVVN3Rfi9p9TL/sS W531ZMM7bfnHj7oEOZa3oSPJJSGBh6Y= X-Google-Smtp-Source: ABdhPJwCO++fxWmXvhDMlLk6g06ZaTINDmu8iWjYidy97P2kM3TMUuq9Be1nt9NwrFUj4K/NZD2I6Y7rDhQ= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:249:b0:1e0:a8a3:3c6c with SMTP id t9-20020a17090a024900b001e0a8a33c6cmr307295pje.0.1654217085607; Thu, 02 Jun 2022 17:44:45 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:45 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-39-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 038/144] KVM: selftests: Push vm_adjust_num_guest_pages() into "w/o vCPUs" helper From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- 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 1c5caf2ddca4..6b0b65c26d4d 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -282,6 +282,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); @@ -341,8 +343,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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 0CDBFC433EF for ; Fri, 3 Jun 2022 00:49:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240611AbiFCAsy (ORCPT ); Thu, 2 Jun 2022 20:48:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47938 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240161AbiFCAo4 (ORCPT ); Thu, 2 Jun 2022 20:44:56 -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 27D9237A8C for ; Thu, 2 Jun 2022 17:44:49 -0700 (PDT) Received: by mail-pl1-x64a.google.com with SMTP id z12-20020a170903018c00b001651395dcb8so3469820plg.12 for ; Thu, 02 Jun 2022 17:44: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=wQLAGjAqmxLboPvfqpTswhDnNIA7VCg/qN9ZJA18oL0=; b=r+UGGry7PA8bg8fHD/ts0BmiEwktP6IhSxPX/CeREtTRGA6MK4pf8d1SqSovn3gtUR 7Ng9Rmg4XaqNwsD9gd+wXfdCn23ThCJjlDT+AN+5BmzOgYgg9lgVlWSbuoz2xaLdkkx4 ryQooK9br2NOiekmeDPgFUHrATRBoniZeT5Az0s+HLQ7ipYZeURfFubtcY9g5ZYqO7hc kslqKNjUX7UiIXAhXHSh+F/xT16fveZsBBfcy5DxGQ9A2uEwOuec8vIUBQ2Sn/waeA/l mDZ1NIDcldOngMKU5xytWZdxfz8K/9A56KQYBVljwVv+/YiUAhXJ1CDieHsFvvzLlQuv Mezw== 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=wQLAGjAqmxLboPvfqpTswhDnNIA7VCg/qN9ZJA18oL0=; b=iEWxFCDf5fsGZ+VCns3D8z5aSvf04yaAT2a/s/kp59xaKlW5PtaZjBYFAnqwF4C2Dm uYBz/1tAeu9/V53WupoJokJOA50PokZWyhP6nCM9IhUtjRZYTXf3TA/ddyv4tKzu/eWN 72DKEA3f2lOrUC+gt7SaLfqwWfAAtmE65lv6G6XNGQUU3FaH2sAjbrwle7+ONNNRiWYL Dqj/6SyGhfT9TOv2QYux60HkqkZvW4sFvbIstRu70UiMQqQMS6mZyPXn94Hv9fgJHbP6 SFN9fGB38CwhBsuSrQxZfpMMU1DNs86bNswpVwWyvTQ9ytn8IDlFAVcgsd9yk3vSEczw E1Eg== X-Gm-Message-State: AOAM530pWaLK4Hk7kk2HqwkKCb6gHO+PowHIRm10CbcF9mUaMMcy0VVd xX+ARWT/cLGpB7kD/Xy6GcJdrTduGBA= X-Google-Smtp-Source: ABdhPJwEPJE1FOhLw5UYnX4IybA0niwEsHTQcrpf3IXCJsiaLNWO9SBRfoC2+YZUFay4L1IJGuiiQ+Xggw4= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:178f:b0:1e3:3ba:c185 with SMTP id q15-20020a17090a178f00b001e303bac185mr305565pja.1.1654217087484; Thu, 02 Jun 2022 17:44:47 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:46 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-40-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 039/144] KVM: selftests: Use vm_create_without_vcpus() in set_boot_cpu_id From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- 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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 9FC65C433EF for ; Fri, 3 Jun 2022 00:48:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240627AbiFCAsk (ORCPT ); Thu, 2 Jun 2022 20:48:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47930 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240102AbiFCAo4 (ORCPT ); Thu, 2 Jun 2022 20:44:56 -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 A07CC37A80 for ; Thu, 2 Jun 2022 17:44:50 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id l2-20020a17090a72c200b001e325e14e3eso3515446pjk.7 for ; Thu, 02 Jun 2022 17:44: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=xs7zziBFPUnsCTGm7/NQFFIgWUrWQHAsMOhvADp3chY=; b=rl3Ey5X+pvfZmP0YafbCZ1YBaxMiUlpGYAoWCQky5IBPRS8XQL55KEVqB8vmZMPwEb lQlpO7Tdrv9LJSiycqvOriabnPeFKD/JNRkGwyGDnSMjLAXd1mnCN0tnpZrrwjnAWdv6 Ys1Wg1SCo0oAjJ2R7isgs62mlSMOk/1BqiitbuCSWjDpgZ/BPbeRL7BbBp9eRz7uq3T7 PjxJ0IgWqCKjvr4RcwXxmLvzzjH+4+Y9CWwBm6jGAyG7/gVD/xa+pK1Jo1mGn3hRkeEb JsDm4v6tFHSbTsA9wVO0SIUR4FqSIzIjLmACEvQ5uA/+jfJas63VjSr51yVD9K7iu14L cXJA== 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=xs7zziBFPUnsCTGm7/NQFFIgWUrWQHAsMOhvADp3chY=; b=HhBSJy8qkkjNfWGhAKoZXGm86J2Tmzw6Omq1OYBLNhMpWK7Ais+QBrOJalSKclgRiz rN2ssdUsXnOqHv3HIFVr5okiT750T1yL6OeVdtFrZLXCbg2ojdUnf9MUqPO7X/G7j2PR leg8ZIO2hOWFdCqKVVc6LvOItjKS+b3ripUatyncs5J25gAQsDut9i1T99eXE6KA4RPV XALyT1Ud9WJPElk6yjCt7NGmcJdc9x/aU0B7vXW6ICmnlmia6mVzgnRcDNvN4j9RW7OE 6PQriCNLNoeLYhqGCKekRmNVZyiStfdzMh6G+gSZHKe0U9pogeygU6/kCKZmVWUkgvtw UXrg== X-Gm-Message-State: AOAM532xqrtlJ4hyDTjCXXBekiYQno6HWQirSClIB4zQvdwHi55SVZFn 7JFOylx9azlYyWNB9KVemyisGCjRvho= X-Google-Smtp-Source: ABdhPJwfGI4TmKZs4F6NPxueYIX9bOmmw9nwbqRjsq1WitloPZSMHHmCU4XcFtjCu0oiTO01UHvA6FqlU/E= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:ebc8:b0:15f:3f5d:9d08 with SMTP id p8-20020a170902ebc800b0015f3f5d9d08mr7526106plg.121.1654217090220; Thu, 02 Jun 2022 17:44:50 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:47 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-41-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 040/144] KVM: selftests: Use vm_create_without_vcpus() in dirty_log_test From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- 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 9dfc861a3cf3..13962d107948 100644 --- a/tools/testing/selftests/kvm/dirty_log_test.c +++ b/tools/testing/selftests/kvm/dirty_log_test.c @@ -674,11 +674,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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 3C26CCCA487 for ; Fri, 3 Jun 2022 00:54:05 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241150AbiFCAu1 (ORCPT ); Thu, 2 Jun 2022 20:50:27 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47946 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240163AbiFCAo4 (ORCPT ); Thu, 2 Jun 2022 20:44:56 -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 20D4837A8F for ; Thu, 2 Jun 2022 17:44:53 -0700 (PDT) Received: by mail-pg1-x549.google.com with SMTP id g129-20020a636b87000000b003fd1deac6ebso135299pgc.23 for ; Thu, 02 Jun 2022 17:44: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=7A8GiPLt6EoF/z44Q/QbLAgMh/pfSDViGpWaAyP0lNo=; b=B1KfeW2a9/1TfkltckkoZ60LPG+bawSDqzkpC489MqN1H8fWcdo5nFZJzzK4cmQ8l/ hKDM9nR3vfGYS9nNw/J8+JwhOjn6BIYTb+uu7nM90EfN8s+RETfp0Atr7zD8PQpXd2T9 /s+rYdvuPEDo/qWZoUJIHtEGNUbpKVNIj3kIDiOrJtNfr8mzD9HaKGG/dH7J32EAfs/6 ujGbGYjJONRdCwkqLLpZsdBa+GBtSMvWBqQ8PDLk987uYfxcvX085Edv0dTB0CbTbLHe zADgKWxBEPNvk4jg98bcmtD+0r2+SO4IkFkAsRGDs0ixUQCx9zrwWkAyBSQB6O1TcgqS WafA== 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=7A8GiPLt6EoF/z44Q/QbLAgMh/pfSDViGpWaAyP0lNo=; b=3GjhEKjioaPQbEmvNrHAieomk3cRd9AJkSYcYh+1davoaqRDLk1aE7vw6KcEMKUSka bA4XLp/YyqqRIkmyJPApv7EVwozY0w9WsUEC1Z/2g4u7Bp0H3Lb84xVdl6H41WTan0Lr QLF3vwzN8w3DBp7xb6ZdUG0iTgdeHl8Rj47aVl16OQMrOoA1MUJnSCTnWPtiSlbBNGm3 6MST0b3ibGeztgDjP3vEC4KlVNpeYujJM402AkzRRfwHJTfBCvbneEXX7ccE2cDBaafx SMHhLIwstUeFb/MURPJ9BmXZTsFipTaf0fSnaoINSN7Bwh8X9ApvHGl4aukEi0UonDbB ADnw== X-Gm-Message-State: AOAM533poUDuiJXqR4eCZQpvi/JdKfN1gXdtksCBRx3rcHFsPK8txOxF MeVt3+px/WS/cK9ibZvD6pau2Ic4KYs= X-Google-Smtp-Source: ABdhPJyqULkt9W5iKgiGsrs4OX7xQlTTQ/jv+FTiHMuIzKb8AbQnx5geegletFi/oRSJteP8T4rrDu0rwFE= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:249:b0:1e0:a8a3:3c6c with SMTP id t9-20020a17090a024900b001e0a8a33c6cmr307297pje.0.1654217092129; Thu, 02 Jun 2022 17:44:52 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:48 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-42-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 041/144] KVM: selftests: Use vm_create_without_vcpus() in hardware_disable_test From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- 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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 671ABC433EF for ; Fri, 3 Jun 2022 00:49:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237726AbiFCAte (ORCPT ); Thu, 2 Jun 2022 20:49:34 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48002 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240164AbiFCAo4 (ORCPT ); Thu, 2 Jun 2022 20:44:56 -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 9B60D344CC for ; Thu, 2 Jun 2022 17:44:54 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id c14-20020a17090a1d0e00b001e328238e7eso3403556pjd.4 for ; Thu, 02 Jun 2022 17:44: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=hnhNz3Ofe6LEPVXH+Amyp+XINRrzOMpsHHCdOeUGVmg=; b=kTTX6shv/RmLvPSjjFRuP0FKoEB6fBja5N2hjLlvRl9c4lVLzxZHmFC3V1+jOAwAUH y3OHKXroMxXps81s19DFEZa4UCkblB0rWVyo5MEL2YE1IT7o7478ZsDpaAFlwxcywCa1 L7sRfI+w+lhmd9Z3WDoOTfRX+48xPt3tX3bJ0iG4jSn25uyP79YJ6LxtIpKCrrXk5jTy Ut2Z/S47K9RezDu/W+b5981Ahi67oIouC/sCNjpUE4STwLt8yhyg8D0Xl564af1IZFgz lFFNA8bfrz7Vu7uWax1JLzE0uWb13xLgneXbWIJeBtAVEpqVlTD2oPOx19RNx6KF/Pty pNbw== 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=hnhNz3Ofe6LEPVXH+Amyp+XINRrzOMpsHHCdOeUGVmg=; b=OYfBlAJBCtxYKCXKhZoG+Rog3aYcTQpYjuhq8rwyqc3KdZn3+mti8FpsvQnC5pM9Ey KlWetjR7dmcRSov5YhYRLbmqwvBxJw1K2V65PZnN+OA+fJdTYnjQD7UjxCoUGkQJcnCE 9bbKOW6vrOFKnNS1a87DtOusZDi+R3d2wtVKa/Ov7nVkQ/x48W3VoG+CZ4i8RKar0hqV NMWIRoOjqY8dN4eSaVwaiDyc15ktH8Ep9jrcpzmvk2keO6YFcJLYBz8uYzXkvmpehsTC LWXzp0DM/zcDXbXdwaSUlhgfYn6QkpSWQ/ZGRUUaoxmgoH58NunKsNQbGkABZY3+anj6 stKQ== X-Gm-Message-State: AOAM533F8uuRYFXVrtAiaihEkC3P8jinzK1/G5mWS6vHMBOGkwlIyeh4 NUN5Gqa8ckKWyz77TXC8tdQhHhtW+GE= X-Google-Smtp-Source: ABdhPJw8pu/Nf51rsweJnU5stWxffZj9igryX7G6VP1K81DCh4dmzRq0Q5Szzb/vxWxRDLUWN9nTXEEobUg= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a65:6250:0:b0:3c6:8a09:249 with SMTP id q16-20020a656250000000b003c68a090249mr6575731pgv.389.1654217094111; Thu, 02 Jun 2022 17:44:54 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:49 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-43-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 042/144] KVM: selftests: Use vm_create_without_vcpus() in psci_test From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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_test. Signed-off-by: Sean Christopherson Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- tools/testing/selftests/kvm/aarch64/psci_test.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tools/testing/selftests/kvm/aarch64/psci_test.c b/tools/testin= g/selftests/kvm/aarch64/psci_test.c index 1485d0b05b66..c9b82c0cc8d5 100644 --- a/tools/testing/selftests/kvm/aarch64/psci_test.c +++ b/tools/testing/selftests/kvm/aarch64/psci_test.c @@ -78,8 +78,7 @@ static struct kvm_vm *setup_vm(void *guest_code) struct kvm_vcpu_init init; struct kvm_vm *vm; =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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 399D6C433EF for ; Fri, 3 Jun 2022 00:49:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240256AbiFCAtR (ORCPT ); Thu, 2 Jun 2022 20:49:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47950 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237586AbiFCAo5 (ORCPT ); Thu, 2 Jun 2022 20:44:57 -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 1FCA92251B for ; Thu, 2 Jun 2022 17:44:56 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id c4-20020a170902c2c400b0015f16fb4a54so3464809pla.22 for ; Thu, 02 Jun 2022 17:44: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=M+/q5phNROnbGTj/bDsHN/eJ+COHhpA9RgQ9xBHSrro=; b=IGmcfHfV6Cd0auhXIHl3IabYdJmc3qBgunUseszDWwswKWs4akUdojoweJRht0DkVE NRezA/oZ1GYP0V3Lm6it5a0RoMTRPRk6nHMDcA+HOX42cQDKAbE/sv32G+PCY3nJiaX3 /TwGuus7h8a2xmxUHwmQCP02rQ2SnIuQWusoAfjt5x4qjlD1rf96iHDbb4YSnrdvZhml fCKMonNFYJAh2fO2gM7HxIRXKVLjac7I8wAFZ3mQoKDiGmjDO1aeaU4Q28gNLzDAUu1G M1Li2oSZxBgqd5mPpeIk/nESS4w3U98J2UBfs4Y5miHAkPZyf1z5TZAunnI3gU1eDJr5 pAoQ== 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+/q5phNROnbGTj/bDsHN/eJ+COHhpA9RgQ9xBHSrro=; b=gYdntigHeU2cZuw+QcJ9V4bRXZzYsEsAvt3xi+mX7LHxgh0Qgrni/IYoZGpCYqWLUo pD0vEmAnni5sl4sLWEs3neON8wXT31eDE48E55ojuwnIfIHaO6bH0UqDaUwmXreqpBeP YY4txq+rhgFWfIrv3+EIRryxx88fiqkwpzFyCol6qABM7wJINfLJACN2NNwqxXQYRHe5 T6s8cDwyfPPME8btk303fPVeRzOkoioLYNMQlja9ZQJVe2OkQnV6fg1HnZ+p0cQWz78X pVdrln1Ee3aemxRg22JS2rMvxwOvVpzFBMz1Oig5Wn0HVfx4rLoVtLrJPdSk20unnl2p ZDRQ== X-Gm-Message-State: AOAM531YuYjm4f663bZRkDsWmO95tCpG0lA8TKL4uVXImu2e+unLpbr8 44aXtvirrGwFWEt/O2dhYjqNbltZp2Q= X-Google-Smtp-Source: ABdhPJyYAYm1gmiDLJXUDlNpkk8+CqGKqyqlbVR4P0/t4GDvr9bs+7xrlq+Y8Hxo55vpKzJ5klXs9VWx2m8= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:7844:b0:1e6:9145:4df with SMTP id y4-20020a17090a784400b001e6914504dfmr5072255pjl.193.1654217095818; Thu, 02 Jun 2022 17:44:55 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:50 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-44-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 043/144] KVM: selftests: Rename vm_create() => vm_create_barebones(), drop param From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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 +-- .../kvm/x86_64/max_vcpuid_cap_test.c | 2 +- .../selftests/kvm/x86_64/set_sregs_test.c | 2 +- .../selftests/kvm/x86_64/sev_migrate_tests.c | 8 ++--- 10 files changed, 23 insertions(+), 40 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 ecfb773ec41e..d0c37a1b2a1f 100644 --- a/tools/testing/selftests/kvm/aarch64/get-reg-list.c +++ b/tools/testing/selftests/kvm/aarch64/get-reg-list.c @@ -416,7 +416,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 c46c03750043..c119726ba018 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -248,7 +248,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); @@ -596,6 +595,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 6b0b65c26d4d..ec2dfaa83af3 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -258,26 +258,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; @@ -1421,11 +1401,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/max_vcpuid_cap_test.c b/too= ls/testing/selftests/kvm/x86_64/max_vcpuid_cap_test.c index 7211fd8d5d24..3cc4b86832fe 100644 --- a/tools/testing/selftests/kvm/x86_64/max_vcpuid_cap_test.c +++ b/tools/testing/selftests/kvm/x86_64/max_vcpuid_cap_test.c @@ -16,7 +16,7 @@ int main(int argc, char *argv[]) struct kvm_vm *vm; int ret; =20 - vm =3D vm_create(0); + vm =3D vm_create_barebones(); =20 /* Get KVM_CAP_MAX_VCPU_ID cap supported in KVM */ ret =3D vm_check_cap(vm, KVM_CAP_MAX_VCPU_ID); 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 e814748bf7ba..245fd0755390 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 @@ -168,7 +168,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, vm_no_sev); TEST_ASSERT(ret =3D=3D -1 && errno =3D=3D EINVAL, @@ -180,7 +180,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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 EA528CCA47B for ; Fri, 3 Jun 2022 00:49:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240616AbiFCAtY (ORCPT ); Thu, 2 Jun 2022 20:49:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48062 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240175AbiFCAo7 (ORCPT ); Thu, 2 Jun 2022 20:44:59 -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 08B0522517 for ; Thu, 2 Jun 2022 17:44:58 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id n8-20020a170903110800b001636d9ff4f8so3480000plh.11 for ; Thu, 02 Jun 2022 17:44: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=F8n0o2nxBITSX3BZca6o4o/SeAktx+CXkgwW00hJp/Q=; b=ex2+igQlrRG2zLyxUap1yZHHBIuylg/zYDa9oFUD/tBU+87p9Gkzlb60DA98hE6D4o mHF7ejXDDURG7MoYLeFgCwwLed8o7ebObnxUJKHq8HFHqe7R7iF4ynQ9QZ5Wuxb2yyTK TJVGZwpVdb3YNKsO0gHP0GhgrMvFMjmA3EeHUeKqT0jMAsHvI1xhYZyx3W9TkNggia+Q +VNwDW5DixJOvnq3YRlEU/vjgkfUBq567IgM6KCQF80L2WXb8Y5rPS34ozQFuEh+0bRa NDCHKrNpQ6CZoDsKQ11bkA1/q2mmTCnLkDaN8PM5iirruHPf7y8u/wCR26/R3bIKYzCo VVag== 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=F8n0o2nxBITSX3BZca6o4o/SeAktx+CXkgwW00hJp/Q=; b=7GL9iYbU2v3mVU/ea2W+m87bO3dTzUJ34HpK1kY9tabmCGKvLEMunaWXh+PQrS6jUI Rq07LIOpDYtnLqj8wFfv82d6UF2JSe+r5c8thnoOf9tDS7w1ZxVGUmNU9r1sJdVGtNyW r3a2OESLtou1sG9mSJ3rl0Ne7zuqBj1SmWg7OJLf2yIcjqLgq4Ql44RbMD/EdljHnu4f dts6cJhedj4L0cGERpmNcv/7jiOFw62moskj6DE2bZ+1mjrljpd8Sy0GQc4YkSWPzryz DSKQ47yLmrZMkTpCAk60loquyhyFJLV08gXfnnCKwVsJRERJ1h3yu36ZzE7reiU6mmLq FDIw== X-Gm-Message-State: AOAM531JWJ8wZYdTu1cMOd0PESDqjAGR7qoLT67k0C4Cywo8CEOtE6IJ 0YjYm0o8tPGjvRY1B5UjMLyWdJyaFo0= X-Google-Smtp-Source: ABdhPJybXp5Ljxdm8fFfbYrqvoieT1p+el3PdXA0tb1QHlU0B61DLzf6ZPPPyShLMGq3x1voRHz0B8OIHzg= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90b:17c6:b0:1e8:2c09:d006 with SMTP id me6-20020a17090b17c600b001e82c09d006mr1328631pjb.31.1654217097704; Thu, 02 Jun 2022 17:44:57 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:51 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-45-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 044/144] KVM: selftests: Rename vm_create_without_vcpus() => vm_create() From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- tools/testing/selftests/kvm/aarch64/psci_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_test.c b/tools/testin= g/selftests/kvm/aarch64/psci_test.c index c9b82c0cc8d5..ffa0cdc0ab3d 100644 --- a/tools/testing/selftests/kvm/aarch64/psci_test.c +++ b/tools/testing/selftests/kvm/aarch64/psci_test.c @@ -78,7 +78,7 @@ static struct kvm_vm *setup_vm(void *guest_code) struct kvm_vcpu_init init; struct kvm_vm *vm; =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 13962d107948..b921d0b45647 100644 --- a/tools/testing/selftests/kvm/dirty_log_test.c +++ b/tools/testing/selftests/kvm/dirty_log_test.c @@ -674,7 +674,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 c119726ba018..b09ef551d61b 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -630,7 +630,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 ec2dfaa83af3..227b306b6efe 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -258,7 +258,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 @@ -323,7 +323,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 4f4519c0cdb1..7eb325466fbc 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 @@ -339,7 +339,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 vm_enable_cap(vm, KVM_CAP_PMU_CAPABILITY, KVM_PMU_CAP_DISABLE); =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 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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 ED1F9CCA482 for ; Fri, 3 Jun 2022 00:54:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241017AbiFCAuW (ORCPT ); Thu, 2 Jun 2022 20:50:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48106 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240192AbiFCApA (ORCPT ); Thu, 2 Jun 2022 20:45: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 E65DE33887 for ; Thu, 2 Jun 2022 17:44:59 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id 35-20020a631563000000b003fc09751ce5so3041070pgv.10 for ; Thu, 02 Jun 2022 17:44: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=OtnB0qk+iHL7LWZoC6KIC/IWoBaMp3LgvsGvrwpciTI=; b=SM5hZsOCJnjzjmKXvwwuoO5XQ+Tb91+teZOF/lDAtfmI/lpiVFFiivLkMA1forFpem HMP3B3y/tNyKbkK0FJ3m0J4eLvIz3ccNt7t4FYCj1ba7+NuS6TMjP0R6x9cXXPcu4jYf +uvg5OvR7N+vFk59BM2TqGjzUAcaW42atTHlUo1NRRBf2VFcA60LuMPwzxPyI/NU8IIa HFnaNINKGsWb3UFQucBFxuqvvhQsGz0an+odi09ifwWgnJeiS0FHFEtSFmbAadqJbsI8 OnRHCoGNGAHiUT1JdsaR9guR0WgnHFr+HhzLK5vveMdwwfCRz6y2UbHtsuOfrMGvXCJg DaoQ== 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=OtnB0qk+iHL7LWZoC6KIC/IWoBaMp3LgvsGvrwpciTI=; b=lDx/Bd7j49gsvjipGhBkCHPnHEgudhKDxh3vHL9Tpr0vxn9sU6HaD1O4iH53yfd5NT fKm6gbCIc91xaggihyjR0fc0J08DmiQ58pkk10z7rCFOPqrpqF/3aZEjMnb0tumdu5GV IeyE8hDqIyD0WTqnPB2m9m/pXtVqIjYbNVxYryqUx/TTegE1khUmwgyGuYpPW6Tqkl3U GhV/5kbfra4+Yr1YgbnnLUQxDenzjJUlw7I5qTILhbWwnCaWhpMJDXr6Smmj/n5daig1 ZARTP+4CJM8iDba8HMtHKswk2uO7PRXlaUAHChd2e6OoAwebSRskEJ+4kUKpIztoM8Rd G0hg== X-Gm-Message-State: AOAM533tab0SwmrTrGXGRn306bT7LoxQ9MAqgxkEs+m1J3URr9jpMsHJ FOeNy0ZP/C0zXW+CI7UsrvbVnoJGIRE= X-Google-Smtp-Source: ABdhPJz5PHPfFJRawUL9QMmJ/p/TLAMrjh+Ke3TEZk/Ktj9HOT8z4NC6EhfF1CehkKlF2+tE0gqokaAcQ5c= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:2396:b0:51b:3ee1:e46e with SMTP id f22-20020a056a00239600b0051b3ee1e46emr7862959pfc.17.1654217099317; Thu, 02 Jun 2022 17:44:59 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:52 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-46-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 045/144] KVM: selftests: Make vm_create() a wrapper that specifies VM_MODE_DEFAULT From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../testing/selftests/kvm/aarch64/psci_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_test.c b/tools/testin= g/selftests/kvm/aarch64/psci_test.c index ffa0cdc0ab3d..fa4e6c3343d7 100644 --- a/tools/testing/selftests/kvm/aarch64/psci_test.c +++ b/tools/testing/selftests/kvm/aarch64/psci_test.c @@ -78,7 +78,7 @@ static struct kvm_vm *setup_vm(void *guest_code) struct kvm_vcpu_init init; struct kvm_vm *vm; =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 b921d0b45647..cf426a8ae816 100644 --- a/tools/testing/selftests/kvm/dirty_log_test.c +++ b/tools/testing/selftests/kvm/dirty_log_test.c @@ -674,7 +674,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 b09ef551d61b..6418b1c04bc0 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -247,7 +247,6 @@ static inline void vm_enable_cap(struct kvm_vm *vm, uin= t32_t cap, uint64_t arg0) 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); @@ -595,9 +594,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 /* @@ -629,9 +640,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 227b306b6efe..76ac1c50c3e7 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -149,12 +149,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"); @@ -251,20 +251,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 @@ -323,7 +323,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 7eb325466fbc..640b1a1ab3df 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 @@ -339,7 +339,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 vm_enable_cap(vm, KVM_CAP_PMU_CAPABILITY, KVM_PMU_CAP_DISABLE); =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 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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 AFB8AC433EF for ; Fri, 3 Jun 2022 00:53:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239079AbiFCAtt (ORCPT ); Thu, 2 Jun 2022 20:49:49 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48130 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240196AbiFCApC (ORCPT ); Thu, 2 Jun 2022 20:45:02 -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 9CB10344DC for ; Thu, 2 Jun 2022 17:45:01 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id z16-20020a17090a015000b001dbc8da29a1so3397954pje.7 for ; Thu, 02 Jun 2022 17:45: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=gIPvcmUhN4Q/tzt8VkoAiW7RJdbdD7hzLHuZ6TYurvI=; b=hXGNCWjCV9ArfJclpReO6CN0EfYjGd/HFztxZF0DwWjo64J9VSrZuuUiQaqmfF29TU 2ULIWtoVVt6l8JI1LO1LjHtiAySbCujkN2oa/eGw9KeATdr8CfRi9DhndJ5I205FFROP x1BXIIvwS0tHzgQVcgdvvN0MLQa0/Qpi3ZH6ny/cbLQwqAxqg/4MszsHyp5HPKBtgnyb T93d96Z/hklXfq7M2E22uwX1ccRRz7vY8mc6KF6rEdpqkJ37niG0oc4QE7jbUylt9ke1 FgXrAg+GK0F2kAv/YgHUUZDp6KFN5kpD5sCwIoY9PvrlQ/xJjOW5RAh41d6Y67VX2oQh jt1A== 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=gIPvcmUhN4Q/tzt8VkoAiW7RJdbdD7hzLHuZ6TYurvI=; b=ugX0O4KfiEjoXHcMnuRE8wv7Yqs7bikC217xbdNvc2Y7OYQd14fQHcqC0diFdMVwUF WaXRTvvU0mwRkiC38GNCMCLyEAGD/gzn8/FyZgHyJ55QtoKnmzAqtqmHxVKo8yYgBNIH gtAhgxNCfAadunCGpf1d4/nsJ5Jhja0kQxPTogDL8qfBmnUvZyfv0qg4aAfIfRv005W0 bexXN6FdpSqHvFt1WXhyEb99LFIEkEUzkPpE58pVbdAvjnJRamaflrRXmoYnwqMKeri0 NF2kVGE5tDHOibQftI3g5+uamE+TGAYiJy6MI0Ncb7RTw7RsNB5trO54Z+JuFScWnS29 CauA== X-Gm-Message-State: AOAM531O45e0tyKIgp1kdrpGme2TdzRZC5vBfovWgV8U2rQRfHdBeSLH bNQDhlee92YKo7gZBVRhB4ntsAiro84= X-Google-Smtp-Source: ABdhPJzlEcxgEJY0LiZLnfAB+K6R9S2gsAR+967w4GZSOquG1ccyEJ80loHO+3oRWjbJr9Bvz1aRsZSGqb4= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:1a91:b0:518:7bca:d095 with SMTP id e17-20020a056a001a9100b005187bcad095mr64694374pfv.13.1654217101129; Thu, 02 Jun 2022 17:45:01 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:53 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-47-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 046/144] KVM: selftests: Rename xAPIC state test's vcpu struct From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- 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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 E281FC43334 for ; Fri, 3 Jun 2022 00:54:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240733AbiFCAuF (ORCPT ); Thu, 2 Jun 2022 20:50:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48192 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240209AbiFCApG (ORCPT ); Thu, 2 Jun 2022 20:45:06 -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 55BE5344E2 for ; Thu, 2 Jun 2022 17:45:03 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id p2-20020a170902e74200b00164081f682cso3462451plf.16 for ; Thu, 02 Jun 2022 17:45: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=jq9pNploHeAvg/UddQpk5d85u31dFgaOzcoTh6udOQU=; b=Jg8rN+GHlEdnNK/0B4sNaDz8y9OO/VPdf/6haRaU9bJ8Ix+FHWsK4h6GA0OtExBftp bDPhj/kMwXgpZIkYLewYK/F9vMmz/7V5FD0AHNsSnoGqJQjUUp6CQnEFakJDIjhz27hu mPvoiffi8YvdtsJwvoY8/MXFyQ8A5STQRzN2UvvnSJVvqSzL8on53SZevgLdSlRJDCqm P62MOKmkORk2o0EAiuoWaMMy27WqGhkXtt7jgNGaxxjdglJssvnJDL+j670BmJ3DOyGP Fd+nPdyjiNF/37Z/ODryDCnavICjKk/ZAyxcEQr6AVUbG6u4yZwpUHpB26jTvpJj+Rn1 9TLg== 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=jq9pNploHeAvg/UddQpk5d85u31dFgaOzcoTh6udOQU=; b=gsYXfCo5YycRtIY5wTFcPS4j98uRIAUfXayTJMOIJR6wJimYfPuIgQe6H2xqAw2qhV PECPBabOcQQdc+5gKnLE+95GnuyI5vawKqz3k5kc5di0uQC7srcS9bfhvfvP2LBjQk9N V4gm/EKMEFl4+hS+SXpTq/+F+VmCFo2iulzoM2TPKutn5aEgNxpMB6UsPBwfld+2Dh54 pH+I2thR7vnDFHiq0IEzt+kyhjz21ItgVoCYj4akM3FbLRstaRNGgZziRCNA66OaP3lz 3QbOpkT0u4boZNxQMHeI+yCbKmWMI8fKKZmo1/72Adortj6L8MbwVWYU8VKoeVn7Zcwm ff+w== X-Gm-Message-State: AOAM531OW7SEt1JkBvpaiA+KH+gvTzMorzLl1RIyaAabJZkTRiQrkKIN w5oJJpl3R2hv1yW1+MJ8G5z1KAVXZXA= X-Google-Smtp-Source: ABdhPJyf8LqwHHBzONfKrFXvNWn9YZjwgfmJigx5eK5Gk2aZzdJ75NiztHyNEAJJbYikE14m0ME6Eld6jRQ= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:903:2344:b0:163:ce0a:4655 with SMTP id c4-20020a170903234400b00163ce0a4655mr7646407plh.122.1654217102764; Thu, 02 Jun 2022 17:45:02 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:54 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-48-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 047/144] KVM: selftests: Rename vcpu.state => vcpu.run From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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 6418b1c04bc0..b83c3327d0e4 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 76ac1c50c3e7..aca9ebffdc0e 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -514,7 +514,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); @@ -1081,13 +1081,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)); @@ -1098,12 +1092,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. */ @@ -1460,7 +1454,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 /* @@ -1502,9 +1496,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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 832DCCCA481 for ; Fri, 3 Jun 2022 00:54:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240876AbiFCAuO (ORCPT ); Thu, 2 Jun 2022 20:50:14 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48168 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240214AbiFCApG (ORCPT ); Thu, 2 Jun 2022 20:45: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 4E05422517 for ; Thu, 2 Jun 2022 17:45:05 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id k92-20020a17090a4ce500b001e69e8a98a4so933891pjh.3 for ; Thu, 02 Jun 2022 17:45: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=t58xAAwB/ZnbYiHOUPJlMzJFx0EquVUcWcCWAkpdW/o=; b=BOfHWQq3Vor6mvg5pg6jhgJoW7+h8pcII5sT2DuQGjbM35rmwmvbDfDzB4bTjgmNaA ewrCxzlCvbZTtmiAW8wuAx4oqDKdubfORpDUNlAPuoKtgJuYruNWdggZ2m07YwFF2Ayi 6UdUpla7XN33/wGE8id7NrgKwlh0QWVe/c4g0fJRNQqbhRyqROXDeb4unIdOpQLM3+fa be2C3zfx38VuiRRJ4Mf80WhssqyksN6+9gg3BuYl/mKtBArEuAQf5c1WmR/DO33ONpxx 2D0KQPRHjFJykUI+LJ3vlMyhonmHY+zsGq5V8zoSbLyY6vR6HAMRybQPzVcqvS/x91jS J/vQ== 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=t58xAAwB/ZnbYiHOUPJlMzJFx0EquVUcWcCWAkpdW/o=; b=cUCTpn3tTgHZuSKgtlAc6cl5rJtsVn74gDjGdSiBQcdAJzf4ZbP6CH5TvaBtpsOL23 Ad2HKhdtRyRoGDHig/+t3rZ83taIcfGhyn/pXm7A3JtItZKgJrM4bppmlyyptiQLvE6L jfJ+LJGgqZnGt8zN0lCey+SeoC/5qXXjYi/GKr7B1VOB2iEgIFqul8eHzJC/OI5Zf9jg H2KK2aOHh+x9Hl8pfCmFlhOjjq8UAowQJX8JMsThbz/1c7/wDKIpYeMt9/sOM3UG5q/x ZxcEhXca5ZC1AzSlDunyu5/yWouEFSYiyLQb00hRv/PNdulhqpjM+SHGdwXoLKHb6YVG QCaQ== X-Gm-Message-State: AOAM530SOK6hVKoDsrQCHL2sO8yAb41oGmo+0CbJFd7qF+w2cEGaeYsS iN3o0U2nZh3jc+SHyVUiK6brRc4XYhA= X-Google-Smtp-Source: ABdhPJzQAhuFQefdny7WM7T7++3j+UHAQQOnvnYp3xh9aylN+U/KL1oYOcsqIY50vfWeite0nwrzeWOVLEs= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:249:b0:1e0:a8a3:3c6c with SMTP id t9-20020a17090a024900b001e0a8a33c6cmr307302pje.0.1654217104430; Thu, 02 Jun 2022 17:45:04 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:55 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-49-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 048/144] KVM: selftests: Rename 'struct vcpu' to 'struct kvm_vcpu' From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../selftests/kvm/include/kvm_util_base.h | 11 +++--- tools/testing/selftests/kvm/lib/kvm_util.c | 36 +++++++++---------- .../selftests/kvm/lib/s390x/processor.c | 2 +- 3 files changed, 24 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 b83c3327d0e4..d2c7fb391fc7 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 @@ -644,17 +645,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 aca9ebffdc0e..99d6c5a8659e 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -349,7 +349,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) { @@ -393,7 +393,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 @@ -472,23 +472,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 @@ -504,7 +504,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 @@ -526,7 +526,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) @@ -1078,7 +1078,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); @@ -1452,7 +1452,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; } @@ -1493,7 +1493,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; @@ -1537,7 +1537,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); } @@ -1552,7 +1552,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"); @@ -1684,9 +1684,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 /* @@ -1779,7 +1777,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); --=20 2.36.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 6E63ACCA488 for ; Fri, 3 Jun 2022 00:54:05 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241287AbiFCAuf (ORCPT ); Thu, 2 Jun 2022 20:50:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48192 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240217AbiFCApI (ORCPT ); Thu, 2 Jun 2022 20:45:08 -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 0EFB033887 for ; Thu, 2 Jun 2022 17:45:07 -0700 (PDT) Received: by mail-pl1-x64a.google.com with SMTP id h10-20020a170902f54a00b00166449db7f8so1559856plf.9 for ; Thu, 02 Jun 2022 17:45: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=i7TyyG/pheXHSCAMN2TUl4WUF9LIX1YQpLdcH3B6/rg=; b=eJHqEVN5MVelv00NchUI0BZIRKsIQEv+Gq5cslmQpY1sO4avZyHI3M7BGccJ4bc2v1 uF2dHcPQ5MyodQd9CXrbG5uM3Ox4lGFumLtbQvHC6RwQGOY1NBa12/UAnm8piJVm7KaY UXPMv5N1VuxcsE0aMrjRjlhYsuFuTdzcc1GfWt2QNUZ3FauIW5IhIgBSMAFShkYrlXS+ qoF+E6r+YqUpk+FhMgXmV5bOoIbO7579xy9C86hUmv05OZuf4O6SNbWv2g8jN82dnsQf khWPyTKs6wLo1jMEAmr2eCUu44cQXo6FHEYWFJ3ZUB/735moyDSrttQWG92u4iEZEjoX ON+w== 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=i7TyyG/pheXHSCAMN2TUl4WUF9LIX1YQpLdcH3B6/rg=; b=FXcyGk+V3ak3pCQn5z2GhVh0M20yXV/kF5/Gm15Np6Qplaj8+wtGZV26k45KKmPtNk gH1TlEbbL0I1Z1f3v1pm++yKsBVgG6YLQSO6cTU/gdjTeVtXrMGn8rFIA+/WEaEUyozQ rdHj11fd8Pr2ddKEiin89OPmlwRwYAQhwl3eSTnpswxkD0svuiUl7keBaSsNCX2GdurV J5EY7vyyoNoTN9m98iA0NiulPYNFjjpYAMmY91bPfinrK05wT367jIoy8CEevXySCyoX skcZj+lc3c5J5vvg86YHzrRibU7E5MRC8nkowJJw4egzlnJUBxXFJcA6hBU/+bhLppzN pZ9w== X-Gm-Message-State: AOAM533oUJmU/nXdyBzvJqS+m+8w/yuqpGfGYfEOWOliBBoumHxcWyYd O6QDKqg+xzvQhLM1wWXyFDkheZ7zCfE= X-Google-Smtp-Source: ABdhPJzgBie8tvjnKymUCzbRf0t4xAGfUMFR246RyJ+7kX0YkbRNxZRAdC7zg2eT+LI69mCB8QeX0/AJNcI= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:9891:b0:166:496a:b44d with SMTP id s17-20020a170902989100b00166496ab44dmr3892350plp.13.1654217106370; Thu, 02 Jun 2022 17:45:06 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:56 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-50-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 049/144] KVM: selftests: Return the created vCPU from vm_vcpu_add() From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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 d2c7fb391fc7..fbc54e920383 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -324,7 +324,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 99d6c5a8659e..8348fa19690a 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -397,8 +397,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 /* @@ -1063,33 +1062,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 " @@ -1102,6 +1091,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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 B7820CCA48C for ; Fri, 3 Jun 2022 00:54:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242436AbiFCAxE (ORCPT ); Thu, 2 Jun 2022 20:53:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48170 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233689AbiFCApK (ORCPT ); Thu, 2 Jun 2022 20:45:10 -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 C5EA9344DE for ; Thu, 2 Jun 2022 17:45:08 -0700 (PDT) Received: by mail-pg1-x549.google.com with SMTP id i9-20020a632209000000b003facc62e253so3049492pgi.11 for ; Thu, 02 Jun 2022 17:45: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=ImUYRPXrpM1plNN02DbUHhAlHRJfyxKRglg4HYhksiU=; b=rLGkzSTEiBmX8DheRgluIn9ngL9d2mPzwC/9MWUv4DXekXRYlxDyJlZUgN/OkuTwKr gmvs+5ewXmwGhyDswBOzeLPksYy6XM313P8IOZskIU/XgJQARdot+DNnfDN495znc/nc x8icSZSMF/UkjIEpaQR1+nCFOleNR7j23JL98fqX0+3ocMExHAax3rnotmDaOL7DjlCs GXnpQg5/mw9gJRlBgG5Gxw4CIbpZ2cE3Eu8/wtfyLuyGLFoKaiYQfktpkungUABT/wIL kKzW1MzsX6is/UkRQVJVVe1h8o76wwpyV7lDhAbvpBYDHb7wlYKb2dAYzQ5h8CuRnJGV zdGg== 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=ImUYRPXrpM1plNN02DbUHhAlHRJfyxKRglg4HYhksiU=; b=tDecsQAbgVW7GqEkrfbqQXyL3wrgxA1A7jospu8gVzHdBUrRgG5iigeVvQUWFEZq00 6//QBBj+45cwqb34gfcEGtWxZ7wLpGikj06mvNvCXgrWjdsAD//KOsv3wlySzyLEuJ6O pw85t/V5cMYK9Si0UJ7PKzXynDuYd9hz6NAal7YA+a7jRzj+MrYt5odDW5FlzIXNtN1f 2vY1teyZMEMhT9CIQdcfVhNYj4mQ9yWNCwjxx4BnBjE/8b838SwsfT9Mp44kkiUFTYTx vpgYDc0yMeZ+HBGc4iuX+NkAvGLvbLz8FDrar34qVYI6eXQjAU42OjRujC2C/LeHzNJ8 FE/g== X-Gm-Message-State: AOAM533e+5rGHPVzNcLMc0BiJFP2SnBsacjI+rWktshLtVOuZbzT8EDI u1d0vkRBdatC8p91d16YmnKShkMjlJU= X-Google-Smtp-Source: ABdhPJxghim9FfFS29i9ptKPF1cZ7m55pgtvMhYOM7sqLtoXhxCJA1N1zETg5dr/YKyHNlB8sB4TxD43s3w= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:f552:b0:163:f64a:6154 with SMTP id h18-20020a170902f55200b00163f64a6154mr7656473plf.147.1654217108218; Thu, 02 Jun 2022 17:45:08 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:57 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-51-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 050/144] KVM: selftests: Convert memslot_perf_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 AEA70C43334 for ; Fri, 3 Jun 2022 00:54:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242413AbiFCAwz (ORCPT ); Thu, 2 Jun 2022 20:52:55 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48192 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239996AbiFCApL (ORCPT ); Thu, 2 Jun 2022 20:45:11 -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 DE4F72251B for ; Thu, 2 Jun 2022 17:45:10 -0700 (PDT) Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-310061f47faso12885487b3.9 for ; Thu, 02 Jun 2022 17:45: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=VZMwLmFqO453NHprqwEEDpT8gC6YhxFhEoVIqaq5qNQ=; b=RZPO/BZvQ6+tlf6F61RdUXEyZo2pt9UgbKBDaKQgoXVaf2hQLnCU2GdNQb4etp5S0S Fa8wHOP3EVbG9DN0mTOH8dfq7SJ6w789/YYFTuaj5gojST8OV/5QnMEqhQ/ZYeEV0Xdc ndoTyLDWjU7TgfR03lt6NtZcIOW4w8jYuxoO/CGsMc29pCDcrEylQKQvsHGQ6iodLR1W BXoqVzLF47Qp2sqhw71NHmgcpaR/tWgN3MACsorJYA3PQOEBFSV0xNTRkSIUhI77quex 9OyTWuf8e7VtNvKcYIR5U+PrxHRtvY3+p1v6RwGu2KXX3cQelYGT5velWWtiYi968+Bi Io2A== 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=VZMwLmFqO453NHprqwEEDpT8gC6YhxFhEoVIqaq5qNQ=; b=1jLxh++OyRMoggARHYA9zVjEGjcMGoWeqer9MPIsQIgHySrFbbu3TXtKAS0XQNPB+0 F0osU3cgHbmdme8jLMthA0AwGB+yOgICFRebsnuyjyKLpFG8p9gxLcoZIXBbmKP6aVjJ 0Z9wdWPgrN/KwqG4gKH/yaKhJX736x2WnYRXQl1C6Onkf2SaeR0hHjvRKHcC62qSngCv AmUf3du2bL9kJsZM4xfDSvpZmSQYHpGdPgeUhySCsefUmY4LyGAB/hpFMgfCXFhPpmni L/0Ac+p4sGy1KbQAld50pgR+BFos6TT+J4S1Rbxl62cnviljjWySxeDYehidwFfq7exZ oEdw== X-Gm-Message-State: AOAM530NSLBV50tlcBd7p7yLJJaqZpxW4Zclp8NzbY3vVhPbwJUGMeYG Eij7S4SnioJxdLiPJkHF6UCHzE/RU7I= X-Google-Smtp-Source: ABdhPJyvo+2ll/p2OR5AVovkndzYR4mFDAyHaQ/X8PTogoLDLjktOHVeFdF1jZS4k4FVf+f5jQQMa1G4HWw= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a25:7308:0:b0:65b:eb8b:de95 with SMTP id o8-20020a257308000000b0065beb8bde95mr8527850ybc.195.1654217110100; Thu, 02 Jun 2022 17:45:10 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:58 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-52-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 051/144] KVM: selftests: Convert rseq_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- 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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 88F94CCA47D for ; Fri, 3 Jun 2022 00:54:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242397AbiFCAwt (ORCPT ); Thu, 2 Jun 2022 20:52:49 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48320 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240067AbiFCApO (ORCPT ); Thu, 2 Jun 2022 20:45:14 -0400 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A478E34640 for ; Thu, 2 Jun 2022 17:45:12 -0700 (PDT) Received: by mail-yb1-xb4a.google.com with SMTP id s22-20020a252d56000000b0065d1ef35f9dso5596157ybe.5 for ; Thu, 02 Jun 2022 17:45:12 -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=als6e8A1gJJA6StJM06gRZped3Uc2Gml0Vwsts95sPQ=; b=n0gbISWg06Ll7cuaZEHv3NE802KrXOPB9IbonBpGqY2sjwmCRrmNmEviPeI3tIg0nE 5T0v7im6tbDuDlu3tdddA8nLiqQPjeRRiLoc4+f1pUnK0Ds+nZUsBD5fyjP8oliiJoiz oUavzRLEz1vDG1dkHE+KR+BG7IVxLS9yA8jczkUY+sOQhWis7G1n8oU91IkNg9Qy+vf3 VKSojUY87vc2Okri+YEZGSQntbfpgjCOdP91Wg2cjObL1LE6SZzE0C3FybK1gkkSrOwV 409Z3XJ55ZGq2q15OzAl3mXM2KRW51IxgUGjhi/2VgyrBMxBzI7AHWfgUJGWkTyKMIm5 nKxA== 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=als6e8A1gJJA6StJM06gRZped3Uc2Gml0Vwsts95sPQ=; b=JiQd1KONkNm7YbuWjKaQ0NcxeYcNy4ghLxnE6n+TC579FSKRvpLJcoDAkGZYc+tTWp Vdd2J0ouPL9bhJ0UwxWqj/KAZwJcOvP6Jmx1efqPsuClLQtBFsTM1tC2XqAaT3A1IA/k vTnFqmKmwnt/ns5txaoPGpHADyf6TaVA9i5JRD8NS4ZcnGQxd0dpmw42c3AmYbROg/h7 Xs0PU1P0CIxn5aYIb/dZY7HS02TVbfG1R4eX4fEtDksFTt1YkxZqrZh5gQaNyn3aj3PR Hmrmv0ckduy5LHI5tO/+jMea75CxrmDRnqmli42ABuDXS3jV0Ih7vkUUzL8E6lRPclFC QyBw== X-Gm-Message-State: AOAM5329nTlFwnD5YUPSOnIpVHWBiql6ao4t+TvUO0WLEmPFkokG4TMP eFJunGvyR995D7jFWBj9X12ZHUQoD/s= X-Google-Smtp-Source: ABdhPJzXS2wVpq8MBsuw34ft2UUYN2PlEvadhYWO+OTpI7RJCToBCOFWNBbWN1kgRIBQm4sWFkEqhV+rHzc= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a5b:907:0:b0:65c:b38b:5378 with SMTP id a7-20020a5b0907000000b0065cb38b5378mr8096585ybq.331.1654217111825; Thu, 02 Jun 2022 17:45:11 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:41:59 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-53-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 052/144] KVM: selftests: Convert xss_msr_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- tools/testing/selftests/kvm/x86_64/xss_msr_test.c | 11 ++++++----- 1 file changed, 6 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 a6abcb559e7c..a89d49ae79a6 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) @@ -23,11 +22,12 @@ int main(int argc, char *argv[]) bool xss_supported =3D false; bool xss_in_msr_list; 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); @@ -38,11 +38,12 @@ 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. @@ -51,7 +52,7 @@ int main(int argc, char *argv[]) */ xss_in_msr_list =3D kvm_msr_is_in_save_restore_list(MSR_IA32_XSS); 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); =20 /* * Setting a list of MSRs returns the entry that "faulted", or --=20 2.36.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 DD34CC3F2D4 for ; Fri, 3 Jun 2022 00:54:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242298AbiFCAwm (ORCPT ); Thu, 2 Jun 2022 20:52:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48168 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240115AbiFCApV (ORCPT ); Thu, 2 Jun 2022 20:45:21 -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 35AB534642 for ; Thu, 2 Jun 2022 17:45:14 -0700 (PDT) Received: by mail-pf1-x449.google.com with SMTP id z67-20020a626546000000b0051bbb66c1bdso2717164pfb.0 for ; Thu, 02 Jun 2022 17:45: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=+oPASWeuU3hUXSHHGwTAX+AwNGMqvMpQnDYcauVC88g=; b=aj/VS9rYLAELO9VzDinP5b6wMBn+rIvp+yXI/U7HeJ0fNjcRXaG7lyXigFssnwyU7K h9QIczE6M9HxUVoUvuhT+T9Ie66vMaTJ60b86OedMv3ET7XKRUWh3GUmFVDkmWlR8L2v 9Yr6MTtm6fzUrVH4Ry8wxPzmGlFWPJVmN6mkUQKEkty1zLYctJnj1wLjxuDCVkDdwlKI NjqEANCLc4o9c6yzpIRPXxEjcAtdMviHfBymR71whgVQdjeN1OCPe8mNFc2b1+NbxY5l H9qINqgMjzP5AVoCbKDARGxUWznxe6p4c8Lj7ynz01q+WNRFt8qQ2TF+uEyQ2aHgrdUN s4CA== 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=+oPASWeuU3hUXSHHGwTAX+AwNGMqvMpQnDYcauVC88g=; b=N8z1FD2V7qqEwZwGfPCg8j7xuhXDVWk2P8o78nayiOYsQj5/vNx+pO3uhvJGTY4PKh WXQgFkFrNr8YyHX9qP2G5R1GXTV/6nbSqgD9wsZ7z69lv8ox8arGcgp4e44SkpwItAQC eDoddo6uWPT3FHtgIGEw9KS+1dMpOobBvYfVogPXBOdnK+gEWyvtBmCxLejso6p07pnQ gcZYalz6Iwto1pyXp/A+TNrwzT7l7QSz/uW7CEf4fzZvJJHKF7VA76GpvY3n/JptKYNG a5s2/HVNZpFzmZ6mTpgceHMfvoTDSl1d8k1y81/FMsZhx25rQPUKobqHni989MXxAdVB 9fyw== X-Gm-Message-State: AOAM533lZ70KYmXzgBdRhAilVFBnU7q7mPyhatDutQZsWIGI1NETdJEt N3vJITTHgj/3UPjq9MdjmHTltdSFJ44= X-Google-Smtp-Source: ABdhPJy5wc0NNleg/ScIV/2JjbKLzyv1ivroioi4hwAipX9/EXBVV4qRjFNi+lysqMQ25q6GcJW9KJeJDh0= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:1249:b0:518:c338:d4de with SMTP id u9-20020a056a00124900b00518c338d4demr7846952pfi.14.1654217113696; Thu, 02 Jun 2022 17:45:13 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:00 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-54-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 053/144] KVM: selftests: Convert vmx_preemption_timer_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 BD8D5CCA498 for ; Fri, 3 Jun 2022 00:54:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242110AbiFCAwa (ORCPT ); Thu, 2 Jun 2022 20:52:30 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48194 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240118AbiFCApX (ORCPT ); Thu, 2 Jun 2022 20:45:23 -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 D9DD335A9A for ; Thu, 2 Jun 2022 17:45:16 -0700 (PDT) Received: by mail-pf1-x44a.google.com with SMTP id x19-20020aa78f13000000b0051bdda60a06so572735pfr.2 for ; Thu, 02 Jun 2022 17:45: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=qKtRzPfDLOOFEO2wSRdLW5pILrJuZSfC3PuWiM+CjCg=; b=EmGymdcPeHrIz1wRxcU32dl8Q7T6JgH1WZLEG0CJs9puadul5S4J6N4/5OdyA7HYLW NVLpT5QVkAsAIAViayCwRYF4gBWYMbh4S/gkKaYhtW4vmYtc/morWbvZLXb3usVBDALz CKMKSrvw1wPaxI4F6OIEXWCOh9yb5WSoyOzRkz9VyZ1c4O1YKYAS9zfOqkq9AhxC2KXN Vz69KNbUgRFiPaSEBMJbzXHoxuvT3czrUfsVae10SEe4eXGLC0Zlqj2j5bdcaYg11QY4 sBu5UPX0tJVIlKjmbRKApiCjSDc/65Ad8pCqOUcDNbZcR9BmbadEWseWK9zEZBCI4uON ppJA== 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=qKtRzPfDLOOFEO2wSRdLW5pILrJuZSfC3PuWiM+CjCg=; b=yR+dKZNbumpiaH1y1jF7VLNuYE30KiOkdGOYBCFowF+RfXrgJWDiWjKLIQOFa2tPHl Xf1PNwDPBJ/cMJhN4WAfGSclXiQMqHMwrxPcrirMuAExjuAWmpzjm7VEccfkqHtWAVC+ cVS9ANxwZyDvFTFYp9X4ElvVOAuMF5UXFQHoCdq4nEGUCrkw8h0PNjLZ4E4r0h1hn3O0 ek+lIKMEvqN2Z7jpJvtj9BGnFqVnkmUIJP5xlIOONCJn8aJNNdf93doNbMds0Ndcp4Uh yYGVNmNptvZrKuVKj4F9xOcI1eJ+sE4i6bM9dDtwnfnN0plwza32Uz5kOKEsEk8WRQwo xgXA== X-Gm-Message-State: AOAM531cdKRnoX/f58gDjDRN3xSSjavqlmc6NYr8sngYEjw+s+SicUhQ j9gGU5bipMnB0o++OLovUVhQKSTp5NI= X-Google-Smtp-Source: ABdhPJzqusHhKgq8upBKcphystx0rq7hKPySCaHSbyr0mIFbuJQAXXx1q+93Wtfc0uVlj4nsUDO2+9Dejts= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:178f:b0:1e3:3ba:c185 with SMTP id q15-20020a17090a178f00b001e303bac185mr305574pja.1.1654217115458; Thu, 02 Jun 2022 17:45:15 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:01 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-55-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 054/144] KVM: selftests: Convert vmx_pmu_msrs_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../selftests/kvm/x86_64/vmx_pmu_caps_test.c | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/vmx_pmu_caps_test.c b/tools= /testing/selftests/kvm/x86_64/vmx_pmu_caps_test.c index 97b7fd4a9a3d..63129ff5d003 100644 --- a/tools/testing/selftests/kvm/x86_64/vmx_pmu_caps_test.c +++ b/tools/testing/selftests/kvm/x86_64/vmx_pmu_caps_test.c @@ -17,8 +17,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 @@ -61,6 +59,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; @@ -69,7 +68,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) { @@ -88,27 +87,27 @@ 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 */ /* Note, on Arch LBR capable platforms, LBR_FMT in perf capability msr is= 0x3f, * to avoid the failure, use a true invalid format 0x30 for the test. */ - ret =3D _vcpu_set_msr(vm, 0, MSR_IA32_PERF_CAPABILITIES, 0x30); + ret =3D _vcpu_set_msr(vm, vcpu->id, MSR_IA32_PERF_CAPABILITIES, 0x30); TEST_ASSERT(ret =3D=3D 0, "Bad PERF_CAPABILITIES didn't fail."); =20 printf("Completed perf capability tests.\n"); --=20 2.36.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 ACEE7CCA496 for ; Fri, 3 Jun 2022 00:54:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242007AbiFCAwR (ORCPT ); Thu, 2 Jun 2022 20:52:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48298 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240152AbiFCApX (ORCPT ); Thu, 2 Jun 2022 20:45:23 -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 65E9E37A12 for ; Thu, 2 Jun 2022 17:45:18 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id 72-20020a63014b000000b003fce454aaf2so1345666pgb.6 for ; Thu, 02 Jun 2022 17:45: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=yZxYSAtr71xlvrBZchZzB3lcdsCHEIIU+PCjxQzzr8U=; b=OBrLDXkWQUqAgmml2hBx1L2GpPfV4TPaH8cHlwuKTbhE/VyW3X+etNpJOY08kyDYPm 123Wg3TQveeVTUrqZ3mZ+dWcEmK8RlppvQC2HAhWPjGFRh8KDcLD1C0zvqbY3nE5Ohbi cLiETGNe4atI1L+iufukw/V3JPsQbQMts9lmWW4Cv6UkkOLurO4G7Exu8C7wp0AklAJF sVO42rd+qfZsM6PGMVrfXH32Cnr8YUIAaSYTdpgjDgfBd2xzmIWRc2hYp4LX44Ds56xZ ii0Na01SNPfUqP/l2h6tyugI0JRrrjfuqNdeXa+CWG5pDSmgjbqJcLoK7MkR+UuLXZWo BJFw== 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=yZxYSAtr71xlvrBZchZzB3lcdsCHEIIU+PCjxQzzr8U=; b=BITy7thb950WfJjmSES/SBCHzdURXq6CWjeEdsc8xTENHmEK+c+t/mIAdyTQjTXyPc pjl1YeKlfk7Ka09RQyU997ar33ZGXpHeMvuGIQ6ikVq8aOGCOgPW/OPQftOCEw+MsPNA RX1Sqgj7rp0i712FSCI7hrhiBuknEi9x9UxWK3NmwQS8L+OItMbBPmsbmCJhTCa7SZ5+ Qs/sMMchC8x7Nr+QTDCOcSK21zlzPvCuQzSv6ze4WEx21n/0t0GP/GYwYz7FxA+PJiW9 TgoBLAdz/MFH3qt1vyjfhC8LGu//mLw2oCweLLk7Sqdw7z5cOrveT1BCWhwmfZhIXv5M royg== X-Gm-Message-State: AOAM532/xwXgatf5WmNXUygu1FhoL5Fr12/+A5SBEUI7kPXeDXUvSHN6 0UlpmD6BSXpZ1OTGwmTdLVkOrRzg4hA= X-Google-Smtp-Source: ABdhPJx/eK3s/uqeInxR0Ve5kl02JEIy5ylAfcaJ4D9AiWRV/kdwOk/tdDQe73mdtQ3zSiPl1tXTy57lfU4= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:1acb:b0:518:986c:a7c4 with SMTP id f11-20020a056a001acb00b00518986ca7c4mr7746619pfv.2.1654217117892; Thu, 02 Jun 2022 17:45:17 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:02 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-56-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 055/144] KVM: selftests: Convert vmx_set_nested_state_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 885DECCA494 for ; Fri, 3 Jun 2022 00:54:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241953AbiFCAvm (ORCPT ); Thu, 2 Jun 2022 20:51:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48476 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240157AbiFCApX (ORCPT ); Thu, 2 Jun 2022 20:45:23 -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 15C8534647 for ; Thu, 2 Jun 2022 17:45:20 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id k92-20020a17090a4ce500b001e69e8a98a4so933891pjh.3 for ; Thu, 02 Jun 2022 17:45: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=DSBUnWw8fWEElXYGBjXrm88wUvjgXnsj+86R4SkOT0s=; b=L+KTRQvkc5WtE0n1dHRlE0Oz69S8WphDnarPbKpfUKLrwfStXEsCflOdIzYVv93Gbr cuj3yRWTBkCBVkFdl/eboc88X4F5WL2f7vMUVRGUXYd0PXXjOWj5yRCG/5Aab8ALZ374 IwJB4T/n78wLajQwj0YBn95HkgV0mFrnLdTU2RNaPCfIKhTHu48ClVWeIMzzgI7Fz05P GwLGGr43MuZ7ercC7DqpO9dP4wJ892SI8Pf1uXEDYnTOwytoeaRcOEGGFv34DoslO8iS WcwyOSxKcjlJlt9re2J9oL/9hPe675W9Zrms7CxVqJ6hHoH4aifYHg3xoJVQz4QHcs1o WYUw== 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=DSBUnWw8fWEElXYGBjXrm88wUvjgXnsj+86R4SkOT0s=; b=QCCEPqTfC7fpEMd4lNTClRfp+0L2jakMzokkJOpfE3JDu8ELpOqjfIRYq3tkCd5zh6 AaajE9zfGifE75/i48JGBblQ+qBkux7NVWjaydRA+6HzUOmSSgbBEQTYLZ5fcwGxHwEv k63PhJdqbt06Fj05JB4g1+DCFK0PB+Fb9PSKuzxDIveBsSjuYC+pOg19T/kUElBcufep 3HVgvXZWS1VnOqzM4nuCGXNT6LU8nTrfdiSWCvtI42O0jSGtZeOxuhEGVnQjQvwbvp02 lO3O0uLDRo5ELuQFEcPi2MflNkL+GlnU0+b/VzpDQ6/TxC4mG+AYsBw5bnQhvkSmune6 a5hw== X-Gm-Message-State: AOAM5307QAi/8YMsooVKxJ/1LgdSN4A/sDvoczoqPWtczH+pSPJl3rPe x87B9pDiG2GF7vNqYVAUvQ/nXJGzUNI= X-Google-Smtp-Source: ABdhPJxlKuvS5/8eTnTynHN7LMIefNnT056jHuTG8dyjeFayb3K2IOLSjn1g3mfNi/tkZGMEwKuZNpfmyiY= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:10cc:b0:506:e0:d6c3 with SMTP id d12-20020a056a0010cc00b0050600e0d6c3mr7810109pfu.33.1654217119681; Thu, 02 Jun 2022 17:45:19 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:03 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-57-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 056/144] KVM: selftests: Convert vmx_tsc_adjust_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 97FD0CCA497 for ; Fri, 3 Jun 2022 00:54:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241984AbiFCAv6 (ORCPT ); Thu, 2 Jun 2022 20:51:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48480 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240178AbiFCApX (ORCPT ); Thu, 2 Jun 2022 20:45: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 1D70D344E0 for ; Thu, 2 Jun 2022 17:45:22 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id d5-20020a17090a564500b001e031a8ad45so3398485pji.6 for ; Thu, 02 Jun 2022 17:45: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=5M+4hKEItsfPOKfockwlyyAZ7LBuR8xnZS1ca9weHs4=; b=a8aEFk0sQTnjnegfFASz0toC68xR3x6A7feoHYGWo+SPU4JXsUxiISCoHmbf09fb9/ vkuV8xGIV8vo4YYCJL22JzjCOCwRgHF6cDZ2/f3O4NVvvijddR5HFQ7ZsAG4gkdx/fTB oP0ZYCuY+hO1AOwYQKtgFXhdgO7lsYu03zzr3mPRz441yuOu/IdspNBXh1qqOMIkB/ln RfSNdd5sntKkkcx/LvzEQed4EXKzNXF6QEJy8yR9Uq0tJEAfej3aM7IEzZXjc+fgVtSz YtZmCS5vKmSJDD2mAfaBWny2TxXxLrHYrt+b7xKg7eQ0gEdXlFnBixth6i+KYMQhPAg9 dVtA== 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=5M+4hKEItsfPOKfockwlyyAZ7LBuR8xnZS1ca9weHs4=; b=CnFhrP8+73P1eaomZGdAQ5+kVNBJcz0w30x+kk5uWd+WXvxiEsX6uJRG2BLQiymX2y nMiA1h56Oh3sKNmCXZ5MVD2sMx3fQ0h0zvRmcq635ebI0WOlij//Z/l5f9HcMQOWhZV3 kvKLF8fB29JO6lmEVEs4NGHVSU0SyiFW4TfCrYnwjNRTHbCOcmibbxqQzezO5Gh4fw8I J0xDHJq/0WO1tDEmQqJHGfUH74mMeNXANm9ltsbHLlFz9TCPmvFm5q8S6IM/8ITDPp/i sgz1OYZFaQVOk7Ah5vnRJ58yNWv8X1PGIJwp6KcEPe9bI2MdhEHaeo14xbVC8UaXKl73 l1xQ== X-Gm-Message-State: AOAM531OrezGOMHkAbqtQGf+fKPjWeFbUnG/RQ26c0OhjML0tVQIpGU/ UF3VKzWIcCiiZLeEpLEqnDuX96KC4wA= X-Google-Smtp-Source: ABdhPJwgkY51U4aRoXTNi3VkSv9oUlR9dBTMl8QutZhPJiEbL+mrxTTX67SpR/M3pzLiZzYSCgYfFIWxxFg= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:ce82:b0:163:f215:e3b6 with SMTP id f2-20020a170902ce8200b00163f215e3b6mr7820910plg.51.1654217121609; Thu, 02 Jun 2022 17:45:21 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:04 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-58-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 057/144] KVM: selftests: Convert mmu_role_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 CCAAFCCA499 for ; Fri, 3 Jun 2022 00:54:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242219AbiFCAwf (ORCPT ); Thu, 2 Jun 2022 20:52:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48504 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239724AbiFCApZ (ORCPT ); Thu, 2 Jun 2022 20:45:25 -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 E273A33887 for ; Thu, 2 Jun 2022 17:45:23 -0700 (PDT) Received: by mail-pl1-x64a.google.com with SMTP id y4-20020a17090322c400b001637287812bso3476441plg.6 for ; Thu, 02 Jun 2022 17:45: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=O7b+a25lx0Dbw99w/vnZbZi9/Zb3kUTB3wWOPwdGJDs=; b=NHOEiCUsn4p0ioi9Q7YZkrH/GQwQ8jBWkp136Qdw1qi18fUHfVBKdgc4asAKll1ioW ytmoZEXEmBGv+GLyGl9wMKeokb30OnU3WOEaLwQyYdLE/yT3pi83d60NeR/MtQKK26qW hXVMysMXqjKMGqScEeaY1R4vXeQKngHDcbUuhF/2fy5Aeu1ulSzDeEL6QAoRBtwq6QER 8E/lOtEFVnkLFviVwnWg0ecbG9OPmzmNk9Kzyq4bHKNZlWzBQic+zrC8UAYadBTXzK6+ YAdwA6J0w4GMH3rdHgNaoCyTIXa2N5JLw4fg6q6SnGN8mlAZ4m2HHdkBwSQRZpe3pMlF ZKbg== 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=O7b+a25lx0Dbw99w/vnZbZi9/Zb3kUTB3wWOPwdGJDs=; b=SGnLmqJUx3KP2f1q2eqpXcwfMwSH5kxHGGETOTDaA/eQztxEDM5pX5IqQ7ExlFq7Mb c/C42EZR7l6Kg2FfZ3XuBf3enO2GMHLGKCyHfHjJFLMD39jl0gf/HgvX+gP0KSXlBAov 5tCn2mmFNh428iNBKHzaHodiJWD8OEaGAe5PlCSq48TjKoH2oHrP92Nss0LcWftuzdKI LxOJErm9ckOB4U79lfv37R7Ff+I6T1jFUf5Y5Qyp0BmbJtO3aLu6cKSJSOJOCjDH9yXi 4cG8L4EWZvrpSCoTJxHr3yc8bHnxVFdWs16DStThPsOnHGuvSNYjh6ne1LoADkTMsZBA wRgQ== X-Gm-Message-State: AOAM533myYGCPiw3fmS17Z+JJqzeyxvPA6AFFoHct5cbcNI5eS/AJI8j QbIaptxSkRZX8Emq5WFwULaQOAuAFLA= X-Google-Smtp-Source: ABdhPJx/UdgkafMBhagNizkk91xi3dNlem8ME6TVAJYYFreebQzjj74/4KkoADX+c8XPRbHLjs3dwGXM4b8= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:10cc:b0:506:e0:d6c3 with SMTP id d12-20020a056a0010cc00b0050600e0d6c3mr7810323pfu.33.1654217123385; Thu, 02 Jun 2022 17:45:23 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:05 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-59-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 058/144] KVM: selftests: Convert pmu_event_filter_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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 640b1a1ab3df..96455ec6ea48 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; =20 @@ -343,11 +343,13 @@ static void test_pmu_config_disable(void (*guest_code= )(void)) =20 vm_enable_cap(vm, KVM_CAP_PMU_CAPABILITY, KVM_PMU_CAP_DISABLE); =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); @@ -418,6 +420,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 @@ -440,21 +443,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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 4DEECCCA485 for ; Fri, 3 Jun 2022 00:54:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242551AbiFCAxf (ORCPT ); Thu, 2 Jun 2022 20:53:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48538 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240122AbiFCAp0 (ORCPT ); Thu, 2 Jun 2022 20:45:26 -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 4E53D344DC for ; Thu, 2 Jun 2022 17:45:25 -0700 (PDT) Received: by mail-pf1-x449.google.com with SMTP id x128-20020a628686000000b0051bbf64668cso2306809pfd.23 for ; Thu, 02 Jun 2022 17:45: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=vajAbei/4C9mgrY+khRdf/uO0MSBsnVlUWjUXwWT13A=; b=YBqmkltO8ZZtK+njPxAFiv4uwwmyejmw9f58OdVdsGRpxHPQC2zKRN5WchZRp43HyO CD+a7Nmx+Mfx5s+IBgp22ieMcadRD0aQ2cOSZId3c3rveZwqa6AMI7A3MEgCQ0UVKWIq evAKk20wYTic48pbMoOBTkOqxo/CoaMWZZLhpfaLE5FhUMbb85x3e76S3AQJr0ooykB1 9YRpjdDqPMOzNoVt4651LIXtUtGgMdCLDIJnHcIyHvskvQt5Q9AglEnLJegKWN/3q1g4 P3A5BJlRLQaZUQD28xb7ywfc9j6JWRy3RqYgDuo+ZdSX/xZd+P5IBeJRLbALiepi9MtF fooA== 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=vajAbei/4C9mgrY+khRdf/uO0MSBsnVlUWjUXwWT13A=; b=QYX9P8UFbW/x02hGO/LldT1Gb0nOewe+znsHp6LYIaN7zZmVIRpnNsKoB2fsyyHKin PFP0Rn1bWPgqxakIbO4yZ0zGyV1Q8M20URkh31V3GR0J0rv/f7eJOEN4qQ2XYBw8WnFI Rz7rYIiy9BBLO4z3t8MJE/z7CjKQH9ITiyo6OyC/wONTk0E335FBLGO5t0ehkQvylJs5 o0XIi2KSjaVPIp0m55Uwgvd9pmhcpKClHwnJqnr47yT7gMPWsIJ2WzqiRJHRGGDaGEJs hWN93w5Zwu3IxjKz9bWWxyWFkA5GrqsJjUCM4APpzPgEMIW/AWrz5uzWJiYczhBzir+y BK/g== X-Gm-Message-State: AOAM532sbtB7UIG7lc6MbRu0Y/wR67Q8LL1hZvmlVfaZZBgV16f05tZQ 9hek4ZmhT6DJmFgwLJwfNqwtmkE4ndw= X-Google-Smtp-Source: ABdhPJyv4tJ6letBnTpa9q3pxcZ30aBmjpQbG1UGieNBULB12H7dmnj54b5JOSGj/rCKuh95A4buphRC/lU= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a63:74d:0:b0:3fc:8fd3:c23b with SMTP id 74-20020a63074d000000b003fc8fd3c23bmr6589692pgh.392.1654217124985; Thu, 02 Jun 2022 17:45:24 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:06 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-60-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 059/144] KVM: selftests: Convert smm_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- 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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 33869CCA484 for ; Fri, 3 Jun 2022 00:54:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242529AbiFCAx3 (ORCPT ); Thu, 2 Jun 2022 20:53:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48764 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240242AbiFCApm (ORCPT ); Thu, 2 Jun 2022 20:45: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 22551344F8 for ; Thu, 2 Jun 2022 17:45:27 -0700 (PDT) Received: by mail-pg1-x549.google.com with SMTP id g129-20020a636b87000000b003fd1deac6ebso135910pgc.23 for ; Thu, 02 Jun 2022 17:45: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=3+V17MeEPjvQg09WlN2EBYPY536bBdHzqlWlFeq99WM=; b=kVfh+vPHcGM1lNaIV0EGYJvz0D25wwuiua+OEiHcKV3KObeTffpxHa8OBQO/Bfvkvc YzziWeYKgfK6ltmIYp74F81H6q+y0Mj4nSOk8D67J70bx/dFA9aEHAmsFfbYJaK+ylpq sABxIuIK6LMLTAg8XylgHeurvSZwZQ9+X08FFv8lWsrxpiv6E+pL8xn7V3lqTRqbXpZ2 Wm7lpWHOSVpbKUTm8SIMutG98dLlUMD1nhqaQG81c7ymhxTH8yWA2h4nxyagj1dLZXic 9FYCO2gPgzqkg94EXDVvKvM7gHFGoADItYh1HTd6tP7qLb0d4ekTlxN/AGf2OEYOz2MM AnhA== 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=3+V17MeEPjvQg09WlN2EBYPY536bBdHzqlWlFeq99WM=; b=7O2Jmj/M93s/UTYs5VSqbpJsxPI2cjY+jZ9h8lX9D1KdjfXsBM2Z/4KPEAej1aQQpC 6XCNTHTmluG9DUUHvi7HLDcqHNWySSGk34gqES6zAnygak/3wjIGME3y0wOueAyMpQTG 8jRLLhyO9BQWC2s7d/pRCh7iTQKeNX3XxWQmxV2bRLnNxeQENhbYTRBhmhx6KyK+ndFT OXnC65HvAUICprfG79Ni/J/T9PzY/Ykn4xK3KHWq8PSdDdVKDUa8l8ZwKFISYdj3ORF5 b30BW6oLPJGeRCUlLZZdxPQFgRx15ca9xikrd+0+B5a2e7TTMn7otbs7cl/ASvRnrmfU ChJg== X-Gm-Message-State: AOAM531ofMGzJLb1QgWQ42kDKky5cXjOwWzio76pnn4/876hbMBb/W9M +VqMTXQMkXID045tKSOK6/ZzBcvMlAg= X-Google-Smtp-Source: ABdhPJw4kln2CObNdfF++iT6Gp4BzDVa0eaG40S1Zj/G7HIetNH3tHqf3rRmZXs3DQz04oj6BdR5MG+fZr4= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:1ad2:b0:51b:c63b:95f0 with SMTP id f18-20020a056a001ad200b0051bc63b95f0mr6460313pfv.16.1654217126547; Thu, 02 Jun 2022 17:45:26 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:07 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-61-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 060/144] KVM: selftests: Convert state_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 EF2A5CCA482 for ; Fri, 3 Jun 2022 00:54:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242495AbiFCAxQ (ORCPT ); Thu, 2 Jun 2022 20:53:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48762 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240113AbiFCApm (ORCPT ); Thu, 2 Jun 2022 20:45:42 -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 04F9433887 for ; Thu, 2 Jun 2022 17:45:29 -0700 (PDT) Received: by mail-pl1-x64a.google.com with SMTP id s2-20020a17090302c200b00158ea215fa2so3490059plk.3 for ; Thu, 02 Jun 2022 17:45: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=gf/3WhosbDQbquEXufiQCNkkI21LPU8IPD8LLf4fW2Y=; b=lo4OOYCvQW7cm2iGxp4LKBtoa08BgZBY0m19rWQAblk7OGnGy2jl08abC4D1pP7FG/ p+WcbDfg9bDRNs/C4IssiE34ZkhnMPoTLv0tzr5xHv8deuRyM+lJYhWvf3GGgcEDxMfC Va0ZCv04BSeArHdcHwa6Excv4+f33n7lxC+dCCGWod/Y7cikTUT/5XlgLQZLIiPFdluW UxodvfQSv6oi7HOVM5aAx0Xbe8hq3+u1ox8gxiBe0rhFF5qDibtUyQETreTOWwCrBByK 6L9Yv+83y/3Xy1KHjbcjZr0KRO6R6pJ+APXfO99q4SA+AhR4EYJnyOBjquOJbWn2ljUJ G/wQ== 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=gf/3WhosbDQbquEXufiQCNkkI21LPU8IPD8LLf4fW2Y=; b=GCI6VaiyuxzzN22zwqQMI21e4uEI1K43ndn+9rkmMtCz1VUMKx2RpSHNz7QCubGzug uwcS6E/GwqDQi4KytZR/5vzJW3cgg5S/qlLB8NESIJjBhzVjhtkLK2FAKaYsJTS28EtQ 6BVT9TvActIvpbUU6v2ClF2N7VKEspqwnnqNb1AJ9lcKUZIupNsrjkv5gp9FxU3a8ZZ1 EMwVwCggB9xq86XkTWK4lnq0P7M8vPlEMZcZMOCEEssoMd57nA1uaANjQ9Owtp4FeIDW 0P4dsts2MNO6+Fp1PIp1Ft5YQ52FtjJjFWjgAyDjEbH8GQpnrsyoUJkPpf2ITI8vLLio IkKw== X-Gm-Message-State: AOAM532qTYxA8205OrhARPPJLvMuzmk9u3NMaqw4qHFArPWLwmm11X8u b2Tp1BMr+lxReSx5r0GNFGNpT6UCmM0= X-Google-Smtp-Source: ABdhPJw1/eDHJ15wxdmCPCvmG7oAvpHelnw0d7hSZRApBhMwLuP/pDmmgEO2WoL0xcIIJmAfrSUuc5+jWCY= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a63:44b:0:b0:3fc:cd1c:49e8 with SMTP id 72-20020a63044b000000b003fccd1c49e8mr6628197pge.172.1654217128469; Thu, 02 Jun 2022 17:45:28 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:08 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-62-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 061/144] KVM: selftests: Convert svm_int_ctl_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 1D0BDCCA480 for ; Fri, 3 Jun 2022 00:54:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242510AbiFCAxZ (ORCPT ); Thu, 2 Jun 2022 20:53:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48782 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240250AbiFCApm (ORCPT ); Thu, 2 Jun 2022 20:45:42 -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 981E7344E3 for ; Thu, 2 Jun 2022 17:45:30 -0700 (PDT) Received: by mail-pl1-x64a.google.com with SMTP id h10-20020a170902f54a00b00166449db7f8so1559856plf.9 for ; Thu, 02 Jun 2022 17:45: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=ZbJ0xN+LxZLXwNiuy5k0J6YWPhyRZK+kAps4sumczB4=; b=I68RlAutQvs+zo+uOlcw0DANUn6dsBjDuNP++WHZj7JYxdctpwXxpE3b45oDatEQVX 12aalQJ4mneq1jR5GYW4RV7Dkx9S8iQVCd0prnYnnmrhe+GLy/SNtwG1rZ5ribS3/PJh otG9RufalY5MPN6ra2vNGg6mGT4reB0aZ5LbrRM4ANDyBR9oH/yZqD7sWN5jJwoTwKfj HmR9j1Sulz4WtMGximW5MktxTkeUywgXfH6MaRQhyG4FIFpOmoCd6+RVBiSDIipPe77j 9fb+FGZwm2iTKWuGH2BRAoj/i+vY7e8BssaQ7uiUKVNVGOuYS0gGTgGvr69ILrEjmTQL Xk5w== 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=ZbJ0xN+LxZLXwNiuy5k0J6YWPhyRZK+kAps4sumczB4=; b=o/TYGZf2WtIhLMfRj5A+NnFvrE/D5157OzgAGBZLOE0jzlt+S10b4HSlGlrHKGBjCH Zi1cHfkOa6w76/4cfdyvmhMkrKcU7jKTw+GGxumg0asiPkuJH9p6SexlsOAUKHOlF3cw SvUBa+dHIBgXjpIOtzyDWyq64KcVw9u6tvqdpoOF9+wjbu3xlimTa75vSbPh702/L4Vj 2cVF4WLtszEZL5a/Lcn+4m0RGuEzUd9xLpr9dM5dPutQeEXIL5ZYrPgEPCL7+dy8r0eN 86kQjB0pTg4K64xwwed+hYY9wXKENt8dTy1kv5mQUzts0qpyfGUqu4/7jn6nDIA1j2cZ G7Lw== X-Gm-Message-State: AOAM530+dMPemYe++fr62jC8PQWlhX9PXjEwLl5UhXM1gxVRTfRFnWST 8xqsZsH/8EH+P+xQYWvNlXR0KRXc6ks= X-Google-Smtp-Source: ABdhPJx4mARyVOLC45eqy/Ae0cGI5Yhmu7SGNtpXEiiGktDWVWlKjgDtsL4EnTPn6Lujx3BuG9q5dUVTD+0= 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-20020a056a00114500b004f63ebca79bmr7729203pfm.41.1654217130218; Thu, 02 Jun 2022 17:45:30 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:09 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-63-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 062/144] KVM: selftests: Convert svm_vmcall_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 D6E96CCA481 for ; Fri, 3 Jun 2022 00:54:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242472AbiFCAxJ (ORCPT ); Thu, 2 Jun 2022 20:53:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48792 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240244AbiFCApm (ORCPT ); Thu, 2 Jun 2022 20:45: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 7A91935A9A for ; Thu, 2 Jun 2022 17:45:32 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id c11-20020a17090a4d0b00b001e4e081d525so3930831pjg.7 for ; Thu, 02 Jun 2022 17:45: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=n0X75eN6DrszINCse0yRpHllYbTU2FY/yc+Q7Pdy2AA=; b=Zcjf3Gf6se82i0HNPT6XV862ahrRriGS0XMbUwJLTbHpXIabKr5x0gV4uBKj/sIVEa diYsYzTrigWMDLyWewxIJoKexRjsrC2trZTxU5L4VSAzdU2bXh3iPyC2+MoaX8E2lhh4 YEOIXovmeypY7X8NKWwC9cy1t0uB2uY25Dc4Byl2Yfebr9/81MkUQ8rXFogC3U59XlyD xu67nfycFOkeytGqy1PiY2Hy+sH65Rsar7p2MvWWlBXNr+3HTdjht/q77uu2ZPll4tM+ RQ54S3TTTCIHtmUJcG5uSiVC0azvAPBQ3QBsUpVZbtQbw3VgTEXWJCqNJa/C1HGdwiRD xCDw== 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=n0X75eN6DrszINCse0yRpHllYbTU2FY/yc+Q7Pdy2AA=; b=zETi5ErPFuz8kwIHZL2uTViOmyQhFm8BYy8ejMdXjfw3upCvhvpu7r8z1LPvcKoJvj CidOcyUnAzuoz88i/A1ktsSUKrCaPwSqSTcu1tIrs2348ccRjiDuq/lC3BP2XAMxSjYe j0F5J/6bBi7U5wxde5sCwxsOlqDg5kBMW79Xwcsxzeij87Xatpx3XH472xfTmlYKk77s zcZDBg4KQDbCXy5gB7ZVR5SRH1bYYtaI31wNxgqYCgiYgzFP1oHhPsiuqz4i8lsh2TqF T+BTQ+yqHjQ+csYvcrDuDxDMPTvMkfuKCSz3KGt7Dpj2onZ5J/zw4GS1RUyxkjxgv4iG CqmQ== X-Gm-Message-State: AOAM5337n6+Jsi7odULOAKeojSsZA6ZOsIjMCpCtgx0f+LrOuI3SgHBE dVh1z+jhqn1TbHU6SW12rHChXxEzL2k= X-Google-Smtp-Source: ABdhPJzDDoou7C7GmLhv9avEpVVptrn0ArPsUPQ4koiw9o9GCyKVQTPfkF2Sw8oWegE9VgRcVDszwEZyAns= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:7282:b0:164:17f6:e36a with SMTP id d2-20020a170902728200b0016417f6e36amr7420631pll.139.1654217132000; Thu, 02 Jun 2022 17:45:32 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:10 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-64-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 063/144] KVM: selftests: Convert sync_regs_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 6B3C3CCA483 for ; Fri, 3 Jun 2022 00:54:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242569AbiFCAxm (ORCPT ); Thu, 2 Jun 2022 20:53:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48790 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240266AbiFCApn (ORCPT ); Thu, 2 Jun 2022 20:45:43 -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 92D1B34642 for ; Thu, 2 Jun 2022 17:45:34 -0700 (PDT) Received: by mail-yb1-xb49.google.com with SMTP id i4-20020a25f204000000b006607ca067baso866852ybe.3 for ; Thu, 02 Jun 2022 17:45: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=bVy0dX1ZUTfd9vrrkHebjrVzn4QXyuxCkdC2rRe3KKM=; b=bo/5JK60VCxC3R2KDhzod1eg56nDxftmEhIp0b3u0/4/o3GGn0CYB6Flgy1gl0Ry4N KHtOf6lh61vD7IQs3D8WCn9cZE2FVRM8Cg360WYXMD+RjVahE6/DXt04f455IgAmj5mA XX7MDQ5SK03rBupnIdCUheDeVH9Mg+tH07H4DlrNW5YOH0LlGc9U3fmF5kHzGls5hYbh R2hovDmsFUrgOlKFQJ9eX774LStw5u6XBViP+KzdP9aiHZKh/e2/S1nykzqgMZxz2Fbm aQJ9r01Jy5EfalwV3RI5zR53O52feOCrlBgoU3538W/QT7UkdUyAghgF0KqRDwzuUPyp TnFQ== 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=bVy0dX1ZUTfd9vrrkHebjrVzn4QXyuxCkdC2rRe3KKM=; b=f3zwc0G8auyosSFgFeMPCm4reL/foc+oxYf2muoL0bnyEGnlaHAFXLdbEq6GYdkRDi oyuB3A7QyXgovAubyn5SCq+TmT1SOtG5U+fg+IXEdocjFS0TWoBYJzFno7qlvGAsz7N0 JFOQbZphdogWMSPuBuWY3Q/NTngXneUU7GtaO/DE2dzyHSmk/nMix33fF783Z43G1/tQ 2/4NLH2O0o/D/+tWIysZlzbWDLicQpj2R6O0TgBQIja5MaXGyH90UxYH0xG+BQb9bt/s 1FbTVG+qu5o2ib0ojaB6ILDzeM2j9wd7i3N+sgjk1I73oBvyGBEhDYu3wuhjbCOTguaQ DGSQ== X-Gm-Message-State: AOAM531Xpunfx0jophMIH4qeYhm1LKmnSWfQoxK+bMDJBWM+PNTUClZp PjtQNjCeWjJ9MoLWzqqbTBNSbl9SOos= X-Google-Smtp-Source: ABdhPJxcjxO857QrAMOM7la57Q1KZcjXyW9JtYsF+YI0Yyxqn29B5yWFo0Ay8+Xie01KkHqTdCzFZ8xp3ac= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a25:7611:0:b0:65c:b595:2822 with SMTP id r17-20020a257611000000b0065cb5952822mr8030927ybc.228.1654217133973; Thu, 02 Jun 2022 17:45:33 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:11 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-65-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 064/144] KVM: selftests: Convert hyperv_cpuid away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 D29B1CCA48B for ; Fri, 3 Jun 2022 00:54:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242608AbiFCAxu (ORCPT ); Thu, 2 Jun 2022 20:53:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48788 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240267AbiFCApn (ORCPT ); Thu, 2 Jun 2022 20:45:43 -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 2BCC937A2E for ; Thu, 2 Jun 2022 17:45:36 -0700 (PDT) Received: by mail-pf1-x44a.google.com with SMTP id 18-20020a621512000000b0051b90b3a793so3493305pfv.8 for ; Thu, 02 Jun 2022 17:45: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=2NUR3kcMimAgoeykOecAs8DzqbcQZgV/1v20kj2SjLU=; b=sCwxBAMN4xJd13skRvWUcMuNbhrJd88mnTFAl1rmggkVjgXTJh5Am+wwIFxdRZtXbo eafPneBVQV90Q1b6xly36VW0tauLlmiMJ3PfjXWos798p66RuvXVldA/Z9tKPde39EeJ qcrPd8D30qgfo8irNRSDa8h1aiC8oDAk9b4QX4KZmus8c3QbNJFLQ9U+jYigXjSr7cRB 1ddrR/OkMkenZAqnn3eZ1T82/QXV0H4BseB4sKyrbcoNS/7uDvbGSQ+Z7lco2mYK4rHF JlrVQ4RE56ipNkmQa6Iu02hx4YK9xdsekBzva4Oci+ayhCVW+Ret+Iz/Bml5ERGppv9q 3TeQ== 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=2NUR3kcMimAgoeykOecAs8DzqbcQZgV/1v20kj2SjLU=; b=0GWJC4NCaqfOXTCAAk1DkKrqIj835/KuptWp0EiNPcDzw+GlWmxUE7Umn8bGIJcBKk h9kLm6e4YQA9NPKl7RKRXhghAHv3dCaSgrk2QO6hmJVOV8JSxBpRWI+olJl+HlwPTm8x s8Hyh2Mw6fHmtbozPU2YQM1f24l/cFUryNFkFNWryrlph2B1XTBzmWj0rDPZc3wGhdnK 3qo/L8tRyrNS57k2XL/8iC7BhskDJICs8E6OotfLipR35nBNdzDKYHEKplbxMhYBDCck 9o5wVQ+9dnTA9t4St1QWYvSuYKuD8MzDNdImSsR6Om4KF5fZuQs/e9Ibw+Nk5nxbxBmt 0gdg== X-Gm-Message-State: AOAM530VM422lND7staPhGLil9UX705c1/RG7aCUG/I+Z4zt8Lb/hKEU grmhkHlUqV0TH+M6jI5TQ4GLdfXQZyc= X-Google-Smtp-Source: ABdhPJwI1uqYe5NEtYiWcYCdx2k56uWR2/DJ+HC9kV3hNdx0TaMroAKt0HrX1qZFTcvy3rgZ6mhH5Y4ouBg= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:d481:b0:162:4f1f:3f82 with SMTP id c1-20020a170902d48100b001624f1f3f82mr7464933plg.52.1654217135658; Thu, 02 Jun 2022 17:45:35 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:12 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-66-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 065/144] KVM: selftests: Convert kvm_pv_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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 5eea3ac7958e..734e71739d33 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; @@ -207,6 +201,7 @@ static void enter_guest(struct kvm_vm *vm) int main(void) { struct kvm_cpuid2 *best; + struct kvm_vcpu *vcpu; struct kvm_vm *vm; =20 if (!kvm_check_cap(KVM_CAP_ENFORCE_PV_FEATURE_CPUID)) { @@ -214,18 +209,18 @@ 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 - vcpu_enable_cap(vm, VCPU_ID, KVM_CAP_ENFORCE_PV_FEATURE_CPUID, 1); + vcpu_enable_cap(vm, vcpu->id, KVM_CAP_ENFORCE_PV_FEATURE_CPUID, 1); =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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 83BEFCCA486 for ; Fri, 3 Jun 2022 00:54:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242587AbiFCAxp (ORCPT ); Thu, 2 Jun 2022 20:53:45 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48776 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240269AbiFCApn (ORCPT ); Thu, 2 Jun 2022 20:45:43 -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 070A137A34 for ; Thu, 2 Jun 2022 17:45:38 -0700 (PDT) Received: by mail-pg1-x549.google.com with SMTP id h3-20020a63df43000000b003fb984fc032so3045570pgj.14 for ; Thu, 02 Jun 2022 17:45: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=oaxRJdvupESB0wCWTL2diaJZxgDjRKfr3rKjINqjwJs=; b=DH7KAtCboew+L7WLe2pnfz5NPC7KhGMaC1C4VYHOn8x1wG0CGKk2jQdGrah0D1Lg6D PV3x95awiGeknRxCe2y1HnTgO6ejQlqHB0FS8xRc5Lr2Lf1SmhVnGXlWlgR+PkxQwkva B2w+Tj/VHYV4f7YqsALY+JqfEcZXtysYzMxwPBgFo0eQRTzW9RbaOeP3zW5tqKaY5W1A ugwreSKSQ3GtQvpLCcGvZ+ctzhQEsDuM8pnD9nSn2VfWTjCm/iyIZ6JWqbiLSJ8BxbPW efOvG/n7fCCKmZVk1ui4n5mzead2RLcuFDbhaQEZ4c8WeaXzYUYFTvAXJ9xDyrG1Szna A0qA== 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=oaxRJdvupESB0wCWTL2diaJZxgDjRKfr3rKjINqjwJs=; b=irav8miQmiv72vLHtuuAzhqRMAjAurvT8Y0zY6b5lfB2ZaTYssO4Go6RtJ+GUMJ2SD 69NKGCbzmLwnN1lZnreoG6ny3PURQSy4y2gd2SBE8jNZ3WWUijwZiCvv+0p0fjMgJzvG h1m3e7UmzXxgAymJccDQcwytFMbSCIvoClUUu6gJyLMnEBDBWYWuhAIA5DCqPlCqIziT xf6x+mB5bO6264paZgIvWy9+RkrjNKfQ/fUaTg5vJkVTStk4D279wGrqo9OMgM5WJHBL LgpMU+7W+l1XPaZYSoltFz8H8OOObaKsSenF7NaGi1UwknAbK6EMV8q8Dh9XfdRDC144 /J4g== X-Gm-Message-State: AOAM532Q3xjKOr3dw1bllZwb0UiiAQE/gnKQdvuC85BLDDEydIim98XR dSCTlzZlN2cg3TLTna01Rd2GypOAYiM= X-Google-Smtp-Source: ABdhPJwq+GXa3GRW0uUpp8GrUHUGP55WKvCVhbCyJ/xvFO0jgXp7ECaVuuk3B9ktD184it8IqdTChA8nv5U= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90b:4b90:b0:1e0:1b0:1a1 with SMTP id lr16-20020a17090b4b9000b001e001b001a1mr43502507pjb.70.1654217137515; Thu, 02 Jun 2022 17:45:37 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:13 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-67-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 066/144] KVM: selftests: Convert platform_info_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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 e79c04581ca8..eb5e1f972d76 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) @@ -35,18 +34,18 @@ static void guest_code(void) } } =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 - vm_enable_cap(vm, KVM_CAP_MSR_PLATFORM_INFO, true); - vcpu_run(vm, VCPU_ID); + vm_enable_cap(vcpu->vm, KVM_CAP_MSR_PLATFORM_INFO, 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 @@ -55,12 +54,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 - vm_enable_cap(vm, KVM_CAP_MSR_PLATFORM_INFO, false); - vcpu_run(vm, VCPU_ID); + vm_enable_cap(vcpu->vm, KVM_CAP_MSR_PLATFORM_INFO, 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, @@ -69,6 +68,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; @@ -82,14 +82,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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 08C5BCCA48E for ; Fri, 3 Jun 2022 00:54:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242625AbiFCAxw (ORCPT ); Thu, 2 Jun 2022 20:53:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48762 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233165AbiFCApp (ORCPT ); Thu, 2 Jun 2022 20:45:45 -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 2AD9F37A3B for ; Thu, 2 Jun 2022 17:45:40 -0700 (PDT) Received: by mail-yb1-xb49.google.com with SMTP id b6-20020a252e46000000b0065d5168f3f0so5506632ybn.21 for ; Thu, 02 Jun 2022 17:45: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=p5UnJnS91vtMeaDHfsKiSMs+oHMFzkeSZWyIST+FoDs=; b=MCzDWUUIyEucNE3hHClXNVFR+5T16668b/7sJY354niuYd9tJ+pJGguoP/lsDm+DIv PvVDe5NMToy4SVCDeJayojCjQMadqJGRpUx0TEwUCy3hAm1XNQT3GNLjZ9bIEJPeHc5r 5ja27gOz3o+2HyeyyE7VXqq4VGOm+/gH7SGyPLtSlB14ZPyqnRd6/S9DdpgnojeQa9v7 6gymSZFmDi/PWFvEMtStOpSTl6BEMZfDFFP0Gw8uyljHq1tIiZegIaY12IOxIXtcSe5Z NvqFT6G+fWK9abnplIW+IjENrgrfCcTJKwqOHhSBf9TIY67rO5qVueYN3tpt5UJ08o14 p3JQ== 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=p5UnJnS91vtMeaDHfsKiSMs+oHMFzkeSZWyIST+FoDs=; b=Hb+EyXmaap5YWbItni0sxJHWhPKJqRwlv0ALQhLo+J4dgKJr9a4TIgD5UuXfRD/KRk ZLK4MnjCc3TispnhFBtLbUyeJmOpgh6fjgllfCKwlJYK97LX/qWZxmgIH3Ok4fT+MHjT F3PBof2fv3EnSr0wiPr/e/Uc4NioaHtgeFZw1zbwTapdWm2403QTNNxzYnRbc7Vh9eSR fyHoQaJGtFWE5LEKjFCGoU68xghxDIcJR+1j4MU3m4M+OVzuETM4FJjErngWdYzgyV7e H5DVqBB8AWGYbyqP+pXmga3oHcKCTCmx97amGmHSrbx66Cn6mxtmfqWSzCSHLDZr22El LwOw== X-Gm-Message-State: AOAM530P9/fWhWgDIVOH2fZQLAfkLNWIzLmWaEj97cjc5oZXWDem4uyV 1Nxwme6nbqyyaCUgA3FCI5QJmctn/Ek= X-Google-Smtp-Source: ABdhPJwXM6K3Fp/k6RSfRwXWNXYpy2b/QfQ/DRwi7K/ni2ZE5YgEHkLLhGWffJlbhFMAoZiM5HNlCvorPh0= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6902:154b:b0:65d:2be4:cfa2 with SMTP id r11-20020a056902154b00b0065d2be4cfa2mr8875709ybu.236.1654217139425; Thu, 02 Jun 2022 17:45:39 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:14 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-68-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 067/144] KVM: selftests: Convert vmx_nested_tsc_scaling_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 A09C1CCA488 for ; Fri, 3 Jun 2022 00:54:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242647AbiFCAxy (ORCPT ); Thu, 2 Jun 2022 20:53:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48844 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236910AbiFCApp (ORCPT ); Thu, 2 Jun 2022 20:45: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 70F482251B for ; Thu, 2 Jun 2022 17:45:41 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id k92-20020a17090a4ce500b001e69e8a98a4so933891pjh.3 for ; Thu, 02 Jun 2022 17:45: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=GyDX4O/6d/Nb30Dg2f4P6cZBhtA0aHN1z4aPRcwABRY=; b=i3goulk49aQ1ospT/IOnSeTvjRur9/T/AYbRdCLnB58CVCIY7/qmjTy5LCOC59enFs rkxbh3803ywkdaTzJxTNng7/CGEIOZ+RWEkaO4+FbcHKHO20zFa8cKnLeWHiacrFqDSF 7w2Xl+Xm4vFkCs6oT1bEfF6ooTakqtpACJtB/x4Wc9AM56z+bz9CnJizoovbPTfNjYZq bvwUpNm3K+0mY1kRw3o2GPUpp+HIkk7XUUMK5QRwNazcCD7aYmvdGMBEP8bHHQHQr5Aj /lxZNcpEbTGWDUHvMhtmLPhLsQ7KJeB1M/4Vh7Siuwgp97nejJcxafLetAGaZ+bPOIN1 qQzQ== 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=GyDX4O/6d/Nb30Dg2f4P6cZBhtA0aHN1z4aPRcwABRY=; b=EAy8qvFfHZoM7HNypcFS10wOzgKmB0xlSfXTqNoZdIPi5lk60F+76R8CYCsh0zCvER DoNAqXuOk5xQB3nxOnOZJ7ICeMQqkF69RxXm0ZoeJ4Cske08sVh1msTJYACnG3/SJpkI 44g31wTunymoWRyyfrDCxShA9Ct/hQHzxTXxvUfBqdZQ1lhLXavpwLvC+MWu9oiZVixf L/G750s+clzzYHNlV7+6DdXax/MGejxapGvT6eUoIiUvrIt9lsSTJ74Ehp3kNw9dpuIR VVhCWjWl+1v12pF6PT3Wh1f/TRneaZUyILDx2mtAISiQm7vRByNtWH4qsFd0PAdvUokj GnbQ== X-Gm-Message-State: AOAM533tegPaYPFc/uW0a7crEsn4qCc53XaAiXGW4FDcTmnaEa5XreVU x+AsOC9fMr2L6E6ZeyPlvZBewwtXGR8= X-Google-Smtp-Source: ABdhPJwB1ZOzhB3dSu9uRdPc/Hz0iAkA6twfaI7ombSSpKggyuBEgNwV56ubG1xTeOfFMnJrkA03an4ulcU= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a63:7d4a:0:b0:398:dad:6963 with SMTP id m10-20020a637d4a000000b003980dad6963mr6447957pgn.329.1654217141042; Thu, 02 Jun 2022 17:45:41 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:15 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-69-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 068/144] KVM: selftests: Convert set_sregs_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 BAAE1CCA487 for ; Fri, 3 Jun 2022 00:54:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242654AbiFCAx5 (ORCPT ); Thu, 2 Jun 2022 20:53:57 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48872 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240243AbiFCApr (ORCPT ); Thu, 2 Jun 2022 20:45:47 -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 72C55344DE for ; Thu, 2 Jun 2022 17:45:43 -0700 (PDT) Received: by mail-pg1-x549.google.com with SMTP id 84-20020a630057000000b003f9caa5bccfso3049786pga.9 for ; Thu, 02 Jun 2022 17:45: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=KYdW6YZIqFNXsTTYBSVirMMFVngLYzrfEoDxcCp6GVs=; b=rR5XmtGdHFhybuFDAwZKwVMyn2x65XnyxXM7UshP6sYRlc8DNAYJ3Q8OwnltEzr1TN 49HmQrx8OrC3EFIeE2R/FF4Q/E1mgAll2CeWZQrnU597k5iqZ5n3ZNTsT4heOB+zsiTK ib2ZXyR2SSDncl1k6o+b+W28ihDLWtW6P0g8ocld9cSaspPSLg8lLkEGVSVjnHzMoE+P 0/PAQCMK0qkGIIUNzk9OQT719/0gkG2hBQXMTtyvALxDX3bKpxtq1JP8czPQgHzQg3Pj 5fr7CD1wKG7j0Y5kOzvc669/MV0QJWj8WpTr00TIS6/RCEf/LTc8lqg1IglaGvI89XH3 DjKg== 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=KYdW6YZIqFNXsTTYBSVirMMFVngLYzrfEoDxcCp6GVs=; b=QrN2oL0pJKp6KQ4XX9qhtqmbrjIAeIPTiOUfbP75YwVVkACrjEiFW7Z4cCAlIEuhpS VBNo5EydVSm6/zl64m8/TF4mt1NcPrLaXQPLElJsNfuyfDy6Ox6pZLmAE2bP+ysevKLh KzI7npXOKxJASHsHK7QL8RnN51s9BEWg4SM5E6NOLTHCmvT/KKKEqJuTYZjLLTNAqSmF QLCeAZ2o6tvR3q64JEm5JtKR9BKJ3dGjnZyxVKPuOlLiOKR9a9QlTo7pAcRSL0XxG3FK 8qmr8nKi1cJJliVG9fUVL//57vwInzNrdLTTX092xfqK+mf4QxHGNCoYqxRnzHi7L/yw fQyA== X-Gm-Message-State: AOAM531aAQiA7gTCys5Q2SPvxH4noTTvavXcacc8uVU4k4OAIcynVGmO 4/euV8EuQSiQ85BBVUcZt2wcmY6w0/0= X-Google-Smtp-Source: ABdhPJwykWEsE3nKRqcmxQiZY0Utlxp2sTH8cTZd8R4fsyK09AsA8NWUhLz9aPnZ1YtAbOA8tzjryT1zHFE= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:249:b0:1e0:a8a3:3c6c with SMTP id t9-20020a17090a024900b001e0a8a33c6cmr307313pje.0.1654217142546; Thu, 02 Jun 2022 17:45:42 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:16 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-70-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 069/144] KVM: selftests: Convert vmx_dirty_log_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 D5A31CCA489 for ; Fri, 3 Jun 2022 00:54:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242664AbiFCAyD (ORCPT ); Thu, 2 Jun 2022 20:54:03 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48778 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240283AbiFCApr (ORCPT ); Thu, 2 Jun 2022 20:45:47 -0400 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2CF1C344E2 for ; Thu, 2 Jun 2022 17:45:45 -0700 (PDT) Received: by mail-yb1-xb4a.google.com with SMTP id e5-20020a255005000000b0065cb3669fe9so5603657ybb.0 for ; Thu, 02 Jun 2022 17:45: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=lzpp9s6848SvIawHpEXorX8YbgbwUXWo+CPLyev/LvM=; b=bdGgNoYrChHkmeLK1keeGbHD0XfNc7Am5Bd9CMpF42ocesPemIcKmzLe5zoGAUOq4F C/H0Hrq5pQwZS2Rj9nGJ8K74+XaWzhsOhCZv4/+vl1SVVAQN0Hf8ezVsz2dCQlRqdgoB vNJ5Bw7EjHOnGDzc86rHm4alxXtiKyLY0xDDyte6k28wBXtS1uD6zOMWSg1xnt2wUIPU M+xyeM7s3BaZ74Jyi2PsWuicK+fxXUxEsEEHttsgB2A1KPwfRVuhZ94RzjJxfRXgZAAK RFHutbLWRtj7rNxsTsy55iBdfCzKIhDmQJ49kQHsODPuZ3OlKJXMWfdFhe3BAba6D/KC ojwg== 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=lzpp9s6848SvIawHpEXorX8YbgbwUXWo+CPLyev/LvM=; b=Wo9/aGzHYik2wUmAldlgTmi/NEgv9NwWGJiuFkNBXobWHv5cahO8TSnJubg89/08Fq gZ532prekA0jEXRg0JPxEjA/d0qNL4XwUIDie2lLOiK6I76abFDZk539Qjck6ds/Q6Jj KkAzuvFugX5k8kVV/t+VWsGNwvnmHkh+JGH9G4AVqtZ4vJkDlXtEIk2IJcLJc1f8YlPu x7CSZZ8fQ4WB2QdP/rUDBJc0H9EZCRj3k7vfv12qg2lWYnPMt2U0+JTSrg3E443niK2J f/Kfi2MlzXrp/VwngnKnaCiexv/CMVmtvCY3lfX+WP8Q+tc/8bpKppiMjKwerXv+U9zw iQow== X-Gm-Message-State: AOAM5313bMvhVjbV4HWA6LfauF4AEK3vJYLlDlR0yzk1+bbv5rFFzQ9t dUo/4jH44lcK0Hm0Uxj7SmnBzxnaTjk= X-Google-Smtp-Source: ABdhPJxrfNyoM243yYTiCHsSbFMFwqBH0z87l4vbpnEOKB8fayiW7Dl8XpiCOFoCnGeYGsbEzlKyecaqC1o= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a81:ac50:0:b0:30c:3746:e439 with SMTP id z16-20020a81ac50000000b0030c3746e439mr9012964ywj.259.1654217144378; Thu, 02 Jun 2022 17:45:44 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:17 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-71-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 070/144] KVM: selftests: Convert vmx_close_while_nested_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 1D072CCA48D for ; Fri, 3 Jun 2022 00:54:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240154AbiFCAyK (ORCPT ); Thu, 2 Jun 2022 20:54:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48784 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240230AbiFCApr (ORCPT ); Thu, 2 Jun 2022 20:45:47 -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 B99C6344F6 for ; Thu, 2 Jun 2022 17:45:46 -0700 (PDT) Received: by mail-pf1-x449.google.com with SMTP id j23-20020aa78017000000b005180c6e4ef2so3488472pfi.12 for ; Thu, 02 Jun 2022 17:45: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=8VTDN8kUgX/CTxSlXR8a6F78HmGtCBAZAqm9YtQdysQ=; b=Z4JQYNSPiXKMkTcHWJi6X9AQRjgwTHpuiKPXCO8XIqgSdq3RT2aVAPdwcqqFF5+EZ7 jS6qjgXPdTYOFAAQS8nWgmT2r374GGHQj+T3t9SqJCgQ6FnfIKDNQNBh1AgSs8l1822N ADnH7aysGVXufWsSStgt4wFr518covfbBD0svb84PPnoBYnOsXZxsrQloB5YSMUk6fAp jTnNxY4tTeeKrDpD4BNZJCW0FA6KI7C6hdTiPL2G3/bz2DSluRgBYeB6i3gLEXQX4Dsj 35/UxB3tMrAZR1ydGOWp5CDWrC+PVaD02Drs2HAjlPQxWsduGkVjVQinPJv1sKh3XvhH C8jA== 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=8VTDN8kUgX/CTxSlXR8a6F78HmGtCBAZAqm9YtQdysQ=; b=JOPqyrZX7+OXhqQSGfy+V4EATxboO73v/FGqNf+f+3ZpVJblEq0bRlgH1ylXsrTRWe nlPoW+2oJfwi4vQN13mJJDGAOz/d+uf9Wlioj4Rejv/C5ug7ZBnewWfbNhAgP0dtt69x IvckCNLbdiYdjd64/jJoNf/16H6Y7emsEIdGrY2PPFjOYBIH4cC62ht47AVfPDzSkRyQ XCkYEMqJRZbfRNKcfJuQ7fMUaJ9erNxXqoYcV0dZPAyf7Jpe7/rmBPwd5OwLZO8e1BST K9Bh/VujNA2CdfCbuv12tIow//zSFX/HI7IQXmawRNLB/LK4z/6e7X6WSaOgBUIxvtnB IaEA== X-Gm-Message-State: AOAM531bSfYWl18O+qf9i5JGZ/TLetaxHbxpA2qVQ0Z+ndRoFvn2oehZ /+EbNPYKlsYwySsztZ6Td8bFnC792eM= X-Google-Smtp-Source: ABdhPJxbwhAP6T1NPRgJBVvqIfDOWJj7K2wdc4rhn4Fq1FWQ9QdDsNO6pLlI/Wz3u1ENyqfhW9Tx0DvLJ5U= 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-20020aa788d2000000b0050acf7d6ff1mr7869004pff.67.1654217146237; Thu, 02 Jun 2022 17:45:46 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:18 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-72-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 071/144] KVM: selftests: Convert vmx_apic_access_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 4F988C43334 for ; Fri, 3 Jun 2022 00:58:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240894AbiFCA6r (ORCPT ); Thu, 2 Jun 2022 20:58:47 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48790 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240300AbiFCAp7 (ORCPT ); Thu, 2 Jun 2022 20:45:59 -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 8ADC8344F8 for ; Thu, 2 Jun 2022 17:45:48 -0700 (PDT) Received: by mail-yb1-xb49.google.com with SMTP id 70-20020a250249000000b0065cbf886b23so5588739ybc.8 for ; Thu, 02 Jun 2022 17:45: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=fOaDAx5wEYsGYxLsjok3SDFHhvLRfvCG3DXiFSvtghw=; b=ruaydMSVsUj/WLNhc4x7cSlIvqea/vc0r1rU7dEjcV0gabHzDzsisnl1HILhxY0Cst a4NOeY+hr2ClDpahLVopNz5sFvnum5c19KqRLEjSfEmAxp4F21GttBv9U/ww2bwiOxYw KHy+b0lGEYJUjSQ9WSHw9NVFJjVg7jYcrAi9yMLObivjnjQp8xQVV5QC0mvBiJJ+xl/V 26peBvx7Dwafg53bC5xVXIOZD0wtwbwSzsIpcxuEH+7ACqKQvwaE9fRFosHPjDTxnK3M mnJoDqFn0F8yGJoEYL559v0USRpUh/KTvdPusxNGrehfLPaXVuYalT7sWYnY6IlLrhpP SzcQ== 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=fOaDAx5wEYsGYxLsjok3SDFHhvLRfvCG3DXiFSvtghw=; b=W4lHM4OWhOGqmVUzNtM6UBD9TlEcwcpCC+1sqYs9FR+wFq3p5tvIuUhIWRLrIJBTJH F+bVSZKZsKrwD8MVhq1QkA2I+mJ6ibE1T3m3nqA1cX7I5+HwkTZyGZ8wy+CyIX8PecbL ZsKulaVCktMUQ7gzoagjNISTFjwJWDrpwITs00j5+A0RwRnMJxUEu8LBHmuXc2H5+L/M t0T7pAo0sBxgDBx7NR3I0QY9jR+oC9RIlktEIqMBbFuO6vSrme7Y73Uhgclp3lMQYFZs L4QQMjt33EUHjN7QGjJfx4jPx6o/H5OYgkGAwji+uhXRcLj1/nKi37DYrNtogNicjI2H wENQ== X-Gm-Message-State: AOAM533Tfx+tbjNwXl47M+nOamIhrO/7+pkSfGb8mfRcNQAMINV3TSkp tYtxDCtJp11LMDsXo9KrTZ8M23LBFh0= X-Google-Smtp-Source: ABdhPJzQBP7i0UejbUDOEJ/PIUIna2iliySKvnSejjQJynq46nXDzpSmSDHkFEnoUjHwe36cqbrwarHmUHE= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a81:5212:0:b0:30c:1a1e:45ac with SMTP id g18-20020a815212000000b0030c1a1e45acmr8889806ywb.93.1654217147796; Thu, 02 Jun 2022 17:45:47 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:19 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-73-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 072/144] KVM: selftests: Convert userspace_msr_exit_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../kvm/x86_64/userspace_msr_exit_test.c | 156 ++++++++---------- 1 file changed, 72 insertions(+), 84 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 23e9292580c9..a0d35e578b25 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,38 +516,39 @@ 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) { + 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"); @@ -569,43 +560,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"); } @@ -613,16 +604,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; @@ -672,14 +663,13 @@ static void handle_wrmsr(struct kvm_run *run) =20 static void test_msr_filter_deny(void) { + 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"); @@ -694,9 +684,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: @@ -706,7 +694,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; } @@ -722,12 +710,11 @@ static void test_msr_filter_deny(void) =20 static void test_msr_permission_bitmap(void) { + 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"); @@ -737,11 +724,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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 31274C43334 for ; Fri, 3 Jun 2022 00:58:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240831AbiFCA6E (ORCPT ); Thu, 2 Jun 2022 20:58:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48808 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240309AbiFCAqA (ORCPT ); Thu, 2 Jun 2022 20:46:00 -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 58E8934647 for ; Thu, 2 Jun 2022 17:45:50 -0700 (PDT) Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-2fb7bf98f1aso56259977b3.5 for ; Thu, 02 Jun 2022 17:45: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=rnQuY1cKi+nS9UoyuUcltyM7RcBwPsKS/LU70F7friw=; b=hnRg9x/IZ9mmS8r+9WmUfv+8Q7pv19eTlKN5EKUI+6F5qvyu40teMSkyCniCj8lPEP fLlQFrBR3XmbU8eMF0zODMyzmcLaDF3HhTeqwDqKK/jmp6ioRZ+HYIcTyvSAmuNGQwYm zhWW9NdH4tfZC44rLfjpoUukXlcFIF05l0a74bCsjmdhPFkou59mukwMzCtMGKfQWkSc APcOJKio91E/hO/UBiJiAZ9QqdwnxOvSNXH7I6lOX3Gg0vLhif4mbs47MALIvdifM4l8 viB/Qh99ge5Ba7gSOR6sXCJ1kaRO5vOZVb8PbNkC92wGL+xczJVIEwTPiJUCRdmOgxHF grbg== 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=rnQuY1cKi+nS9UoyuUcltyM7RcBwPsKS/LU70F7friw=; b=W1MqBd3QV3xQLiUWYBywfUHv4j35mkOkYHnvUekABhqxAaGORNVWG7R6WeLBZ9i/nu WUsV8x5uiIl+aV3u1ijvb1NEcmtT6OwAyDO662BHT9RjuL62L/mnM7msdwJQNuGxDcXH SqgVW7Q/nwb/O4HWTGlAyxtjNjPs4A6ciLPhW/w4IwGM4YbCzyEeQPMxCQPXigKB/6cz 5SSibJ4KCGKYAlWXfL2uYXKVnymYjFZ8pIdVly8ljQl9poCxVw64N21i/piE/hA2ItqB Bcvtu2Po1ElhzMLdbKDBn8UaTUkJ6XvLPi/JMvexIdXJQAeG6XbO6LyY7Z85NZswbPrI bybg== X-Gm-Message-State: AOAM532A/b/9K4eez1kf3a7NnHP5EEWXugYw6a2tn9ZxM1RQdsI03YlP 5eDJGsBi8ox00W86xFG43klwXHr1vxY= X-Google-Smtp-Source: ABdhPJyu7XLeDNzExxvFCjJYvUPjJwc6ty3KUFRbJWyw9GFcXsIx1wHCl8Ml97BhKBXRtg8Eb3OMC0Ijqbw= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6902:72d:b0:660:7df7:6f59 with SMTP id l13-20020a056902072d00b006607df76f59mr1686057ybt.302.1654217149564; Thu, 02 Jun 2022 17:45:49 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:20 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-74-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 073/144] KVM: selftests: Convert vmx_exception_with_invalid_guest_state away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 43E0BC433EF for ; Fri, 3 Jun 2022 00:58:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236088AbiFCA6L (ORCPT ); Thu, 2 Jun 2022 20:58:11 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49042 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240312AbiFCAqA (ORCPT ); Thu, 2 Jun 2022 20:46:00 -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 E88483465F for ; Thu, 2 Jun 2022 17:45:51 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id oa9-20020a17090b1bc900b001e67bbd7f83so2631978pjb.4 for ; Thu, 02 Jun 2022 17:45: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=nBXYPby3wQYMmU1zAC8L3BCfmsSbMK1J9bnjhYnJ/Uo=; b=ArelePAV/cTNiUXUf/fFsGGo9+O34PfITXBAJjg5iwhReaNo1hGGJrpdaZB07DuyGS ZsvbPG1nyx7zu4Dng3ICKBPqpL8iEthA2+96EbozaCQCRyIeDAlUvjE+65hrqCygLnyK P9mifMDmsp/9UtTKoR3DiajiZpZJTpKMqddnNmUYW4xJQnu1zuTcpfP3+ZgwAvkpH8Uq Ilr1w+R7wOeQDtyx7qLG1/dL/mpC3yC8uFsFNiqWxDabLkfWEyEPVVg/xVYi50shpMVv 0eDP0HO/pAnNVn4cr8QuFQcPcSIuybCcpih6mo7xkCb/66oDlgdE62EeRT5GzYn68HZV IzxA== 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=nBXYPby3wQYMmU1zAC8L3BCfmsSbMK1J9bnjhYnJ/Uo=; b=cPH1m7DZSclSmwxlalKB4i2szFz4u0j1D2F189P+Y8BbZYtWmEWh1sN1qUT4bRCZ/M YdW0FBi5kBttximPxolzqJrRVnSsy5en0FvWwvdjwhgNtLvLuXZWVu2cZLSfsTuwwVkT 9VVdOaCblEVeqTpAYgzr3OvokrycwF9oVdYlWBFBY9NRpv2wP+2yhYs+jWySkcDij19l WBKFVq4NMRFR9llZx0B+fq1guR2nbSq9E2KdU3Ofgp6jxbcFIDDvabkf4ar05e28T7i0 z1wpd+7Rr/IJyIfAFN5KXE5n8vRvM9Vkuq4eWU0aAXbD/BFSIEb4Ir08BBB2pTeKF2gx TCpg== X-Gm-Message-State: AOAM532YGJ+ybGCwsfJIAVsljfP6XiZPvr9E0QM7R7/1eplhaN4oXk/H C5X5j/7JUOBSslkFJZxiSrTD+oT5fYU= X-Google-Smtp-Source: ABdhPJwNJhjR1hacn4P3CyUig+xVNDD54GBx0sqPkoH+gcx2WhsJ7jcqBljDKzixLxShwZF9fhKv7EDE+HI= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:903:246:b0:153:84fe:a9b0 with SMTP id j6-20020a170903024600b0015384fea9b0mr7568191plh.163.1654217151393; Thu, 02 Jun 2022 17:45:51 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:21 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-75-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 074/144] KVM: selftests: Convert tsc_msrs_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 31B66C433EF for ; Fri, 3 Jun 2022 00:54:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240242AbiFCAyT (ORCPT ); Thu, 2 Jun 2022 20:54:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48788 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240306AbiFCAqA (ORCPT ); Thu, 2 Jun 2022 20:46:00 -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 E26B337A0F for ; Thu, 2 Jun 2022 17:45:53 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id n8-20020a170902d2c800b001663868e2c2so2327183plc.21 for ; Thu, 02 Jun 2022 17:45: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=db/YwVzyP7M0ykvs/zXmJv7krGvuQn65+mo4lvD3R8o=; b=MEVEdPy1u4Qhq4CqeeHHHLQcnPUMKubKnBaKkrZjvPrPG+hyR/bBsAZNqtpashxrq+ MggNx39lmKp8NXu6uDmBayi/Zvo/Vqvh/IbOccxeGAdACl+FKWCo7Um35kS0GcfJodOy 4/EO4b7F+P0RgJyXoofZ02R+3FhoDDT2KDuV80ZkOVx3vJHlyrQH9scpTP8Ez7PQ9mOQ NNif6RJbRtPm9/urStD9i5K7LA7Q+kNEW7GjugPaUGNZQdVOIG0w+ytkvfiVsk5zLxFj m8vfrZqPcuR0QPHkgKzC1ftmTWIqSWpCCNxmznh8AublBcm7XsobeAZaTtre3FpaiGFs Cakg== 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=db/YwVzyP7M0ykvs/zXmJv7krGvuQn65+mo4lvD3R8o=; b=KzgAGojANnzZ020p17BUJY94K0Z53ofgtDx7aoR7FeFzfJtPUgUcrx/r9639feKFhd Uw1B4EechqQ6MDa9owDAZHNjiSs7QXEL8xIED5Sxe0lJkrgzJL/QCeTUMTfC+d1dw3q7 3zoqbz/oEHDdB0VCttLL74nP5dAiKGp3ZlQUwAmdsvFD61ZN7qm4vH45UbaW82rWS1vm mTNwDdkoBJIPVKW+rTRREzNt0JVmDySV2O0stfBuPV9m0aNhzCmeJi9nz0sgfNbhpLTi R0HAxnkzZoWfRNgCBYOjlE272BHZj3h361IAxutt/DXKBa84kk3/lj4oc/sa8gycmecO LNtA== X-Gm-Message-State: AOAM530lPxk3FI9D2p+TC9cTQ/PiFH2pY38HILbvPZQNIHoMFel3GGTi m0WQiw70b0QDgEKLtGQ+Ab0qgeU9DaI= X-Google-Smtp-Source: ABdhPJzbNTrPmqeO+2C4UCGrQOO+LUWgjkpzWMInnpqeVZO3Z2kVcBYWIpqiBtlEqjh9fPaL7A8Eg2Xrnp4= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a62:6411:0:b0:50a:81df:bfa6 with SMTP id y17-20020a626411000000b0050a81dfbfa6mr7928796pfb.26.1654217153332; Thu, 02 Jun 2022 17:45:53 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:22 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-76-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 075/144] KVM: selftests: Convert kvm_clock_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 9999DC433EF for ; Fri, 3 Jun 2022 00:57:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239146AbiFCA5u (ORCPT ); Thu, 2 Jun 2022 20:57:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49282 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240339AbiFCAqP (ORCPT ); Thu, 2 Jun 2022 20:46:15 -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 D929537A12 for ; Thu, 2 Jun 2022 17:45:55 -0700 (PDT) Received: by mail-yb1-xb49.google.com with SMTP id i17-20020a259d11000000b0064cd3084085so5600569ybp.9 for ; Thu, 02 Jun 2022 17:45: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=dtKn/1s6u0G58r1neb2YaJY76UbcP9qLfe4/PWDPKHo=; b=QFictB3WUVf3oY4ZmSCgbstv+sdSwlhQ5B7U1hGi/9zuadjzT1Xx5n94oX/koHEYlZ whqOnKEMmeHpb4hcvnVhgWQOusinfN3KSiYJDrhaJbEOQ9wSIZC/6KjuB0I/699VoHB5 KK1MOWomPfMYVg1R2GpYOvsjiJ9IVSBvFQU6qNPm+LmQMxtTXonntAVFirhDscxJfrtf gOf0BK2IebQJWInCgl+LoJaDHrlOK8bprkJIbE5jrI8bpsODzivg9QKgRbSIU/Ukx1N9 nJy0fnWfTs4modFsPpor1iW9aqdvO8LQOfb9Dy+HLuegZy3UImsKZLHjPlLSSrYoLKYL at4g== 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=dtKn/1s6u0G58r1neb2YaJY76UbcP9qLfe4/PWDPKHo=; b=wEV4C8RFz465/RFsSe2i9yoeO5prtnt9ldEetqpwtRc297YDBM+7+4bB2hONHFt0Gg SUJ0cCyf1+SXluWstt/n2rnv+NiIJ5n1ro47bBCgiuvA8zYkuyk+c5ZyAlx2CF4ZPOmU lGcwJ27gPsDB2gokZi49N7ZN7OYvnQEUsUi7yeUMr4TBv7KsFAvDd6dhMSA1jXzIFWPi +725bhA29I54t+KDjXvEAidvlUqVGC00MVK8qvXYWPlj7XCholJ3i44aidmOeZmZmu+B OYuqVTtMk/8/FCjlLwy3ul4nmEdXdF/H5d154b8oVV6EUVdqACyMB3GBCia0n+YcFZ1F oMDw== X-Gm-Message-State: AOAM532MTdH43g368YoUmtxLQGERnr6gAMQbFoUtjnOX1qQYLjAIZeBO YWKzrll+wfGiaVwoFL80+Ow0ZAtPor8= X-Google-Smtp-Source: ABdhPJxHTnxlNfUb+1pMM1jvfC18BkySL94v0dyAd23wbuLKDoSwUam9Q8WUem1lRxG9QhNBAZv+X37cFUs= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a25:5f50:0:b0:65c:bf1d:25fa with SMTP id h16-20020a255f50000000b0065cbf1d25famr8919268ybm.60.1654217155121; Thu, 02 Jun 2022 17:45:55 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:23 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-77-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 076/144] KVM: selftests: Convert hyperv_svm_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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 994b33fd8724..b6a749f5c766 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 { @@ -122,6 +121,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; @@ -132,20 +132,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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 0F3B9C43334 for ; Fri, 3 Jun 2022 00:57:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238557AbiFCA5n (ORCPT ); Thu, 2 Jun 2022 20:57:43 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49310 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240344AbiFCAqQ (ORCPT ); Thu, 2 Jun 2022 20:46: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 6ECA137A2C for ; Thu, 2 Jun 2022 17:45:57 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id y4-20020a17090322c400b001637287812bso3477110plg.6 for ; Thu, 02 Jun 2022 17:45: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=G0hCkDdDsVnTgIh6oVbF9iCXoBGfRnJfQdip0diLa0s=; b=Nkq5jgxMtOToKTu53KCADLaarHmSYIQe6nj2MrPb00R6dZk+rc2RmtQDTvW+Fc1unT 9phEiobYSiipxhUad0+WR5DPzaKFZZQv1q3raIbYvCAOMM7kzAY78zJapDvGiP3hWifZ L7onxnH1UpPZZjzX4pd/bfLKHeGt1VoW12jUNX0OQ4Csp4N7Hv6ftRWA7HhAWkW2RUVG l+iFpY8KxGSp6pbwNDIDPh7Dc1zqckeRQ2yRdsiZiGlmsuA+amvRNcZ5noPR6v1gyu+w xeUO41DG0zhW/LBNWDfH+F+M1VlSOCdpG99KPr5f6T17L9w9LGLz0TUdyLWjP0swiIHN NrBw== 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=G0hCkDdDsVnTgIh6oVbF9iCXoBGfRnJfQdip0diLa0s=; b=IpzO5nfE7N5s/1pB0VRf+zOHXjA6VQugMWN3qtDn+tMVCJpbSklrUYENBSoEbmY1dH AUH64x9Uk+qdnnOnOkzX6TiiAarLD5VfstWGTs8Prf5pK84CPgE46lU05hdi6yAkfmqm OFEHc99oVBcq8oH1a0C5zO2+tPp8B8Rvzpv4nflGinYZOFtUa2mv03n1r6Z07bcH08/6 4tGTKuLYVRIlbd58pA+vfNMq1YAJc/agjcI3TFLu4PXi7RuDQIEjdPu4x1Dsr6rS8nZ2 56L56Q11gqmZaSkDdUmkJniL3uU9GgdESha8Sz7uYMNxt/0VJNDfPmH1+hnbXVLvv/dm gupw== X-Gm-Message-State: AOAM532u/dfexB9nuImx3HbcbhpAxKLUU2z9dstAqeQy4lqoeR2mXluZ pGOHAbGBrYAQEc+U5b2qF4XYr3EsK5k= X-Google-Smtp-Source: ABdhPJxmQLULqMpSQEhKMEKzc1sbA+GeCdqMy40AVLfJXgC6Psx7/CgzGZpirQxbUQmVVAxF29CraEzmf+8= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:903:2312:b0:163:daf7:83a9 with SMTP id d18-20020a170903231200b00163daf783a9mr7634037plh.160.1654217156879; Thu, 02 Jun 2022 17:45:56 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:24 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-78-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 077/144] KVM: selftests: Convert hyperv_features away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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 7ff6e4d70333..d0bd9d5e8a99 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 }; @@ -185,24 +185,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, KVM_CAP_HYPERV_ENFORCE_CPUID, 1); + vcpu_args_set(vm, vcpu->id, 1, msr_gva); + vcpu_enable_cap(vm, vcpu->id, KVM_CAP_HYPERV_ENFORCE_CPUID, 1); =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: @@ -333,7 +333,7 @@ static void guest_test_msrs_access(void) * Remains unavailable even with KVM_CAP_HYPERV_SYNIC2 * capability enabled and guest visible CPUID bit unset. */ - vcpu_enable_cap(vm, VCPU_ID, KVM_CAP_HYPERV_SYNIC2, 0); + vcpu_enable_cap(vm, vcpu->id, KVM_CAP_HYPERV_SYNIC2, 0); break; case 22: feat.eax |=3D HV_MSR_SYNIC_AVAILABLE; @@ -463,7 +463,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, @@ -471,13 +471,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", @@ -498,10 +497,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 @@ -517,10 +517,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 */ @@ -531,14 +531,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, KVM_CAP_HYPERV_ENFORCE_CPUID, 1); + vcpu_args_set(vm, vcpu->id, 2, addr_gva2gpa(vm, hcall_page), hcall_param= s); + vcpu_enable_cap(vm, vcpu->id, KVM_CAP_HYPERV_ENFORCE_CPUID, 1); =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: @@ -633,7 +633,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, @@ -641,13 +641,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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 A495ECCA47B for ; Fri, 3 Jun 2022 00:58:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240817AbiFCA54 (ORCPT ); Thu, 2 Jun 2022 20:57:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48814 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240346AbiFCAqQ (ORCPT ); Thu, 2 Jun 2022 20:46: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 D003A34642 for ; Thu, 2 Jun 2022 17:45:59 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id 72-20020a63014b000000b003fce454aaf2so1346338pgb.6 for ; Thu, 02 Jun 2022 17:45: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=V6Qblx5lgVdv7/tV21pVO2NtMRka/tCwNSFbm8VV6yE=; b=R00heZFqrMSzNiiaEXBl9wdBZTmxrtlRD6RwP+t09rGRfCiFSVgtBk7RW7uW7Q8f36 TUs3PeW1vlO2g6UEqK2NYjvLlJD4kFf6q4DCZ3fieSBrpP02a9JjMXja1Hw8vzHm4TOS 9/bzW88qmcHL35bPUi/Kjgp5di12OUL3/NHFWtK9p9wgEOIc/QoaNPUgIcZH4g00Q0DK 8RjPmI8qvUxC8IIYhcDfavPW0UYNLvlg7iZIgZojv8VZb35uFyfhL4nHbDCWDU/GrRvm xs/6r8Y/PagwDU3eshsAkRX/TwATxp8/ELjJ7M1CF8gKZ++9kc23wU4HG5XYQIMOF8bh t1Pg== 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=V6Qblx5lgVdv7/tV21pVO2NtMRka/tCwNSFbm8VV6yE=; b=AOu7hl+Xb9Hzg6gvVpYpT80m+Qde0ajTDm+hbXy5myxVrnUfYyE0zW9m2/TO0mRUzD GQaCTOBU4UX1aX5PzQbKFgWHHJl44DR1wz7wIn0QA2jLx8f/J5MFM2FQmOOJfMUierE4 KuGBE8/kwQzSiY+LtM5jZtdYEUumbIGp0ww4NAOOnC36yc+ejwJG/1Lz2RidVv0rVTB/ 4Ii6D09OR0h250cZb/DDkdBYjMT7YyCNfOLkQ5w5HEvGxjCO0J4MNGXdi0sn9it8QPeP UtEF7kSn6ZyEpLM9Ey5qKCqO7YH6RyxOg+1IK8vf5P0PvQG9mMGWKS3cluP5UlC8qA/W jzvA== X-Gm-Message-State: AOAM530vOVd3VhhBU56gKZCvtNdAbJFN5JAvpw/KJ74BvaWVUwMXrKIr /zsPKZs0OEKXxzIo71KP8cYC+ors1As= X-Google-Smtp-Source: ABdhPJyhDwHVK1l2HyYJvdBbuN1ekPDgGWL89/uE/lWKIDd/weJnZTzpjcsjSCP+LHeigcwFL/YROXsqhsw= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a63:f5e:0:b0:3fd:23e1:e086 with SMTP id 30-20020a630f5e000000b003fd23e1e086mr616477pgp.61.1654217159294; Thu, 02 Jun 2022 17:45:59 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:25 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-79-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 078/144] KVM: selftests: Convert hyperv_clock away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 428FECCA47D for ; Fri, 3 Jun 2022 00:54:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237644AbiFCAyY (ORCPT ); Thu, 2 Jun 2022 20:54:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48844 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240363AbiFCAqW (ORCPT ); Thu, 2 Jun 2022 20:46: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 55CED37A34 for ; Thu, 2 Jun 2022 17:46:01 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id d13-20020a170902728d00b001635c985770so3491305pll.2 for ; Thu, 02 Jun 2022 17:46: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=OFLQqpJRLs58KrhhkZb6+gQWiDmX7dNznfgAbSlqFoo=; b=Cbhl635RYSZVwyWEP4isXkfBfLhNsYe/YgU4FNSCGISjvDygUQvjNjjEA+l7olz8v8 Qppi5HcDfIqa7FW6dWXnNpHLNCXyWQSPfwrk0EnUtLNVis25p2lqL6UVCz9XTth2zvMX 7tgiQPTqmRayoAiIcdtOQg+sNqddlcuVn5laFzflA7ZkvskGeZCt1R9ukFLgSOXlZn4I C1X/P5XY1mqPDEFGKTLN2PBKmgmi6SuW5dGfH0st/g7agyBWml6AyVhFoCXX+Z4V0KJr Mc3R6gPq83Z/7ArDMdDsuvSvpr5Ayv3ioy+3lqkO2v6HSUq0L87vu6RKY7fXOwptDfnE EeOA== 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=OFLQqpJRLs58KrhhkZb6+gQWiDmX7dNznfgAbSlqFoo=; b=ZdMt0qyRfBoAneukU9vBzy8PtHARpQbq+dBl1mkO75uy+AQ0wMrCZAIdXSpJ4RQEkL wlpzETIMHoEWU99Iab8D+jKvpZTCt2uhwYLflhVaYi/OxhyLoYQh4Qo1Iw7Mtte++hWl tye1kThr01DizbDyxbHCFmH8Uw0vu+iBmB+qB3rjZWFCzWW0WppJIxPVu1DzEzox0TRu acCsS3r5JqBzm4oO1F0eSxgoaPx+d2fokmkrP/9yY/iaXNG+oacQzVNu0gZtcruvCwA5 Gw6pRUP9g7F4Oqe6qGtDbzvlf4wWSv44Ybk834q2rAdlMePj2w5TkKNaPhUm9yIEbw8i rd9A== X-Gm-Message-State: AOAM530y7eoJvixyRnclLtrfWGNjtHe2kI/hidhVpCIV/HzzQ37DQsZg tjDCupSoYvdeuH2I/34bfffrtiek9L8= X-Google-Smtp-Source: ABdhPJyK0JeLi4hBCaQzbT5qvjaUTc5iug1glZRlK78sCTglCK+DYjGJnR9qBSEPzE91LKAu2AfkMbTYdRg= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:a04:b0:51b:6ea0:43ca with SMTP id p4-20020a056a000a0400b0051b6ea043camr7690420pfh.78.1654217160805; Thu, 02 Jun 2022 17:46:00 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:26 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-80-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 079/144] KVM: selftests: Convert evmcs_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../testing/selftests/kvm/x86_64/evmcs_test.c | 52 +++++++++---------- 1 file changed, 26 insertions(+), 26 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 78668605f673..ba39042a5d96 100644 --- a/tools/testing/selftests/kvm/x86_64/evmcs_test.c +++ b/tools/testing/selftests/kvm/x86_64/evmcs_test.c @@ -18,8 +18,6 @@ =20 #include "vmx.h" =20 -#define VCPU_ID 5 - static int ud_count; =20 static void guest_ud_handler(struct ex_regs *regs) @@ -159,55 +157,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) || @@ -216,28 +215,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]); @@ -255,12 +255,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 /* @@ -270,7 +270,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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 C1ABEC433EF for ; Fri, 3 Jun 2022 00:54:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234917AbiFCAy3 (ORCPT ); Thu, 2 Jun 2022 20:54:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48872 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240000AbiFCAqW (ORCPT ); Thu, 2 Jun 2022 20:46: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 3A0B837A3E for ; Thu, 2 Jun 2022 17:46:03 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id o8-20020a17090a9f8800b001dc9f554c7fso3522317pjp.4 for ; Thu, 02 Jun 2022 17:46: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=HgYYf1LZj3Pxp/woJQ4WmwXirUtLeO88klFNgII9A6M=; b=rlfb1woa39KK5XdBDBt7vJY13J1rJndFM3Y7QvRcMvZtLApa9e6QV5v6uzBwvWYr0O kYFNyooL4p8exP/q15qA7GrwehtkVotxytSmXECCLdTVg6Aw01GYcjp+h/kbPEIED1Nj qFHZbvaQchkABanJBPty4ofHmPrMsFqF/wAigKP0AOdTN5gm3FsMbpekd6yphZSrOTRW l/F0w3cU1KQHb5TT0OxjLfw9Q/wXN0cgzQT2hkBYvWth5X28BLTSqHBfRt+oeigVZUN2 Ilrj37ejMGEFGQ+iMAu5I43ZGjW9OBgtRL2DrCpLQjLFsrm3HICj4gmuCGBj/QoechDI NZAQ== 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=HgYYf1LZj3Pxp/woJQ4WmwXirUtLeO88klFNgII9A6M=; b=FB8gNQftg7sJVj5oiy3xnb5v+MUnShwj26M76UTi9U78r+lkQzgVgIvJqfDRSr4Emf uxz1MnEoa2BQnOra2NW9VKrFX2CJgQtITXJs9S9T33+c087yIheXUGIy2la4+3u9DXw1 0TfVc+dU4XZaEUTJlU02xho0LhRy/vhFo0oo8bPPVisKIA0XoiRrOo8IQGt6+EhoZywP Qy04HckSjcnjwsDKiXrLGM2O1AcYT2oPUJTYw2BerR2DjF1eA4kseRcJ34Ag+87wKIoL 44wa+a3YruxHgCNAsthP8hvSHWe/Yh8dnORLjGRwDGeIV0tASwTl7QIGOKPzqBwRUAme nFCA== X-Gm-Message-State: AOAM5324ogINus0uvZDgwrhnQSv6QXKMc28qIVKKEn/MG0Gim+Wd5Nqe G+jZ69jgq/BDbpWaNwOybfyB7c/2YiA= X-Google-Smtp-Source: ABdhPJwEqaGPjVCVc/bPJzER8f738JoZbRX/l2ZGkTrqL/TLXL7AdAaeU7Je8n/g8ZpjG/J3rBciV68drLk= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:903:32d2:b0:166:3747:8465 with SMTP id i18-20020a17090332d200b0016637478465mr7514130plr.143.1654217162681; Thu, 02 Jun 2022 17:46:02 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:27 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-81-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 080/144] KVM: selftests: Convert emulator_error_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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 9c156f9cfa15..08a95dab3a6b 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"); @@ -163,6 +153,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; @@ -171,20 +162,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"); @@ -199,14 +190,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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 0CBF2C43334 for ; Fri, 3 Jun 2022 00:57:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240689AbiFCA5g (ORCPT ); Thu, 2 Jun 2022 20:57:36 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48874 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240369AbiFCAqW (ORCPT ); Thu, 2 Jun 2022 20:46: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 BCDA037A82 for ; Thu, 2 Jun 2022 17:46:04 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id c11-20020a17090a4d0b00b001e4e081d525so3930831pjg.7 for ; Thu, 02 Jun 2022 17:46: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=3AZUimij95bjf5gYvdhkHvlv855AKXpvwM8ZUYLyhNw=; b=XlZnkRi3t2vy0ZLpDkMjujVnZSo15I0e/Gv1KpGadfeMGgPTXnJXBq3iBVVXQLkGuP fsq4CCy3VjhV4Z6UDOES4Y1SX9s0p7hpWTo636PxSjKAOa6KhKZBR46WZey2LVIQzMn/ kEU4U8ERfRzV/ds31rN9KHsjsdJK8oMrGoXxl+rSRKikuEnZCRpBqG681u8GRiN18p0g oafoX92Z8gTL5v5BVf2TOOIFRMGOAXGCExh5HWiIOisY9nn4jZPDxRYUFO7zKY+QFw4n 4p0lsKOsEWShjbjGoqbXmHn/73gZYb+9//jKPCFjkjJVG5uiKRL78XeOx8irsOp38Pc6 B/NQ== 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=3AZUimij95bjf5gYvdhkHvlv855AKXpvwM8ZUYLyhNw=; b=mXmQiSKR2CTFhbxqT6VDv1ZXTV2O2YGbcjRFRHP4bDmC+O3YBeaT2AD9cjje+EWlzj ZjenDjlKolBx2hA12sLdhpV4Jr7PvsmPs23tYmPW3+XpmKvXe3F2NEgWpEYHBydknL2p E2W2vZMU7c8TRVEQJlAqlD1R+hebAhpC/MKvWxCb5VXh6GAXfd1vIjaYVuxgY0gBN3yN XywZclcYky4x2R5pRulUCQsNOa/gji+9j3N6TrMpSwX/kviZgJeTrLQe3M7j4j99gvGL DfNiM+fSi6AP7+93KYUs246RkFmkog37SWODw/eEi220KvkHZDqDkfQ/+RgD7w87IwYe Mi4Q== X-Gm-Message-State: AOAM533roz4zOEJ8aswuX6pR0PZdC5uJ2YClSqV8OaKVIhpN4pHtf3+9 YaPT++IECHuDDat3DV4tMiwhiaYKsME= X-Google-Smtp-Source: ABdhPJywo4t07QOnGV8De5DPRS6yc/ynoS0+G/CTgjCWibvygcU9t5bQWHkMVrrFHnqeODnM9tLPeTUoCYw= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:e34b:b0:166:342f:82c6 with SMTP id p11-20020a170902e34b00b00166342f82c6mr7456216plc.29.1654217164436; Thu, 02 Jun 2022 17:46:04 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:28 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-82-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 081/144] KVM: selftests: Convert debug_regs away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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 f726645bb9c3..182d71c6d13a 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_guest_debug_set(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_guest_debug_set(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_guest_debug_set(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_guest_debug_set(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_guest_debug_set(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_guest_debug_set(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_guest_debug_set(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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 6ABBEC433EF for ; Fri, 3 Jun 2022 00:57:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240460AbiFCA5c (ORCPT ); Thu, 2 Jun 2022 20:57:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50796 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240208AbiFCAq4 (ORCPT ); Thu, 2 Jun 2022 20:46:56 -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 9774337A8D for ; Thu, 2 Jun 2022 17:46:06 -0700 (PDT) Received: by mail-pg1-x549.google.com with SMTP id 84-20020a630057000000b003f9caa5bccfso3049786pga.9 for ; Thu, 02 Jun 2022 17:46: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=XGQdyzi9kzr/j6zZemYm5PZbPdWatsUhvJos9j9hX5k=; b=X9aF4bXelhGzhsJMjQFoZO5KRi1aS4QxUCCyPr7GXBC7aZz9OjmPPYXCSotZRagCU9 NZN7L3woWFocc/xUlvdnBRBStFfWz3Iu2muzO1driy6F2e81s+2WzlSlqm8kelXFH4oX Os92Srumm/l28JDyb6Ex3k8wlbAaKeOLfm6Te+rp9SyszKEX413cy/jaNidFOnxz9HC4 89x9CdA7INqIWvlki/WAbakjITB5B0Drz5tZrkU0WPFye1aB2JG81x9/5ychKTQsLZND Iy/5XFKdaCifYIzeq4V2j5+7w6OUanIPkwea/ciHlndoDO7H488m2GcyNaa4FOtOrni3 Wk/w== 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=XGQdyzi9kzr/j6zZemYm5PZbPdWatsUhvJos9j9hX5k=; b=29nthsA+wSR/bRIvJwyO5dsHn2baayey3VsHydnvv3PqaTe1Ya5Xr6bUYZhZlEdwfB M72Lj5z6vca5b80tUXoPiLynZhTGR3u8JxMAykuue7cmQ1Uc/bXQlF6pMZ/bVHgQvKBg aCRDHWaczQgkJdt7st5rIeNtWVFrvlUtbDdEnABj67BwdDf4tNemNb2j9puEaeStETBD 7Ar5Nr3DLA1t21IIsF4fn+GqgVJXDf2gZr77jjIU12tLO8gX+BYLjhgINWVW2lJdKPyS Ft8UqyPyKx9hSZIb+VoUJu1WfZpAmwWehI/LMmY+7qwp6CNBkUNoV9/64i+FVo8AGZt/ MiwQ== X-Gm-Message-State: AOAM532tTuNXgKbQeu2nX6TzajMh08OQSiYB+vQcPkPuEy08nW9dNlSZ nJyHf8yq4bu2tsEDeU3vtS1YVKKk9Xg= X-Google-Smtp-Source: ABdhPJyCtfTZ7aN5CI76CIku4tCpZzaA9e1CzwTIf5o/S4qmojbkmAo18ZsVsTc+6fcTb23tGw+/okjSQe0= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:f815:b0:163:c524:e475 with SMTP id ix21-20020a170902f81500b00163c524e475mr7678153plb.37.1654217166264; Thu, 02 Jun 2022 17:46:06 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:29 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-83-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 082/144] KVM: selftests: Add proper helper for advancing RIP in debug_regs From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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 182d71c6d13a..3cc25714d703 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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 80079C43334 for ; Fri, 3 Jun 2022 00:54:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239716AbiFCAyf (ORCPT ); Thu, 2 Jun 2022 20:54:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48764 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240430AbiFCArO (ORCPT ); Thu, 2 Jun 2022 20:47: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 5284037A3F for ; Thu, 2 Jun 2022 17:46:08 -0700 (PDT) Received: by mail-pl1-x64a.google.com with SMTP id o16-20020a170902d4d000b00166d7813226so663766plg.13 for ; Thu, 02 Jun 2022 17:46: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=GH/SGjUQcTjXdPIk3f8SiBnr6WQtoymdX7cMO8jw2AQ=; b=CBbY9FSQSRI+5Nn15KhNkyfRuLRo58UWX22DGfkDjiiJnmycelDYHAzOkQsiq3GPpc /p4cgBIQ+1kzR48V6qINZ9JCxyFdetlKt0WGOu8VH39jRv3iQpf/O5DtFtMY56FFwTu/ VFE6JNA3V3lTh2KmbxCkCMMBii5hwVBmmMF6D0x5HWu4/vm98EgFIxPNUmRjMidUiS5i XhlLWt1UVUpPQD0mNeYt0LWPsstXzRb/tR1wJZ7Jadyq/4ce7JrPoHJ6BJWw2lRS2sew bWF5CbyHfZMqoja0T+39N2B2EVrfccyWnZVdgB2JYZVssxGfEuX9jyHPs1AcJmSAJeIB +u/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=GH/SGjUQcTjXdPIk3f8SiBnr6WQtoymdX7cMO8jw2AQ=; b=xE1j3IiyBj2D1YUwEVEv6sv+bVryA7cYT4SsAIEYB8xMj6jbVTVyTKseohDapNxcSc M6Ghqx9S9TZYyZXrcQ4v4J9FHJk8LNCrtc/3R5F4XKrMUmWNyV2B+Lq/cbSQBAkPwCUj rPVoeDrMwJHWbRNy38aE373HjOYnM0oiIGi9oRC0Uz1cnCgKIw6ht6fRncmp+E+RYF6J 11mfDTyx+vEPwQiJhHTqx3Rz7sptaAmw3Zgy/pjcB73CrQCB+DNcQkBUXXNwWi4Xxma7 DCFpQMXVEsdQb1+q9De9W6+RwiuoGtY6ig5H2hRM2yGatXvtfK0PL9ByR8oA8bLCu8X9 W6NQ== X-Gm-Message-State: AOAM532XRGbRJnBHYQyC+JXrAJSg/jXevQWKFvfbhWOuHK1GkL+gwU7p Qh6sA4lLWzql/dxICCqg7B0yKAzE7Dc= X-Google-Smtp-Source: ABdhPJz7U8mxfzh6uUWZ2K6x0L/59/Op9I3blF4IuR/EjFB4AN9ky9KVEOyH9b1b4oweqVzgozaUPfseQTM= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:903:11c4:b0:15f:14df:a919 with SMTP id q4-20020a17090311c400b0015f14dfa919mr7581193plh.21.1654217167835; Thu, 02 Jun 2022 17:46:07 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:30 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-84-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 083/144] KVM: selftests: Convert amx_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- 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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 676B9C43334 for ; Fri, 3 Jun 2022 00:57:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238362AbiFCA5Y (ORCPT ); Thu, 2 Jun 2022 20:57:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51716 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240446AbiFCArP (ORCPT ); Thu, 2 Jun 2022 20:47:15 -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 D1AD437A98 for ; Thu, 2 Jun 2022 17:46:09 -0700 (PDT) Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-2d11b6259adso56188097b3.19 for ; Thu, 02 Jun 2022 17:46: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=gw9bm2rKSvX9BYr6V51bZUm+zZe+4ZNQvzUvW3D6+Yk=; b=MxGXGVFEYRhWN5azl/fmvEy7jUuUFja+3FDOp5yrd2n+Uer8FJ6HKRIMhOWcCFdWyN aaYUt4Cr+BQYPy62H1Buc1rGU+KCIoBifhJ6azJmXhYVX53EMgcUtBdBa04o32kxhPpe 5wZRquSOfmfF07r1LvSGcDTl3pi0K3/FsBI3HXDq0UO+TuTrmEH+L5uEE1Nzyir5oAn5 qNqzN3W30pa2lpUhqMX+ObHmbEZ7+8NoCECnWXWt/eVSFLhM88Q1LvEgMLJXRhkacStW Dl4IjxxWdfGyH45d1ZL7ynriQu2EZ1mlM3aFz98HpHEjIdS10IC3Ue/B/GqAsP2v827L fQ4A== 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=gw9bm2rKSvX9BYr6V51bZUm+zZe+4ZNQvzUvW3D6+Yk=; b=UbvH6EvzFyMLPUl5Lbertdwu7W1bXw91PuMtwIrlnaY35lHOKHeMmehx/+Feh+6xAf 64AUKnFDjqd9LX/gWccIspGaGxcoU0kFiy4Iiinrnlkc/U+U45dDvX4Vd+iX/oL3a3jP mV058lQz42WmfqEG8+/ASJiycT/aH2D/MgNjhnlOa3sYPmQxuFsD6KpnIXGTpuFiBUoM frRJCj2Pr8OaU/oFD/9pjOald8MvTMvx0if1BcTLRAiLXqsqVETzDXQMMGrW64Z9AdJn kNqJ9h5XDm080ZGJbEOOmuOMsVZ1pCQkBIDl/KK6u+Kyi6ywlDP7diaI48Aly8Um6Ivn s5Nw== X-Gm-Message-State: AOAM530o9ngNv4k+IFSI8B33Xbuabzh5COzIHl/mo3VkkEtkbcuBn3P4 4dqpOyMQZWBfNQOJ7n2h5yypDEdx9GM= X-Google-Smtp-Source: ABdhPJw52BMApMyNQo1WvYxD9eLl49NnS31Jd30HtVB+5ClClQ1c4EMYtaGBVGZlX18i0rCPSu5poyVEbmM= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a25:9081:0:b0:64d:d424:a811 with SMTP id t1-20020a259081000000b0064dd424a811mr8180425ybl.298.1654217169512; Thu, 02 Jun 2022 17:46:09 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:31 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-85-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 084/144] KVM: selftests: Convert cr4_cpuid_sync_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 198B5C433EF for ; Fri, 3 Jun 2022 00:58:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240651AbiFCA6e (ORCPT ); Thu, 2 Jun 2022 20:58:34 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48790 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240453AbiFCArQ (ORCPT ); Thu, 2 Jun 2022 20:47:16 -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 B2FD337A99 for ; Thu, 2 Jun 2022 17:46:11 -0700 (PDT) Received: by mail-pf1-x449.google.com with SMTP id 128-20020a621786000000b0051b8426c375so3484862pfx.15 for ; Thu, 02 Jun 2022 17:46: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=WF5qzFDeqIEWa86v1LicyVxoQ5Cw0jH/nlR0HHTYVu8=; b=Om0SvO4L2MbNVuvMOTZWrGctVCApQTx9G5pDWZx8p8VDodHaYjS3Izy6Bm+VpoqD4J +6V2zd32Nqdd99j/FfnLnttlZ51vp+rcZBRw6CI4dizYTtGmRrFChuFiRpQnbWk2uF3S +beRu3DvAPwMhNIQfup3OjHYxXDJPLJkj/J7S6Fvuv3wNUQM4zkdjBEbQrDFqIf1fwmM pU+gZgxFoMzHIP0ypfUELZ2OjayiF+yJ58MdoY3fOsklKxW9dnNJb7g8X0Sy5U1ez5uo hynyhvv+O2DOnAJZqZq5eYDjNmgJvc4JnW0iRZKgT2zOcqp7VnLu27TFxEcyd9H4yHeC lPmw== 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=WF5qzFDeqIEWa86v1LicyVxoQ5Cw0jH/nlR0HHTYVu8=; b=KS1yDqbLt5vLM3nra69lhJPJslm2GDEh7/53ox9mjdhKd1SK/o6Ms1paPV/i5xW8lH SMaUVm8zVExD7peLtG2lf3PphT7lWoJGU/fB6WIMtYjayH3JpKljvhPF09EyNRX8Mw5h SVUGiWEGkGfLJOZpLf1k5MqZCtvMqig++bQjSb+wuwj4ISRXNYn/B+JGPKfrB5vhOmni AzOQOOjwO6GKHCTOCKVD5EqG5LTF/9INy4nAsRWlBHwK6oat18xQ/VJO7Fy9z6X+wmQz PFDb/kC1GigIon0Kc3aRxztbmoI9kNV5nBQ4rlNJ56wxPp3Gvkgga+FpdO61n4wMMxWC MdHQ== X-Gm-Message-State: AOAM533KB3gA1jDv7mzkp+GYDP8j+neNhJFCA6/is29dYdd2v9ofgVLL adx350cawtX+M9fXwwkfv1u5xyb1I6U= X-Google-Smtp-Source: ABdhPJztn1c9mfgPxl4oVU72UqypNLIv2LquW9Jz/fgKJ2OjLT8gPAPlh4dfITtGjBf/aWJNwy9pYCx9baA= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:1a94:b0:518:b331:fbcf with SMTP id e20-20020a056a001a9400b00518b331fbcfmr7724539pfv.85.1654217171189; Thu, 02 Jun 2022 17:46:11 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:32 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-86-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 085/144] KVM: selftests: Convert cpuid_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 66281CCA484 for ; Fri, 3 Jun 2022 00:56:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241142AbiFCAzi (ORCPT ); Thu, 2 Jun 2022 20:55:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48782 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240462AbiFCArQ (ORCPT ); Thu, 2 Jun 2022 20:47: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 4306037AA0 for ; Thu, 2 Jun 2022 17:46:13 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id b9-20020a656689000000b003f672946300so3036320pgw.16 for ; Thu, 02 Jun 2022 17:46: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=HmflTn0VQze0qjz7C+f73GctVnhrRk2ICC14i+42toA=; b=WpOIATv6ZgMsXPILGbEqyjwgojnOEWiNdxMeVMXyLvz7ZCT60TjV7GGZ6wOpM0Fj+z do8t1d+xYQSUYl7xpPl4LE1Es0UGOYxBaGdCSzCyUQqTzPbLDh77FeakUf77cP6DbLiy 8s7T11NZZjLbrmusiJhGDy0X91k2H6XudUx4yq/kKF97fsazv7D5SrbHlqVPIboKe1kZ TcsX2R/XIQbaKBp6qBPdXTCyZR9hlV/GV5Ap06/xDIImeSxtuk+ugaTrL685ZoC9fEU8 RENDaGRYfuUWq9zzcZJpVwxrqC1UwnegnhOgPUFrexe22ULpQozT4apstyTZA2dugDtK 9UyQ== 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=HmflTn0VQze0qjz7C+f73GctVnhrRk2ICC14i+42toA=; b=CYhxEjWRkb/0HoopnQ6Igmw/OrMMsZHDf+nh0gp5ewrSj0ntCLrds8v4k9wPR9iYKe c4LGeuaj2UWCNfANvzJL1OIm6EPR0b8JmSBeLd09HILhPGWnasaqacJ7N8XhYe5mUZIE yB2J6X5nCmV20BZ/iuXLfO5vGcU0qI9mHPanJtQwg0Lo3ccszpsbQdpN9+EsWPCH+4Vy 9UzXUy3IW1KfYfobdbKCOaQxHwydvnDeZx1ZxLhv+czZoHXtKv6ry0jL6lXJIwt2URSJ xGfcI7YCfd5uZ1e+AsvPMnWUQBVbWI/TXOPmweJbbRaoo2N8rX6am1Z5hfb0lS62F9Ob YWog== X-Gm-Message-State: AOAM532qDbcs6uq9hbTm2b9R532rx7oujcWQxIFLQd/zvb8bxKmb+XEf 9/pKaUejPHCZPMXcKAc+XKfZBFSNakE= X-Google-Smtp-Source: ABdhPJyhlHExZ/NG+G+gYiQrVxDrefRUoP/yWN+pv+AR//5iG5zARzRUBH/cOLzshbWV+i7ACnIM14Jwuzg= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:1a11:b0:512:6f59:f5cf with SMTP id g17-20020a056a001a1100b005126f59f5cfmr7758804pfv.45.1654217172776; Thu, 02 Jun 2022 17:46:12 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:33 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-87-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 086/144] KVM: selftests: Convert userspace_io_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 54EF8CCA485 for ; Fri, 3 Jun 2022 00:56:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241108AbiFCAz2 (ORCPT ); Thu, 2 Jun 2022 20:55:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51804 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240468AbiFCArQ (ORCPT ); Thu, 2 Jun 2022 20:47: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 5270837A30 for ; Thu, 2 Jun 2022 17:46:15 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id x16-20020a63f710000000b003f6082673afso3042370pgh.15 for ; Thu, 02 Jun 2022 17:46: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=MHxkJrz/MSjh/hMO43Bbdcoy8hxCU2glVn9aZNJZ+oU=; b=UwV0Z0NA1cmEm6kxjcYIDmC0zAwG3FXUWXIvIzdjAc/vRfPZIDywRPDBLxM3Ks4A+t 8MmwIXGngR/JZNDsBE6uw9FkSfJpmp8av7bCIpBQ0L6UWOHtk/OOXAMIgfL7RuaJuEvG YpFWVXIofMSoZBUBMGNLPmQaIzOI1hu9Y1tBKh/KUpek3wH6qyfesOHHz8Eyv3BU8i84 TxmEujQuVp2gTyRijTiA/n5LsoA1UWt9NUBdgQfVPwiGKZDuf540zMSnvifEVGC6V3nY uo1ObWl9F9WLb2JIQm1FhAYNKMTocf0lRSocRM/SHGcj+U/AP20BXDU1LkUcKyGE2Heq jq3w== 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=MHxkJrz/MSjh/hMO43Bbdcoy8hxCU2glVn9aZNJZ+oU=; b=6lZJ1HpBkZ3xSEeYgdzUXvkLe5rdOjul93VRkz6ViiilEubEa229ZzVug9Yuktc3ah VAZPsTHEtRDnUQfFIc9jhraUR960dsc07/VUjsx6qtaiCU4s2P0S3h5+5lVF+dVuAoAl FbHcWbBy2IPaTWt4IyycTpCw9kcOLZp6wqkPQXuZrAQS88JjqytxcbXu8CW5qKSBVSLs o2R5MORGkVZfljq7ieGMbo+rRv99I39RWdG+n4tVIiyr2mNnFD9ZnPNngU3pd9uxZmTE F6mJSG49nD8vdlaCrUvZ2xDS6dJOPFBmSwavIN3JIh+I1dnzm8nPJP7DXe4IhZF36Hl5 R/bw== X-Gm-Message-State: AOAM532FBMv1tJoeKKmDt2TE4B3PFZ8Yt70v714WFPGeV6Lkqvqc+EA9 3hZtvXCDnyh3/Svja91f7PfNFJRVX1k= X-Google-Smtp-Source: ABdhPJyQuEfkb0agAK/MxDppyJF7O1kot8Efh9XlXHnP2j2bZzQshRH+553ZTsXlPzW/5eVXJqwnz/UCLEk= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:ab90:b0:1da:375f:2f44 with SMTP id n16-20020a17090aab9000b001da375f2f44mr8169560pjq.33.1654217174553; Thu, 02 Jun 2022 17:46:14 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:34 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-88-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 087/144] KVM: selftests: Convert vmx_invalid_nested_guest_state away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 B74ECC43334 for ; Fri, 3 Jun 2022 00:56:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240301AbiFCAzC (ORCPT ); Thu, 2 Jun 2022 20:55:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51808 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240470AbiFCArQ (ORCPT ); Thu, 2 Jun 2022 20:47: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 95F0F37A3A for ; Thu, 2 Jun 2022 17:46:16 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id 35-20020a631563000000b003fc09751ce5so3042248pgv.10 for ; Thu, 02 Jun 2022 17:46: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=VJrVHzCEs42CWM1dqRRF3PdVfPPmzEFc68MwMgn9Z6Y=; b=Kg2OlBraLmkzaiubrmk79tXApvgk07Xo9aQqShCo+m0cIjfomV+BI4I/F2f86wqwBp IwTG8opJoQ/H0X3y3vCTMM/ulAFoamo/zkpOXKeB4PsgF3jOH+tJdKVoboWCm9Ykjq4D wjnVY931fs6jea+OZffTg65+55nMfVE7yKcYqQUMEgFttqTi5GQBaILdYenUfR8bfmUg GB5ZPJ860EIyjJUhPom2xyLzRRm9coVs+8pdwBDTFJfwVlmystwSZzpHNmY9IL06KvDw dh21cEz0OAqxAQ4i3MzCVtrFjqv67QOlpwOffGZsbk/B1+FuxKEHgUTg1s2DJThXkoKA HNiQ== 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=VJrVHzCEs42CWM1dqRRF3PdVfPPmzEFc68MwMgn9Z6Y=; b=p8EOAwZoN/7khcHaosouEG9aZhB92MIH3GESet+hDBKWL+s4pc4HFOB5js71cNqVk2 66iF6vH5uiIInN2ou+sEfdl2lSTkjn57BRL6gZnClJKFrFudgrts8jtArBq15ZJdF/5F I1VS1lu3IsZn/xMcZhO7uIUpDpuv5DzVzESpomQLYfGHn8vUDkI+ZKriam5KFQygNWKl LDd2E4Rhuuc1rKsF0ru+yAq5jomrFBg2OIkL1U6QgtR8tW2/VYdACGblSxxX5UThP4F0 smL+qsGp8mesWv0/gGlHByfQrwW5bi+tnqfNYPTgGVz/2+14Z1w27NqqhxSU8pLwJCfB xz6w== X-Gm-Message-State: AOAM5335O/R1it1hls3QEYorzajh+0aIX1g0znlR4YfOlHhaY3VKj4Nx 9kHr5LtV7oQmUUUYW3t240lntPiVgTk= X-Google-Smtp-Source: ABdhPJy1+LnuXl9A5kyJyIIplzogHTvrDpj16Qpa5BG9VXOtM1Qykdg+tYr6Rc8KfhxkOTxwc4EyRANndzo= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:ea57:b0:15a:6173:87d6 with SMTP id r23-20020a170902ea5700b0015a617387d6mr7395649plg.104.1654217176214; Thu, 02 Jun 2022 17:46:16 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:35 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-89-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 088/144] KVM: selftests: Convert xen_vmcall_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 ED331CCA480 for ; Fri, 3 Jun 2022 00:56:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240511AbiFCAzR (ORCPT ); Thu, 2 Jun 2022 20:55:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49438 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240479AbiFCArQ (ORCPT ); Thu, 2 Jun 2022 20:47: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 91D2837AB6 for ; Thu, 2 Jun 2022 17:46:18 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id e18-20020a170902ef5200b0016153d857a6so3485150plx.5 for ; Thu, 02 Jun 2022 17:46: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=amHid4K7CeXzL2Cd0HrBIVoj06G0AcSIfRzEhS9x9Vo=; b=fqMVOzdSDB5o+Yy3MqLyLTS1VAuJsuiWmVMAcVC2A9ur/ssxIlekilpahr3az0N1Sd 3cUTKq5WFYSQZHAKHOStN2xpVJRt2rJy0o6FhxIwvxAgqJmpwCkNHq9IQpexLCGzro2c cUk2d6uYPsjmyHUO16Gq+Zl6Jgk6LHatTZyphgZkypxY+k/bhiQLCOCDWkO9zhdhjfE7 KGasqNnodvI7mtaIvniC6G5kr3JyWr/JP8FfvDhAETtMEMiEt86T2Zl3Y8+wLyTq0Mrx l6/CztzSf0yl+aN1W3mYZUE2YUxQFZ0GipYg8z3H9gUR/gWmoLU+kJl48j7lUjpmxYCH Nz3Q== 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=amHid4K7CeXzL2Cd0HrBIVoj06G0AcSIfRzEhS9x9Vo=; b=7TtKytFyylF99tVmP+X61l2MRZfuUUcbsMsaeiih9/6oM6UXzDlwTm0fomDENG4NU4 dwgQeSOkNv6cQQJuBNQ5zHZaiIT3VF9dfBOxwbhDFirlwQZJ4hyxblzAhVoE6d475Tf4 mIRlaPPo9DauFjHDghucd4b36AIMFb6u6KBlidFioKovdKJPXOAcO5ANmHDZsssGbp1U yptd44vhirBYa/HeJV3zr0O/ZQfPLeu8+gp3MuDBLgE7hEhBO8PADrm0uX4NSwC4AevC GzT/4EKw7N+icx/Cgah2e/FCTPtbbt3ZNp6FEBkq4SZjKfzlEN5tfBkeP5ck4OFx0qVW ZWlw== X-Gm-Message-State: AOAM531Lvcocx/XmQqNwk7TZjF56oL9/IZQQb5ROf3xUkFDGJWvFI9h5 hGvgy4PlAQgMm05XFOgXG258AHO4G18= X-Google-Smtp-Source: ABdhPJzlkFDShxy7YeHDixEpEdzxg8e0KPSS1wQinqqhLFWF7Sa4M902WiEQR0Ygw/aeT9vsZNZo3xejH/Q= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:ba88:b0:164:1b2d:61b5 with SMTP id k8-20020a170902ba8800b001641b2d61b5mr7665933pls.27.1654217177988; Thu, 02 Jun 2022 17:46:17 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:36 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-90-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 089/144] KVM: selftests: Convert xen_shinfo_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 4524CCCA483 for ; Fri, 3 Jun 2022 00:56:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241069AbiFCAzY (ORCPT ); Thu, 2 Jun 2022 20:55:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48810 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240481AbiFCArQ (ORCPT ); Thu, 2 Jun 2022 20:47: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 DDA3C37AB1 for ; Thu, 2 Jun 2022 17:46:20 -0700 (PDT) Received: by mail-pl1-x64a.google.com with SMTP id n8-20020a170903110800b001636d9ff4f8so3482159plh.11 for ; Thu, 02 Jun 2022 17:46: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=CDG0Dqql0smjKxVHjhP7E2fId6LbaVT+ZKrP8G595LI=; b=lZPStq/q39E0gbEm18tiwJMx8Ded2JvdcBry6TyFOy/ryZJWOjTcZ2lgqop85bOQFG 2bjaHoCMv5ZxSpxzhfzSNgR+J93R1NGrYT6IQB/IhZAJPQHNg1Cy++HoksT/Ii00LBVa Si7X+WafczJ1bsAQBm2P0NX0PTqsgnOS7OZ9I/UFTFPj2aFlScqj8zWRiFsAlQqazSGG dP0EfzSubjVDr9qewrAxxCV71e8fMHSMUJCVfPlH+cdDBFbc8e7x/PuUEgiQo8EvSC3l EIZPWvre1U1Y9Q97nQ/s2ZBak5bqPU5QBPB/K2+PlojkTn2uwUvuPTn9b7IqXx0oue/Q jF8g== 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=CDG0Dqql0smjKxVHjhP7E2fId6LbaVT+ZKrP8G595LI=; b=7pYP+rOuySP4ejab3JH7MFkmmRHcA0HNDQG7GLnFukxVLJ9LgGLPbp3mPT6GdvsnVh aKTw3vRfx2lt4JNa+9OtmTswGAfhuv+J97wpbHf79hU6FNJOZOcR6kSqt7uOzu0YEj+3 IPzCD0uvLPSAAoHcL7JHLDfc5xoNhA/6nsGCnknVOPcyrwKDEfJmbNE13nnhX+IyX/DG O5fX0VDk3vsMNnWLE8Tn5VzpGwhy4PKEvnKwQoCLsC0/SOHQKbPY8j30vE9LcLCDsamD fl8nPY+Szs7vVG77ZHxhE287LSwnuxbQhmVdjBNfkIzPhAjA+cOBmE/dbiqmz35XQddA tKEw== X-Gm-Message-State: AOAM532hkQwtENJxFqahXGTVm7Nvdu7gMxDmcrq4yZ9bRm5dxs20xUwj mnQL6xgec0RYYbfji9sMaqjISKaQapQ= X-Google-Smtp-Source: ABdhPJz8TTOWujrLx+6Z8bVI33qd+9KUF9zLVfnp6OsoxHnBG7R1MNHjorTJWj0IRZ6zhL8r0xnU+TLgs/0= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:178f:b0:1e3:3ba:c185 with SMTP id q15-20020a17090a178f00b001e303bac185mr305582pja.1.1654217179810; Thu, 02 Jun 2022 17:46:19 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:37 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-91-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 090/144] KVM: selftests: Convert dirty_log_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- 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 cf426a8ae816..23e0c727e375 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 @@ -226,17 +224,17 @@ static void clear_log_create_vm_done(struct kvm_vm *v= m) vm_enable_cap(vm, KVM_CAP_MANUAL_DIRTY_LOG_PROTECT2, manual_caps); } =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 */ @@ -250,14 +248,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 @@ -328,7 +326,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 */ @@ -348,10 +346,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 " @@ -366,12 +364,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 || @@ -405,10 +403,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 { { @@ -470,22 +468,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) @@ -507,7 +505,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) @@ -522,7 +521,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); @@ -534,13 +533,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); @@ -693,6 +692,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 @@ -710,9 +710,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); /* @@ -773,12 +774,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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 539B1C43334 for ; Fri, 3 Jun 2022 00:57:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237657AbiFCA5O (ORCPT ); Thu, 2 Jun 2022 20:57:14 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51834 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240488AbiFCArQ (ORCPT ); Thu, 2 Jun 2022 20:47: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 7B36037A2F for ; Thu, 2 Jun 2022 17:46:22 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id z12-20020a170903018c00b001651395dcb8so3471719plg.12 for ; Thu, 02 Jun 2022 17:46: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=j2oRGZTZJq9/J8cOVK5ZR5Y8duHKABzHS/no78jTUu0=; b=ezwTq0nlReZAbiIYygUSO9uf0DSEi1ZJ0NgO1SXT0H6ckrO/8DVUvYYZjAaakpdNni IE1oLCWcRpz/Zo3kf1SFSUwJBV6uftU2sKD0KVi/RTRszlYp/xFkgOSnvQP7fKLHAnMa +VWiyL47udXyHpUvWqRIa0RYQvnEkFoGNpQXaeZ56eaT5PzAxD69gu1TEPvJoYft9Xkd li6uZle95f4rwG1Xi0uSFygIu0dp8xaXdXGO2rYUZR5VEEkHxXa9McYvjuQ8cuEN+ku1 Rr74BQoe+iDk/N52mFW3PACgv5ZUWPkFgDiJTCrsYWEz5nEfxf92bmzcMVgc2JotRxVa vIcw== 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=j2oRGZTZJq9/J8cOVK5ZR5Y8duHKABzHS/no78jTUu0=; b=mtySlFYItWnKTmJeVu+lAGN3T1pu8eB07yI8sbQaW0gcw4JW8n7VVFlfCl6p92DhCw iamlW0NxjAdjPqttwa4FVlX5swk50fz0jpe37qO3cnYej+NBTVVb8rH7rhqfZDXpBGlA l2OvW4rgzHXAilfcB0nZ+nZjuDWODYKpSor/OeB0yQUcS8eF0vHXkgBg/8Ys85GN6AR3 HURc9PqXk1ZkFP92Qhb7WXbp0uWDzzTODNivav1hBdy2ueRNZOcrJNFrzWm6Zv3vkSjZ Ao9Hp9RZwQeFr5/HVkqkQtzHLAvI/N1IJ8fnc+e+9jYMrUVobW5m4BrdxrQoH2Nr3lc4 4cLQ== X-Gm-Message-State: AOAM533E/3rluuJ0KLLFSPqcQdcT0GagvbvErEv3CfaVF2q0Vm/P/sGK ZEb6+djGRQddARJTXgRVd1jSyM+3Dho= X-Google-Smtp-Source: ABdhPJwL26iVzrX6K8Czn7FwNdZsPBShNdT2UcrtkNSyJxJuba62sr4QiXtrSVWZds8XjIjq+ZOVJu9OqAc= 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:518:96b7:ceb8 with SMTP id j19-20020a056a00235300b0051896b7ceb8mr7891151pfj.5.1654217181928; Thu, 02 Jun 2022 17:46:21 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:38 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-92-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 091/144] KVM: selftests: Convert set_memory_region_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 BF48DC43334 for ; Fri, 3 Jun 2022 00:57:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240540AbiFCA5J (ORCPT ); Thu, 2 Jun 2022 20:57:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48872 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240498AbiFCArQ (ORCPT ); Thu, 2 Jun 2022 20:47:16 -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 28C4E37BC4 for ; Thu, 2 Jun 2022 17:46:24 -0700 (PDT) Received: by mail-pg1-x549.google.com with SMTP id f9-20020a636a09000000b003c61848e622so3069445pgc.0 for ; Thu, 02 Jun 2022 17:46:24 -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=tGuVl6tntArh2tnG7FnL2hXy/yuRZwiGeL9ZM9ylpR0=; b=kY0iuNBBiBxX/R5KFQAmMyvcdrQryiVuHG5Vgb1KP+hN1UZ2Y82vCLyrpAYQyEP1W0 uOWn6c9NKDISCL270I5EFeLw6oI7/dig3TJVoSD89xIBfFHI0tBoqcHX7Rlu7gvzxhR8 J4QlzLbGjFc/ty/QA5VQmtDs4meo/WuprMNCQCT4hOLo/zIlOueBVhRIi7U/nUwOZlGV 9UpFX1O+jIYwbSJI8dnzrch6sIusTBA9ge9AFbXycJS6mEvF5Kg2aUfqCKIRW9c63+kt 1Z0oLus0MUC5D+5xIzBUO9UfCTJlVAsuXAa1liDPVEFWkE2FxqMLQdcrbbo8/2VrtY7P 5Q5g== 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=tGuVl6tntArh2tnG7FnL2hXy/yuRZwiGeL9ZM9ylpR0=; b=q7Cu/xphT70ey5wmgtEIAvHl005mSM1cU2aqtUHLG0q9hpd9BtXGs5F/uKRQkZXtKL ia/mUDPK+6BmQ4ngZWMcMaYib7C88a2xqtwGPNL1OHJTxS2MdfFY7/Jr1EbgeuOiJSKu e457oY21Luf1dr3XYrIoPObbyqL//0cEZUL1B+giK0Sb5B6tCSkYOOxOWWs8qnD7uG9b yiKhFV2IIbPNNoGpb+ZkR/kAOr/nikZgbH1HJmCrDGBm3yZ1acRHoG6CpJDOPlgU8nek 4YqjMZfBRu4C0N+IDKWO/kgf3xFmeblt1gTEpP3zH7vNbdNRhhXKFfzwCE2DkVwIc5eP b4tg== X-Gm-Message-State: AOAM5324xnPk0Ytu17gguJYHYogkzkgMHXn0j62wSwIptst9dodz9rXu CSDf328cpHUsriq/RGADkD3ZuHAMCtM= X-Google-Smtp-Source: ABdhPJxz82JgSIO4gwDa7BZPvKzVGqA7M4Jd00ovnGR5lwwWg3Kryf0NBbRF85uJ6Kv0OfWIMAbU8El8R3E= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:6505:b0:163:b040:829b with SMTP id b5-20020a170902650500b00163b040829bmr7499907plk.173.1654217183604; Thu, 02 Jun 2022 17:46:23 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:39 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-93-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 092/144] KVM: selftests: Convert system_counter_offset_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 AB6D1C43334 for ; Fri, 3 Jun 2022 00:57:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232570AbiFCA46 (ORCPT ); Thu, 2 Jun 2022 20:56:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48780 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240504AbiFCArR (ORCPT ); Thu, 2 Jun 2022 20:47:17 -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 748AF37BCD for ; Thu, 2 Jun 2022 17:46:25 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id c4-20020a170902c2c400b0015f16fb4a54so3467225pla.22 for ; Thu, 02 Jun 2022 17:46: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=dFTXZyKLCe2rmfpw6djiOtrp0qdJVfykNhEs/JKdN3Y=; b=fluQjYwJvqacnX9HyUJcT+kV2bAKhgIxjfZXnsXL2G2O7umYOTa4Xk2f9cnSjB3M/S YBvAx7JunIlPwktx1ms+Lr1C/K8b0XvoJRdGADwJmytuXgP8l1WhPwxfhg3bPGAOfAdG mi54x1FAKC8CJ6/Gkt2N9tgybWOf7AH0IgcRH7fStk7PuxdrOXEU90d4W44E1Kd1fYJD ZuxDzQ4+t4wWakbMxH8aSLsqvc7nKR1q6CDTLZAlcQjSGMW3sIyqETQSBXxPUmQGuETp tgRQzhA5mcDUiBIW58kN2z4fYrdBZO6+GJ+0BGhQlU8REFIPsySjfNUIfewfV5cVlJP5 r2Iw== 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=dFTXZyKLCe2rmfpw6djiOtrp0qdJVfykNhEs/JKdN3Y=; b=UidgONNSQC1gfYWkTEAIR9+eOF9767aBwsfHtuHsujv5OMmJUF/Jro5ytTqAoqAtNU 89JubGujlzKZNkUiy5tXyu+y7C7t98o31gVdIW9gmjf+djXtqhyi0k9/KBg6pAuVTgDT 9bYjzrecElFwFtswjXKDoANNGo5DcSN6oy/Hv75GskduSR+35ZfTh+G+5Pk5F50U4Ix9 2hN19e0FDqw2NICRhBZsRiXUabhI/drJdeQFrNwYTwVUdpvkpy2yPb4422owSoyczZqj Ka7ch2Mph+gFrK2jIyN3zbdz4Qoh3V9Ie7dIY8RNgjH/A5/73WT0Uie3GxgIxPR36ThK uC3w== X-Gm-Message-State: AOAM531BwsWm/gchyk32YC3pAs+Z7TAHZk//6WGouwT3ZPcfZhA9dcHy S0kHQRVmJOl/oHBIXSUoGWjplD5oogE= X-Google-Smtp-Source: ABdhPJxv5mzLQA4WNtxhe7cYClH7VsUnf7TK1tSZ9vb0b3ZITWviuXePFmF04G/vp96nBrHEAIgX/gPfTV4= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:6390:b0:1e0:a47b:a57a with SMTP id f16-20020a17090a639000b001e0a47ba57amr42517476pjj.115.1654217185119; Thu, 02 Jun 2022 17:46:25 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:40 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-94-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 093/144] KVM: selftests: Track kvm_vcpu object in tsc_scaling_sync From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 B5BABC43334 for ; Fri, 3 Jun 2022 00:57:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240289AbiFCA4f (ORCPT ); Thu, 2 Jun 2022 20:56:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48764 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240509AbiFCArR (ORCPT ); Thu, 2 Jun 2022 20:47:17 -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 96C1937BCE for ; Thu, 2 Jun 2022 17:46:27 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id q62-20020a17090a17c400b001e31a482241so3403256pja.5 for ; Thu, 02 Jun 2022 17:46: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=WzL1H+FJi0iT34F2bc/92yeswCFE9kGfAWNofTgrOJI=; b=oL5GDgYRYEbXPwWaLr+clEti/v+XZ2Lly4lvT/f+YCO69FwBVSKVrfCuU2h39gqb1Y c/EEdh4JlJ5yt3HhAvJT/Kwf4y0N2+fnCiMhtaMmbSnodX9ipW9Lm4TYJK36Ph9hdl4C Dr75XDItsnOTLUincucEirXi2E2Ar3DCH6LkylzdUXJ4wLt4cd9gaFnbXtsEzzz0RmHJ dCMKUPweIKOx2SUCPaFAQrR0R2p+ELU4dtAna+iXiEJyTkoko4BrceFehGA1ZegJbt5i lfCeEwitdKylUnyPOBOWikVABdpJMtX/EqzxORK0nJOK6Y2oyQuryOItxSaPmnXhltKt 5faA== 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=WzL1H+FJi0iT34F2bc/92yeswCFE9kGfAWNofTgrOJI=; b=RSZHWXQxzpW3IG0FNU48OZF38h7/oSfe391c2UudZIrwybt5co0Y9rAoBNeji5YUlg ju+5FCBSO2gubFfQkuulmZcLMfIUYbFLGGqlKbwOmBEnSudBAe+/XQrtloIO/yM7i3dK n9dp7VEDqacNOKMNNTFDk4UsnU2ZAPIyJAIcxuExdhCKXD/wjybqF4B/hpYhIOY7RixU rQ3KWToE0NFAlyugoC/T70i0IZOQv5jrHsRl5mXjwjp4Q7u5ZCnyruavFR37v7balg7+ wrS97ZtwMlGWYi0W4WLcCjUhZWbBBx+P+fE0tt/BFsSEP6bB/nE4qh4rC5jrRULhR4eJ kV5g== X-Gm-Message-State: AOAM533qLxo6DWA2Y7dzlO0iOOuNaDP5ZVraKGej60i405N7KHNY4OYd o3RO9lCdf3QdrnudU3n+2D+ptYP9Rys= X-Google-Smtp-Source: ABdhPJz6Sz+KXQhSdj+O57Tf05dMEf1VPn1WdoAzjtHgGhmehPuNcRss1vg9YubMVkOD5u3f+LU/ul6xCA0= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90b:3805:b0:1e6:85aa:51b with SMTP id mq5-20020a17090b380500b001e685aa051bmr6516686pjb.182.1654217187106; Thu, 02 Jun 2022 17:46:27 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:41 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-95-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 094/144] KVM: selftests: Convert xapic_state_test away from hardcoded vCPU ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 90910CCA47B for ; Fri, 3 Jun 2022 00:56:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237005AbiFCA4T (ORCPT ); Thu, 2 Jun 2022 20:56:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48784 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240520AbiFCArS (ORCPT ); Thu, 2 Jun 2022 20:47:18 -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 5A62537BD1 for ; Thu, 2 Jun 2022 17:46:29 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id s204-20020a632cd5000000b003fc8fd3c242so3055057pgs.7 for ; Thu, 02 Jun 2022 17:46: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=O9z5OCEb467ZbVZHbJcf5IG27G4WEK+6SdTj7Frn6ss=; b=Tz/OHaQUbmHyXU0TwaoYO6G9b+QzS5uNfvu+PnqZBXh2jiDYGMlVGVSXlI/zA4BK3P JbkLgZcR40bDTJg3PfatF9G+MHQ4wOzcTOxG16BGeKOSpqrJyCsWGMJIcbWIu15zu6i1 mnOPtWmB5IVs6vACFWM8J03rIWwOGUTMPe4wMoB219vX8dG9+qO/3oRPV8rypmyOy7Rr 4LMgYQX+mzFkOAUBEcOI4nPvHVQ0GqQmGQDhNXsweoRz2LtOtiBEwebbpdGmBnOhZTUy Nv7L86v33kHybG5ro47jnCW4unPzBZxDPwkpI+cepaaot/iABX0n0aoa2uvS8SBiJGqH 4n5Q== 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=O9z5OCEb467ZbVZHbJcf5IG27G4WEK+6SdTj7Frn6ss=; b=RzE4dzf6Tiu7OMB46LiY+iOhcSAF61ttIXAPggi+5Zlk21AdKHHLId39Gdx/AM0E5n thJnapdIZzwmbIRv5B521bh+YQQ7OFDHVglKnqzBbwxuN5QK23FBamt8QbLFqmhtwTnz v4KQHxY7ggmD3DuzBKLZv+S7T5nQVru2xNYC0Q+rUPM0x5EV1BAsVVMixfT3OGlKO96s 8rlCNY95tc4buy0SPJdFPHeDK+QbXO5WhbrXlnpwyL4ur73dFn1WGeCmr4Hd3OfPpCZj dQjc2hODyMf1md/BbKmTbyMTM1UEVsLwASvfJKQ6fDLNko3IzJDSy2aKuvNJYqAaO0U8 xNqw== X-Gm-Message-State: AOAM5306uRqOz8jKQtELdyf07phx4tIB6q1LRk/dHwVWep9HDUDj9Fp2 eSdinHBaV/awSfm8UvABbr9ac8EPmo4= X-Google-Smtp-Source: ABdhPJxDsx6UvBtsJofMNd1XygyxMgqxc64JFFMEkRk3vS9zTRqN66znWSgWelaM/nqAIerVPDfQz5zNaAI= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:aa7:8895:0:b0:518:9fa0:7da with SMTP id z21-20020aa78895000000b005189fa007damr7766436pfe.48.1654217188843; Thu, 02 Jun 2022 17:46:28 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:42 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-96-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 095/144] KVM: selftests: Convert debug-exceptions away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 BA7A6CCA48A for ; Fri, 3 Jun 2022 00:56:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241471AbiFCA4L (ORCPT ); Thu, 2 Jun 2022 20:56:11 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48904 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240525AbiFCArS (ORCPT ); Thu, 2 Jun 2022 20:47:18 -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 6AB6237BD5 for ; Thu, 2 Jun 2022 17:46:31 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id f2-20020a17090a700200b001e6896fbc14so1622510pjk.2 for ; Thu, 02 Jun 2022 17:46: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=IRoCVqv4AGV0w4b47hD/RBw9j+ld7xWuAgNqbC9za8Y=; b=N0XoHp66jUsIf2FZke9OxI1+maVnwfsbXtVYQOXMhAnhURTHeS3ULonBf35YQthk7L +N5gE6zvXDVAW5hjLRe7RaKVTjVoFFN40tcdbCxS4cSjnWO+hbtziaA4YdY6DjAH+2TK vjFpLzQn13w2vpVI65tjSJ9eagQc4fM1OC7gQLbn52w4nd6o5jx6tfxUxQ/su6BNupRC YPSaTOf6n6PrI/CLnDv6sIxQDdk2zX/fOTrGrPEO+7u/9jiILchIu6YItJf+iVtvEyoA EHvoyrTDidiDO3CxfLHcpuIpTbuZt7tBQew3KqKUfnQw2oxCLY0ZhCdrVmIFq70C+T+g AUMw== 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=IRoCVqv4AGV0w4b47hD/RBw9j+ld7xWuAgNqbC9za8Y=; b=hsypT9v8W5XiqFetIpx591oiojyVdEueSIxv69KLo2IZ6KK12lWAOEwdTYG4ydpwo4 dCrCG0oInl2cfsPcNzGah2K7FhSXOUcAaoHcPYOLIBpV0BiFwrVuKA+ydbo3KysDRsxI ayXNu/Y1rY6JBcOro3qeUw+2mk0DPukfatcOtWWBS0ig8JdUEPxNMr9btFV9568wPDvc 9TJaQkOHpDmla9oP5u6klHIiHZITOq83Y2d3Sp8P+ZPuIrDG0FvMEH1QE1fae2pjGCrc QDOr1RP5iZAqsCkbnMreDYocv/rYK1GVIjtYabKdi6TwKOai8J2h/hPW9mp+RFThe9/7 1pcg== X-Gm-Message-State: AOAM533e66ZM0r0WIJ1u1+iFZY+lpII/b99f9oQvCK4lPWVyziM8Tohs d0QP21HJvOiwj2AajY/VEd+AjapQOII= X-Google-Smtp-Source: ABdhPJz7hkT62hXVx4MA/mDi13XMW7mRrf3YE7KKEcAV5p7/lEdCD+PN8/euDGKoZYFacjln6vZYn5uOUk0= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:249:b0:1e0:a8a3:3c6c with SMTP id t9-20020a17090a024900b001e0a8a33c6cmr307318pje.0.1654217190501; Thu, 02 Jun 2022 17:46:30 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:43 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-97-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 096/144] KVM: selftests: Convert fix_hypercall_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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 81f9f5b1f655..108c3f75361d 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,25 +121,27 @@ 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_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 vm_enable_cap(vm, KVM_CAP_DISABLE_QUIRKS2, KVM_X86_QUIRK_FIX_HYPERCALL_INSN); @@ -153,7 +151,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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 27ABECCA489 for ; Fri, 3 Jun 2022 00:56:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241587AbiFCA4P (ORCPT ); Thu, 2 Jun 2022 20:56:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51714 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240527AbiFCArS (ORCPT ); Thu, 2 Jun 2022 20:47:18 -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 C678D37BD6 for ; Thu, 2 Jun 2022 17:46:32 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id ob5-20020a17090b390500b001e2f03294a7so6393711pjb.8 for ; Thu, 02 Jun 2022 17:46: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=JNl4YDZeDC/DAya2zgAaK1eNcn9l1r9aiAjPcWHarK0=; b=tKwHRqW5S8zqURTIxf9N8fzIHxeWgD+nsZPua+D0RphuvwAEo8wDA48mKIl5vHDEWZ PKmq1G9UxQOAw87rPOHDx3cO/0QtHhKeFYC+Efsksv2lKelkOH+XO7RGTGA/Tu6wkaKb nKH2JUHyWiPNNzxfzni1kngCX2Aw76wk3InGZ/UWqwtQ+ulOH316rGeAUVx5d7XsBCHY BhpXuznmxvPmNc8G56hMZbOpPOSN3tsB8sKqIgPowckrlO3wcmXIPjy7FL6CQOrjxT3y inKber98G1ZEsNpMjaHNKzhO5vt2veeV3zRvZ6Koe92G0e/ojcl5lvWDjlrUcBD+f6R3 uLFg== 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=JNl4YDZeDC/DAya2zgAaK1eNcn9l1r9aiAjPcWHarK0=; b=0Ik73gvhyNH8Imy+faBuMtaMTA+5lIt30ON0jmLzA1vI7osJN2+oYXABs6+V+6ShBE r3R51BVhHM/xDCKnFQygfDiEftysA0yeKJnfbQgpxOe1YUgG5Ep+fLovjOhmPs87hNqj Jg7lba+LhtmBLhvCs2L3j0Uu6JukN8lk8eGEzGGFQT4e9fJS8qVKvda2mw16M4F36iyl t/xHAJgDJKvQ6xWOaky/TIWZq9oBLFDEPhyr8kHDgGHArUKuy8EnLWPxylIUdngbxVMP 60bMQcIVsgRlDWV6tcleR4aNSBrGvgcGZB+lYtDRUKV0Q52zdafXVl4n1cGaFnBvHGrk gw1A== X-Gm-Message-State: AOAM530pXsLHlFvIzeWkuWJafL1ZjNMjWXRCyHbr28Bpb+HAfCqeezLp Pxqt7rUewVDrJcBwF/r2ZkgAdhPyfCw= X-Google-Smtp-Source: ABdhPJzzXzUNnn7E22mffMQjrqADvPAhRha25ajAUxQ8kcIE20OX6C/Jat6bf+PORM88hpEDGlIW/KPi+qA= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90b:2241:b0:1e0:84aa:52ca with SMTP id hk1-20020a17090b224100b001e084aa52camr42917188pjb.100.1654217192508; Thu, 02 Jun 2022 17:46:32 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:44 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-98-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 097/144] KVM: selftests: Convert vgic_irq away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 B3487C43334 for ; Fri, 3 Jun 2022 00:56:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240000AbiFCA42 (ORCPT ); Thu, 2 Jun 2022 20:56:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51674 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240526AbiFCArS (ORCPT ); Thu, 2 Jun 2022 20:47:18 -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 2F6C237BDB for ; Thu, 2 Jun 2022 17:46:34 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id o8-20020a17090a9f8800b001dc9f554c7fso3522317pjp.4 for ; Thu, 02 Jun 2022 17:46: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=+G2Mc4uEcLEuvE511QGrYZMpWnJKj8uJhsUqAFoxTaU=; b=EBLFg8LOEt1v0b5uPUhfA/B0DzhK9G1oKVuAkjEz231j2/rvpCjYbhxnr5eI2uTCpm EVEtevDkYmRjSs5HF+28JrrFY0iKWrPfZ9x5CTRqrRtdYei/6tMu2a6rUh3bNERJV6gJ 1opPS19FyXErT41xNTCistoenSWK/CKJVUXomQrc6xnNx/7ZJKQX1GL4oQh97/2KvITt mMG+/ajz7BdHnzsaaFTE/YhdbcT2hljQpifggYUYszNeoNQ75aGvYDdcPvwCASW0hs7X 06vz263LGPlW61tCaUdpNrcnXU99u2H8Kc2tPNMudf1BnUY9icW3l0Eva7EA3eyNFRQp PChA== 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=+G2Mc4uEcLEuvE511QGrYZMpWnJKj8uJhsUqAFoxTaU=; b=LjRQxJqDpDXPpML32/t+PyCjVjOZDB7RO307Wi+raYl6/nbYG2du0aLU7uQc5qBngX paDyfnxnMPx93hFSBG3s2dzL762pFRQtEnMYotBRd5piQ5A6318DU3n1soOphSu8j5CT PVQusT4MF8C/TZNsHfCKpS9AuV3xG2sXeMICMFbz17zFs0Mbe1ZMzzEgKrxoaPLZYCj3 QFlW5W7TSBk943VGImK+8475J2xII7UalR/eGvzQaDVOdm9xhoEZaMrXzqEEk+NDf5t7 nAvWFvDjF7QvKi+GnvB05MtgE+pnLYzydcRrrb8VfNEcQfegdHT6rBL6m9Q9btr61rz6 Ehow== X-Gm-Message-State: AOAM533X+1woqqiQ7D6LCl4FsDj0hhzE3vfoubo6oaz+3fM4/beRBOIC TXQXniLNXZ1E7srCipudqqsK/HWZJCc= X-Google-Smtp-Source: ABdhPJweTcqTwf2ATxClTWmQRZJVLDRFJGLzBz9z4YK5OB+B7IeRWYC2yi9kbkHYoqLThNSOHLiFf9AQvjU= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90b:3841:b0:1e2:f16a:a117 with SMTP id nl1-20020a17090b384100b001e2f16aa117mr27262446pjb.130.1654217193862; Thu, 02 Jun 2022 17:46:33 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:45 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-99-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 098/144] KVM: selftests: Make arm64's guest_get_vcpuid() declaration arm64-only From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- 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 59ece9d4e0d1..4d2d474b6874 100644 --- a/tools/testing/selftests/kvm/include/aarch64/processor.h +++ b/tools/testing/selftests/kvm/include/aarch64/processor.h @@ -207,4 +207,6 @@ void smccc_hvc(uint32_t function_id, uint64_t arg0, uin= t64_t arg1, uint64_t arg2, uint64_t arg3, uint64_t arg4, uint64_t arg5, uint64_t arg6, struct arm_smccc_res *res); =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 fbc54e920383..d94b6083d678 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -707,6 +707,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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 A936DC433EF for ; Fri, 3 Jun 2022 00:56:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241443AbiFCA4E (ORCPT ); Thu, 2 Jun 2022 20:56:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51962 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240533AbiFCArS (ORCPT ); Thu, 2 Jun 2022 20:47:18 -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 92C6137BE1 for ; Thu, 2 Jun 2022 17:46:35 -0700 (PDT) Received: by mail-pg1-x549.google.com with SMTP id q195-20020a632acc000000b003fcb9b2b053so2381439pgq.4 for ; Thu, 02 Jun 2022 17:46: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=TzsVyQIK/O28EG5/tdwYmklCNq7nGiihsFz4GFTB50s=; b=cLt/uhXB96LpU36y2h1pirbmPq6hN1+4AyLY/fXuOFMZ8+dnUTZuQe8lsQFcee6DHr SfF3icgvJRo/hPhSS1oOxKJVzwBpLHJYHax6+FvrXytfEBdm9AiPTCFNU99R8L8PzRhY F3wg9wB50Pn+KvcKxxbvQXw7BrhqUPEKYmKpbQzgkp9Nk+nwdL6dBqM117vzfCtG6bjs WcJy1cxv3eak/fgEfIXS1D+ivx++ZCJ9l6vLhQDpWvylyCOS6xV1SGVQGYUKavMQchYl GtzjY76G8sKvA5v+tzaVjU/8ZfD9qzYpDmE4tGmkwRXs8EjqI3C+ud0ASzwznxCnvHj6 cSoA== 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=TzsVyQIK/O28EG5/tdwYmklCNq7nGiihsFz4GFTB50s=; b=yGrN0luedIqhMFj6pmsRqN01rlk7RRCWO7Dy6vP6eOCzwS9a6MZQQUhiZ/8p6tYttZ +Iy0HoOl3SySelbtHhPowDiWXkiHvMW1BadS0r4D/8dmoOKLL0SyGKKLzBqZwxge0Ifa LHsE63tKQINC9FNZ3ipE+8TbWbfwzsAhBi9HBLmcZNEZVF51pQ6sbpsbHg2ERFZ7ngvJ xIeuB/9gOp+rM7AV/24gd9NiU2fp5wy904zYXT6OB1S6QUYK9mjjR+92URngfi0Q9UF/ iJfvkZrvSjkwOy9fM/SL2aY5R4q4TNbt3TcZyZVJ6VslSdkRxIWle0Yi/Xl1BDxppuq+ Kxag== X-Gm-Message-State: AOAM531xk6XYbOgMU0DCC7TU78CJ4wNf1Arx/fV7prSzCjGgMAMYxkjO pjvJG2in22sJwgpTQkrqK/ABN9tReNc= X-Google-Smtp-Source: ABdhPJxKA8IlkmPHgyiTRJyZ41ym7M8uaV1l6J9PmL26g+Me8IDHs1NRI2EFwhgbqL9wHJMeePZXkYasBAc= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a62:868c:0:b0:51b:bd62:4c87 with SMTP id x134-20020a62868c000000b0051bbd624c87mr7619847pfd.83.1654217195407; Thu, 02 Jun 2022 17:46:35 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:46 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-100-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 099/144] KVM: selftests: Move vm_is_unrestricted_guest() to x86-64 From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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 d94b6083d678..5426de96e169 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -667,8 +667,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 1d46d60bb480..895d6974f7f5 100644 --- a/tools/testing/selftests/kvm/include/x86_64/processor.h +++ b/tools/testing/selftests/kvm/include/x86_64/processor.h @@ -526,6 +526,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 8348fa19690a..5f0030257b05 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -1948,39 +1948,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 5c92e96300c5..67b9fb604594 100644 --- a/tools/testing/selftests/kvm/lib/x86_64/processor.c +++ b/tools/testing/selftests/kvm/lib/x86_64/processor.c @@ -1358,3 +1358,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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 985E1CCA488 for ; Fri, 3 Jun 2022 00:56:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241399AbiFCAz6 (ORCPT ); Thu, 2 Jun 2022 20:55:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51974 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240538AbiFCArS (ORCPT ); Thu, 2 Jun 2022 20:47:18 -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 9682937BE3 for ; Thu, 2 Jun 2022 17:46:37 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id 35-20020a631563000000b003fc09751ce5so3042248pgv.10 for ; Thu, 02 Jun 2022 17:46: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=xV0OiLRCHqudRNEysLkkO2A2dnBTdPUxCAZlFyVIwps=; b=dEnAKM7xLzaZZVb2euUZW7T1W7QtJ+y3oL0XwsfKifi7vRFVpm+WI+vj58SRZaKjjg RRYB68BvOPoSJnuNcTu/iALbsCgLufgUCBP0F04IABAIETTkkTfGxmHmhyIIsVxlItSY RKyaT2PwunfBlJ37KvTSpYcpUcBatajiJHE12r672csUqBxcCcl2tbYrXNSBZAl6v6dd 8BNDcyLdWgK5l/uoZqntWYvxA6uKj1lEnnOXhCNBkX74sQiniRuUZ98oJ9PkbIkjXQDL JzIhpVsQGbj43N9nyOOE6WNDKPTXk9Hy6bVxCNqGUhSJX3aAxm1gtx78haMs211Rf8PA Pdjg== 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=xV0OiLRCHqudRNEysLkkO2A2dnBTdPUxCAZlFyVIwps=; b=qXdK+XegGYnnLQMLDhajAHsVjc+ZRt0CxcmEUW622KYTuCboiisAY8whfuDbSu0qC0 1A6UJZjwegxCqmeKG7kCRaOWq6hfYlShKIEA8cOIyxjYLTovVloxaFaV+xPqCTdgpoXz 9m7TNgVAmd1hyPFVt1d9v7nRGCwYF9l6xxIqCoZyqGYmltw3D4YgkXwr72H3W1XuW6zo DoyaybTmEr6X/w5DYPOqE4OWaWWF7vaDiexx5w0/lrd5coKxuF07TRcGhQlWoGPzFgFh C7kk6wFjIUExuLPE4gosfYRwfqy3A3wH7WchjN2HzXRitZ3LoUIUGaHEsfjaCDyo93XE 3zaQ== X-Gm-Message-State: AOAM532eQQupFOISlFjpXzajb7yeJhPg67tpSPC7K/pXVQkc29vPvUpu 69ReXmIa2hryM1AZ9y6xXZ7PcICPBh4= X-Google-Smtp-Source: ABdhPJxoPo7NyZsR9Ehgz3xRJi4kvK0cVqDPzT9MsPPKWvSY8AKEzWIErjzCR+wJ+QSU76O9YDwXlaAyExs= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:aa7:864b:0:b0:518:796a:f9bb with SMTP id a11-20020aa7864b000000b00518796af9bbmr7764802pfo.9.1654217197246; Thu, 02 Jun 2022 17:46:37 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:47 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-101-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 100/144] KVM: selftests: Add "arch" to common utils that have arch implementations From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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 5426de96e169..c7abe48d07cb 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 @@ -291,25 +274,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, @@ -336,23 +300,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); @@ -569,26 +516,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, @@ -657,16 +584,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); @@ -705,4 +622,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 2e73853f485e..d14579176e52 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 5ee8250dd74c..d70d5a4c5ad6 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 @@ -274,7 +274,7 @@ static void __aligned(16) guest_unexp_trap(void) 0, 0, 0, 0, 0, 0); } =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 67b9fb604594..b9201760a662 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; @@ -874,7 +874,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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 768FECCA486 for ; Fri, 3 Jun 2022 00:56:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241237AbiFCAzp (ORCPT ); Thu, 2 Jun 2022 20:55:45 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48786 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240555AbiFCArS (ORCPT ); Thu, 2 Jun 2022 20:47:18 -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 D7D7837BED for ; Thu, 2 Jun 2022 17:46:39 -0700 (PDT) Received: by mail-yb1-xb49.google.com with SMTP id v127-20020a256185000000b0065cbe0f6999so5527608ybb.22 for ; Thu, 02 Jun 2022 17:46: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=nwpIHFQX6bIx9Rx7ondeFtBzA5WapdNNWqy57e0aKA8=; b=FyIlQRwPfmqKsqrE7quDcR8awWT3UmsUImPooyFlHvhqVsIaqTGDl0Gh980dbCxf1Z Ctu/k13cV9PWMYw9MUHgipu2xMt1LBxP6Jt6hW274F7I+956ZJYEweceVqSCTJn+WyQv ZdlW5EsdlEI7zFjwBhgpBzzc1R8TygaA/JQC+0O2wwun3FddRmjq+PR+OohoL7stax5T dZVCG5pHSRCzdMd5lPDlh0FSH3+bFzsk/VQijf+532vtwsfzkEtrzepnzM2AHHsK8N2p k9UCiyJcQx0PMB7YqQ2D1MIhJ7Ba9jH3wYnZba8HwKyhwPRUUFz5KE5B3SPYKTInGA5W olkQ== 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=nwpIHFQX6bIx9Rx7ondeFtBzA5WapdNNWqy57e0aKA8=; b=M3bU0tubSPPbvekl4Kl5MwYEpCyYL0fs9+IDVE7bTAtv1iXxhJ8eGf++AUqPbL43Tv +f1fdpJqFo2C0XljqoY8/oZ4m8PjrCZBHdrvIPiT3klHTtx3v64u8PReEAlSm9vlhGC8 mzM3cnqmzuDO7zvFhqJZqO4v5aufnO0LuaO7r+vc56yal5oJg57t/qTBfSObV5YLZX2D d4Ijmta1dlivj3jE6aFv5S5Vlcb5EGw/CuNlIlgHpxSDYMnPeMG8PrLb7tOm3lZtHeTu x4AZyIcZOuqP/9kl7Q7bxyZaA+iS0VcPsOZsGDvZ6CreTamBJRWkertfjBiRtRwqi6lV CYIg== X-Gm-Message-State: AOAM533Sn5XRGYaAKALGN6qJQ+CZ6+uk/frQpIzzv0sUeHVV4JKxLsiL DC/FHU1er1OE9feqxh4DqOY/HOT1iPE= X-Google-Smtp-Source: ABdhPJwbX/4lLeY45UQYNLQdpSJFtAZ4e2m/6f5C1L1zlcmlgPsqQIPsB7anu1wZK3xwZiOZmvMlPIwoah0= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6902:1285:b0:649:ae47:176a with SMTP id i5-20020a056902128500b00649ae47176amr8447218ybu.40.1654217199104; Thu, 02 Jun 2022 17:46:39 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:48 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-102-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 101/144] KVM: selftests: Return created vcpu from vm_vcpu_add_default() From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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. Opportunistically rename @vcpuid to @vcpu_id to follow preferred kernel style. Signed-off-by: Sean Christopherson Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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 4d2d474b6874..9dad391b4fec 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 c7abe48d07cb..622b09ec23dd 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -656,12 +656,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 d14579176e52..2b169b4ec29e 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 d70d5a4c5ad6..5946101144eb 100644 --- a/tools/testing/selftests/kvm/lib/riscv/processor.c +++ b/tools/testing/selftests/kvm/lib/riscv/processor.c @@ -274,7 +274,8 @@ static void __aligned(16) guest_unexp_trap(void) 0, 0, 0, 0, 0, 0); } =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 ? @@ -284,9 +285,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 @@ -294,23 +296,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_unexp_trap); + + 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 b9201760a662..8255042de0d0 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_mp_state_set(vm, vcpuid, &mp_state); + vcpu_mp_state_set(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 96455ec6ea48..8b034a8617e1 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 @@ -343,10 +343,8 @@ static void test_pmu_config_disable(void (*guest_code)= (void)) =20 vm_enable_cap(vm, KVM_CAP_PMU_CAPABILITY, KVM_PMU_CAP_DISABLE); =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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 885DBCCA487 for ; Fri, 3 Jun 2022 00:56:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241333AbiFCAzv (ORCPT ); Thu, 2 Jun 2022 20:55:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52046 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240449AbiFCArT (ORCPT ); Thu, 2 Jun 2022 20:47:19 -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 A79AD37BFA for ; Thu, 2 Jun 2022 17:46:41 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id d12-20020a17090a628c00b001dcd2efca39so3409457pjj.2 for ; Thu, 02 Jun 2022 17:46: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=TZYxxynXHC/vdgHYiFnTkVVG3+wGviuXEMnIuQ47b80=; b=YelKkGplq7prcLWfweU59tKSFgbLohX3lcoIf0muyB5yP3liX8mvBqSfSH6HrPFw0o ReclQ+KvtfZnmxFfpP6glMAtV8ZWuWOZStKK7KzIqpClE0V1xTFYH7hHi8LKBCn2SNlV h/yxToVrhCudbRVGqdZRd3Z8POu1XmCUgt0JjtmTJi41JiH+nHW2Lncrvr1PcpdNlyaB xyu+fn3LFbSzW/0fgZXoRO0xTvbLIq8XLBhcdFqRBhIPsMnSDO5e49tj17cAiKSnzIov 6nLpqi4vX5IKZ2iw2K6MDRDZSnZwD7noUAotQsIaxd5aH2d42Whra2wI3WM6kEfF4ZUj rmPg== 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=TZYxxynXHC/vdgHYiFnTkVVG3+wGviuXEMnIuQ47b80=; b=uC+zh88YIpXpFAWA/ZVDqunkMaeL7hBlpADIAgJC7KSbe2D7LhJGIJeBjOzcTKRWv/ QXJDsZwphtRvzhwdq9Y4n+Uskj2hVP6RaDiBjjGQx8Gi2ILL/Fa8M7fa7HW+LkjuSupc czvrV66RRHR2ufqpb4GMkzjq3YLK6bs5ocergh1RLXSW0tKeA3XweW3GGuoyJjnOuED4 WrhAUxHGMrH+208XaTw4f1EoiX1k0a2TIdIg++W7yUjpSJfNk1OSKlLdxTO90r1pE5G9 ZdWLVohvx4XBnOa//72HJHyo7/6++lRs2iE9O9uD87pohlTrklSFHnaxGhoEKuNhwjnu ycAQ== X-Gm-Message-State: AOAM53226EVSZaJF4+1cUlTkkUTzjNjuUayog4FLv3lU7MbB50JZBoAd L3YSBBGfJm6CgpLk9arppVVE/khACFQ= X-Google-Smtp-Source: ABdhPJw4+p8236APuKVMcPNpWUJceDZHECVL5tpvwAAgLULY3bhQU/a3606fdd1HCH2cMDL311s7IFkSRVc= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:178f:b0:1e3:3ba:c185 with SMTP id q15-20020a17090a178f00b001e303bac185mr305586pja.1.1654217200943; Thu, 02 Jun 2022 17:46:40 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:49 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-103-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 102/144] KVM: selftests: Rename vm_vcpu_add* helpers to better show relationships From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- tools/testing/selftests/kvm/aarch64/get-reg-list.c | 2 +- tools/testing/selftests/kvm/aarch64/psci_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 d0c37a1b2a1f..a8558e462efb 100644 --- a/tools/testing/selftests/kvm/aarch64/get-reg-list.c +++ b/tools/testing/selftests/kvm/aarch64/get-reg-list.c @@ -418,7 +418,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_test.c b/tools/testin= g/selftests/kvm/aarch64/psci_test.c index fa4e6c3343d7..347cb5c130e2 100644 --- a/tools/testing/selftests/kvm/aarch64/psci_test.c +++ b/tools/testing/selftests/kvm/aarch64/psci_test.c @@ -84,8 +84,8 @@ static struct kvm_vm *setup_vm(void *guest_code) 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_code); - aarch64_vcpu_add_default(vm, VCPU_ID_TARGET, &init, guest_code); + aarch64_vcpu_add(vm, VCPU_ID_SOURCE, &init, guest_code); + aarch64_vcpu_add(vm, VCPU_ID_TARGET, &init, guest_code); =20 return vm; } 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 f10596edd8ed..f8d41f12bdca 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 23e0c727e375..1a5c01c65044 100644 --- a/tools/testing/selftests/kvm/dirty_log_test.c +++ b/tools/testing/selftests/kvm/dirty_log_test.c @@ -676,7 +676,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 9dad391b4fec..f774609f7848 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 622b09ec23dd..2c7a8a91ebe2 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -288,7 +288,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); @@ -659,9 +659,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 2b169b4ec29e..5b95fa2cce18 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 5f0030257b05..8ed1baf6b0eb 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -328,7 +328,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; @@ -397,7 +397,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 /* @@ -1065,7 +1065,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 5946101144eb..ba5761843c76 100644 --- a/tools/testing/selftests/kvm/lib/riscv/processor.c +++ b/tools/testing/selftests/kvm/lib/riscv/processor.c @@ -287,7 +287,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 8255042de0d0..440ea6e99f08 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 75303fe8359d..fd3533582509 100644 --- a/tools/testing/selftests/kvm/steal_time.c +++ b/tools/testing/selftests/kvm/steal_time.c @@ -275,7 +275,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 8b034a8617e1..eda4e02f92f6 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 @@ -343,7 +343,7 @@ static void test_pmu_config_disable(void (*guest_code)(= void)) =20 vm_enable_cap(vm, KVM_CAP_PMU_CAPABILITY, KVM_PMU_CAP_DISABLE); =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 245fd0755390..ec418b823273 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; } @@ -182,7 +182,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, sev_es_vm); TEST_ASSERT( @@ -278,7 +278,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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 30D9ECCA47B for ; Fri, 3 Jun 2022 00:56:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239674AbiFCA4Y (ORCPT ); Thu, 2 Jun 2022 20:56:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51834 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240586AbiFCAr2 (ORCPT ); Thu, 2 Jun 2022 20:47:28 -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 0B64B38195 for ; Thu, 2 Jun 2022 17:46:43 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id z11-20020a17090a468b00b001dc792e8660so3413920pjf.1 for ; Thu, 02 Jun 2022 17:46: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=kvUs1ol0OvtNdzt/b17TZtfFYSzSfQ+X1tNIPk/V+/I=; b=Y2rk59j+DHWsGPdwoepLIqrYAZe0WO4F0ydN5ZvnGLrgGwmkqwmLZAOJ+NzyyLSklo 1xMA2WEDwFIIflW0EVgqq+VYq2PSEpu0osImp3ZGUyNtzHJvwqRIo9eLrT/5TD/x4pgF hwOtISSloQ8w6Txyi1AZJpeuMBCvP+uZxryqf55gC0haM9CXi2OoM0J8rTrzG6Rl3kSr P6FhdOjFcDmrOO7x1YH2w6F3MOpPvepypkPuvEpBzuYA40uQ0aCvWCq0jv0rCayB6KgY GYmxDr5mDsbvoRy806W0/eqwKEjanWB9XhH6qXgAhmsCKOwoqlGaP3j5XKHhg1Fspkuv vE6g== 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=kvUs1ol0OvtNdzt/b17TZtfFYSzSfQ+X1tNIPk/V+/I=; b=xIBei7ELObCSGpOBMezrWuaNx7fg+iTtmmDt2oAC5ff0Mgb0RdzgO5RFnrdmnqhkWS 3p97LEQRYeBhRktRvGmSmPm22LT2gjt9YBsYsWy4kmCElBibqV4rkY3FvCgnromkrQH6 qXeNWSHX32xSidgxJHusEzd3ryh5HAGmjGmhTQmLgp/yOpElsLOMlAkzd39bnTMy3Cai k2nQYzFAVx56kAyEK128mbBKixI85RtPqmVDKdsXs2M/MIjtTUOVPWZgxOggNIxvNGPi vwgLFJQlYWYOKI4U/w8mUZaRdXMTQfF7jqgLBMhd9ntIG0oYbgLSdHupbc8PtalleZ+A X3ug== X-Gm-Message-State: AOAM530gA8Eqemn5Yj0mvF5jqfEL0SuG5GN22IycasaES2K6iu3yoDcz M4YLL93yVsUbXpgtmfftjG306YEumZg= X-Google-Smtp-Source: ABdhPJxwCO1qzFB2I3HAQE0ihPaO72veeNOHEDZTjmoYznkJOcudgD0SNIvpWB4PWZGrpU6+EDNIaYHYbCM= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90b:4f4a:b0:1e3:49c9:aab0 with SMTP id pj10-20020a17090b4f4a00b001e349c9aab0mr16032411pjb.223.1654217203017; Thu, 02 Jun 2022 17:46:43 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:50 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-104-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 103/144] KVM: selftests: Convert set_boot_cpu_id away from global VCPU_IDs From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 4EC57C433EF for ; Fri, 3 Jun 2022 00:58:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240855AbiFCA6P (ORCPT ); Thu, 2 Jun 2022 20:58:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51934 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240602AbiFCAra (ORCPT ); Thu, 2 Jun 2022 20:47:30 -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 7B1388E for ; Thu, 2 Jun 2022 17:46:45 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id n8-20020a170902d2c800b001663868e2c2so2328289plc.21 for ; Thu, 02 Jun 2022 17:46: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=caX/Iwva7KZjPf9D4zGbZUtTlsxAdWPspT3KNS02YNc=; b=iqN4A3YbUmgT9VeFBFw9qZJ/KLrlJwkaMoXIGyH1AbPVxkzbiyO5/di/EdcdkT+wID zjGUV4PQLtBZyOBWeVek0rI1fhpp127fhXnYlqKe7PFnEEib3IcB+YJQdcMG2PhzxBF7 eLPgeNaRLvmPq3ebhnp3RneDSskuipXsE7BtWclW9E48SqGJqVV98HMu04SD2nnlLUm7 z1cYq5buYfKII2e2clWOIKO1tuQ9YySx8f/zJk0jcSd727BgW5asrWQvmjztPJl1lNt4 pgya/QaVr6a8KQLKOFZlyAf8eIbxsPRAY1lKHIS/25dqGueuu4CiPF9014a7qe/5bmjf He6A== 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=caX/Iwva7KZjPf9D4zGbZUtTlsxAdWPspT3KNS02YNc=; b=eJ/RPjrpiqVJJWLTWG425TR6F8ur3sv8AkojpZEP2/Bihmuw+jZFXcyAOtDf0RZKBz cs7f82fEYm1Af0t7pqe/f3OOoDxqkUuIf/ktDEz14CPNPCWDl4dHoSgW/0xZcsb8bMHM mots6w92/n9VACOIL8D0s40wIRkWTfJcE0RTBwhkVDFCHEH9gVRa552i1pojkaypqKHc tjRVDSf84IXVgVNZ6EJoGyMTIWUzIjIpbRpd1Q1kZfhwmgrgPlnM6bBBKIjTbLxTS5Ax Sy9ijXsLdwp00q0LBVEQ0vX7qO79jXyuBMMX7Ef0cwLfMYwSOp/tDUGT97PRsoq/8kVT 0Jyg== X-Gm-Message-State: AOAM5304kFnju9Tbc20uB+MQFclI8zzIR3BJQ9cB3wa6k8Hj9rNd2UPI JC6uZ1z0djPSCrcp8+WxRepsodsuC5o= X-Google-Smtp-Source: ABdhPJyCTa+Fvtw58OYPuRxxwE4mQD/9HU8NkhcWBLMv1zyCAc7pwvK8LE+HwoUeNjvv0AaQkHN0tM1lxN8= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:84c:b0:519:1f69:2224 with SMTP id q12-20020a056a00084c00b005191f692224mr7659832pfk.13.1654217204466; Thu, 02 Jun 2022 17:46:44 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:51 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-105-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 104/144] KVM: selftests: Convert psci_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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_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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../testing/selftests/kvm/aarch64/psci_test.c | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/tools/testing/selftests/kvm/aarch64/psci_test.c b/tools/testin= g/selftests/kvm/aarch64/psci_test.c index 347cb5c130e2..d9695a939cc9 100644 --- a/tools/testing/selftests/kvm/aarch64/psci_test.c +++ b/tools/testing/selftests/kvm/aarch64/psci_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 @@ -64,16 +61,17 @@ static uint64_t psci_features(uint32_t func_id) return res.a0; } =20 -static void vcpu_power_off(struct kvm_vm *vm, uint32_t vcpuid) +static void vcpu_power_off(struct kvm_vcpu *vcpu) { struct kvm_mp_state mp_state =3D { .mp_state =3D KVM_MP_STATE_STOPPED, }; =20 - vcpu_mp_state_set(vm, vcpuid, &mp_state); + vcpu_mp_state_set(vcpu->vm, vcpu->id, &mp_state); } =20 -static struct kvm_vm *setup_vm(void *guest_code) +static struct kvm_vm *setup_vm(void *guest_code, struct kvm_vcpu **source, + struct kvm_vcpu **target) { struct kvm_vcpu_init init; struct kvm_vm *vm; @@ -84,28 +82,28 @@ static struct kvm_vm *setup_vm(void *guest_code) 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_code); - aarch64_vcpu_add(vm, VCPU_ID_TARGET, &init, guest_code); + *source =3D aarch64_vcpu_add(vm, 0, &init, guest_code); + *target =3D aarch64_vcpu_add(vm, 1, &init, guest_code); =20 return vm; } =20 -static void enter_guest(struct kvm_vm *vm, uint32_t vcpuid) +static void enter_guest(struct kvm_vcpu *vcpu) { struct ucall uc; =20 - vcpu_run(vm, vcpuid); - if (get_ucall(vm, vcpuid, &uc) =3D=3D UCALL_ABORT) + vcpu_run(vcpu->vm, vcpu->id); + if (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 assert_vcpu_reset(struct kvm_vm *vm, uint32_t vcpuid) +static void assert_vcpu_reset(struct kvm_vcpu *vcpu) { uint64_t obs_pc, obs_x0; =20 - get_reg(vm, vcpuid, ARM64_CORE_REG(regs.pc), &obs_pc); - get_reg(vm, vcpuid, ARM64_CORE_REG(regs.regs[0]), &obs_x0); + get_reg(vcpu->vm, vcpu->id, ARM64_CORE_REG(regs.pc), &obs_pc); + get_reg(vcpu->vm, vcpu->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)", @@ -133,25 +131,26 @@ static void guest_test_cpu_on(uint64_t target_cpu) =20 static void host_test_cpu_on(void) { + struct kvm_vcpu *source, *target; uint64_t target_mpidr; struct kvm_vm *vm; struct ucall uc; =20 - vm =3D setup_vm(guest_test_cpu_on); + vm =3D setup_vm(guest_test_cpu_on, &source, &target); =20 /* * make sure the target is already off when executing the test. */ - vcpu_power_off(vm, VCPU_ID_TARGET); + vcpu_power_off(target); =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); - enter_guest(vm, VCPU_ID_SOURCE); + get_reg(vm, target->id, KVM_ARM64_SYS_REG(SYS_MPIDR_EL1), &target_mpidr); + vcpu_args_set(vm, source->id, 1, target_mpidr & MPIDR_HWID_BITMASK); + enter_guest(source); =20 - if (get_ucall(vm, VCPU_ID_SOURCE, &uc) !=3D UCALL_DONE) + if (get_ucall(vm, source->id, &uc) !=3D UCALL_DONE) TEST_FAIL("Unhandled ucall: %lu", uc.cmd); =20 - assert_vcpu_reset(vm, VCPU_ID_TARGET); + assert_vcpu_reset(target); kvm_vm_free(vm); } =20 @@ -169,16 +168,17 @@ static void guest_test_system_suspend(void) =20 static void host_test_system_suspend(void) { + struct kvm_vcpu *source, *target; struct kvm_run *run; struct kvm_vm *vm; =20 - vm =3D setup_vm(guest_test_system_suspend); + vm =3D setup_vm(guest_test_system_suspend, &source, &target); vm_enable_cap(vm, KVM_CAP_ARM_SYSTEM_SUSPEND, 0); =20 - vcpu_power_off(vm, VCPU_ID_TARGET); - run =3D vcpu_state(vm, VCPU_ID_SOURCE); + vcpu_power_off(target); + run =3D source->run; =20 - enter_guest(vm, VCPU_ID_SOURCE); + enter_guest(source); =20 TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_SYSTEM_EVENT, "Unhandled exit reason: %u (%s)", --=20 2.36.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 D7929C433EF for ; Fri, 3 Jun 2022 00:58:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237395AbiFCA6n (ORCPT ); Thu, 2 Jun 2022 20:58:43 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48784 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240609AbiFCAra (ORCPT ); Thu, 2 Jun 2022 20:47: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 5467818A for ; Thu, 2 Jun 2022 17:46:46 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id 35-20020a631563000000b003fc09751ce5so3042248pgv.10 for ; Thu, 02 Jun 2022 17:46: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=OD3/Ff0FEeZAS0nqwH4UPNx13i1cw9+dfKCyUGzw+1A=; b=A6IjW4Pfge5ajq8p3D8iO4s/jIIfmuvg3Sn4+SjXCaB5+gWwXD7VO+0vdGoivWV9JA WuneV+tji8pY/MzwSeqnqlvW4yMazzYwRKV/LfCUmu5MaSnEGLUJJu2LV8vpoDqihzAo oHVasHJzeVlpi8Gg6eMd6A8yD1AWHjwXkNEIpbW9bXKylYYcp2H3GgSm+bpMjZqr69vA eUbFGiyfkZEZwMHbZSdbaI1RQaDEkTreGx8JEqoidiAgALxLT6aTtVzshoOYJP8Y5PZn 3G322aPQ8zDWRMA8YnNkt5MRSvJ8uic/iV0GrHh5uw7kiGR4eoZt6YT6tmBLNCQpIL5O lwaw== 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=OD3/Ff0FEeZAS0nqwH4UPNx13i1cw9+dfKCyUGzw+1A=; b=lppmQGeGaUECe1aKqbvsilGvGcId7AU4An0TpECXQdhn9149bvz8R40GEGEwms7HFA lsKd6Qpw9AnL0iw4d2+znvYNFfM+IhJl6XN/+PYeHHtgVGcUReWPxV5mN+nUDaGx617O riA69e2qZkI3a/lj/H5ksmjnREIyVzI8vRnyLn0XOAvjEFC7yr7ljp7MTdB45KMqMVyi Wx4tPDCk93Ka9BlBd4FAjXz2xia3kTJ37mWtiNmcdEu1NJTz99WUYYFLT75X/ZaroTBM fw2c1AsqoDX3ElA8+BwcZoYBOYLy3vLl5ifZvtVhjsm2Ag9MvVnUrqbe6/paUhAikVZg 5SJQ== X-Gm-Message-State: AOAM53394XfjznerXgUtE2ZgeXtzYKFftCIJZOzpyF6aopcbUa5vhGq1 IXEdACeZs+FqfWE4AY0xiUJY60+w498= X-Google-Smtp-Source: ABdhPJyWijgiTatf76rt3yvRFdLsJqaNYW3ya6aIl8/vQSQLcvJi9/vklY+ebYDoFT6lm/HFHuoCslvmYnA= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:249:b0:1e0:a8a3:3c6c with SMTP id t9-20020a17090a024900b001e0a8a33c6cmr307322pje.0.1654217206143; Thu, 02 Jun 2022 17:46:46 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:52 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-106-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 105/144] KVM: selftests: Convert hardware_disable_test to pass around vCPU objects From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 5AF3EC433EF for ; Fri, 3 Jun 2022 00:58:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240134AbiFCA6U (ORCPT ); Thu, 2 Jun 2022 20:58:20 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49312 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240517AbiFCArb (ORCPT ); Thu, 2 Jun 2022 20:47:31 -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 C1C20253 for ; Thu, 2 Jun 2022 17:46:48 -0700 (PDT) Received: by mail-pf1-x449.google.com with SMTP id e19-20020aa79813000000b0051bba91468eso2884193pfl.14 for ; Thu, 02 Jun 2022 17:46: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=MPgzvQxFGMahxtdA/6O7orJ/XzllDICCkjKusRmOEac=; b=SZ0V9hHYykV5NOYNk0mA2DDERh0XJA9VMQwRNWl2qCw8fYzX8Hw4IQyFmPT5l05QlX N3wempi9eSalQYv98lAO+1plYUotHURCoSahLANOk1f02lrENM2oEP4tASj0PuO8G00r /bZOBQDepAohKMR6gAHxzrLHlmi+wX1JDYAvd1V75qu0PzrpQo6OoeM80oPkyb9lWCGr ZpC3s6eOZfSTxp4//Nu4jc6ofS+Eq3S8Ek02RnCh5ArRmm74rc/1H985TjfWt8DQgzE8 1iZr9Ol00qyHcPKq+uqtUs3G2KihZX6F4m6W42/yu1Qf1rvPauCRJU8O41625vqDjYGw BfdQ== 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=MPgzvQxFGMahxtdA/6O7orJ/XzllDICCkjKusRmOEac=; b=eWtEfoo7IRSU7a616Ggw3opC7jZxvU+Rl0AAgpWzOeZtyL4KQ8Nx7JqDDeCH8lMbdX VZhXQ2hDX2GbYgdh/sw/uWxHAhb+9e082WQhh0x5MMy8Jr2kTx8Vd5X5RMLByCOVIApw ex8JosZ5oRGYaxBX5l5fgE0272bS9nwPq6kDA5TWST+R1zk+NXbq47Jz7qSLGv9YsSUQ MUH1+NrNRrOG45MOgV9XuabpLu2RTqI1SV7jsMYBXiUwe9tcY1RmgtpDbVB6gTS1bxhq Ls6A7aNAFhAaTMkEnWrK3+nPxw7DnjnbmowYNNxSIt5t1HWgjXui24RTboScAUZXbHat rHow== X-Gm-Message-State: AOAM530L29KGpzppi1NsVosNUefREJ6tS6E3vWEoDCFUcoFxII2S9RV+ FNpcPxBW/XzkzdlirhdrRqTPqkaLcdU= X-Google-Smtp-Source: ABdhPJwiSSHOYhuCWgZoe5jTP5oo6yUMHE0HGpJC/qQHig86nL5OqfQABfaBvk5XEq0m/dZ0Nw5IThd4hZU= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:e8d6:b0:161:ea52:cd52 with SMTP id v22-20020a170902e8d600b00161ea52cd52mr7503959plg.71.1654217208242; Thu, 02 Jun 2022 17:46:48 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:53 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-107-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 106/144] KVM: selftests: Add VM creation helper that "returns" vCPUs From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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 2c7a8a91ebe2..c0b2158a53d5 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -563,10 +563,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 8ed1baf6b0eb..132a591ba029 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -296,12 +296,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 @@ -328,7 +329,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; @@ -338,8 +341,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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 0281EC433EF for ; Fri, 3 Jun 2022 00:58:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236050AbiFCA62 (ORCPT ); Thu, 2 Jun 2022 20:58:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49042 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240651AbiFCArg (ORCPT ); Thu, 2 Jun 2022 20:47:36 -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 D6FF3D85 for ; Thu, 2 Jun 2022 17:46:50 -0700 (PDT) Received: by mail-yb1-xb49.google.com with SMTP id n201-20020a2540d2000000b0065cbae85d67so5550885yba.11 for ; Thu, 02 Jun 2022 17:46: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=4fpLBq2NFkzuq4RyeBWziz4rsfh3xJyEr1uQL3YkGZI=; b=hWrVbbYqWmM+sxPas+/RqRMyVQMFfPGk9OpogarlVpf1xQvdaun4FNZZRI+7NoTMB2 h1LXoWCs95EVami+3Qp5qENGXGPxUOE+hkE5ThSAEAY/pq6X1Bfejkrowilqw7slILcp Wk9fqIZIfwhKlWJ52oJH44c10HmlebJNktEsCMunTjNxOzH3aTjaKmI4+cW8tb9pG10u eKByGsbfcLL2fL7ClukoDc6b0GPOE0YUmjD3J9uCsD60p+HNCfFmWWRz7nz4sMMyofgd /UKuSwmjKJnFd2RmjN7CQa1Nxu8ZONRE+imFpqQjWZmbK6ppv5AnxHCGCVC9SK1GIrJJ U9qQ== 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=4fpLBq2NFkzuq4RyeBWziz4rsfh3xJyEr1uQL3YkGZI=; b=IKkWa4FpS6D4vyYOiyvvoImUp+FbtvJWFpp3rtEfhlDg3AwbhCIGotMpWh2gXm10qL 3FDqbKkfZi100tS1urHT86rdmZu3ekWxnBl7671kUa7seJBTnA8t79qnXzx4bxOPyv7d Tt78lJ1ApqAqr9a5xwpFiUEAQ2Nu0b+XmsYH1MpYIq8QThfcXWPsQT4SS73nKkA47Di0 gnX6KTi09xqhlLTZp88gZWuLzw9IxKMPTsUPvR+jCEDRkHIX/7oWGIXMCmFFMgnIk9/i VkBBpF6iLQxUucPdIuVX8SZZfbcOzjkoU1fpX9+Z92pvcd3fIX++L/pVFlxY153Ndp5B zsXg== X-Gm-Message-State: AOAM5326wPlAh20ZrpaO7pGJDKA+p1v7LZy2gZKVIYXkr1yrP8OEHe/m SupsA/CqWdsuDoUeoJGfQA/EMLLeQe4= X-Google-Smtp-Source: ABdhPJw96ROPNczB5ejVrDfLA9hSeuLF1fejpTgkis3qfWgV7xKsn7QIKZcEybTPwdegLQkiiIqKVLlFtTI= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a25:9081:0:b0:64d:d424:a811 with SMTP id t1-20020a259081000000b0064dd424a811mr8182568ybl.298.1654217209877; Thu, 02 Jun 2022 17:46:49 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:54 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-108-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 107/144] KVM: selftests: Convert steal_time away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- 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 fd3533582509..7a6645464925 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); @@ -158,49 +156,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); @@ -224,15 +223,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; @@ -241,12 +238,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; @@ -266,26 +264,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(); @@ -306,7 +307,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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 EB257C43334 for ; Fri, 3 Jun 2022 01:01:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237476AbiFCBBo (ORCPT ); Thu, 2 Jun 2022 21:01:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49318 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240660AbiFCAtk (ORCPT ); Thu, 2 Jun 2022 20:49:40 -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 A39F423BF0 for ; Thu, 2 Jun 2022 17:47:03 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id y1-20020a17090a390100b001e66bb0fcefso3258656pjb.0 for ; Thu, 02 Jun 2022 17:47: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=UZ39FwqPuZSwzhKmIpJpQ529gOFccXb7mEmumiCcntE=; b=qmsPw6+cATPxvN7VKqvjg2HNvYBMfDisXruYDZCP1ExEA9KU7j8DzSoAnTeqZN/KT5 CH+/sCCbcW6O5PlOPp8+QfhmHOudc7A/z7zixhmDVG8OeM+U1r7Igj0L5bTrEp2+iWKe Ul/BGxTaQV1oGidDpr8FGb9BZRYFX6Ax4SFK0NJaS12FJbxJ3+f8bse2/RYAZJ0JVlWi wnrCSyMFHolf3CBCcfToZvpB3skj/jr5PARSD6+v/CXRtGIHOyTS0uw8CUTC/TXnK/Z6 1198MpZr8OZyTI7qWIz3DL0cFwWeYKrSLxa1I35OMHFq70fKpYOyY7NJLieIWd/zXhGG 6cgg== 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=UZ39FwqPuZSwzhKmIpJpQ529gOFccXb7mEmumiCcntE=; b=ffJbldec6f2+iGb+LW5t1EdBH95fypKA3sW0brJPVsDN851noPaempj0ep65MZ14If K/bvGAfqHlV9mSm5QOyJWFJzom2rrxPFLfs3XSoqaTHQDoDi/s+jiACqAJo2DVasACeh VzGkltnViGDDhFMVGY7h01MnRy1wDpm0wxZkLspXVu0p9GXnHc2jc6exsw8sIIMpbSTb 6MPkLh/t8b4jNm50F5pDjsRBR8sOd3d0tjhYsjDIvX6jtetX+ATkNdOf5zDFdeHKMWOY juYF8WPSq1+E0aczAeNEJkH52T5VHuOur9ADVZU5302TMbp95B4bIQxeZCxSJVIYofgF 5LPg== X-Gm-Message-State: AOAM531M3NjPXCsfX87mKCnh5fatNqHPBD2K/zwkUHG34FBwL2tsE0nY KOwYx8GIYCLzAlPqBDP5XghUPLP/bi0= X-Google-Smtp-Source: ABdhPJxfDVcVqvcYU69U83ovg0EbI6neC7aNWV8nTeap+CSPzCrBdfD6xCbaWjVSqIAywXTYICbwjuRo3lM= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:b85:b0:51b:bd9b:869 with SMTP id g5-20020a056a000b8500b0051bbd9b0869mr7817160pfj.31.1654217211690; Thu, 02 Jun 2022 17:46:51 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:55 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-109-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 108/144] KVM: selftests: Convert arch_timer away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 557C1C43334 for ; Fri, 3 Jun 2022 00:58:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240895AbiFCA6y (ORCPT ); Thu, 2 Jun 2022 20:58:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51718 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240469AbiFCArt (ORCPT ); Thu, 2 Jun 2022 20:47:49 -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 801E6E01B for ; Thu, 2 Jun 2022 17:46:54 -0700 (PDT) Received: by mail-pf1-x449.google.com with SMTP id j23-20020aa78017000000b005180c6e4ef2so3489678pfi.12 for ; Thu, 02 Jun 2022 17:46: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=FEBJwvYqAlLiF60mynTUCVgIxZLExe38puapSJIU/ak=; b=MVk93Q6ShQD0qflt2QebdYguqRkfX6WBmucALXpGpHxB4g6M7SyCeXjuKuTOgiPQvd 8kBNQTISQM2bnmaByiLYHFV4tL2dQy26cWchlb9y9XWA81U+zeg3ravk+uYYC9/plqtz 2BxgBWgVQqhPyQMJGW+gezpkO778FW+JDHAqd7LopEA976ZjyY6tKLKvztlHETihOy66 ukaDWcy0XkDWMbLnNkw5NpMJhj8FobHAO7H9qBPXJQt0AuAvlMjr6ycFOhtXQUggHnPB BQ+ihUdnaP+ZMzJnip8ksgwQ0vX7mPZ8ulEumszSYFLKx19zkcKMC4UuL3rbnS1hfVqi UeXw== 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=FEBJwvYqAlLiF60mynTUCVgIxZLExe38puapSJIU/ak=; b=NcZQUu1ZVbglAxu7CGRkEqz7sW828vPF04L9IV+uc17oVaJAEDu35d5mwb4RXKDS4h mMW8WmHJa3WVavO8T+0z4eW9qf4ZoMDuDZeesVFa4YXfOhad5bCZFg0nONHcQ07Pg3IT 2FCu3w/BukEoFIVEBdG/suJtBMuDEblK7lTT1BzEzHtWcxZia56c0sA7xxnGvF9791cE eXnz+a+7d2F55g7HWGMx0zfhGhqul4sFZohAOz/GvGgnhKTkmEKlZGvlAWymC/g2glSE 76yK62sByqywNJGu88AwGGfLHhwd+7oVHetl/KxUJ8TAX1Wac8Tzeec1sK1BJYdufyEa KnUA== X-Gm-Message-State: AOAM530jSJJBrFztGdrINU4YYCUVKsuecovy+1S/FAeJR9nq9uoQWfcP OlmmjxuQM5EISL1YVymQWo3naQ+fH2w= X-Google-Smtp-Source: ABdhPJxZTZgawm1iBdLrP6Z23MXm7fqdEHBKVsNWTIBg6ycHTlJwtHvx4yH345FBYwv+IHlaQ9IjF7di02I= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:1826:b0:518:4c8b:c5db with SMTP id y38-20020a056a00182600b005184c8bc5dbmr7793916pfa.22.1654217213473; Thu, 02 Jun 2022 17:46:53 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:56 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-110-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 109/144] KVM: selftests: Convert svm_nested_soft_inject_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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_nested_soft_inject_test to use vm_create_with_one_vcpu() and pull the vCPU's ID from 'struct kvm_vcpu'. Signed-off-by: Sean Christopherson Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../kvm/x86_64/svm_nested_soft_inject_test.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/svm_nested_soft_inject_test= .c b/tools/testing/selftests/kvm/x86_64/svm_nested_soft_inject_test.c index f834b9a1a7fa..a337ab2ec101 100644 --- a/tools/testing/selftests/kvm/x86_64/svm_nested_soft_inject_test.c +++ b/tools/testing/selftests/kvm/x86_64/svm_nested_soft_inject_test.c @@ -18,7 +18,6 @@ #include "svm_util.h" #include "test_util.h" =20 -#define VCPU_ID 0 #define INT_NR 0x20 #define X86_FEATURE_NRIPS BIT(3) =20 @@ -135,6 +134,7 @@ static void l1_guest_code(struct svm_test_data *svm, ui= nt64_t is_nmi, uint64_t i =20 static void run_test(bool is_nmi) { + struct kvm_vcpu *vcpu; struct kvm_vm *vm; vm_vaddr_t svm_gva; vm_vaddr_t idt_alt_vm; @@ -142,10 +142,10 @@ static void run_test(bool is_nmi) =20 pr_info("Running %s test\n", is_nmi ? "NMI" : "soft int"); =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, NMI_VECTOR, guest_nmi_handler); vm_install_exception_handler(vm, BP_VECTOR, guest_bp_handler); @@ -163,23 +163,23 @@ static void run_test(bool is_nmi) } else { idt_alt_vm =3D 0; } - vcpu_args_set(vm, VCPU_ID, 3, svm_gva, (uint64_t)is_nmi, (uint64_t)idt_al= t_vm); + vcpu_args_set(vm, vcpu->id, 3, svm_gva, (uint64_t)is_nmi, (uint64_t)idt_a= lt_vm); =20 memset(&debug, 0, sizeof(debug)); - vcpu_guest_debug_set(vm, VCPU_ID, &debug); + vcpu_guest_debug_set(vm, vcpu->id, &debug); =20 - struct kvm_run *run =3D vcpu_state(vm, VCPU_ID); + struct kvm_run *run =3D vcpu->run; struct ucall uc; =20 alarm(2); - vcpu_run(vm, VCPU_ID); + vcpu_run(vm, vcpu->id); alarm(0); 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 at %s:%ld, vals =3D 0x%lx 0x%lx 0x%lx", (const char *)uc.a= rgs[0], __FILE__, uc.args[1], uc.args[2], uc.args[3], uc.args[4]); --=20 2.36.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 B0428C43334 for ; Fri, 3 Jun 2022 01:02:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240706AbiFCBCT (ORCPT ); Thu, 2 Jun 2022 21:02:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51914 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240349AbiFCAsb (ORCPT ); Thu, 2 Jun 2022 20:48:31 -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 8BFE311C29 for ; Thu, 2 Jun 2022 17:46:55 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id d13-20020a170902728d00b001635c985770so3492414pll.2 for ; Thu, 02 Jun 2022 17:46: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=bRAEwwd8ey3z9X0VEPjYYsn1VMfgDNaL8F4OeDoloP0=; b=Arg0yMzCSRhXWx5g47HlADiMEEAhXGQy2wM6eA+W7ss2alARZOfckQvP8kSb/+bqXP YPkpWo2LI8aDK2trmSi3k/yY7y99HAG3VCuxPPcty7MH6r3FISy+JF26saPblgwI7lSc 7wG+gNr1FsOY3pWI4Hn1nyIQY7HIzbZLXyLOhq3HBB4/fPkVw6SCGLlPfbnMv3i3sfLT 6qFWiTHxJq9WEdYdV3PaXjJVfuHa2JsTtyAWY5ZXZQoeGtxeS580If7ypRYhRDAm9L9I Oa9WHbbghr72+H/Dancwa9rgouJKrYMF2g6D0vc3iTkqPoMaK3HZTdoDXlVwCuCxrR0l tSig== 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=bRAEwwd8ey3z9X0VEPjYYsn1VMfgDNaL8F4OeDoloP0=; b=3VuuEup1RAhU0xVxbH7l7plWDe3QOO1J+oAxlu11za+I6QJ5Sl/kK7p/RoJkOdpEJf 92bNDMcCW6LZ0QBGOnrBO+QsBKzDzMLlPOkogGy9FDHhD7yoDwCNplb/43Oq2NeyLfNT 9uNJD8PgFnqp2sBhpl3VDSL0icWCt+RAxj3DfTUlGwnHHw8XUIVU6tHWMhssDOheA0M6 gNj17Hn99nGHj9MZwYoS0M67MD4ORE3lvl04M0rrrHcpD3pqv7TBDfkbAPepAvMsneSE jUyYENIkDYMxqfbmSA0VSdV2tPNwqQLUcAaoK9WriPWMuhJgbBNQdaFRZHc61rQI+aSN 81Wg== X-Gm-Message-State: AOAM5335UwJyDFquTyrSRbikv++pDJ9rsSXT6jnCOBmtBwekhkCkko+V MoNfYKjx0HNJmzyCBPVUn68ItPb8o3s= X-Google-Smtp-Source: ABdhPJyPeWXaOSdzs/Zkbt6Y4IE87D1ZIMazf/pmmoIdw8biRGyfNLIJWPcdF4k9KgOrDAUZYUydDomfzbg= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:1952:b0:518:9fbd:ff7a with SMTP id s18-20020a056a00195200b005189fbdff7amr7576373pfk.77.1654217214929; Thu, 02 Jun 2022 17:46:54 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:57 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-111-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 110/144] KVM: selftests: Convert triple_fault_event_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 triple_fault_event_test to use vm_create_with_one_vcpu() and pull the vCPU's ID from 'struct kvm_vcpu'. Signed-off-by: Sean Christopherson Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../kvm/x86_64/triple_fault_event_test.c | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/triple_fault_event_test.c b= /tools/testing/selftests/kvm/x86_64/triple_fault_event_test.c index 68e0f1c5ec5a..2b0f19ddbc8b 100644 --- a/tools/testing/selftests/kvm/x86_64/triple_fault_event_test.c +++ b/tools/testing/selftests/kvm/x86_64/triple_fault_event_test.c @@ -9,7 +9,6 @@ =20 #include "kselftest.h" =20 -#define VCPU_ID 0 #define ARBITRARY_IO_PORT 0x2000 =20 /* The virtual machine object. */ @@ -41,6 +40,7 @@ void l1_guest_code(struct vmx_pages *vmx) =20 int main(void) { + struct kvm_vcpu *vcpu; struct kvm_run *run; struct kvm_vcpu_events events; vm_vaddr_t vmx_pages_gva; @@ -56,13 +56,13 @@ int main(void) exit(KSFT_SKIP); } =20 - vm =3D vm_create_default(VCPU_ID, 0, (void *) l1_guest_code); + vm =3D vm_create_with_one_vcpu(&vcpu, l1_guest_code); vm_enable_cap(vm, KVM_CAP_X86_TRIPLE_FAULT_EVENT, 1); =20 - run =3D vcpu_state(vm, VCPU_ID); + run =3D vcpu->run; vcpu_alloc_vmx(vm, &vmx_pages_gva); - vcpu_args_set(vm, VCPU_ID, 1, vmx_pages_gva); - vcpu_run(vm, VCPU_ID); + vcpu_args_set(vm, vcpu->id, 1, vmx_pages_gva); + vcpu_run(vm, vcpu->id); =20 TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Expected KVM_EXIT_IO, got: %u (%s)\n", @@ -70,21 +70,21 @@ int main(void) TEST_ASSERT(run->io.port =3D=3D ARBITRARY_IO_PORT, "Expected IN from port %d from L2, got port %d", ARBITRARY_IO_PORT, run->io.port); - vcpu_events_get(vm, VCPU_ID, &events); + vcpu_events_get(vm, vcpu->id, &events); events.flags |=3D KVM_VCPUEVENT_VALID_TRIPLE_FAULT; events.triple_fault.pending =3D true; - vcpu_events_set(vm, VCPU_ID, &events); + vcpu_events_set(vm, vcpu->id, &events); run->immediate_exit =3D true; - vcpu_run_complete_io(vm, VCPU_ID); + vcpu_run_complete_io(vm, vcpu->id); =20 - vcpu_events_get(vm, VCPU_ID, &events); + vcpu_events_get(vm, vcpu->id, &events); TEST_ASSERT(events.flags & KVM_VCPUEVENT_VALID_TRIPLE_FAULT, "Triple fault event invalid"); TEST_ASSERT(events.triple_fault.pending, "No triple fault pending"); - 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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 E688DC43334 for ; Fri, 3 Jun 2022 00:59:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235844AbiFCA7D (ORCPT ); Thu, 2 Jun 2022 20:59:03 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50796 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240677AbiFCAsd (ORCPT ); Thu, 2 Jun 2022 20:48:33 -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 A431614029 for ; Thu, 2 Jun 2022 17:46:57 -0700 (PDT) Received: by mail-pg1-x549.google.com with SMTP id q13-20020a65624d000000b003fa74c57243so3043024pgv.19 for ; Thu, 02 Jun 2022 17:46: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=7dc3HqyuMGK8qgSKSCWDwfmMXDxJCIfPjLQ6e9F1Yb0=; b=Kvs4taKqu1HcXZQrqca/HDlZcB+YJeVXuK3EOiehfJjolnDXIevnTEH1gKf2TpnpDi JuYVuRC1/raBRF+l2SCecE7T3H+MAK9mursgAaOdoOQ6SD+1hx2JENgnWWaD21mAlDsm wCDsRaeayh8sDoZ/PSVbMKf2+E0lrJXldLKhguM8OK4iI+rg+B3d7ZS2vNKxELkg9QBs gfuCz6TkVKIq9lRut/ngIi1Fiollsx+iBRbBELhPZgBrXui89RaqxYKTyWTnHxlptBEW Pw/SNRL2hc6t26dVaLK0djPIiBr5ezKeDd4D2zXXeugTjdaztAfIywCwkmcesESBdJly PEwA== 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=7dc3HqyuMGK8qgSKSCWDwfmMXDxJCIfPjLQ6e9F1Yb0=; b=H7NhN3zjxs+QhueS3fNHIqgjR2BTRlKLIqF135n4t34QUBSGyniOmM4gzvjeg39Ans PZl+clr6vt+AUtG/kCcx3ikz2Rgo92L8Uq+fF6g3tpV8pViSkzNIjY+crxfQktqSGn4y U8HeBVAhE3MvbGhEh9AtIj2X72MmptsF2fpvx6e7bZiq/sK4J3IHAaIUOKu7DjHp1t6K fVlJfXMitGCfdyQuzQLB8QY2zS4WE3ge001B29XHssMgjGM7EIpA8tEfXtmexFpVb56U n8nLQV65i15TDnWIQIUc1D7EIyin2v/nHCsV9Z9bNvPLHuQn776l1/KOZN0JbYC3rtjh tShQ== X-Gm-Message-State: AOAM531m/neBLMXWCrAdXIUMxBYVg/NScLbcgHscdxhNlaflL2KfJRKb fJ+Ybpz5QH6VLuCmyspd6eNeEhPqcwY= X-Google-Smtp-Source: ABdhPJywV0gg2xR/672RAW4+8iflCLTylEXrqgZp0xhE/I2h1ewOIinraL7eepbnVhx2NL7ktc8vNYiDxEs= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:ec8a:b0:161:7ca5:ece7 with SMTP id x10-20020a170902ec8a00b001617ca5ece7mr7638022plg.141.1654217216571; Thu, 02 Jun 2022 17:46:56 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:58 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-112-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 111/144] KVM: selftests: Convert vgic_init away from vm_create_default_with_vcpus() From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 57548C433EF for ; Fri, 3 Jun 2022 01:02:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238503AbiFCBCH (ORCPT ); Thu, 2 Jun 2022 21:02:07 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51798 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240706AbiFCAsf (ORCPT ); Thu, 2 Jun 2022 20:48:35 -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 A543F165A1 for ; Thu, 2 Jun 2022 17:46:58 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id w32-20020a631620000000b003fbb0d4d3ffso3035944pgl.21 for ; Thu, 02 Jun 2022 17:46: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=uWmmsqYxu6/ueHuoReSWP73uILq6OVFxgE0YUr23g0U=; b=GGEaMVJ6Tmfio5hqRQ9fZ/BvyOxl+jCRXFIGGGtRPW2DAKekUCbzCeBb0hcNM5bXZW IjHIdFUsc2+PF9ASWA/UpEqxS8M26Nr4J83J99zWU59ArqTO80YHj+QBJ5PK3VE00/Dj STTc+alQvn1prgxVvJr8ThgGxSrt9sf+Zhs3a8C0B9pUQ10VCSEqog6FOxIvm44vH6DS h8dSQ/PkjJ9utw6erLKdE2U3TN4yWdwiEFBXxgBdlyJ5dpR82Ds8+Zrcy+DL4IXAouJ+ ZIUBbih08XHXI2aFOmcw6U+IZPKP4nSsPz9eUhMkCg5FtoRrR+Y32cE2q5L1HzcusnC1 SkKg== 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=uWmmsqYxu6/ueHuoReSWP73uILq6OVFxgE0YUr23g0U=; b=a6wHV1+rDXLPaJpYoxPGyqQAWqJuCIz1rdcs/BGEzSsSfN9RuG/chc0NOI5bsDGfSj Nco1E0gSd8mUYTgwAPxEYtPW97bUVDBuSi5Di+pSxOi409jrsEZyuYEBd8ZAriz8+vah QBc0A17j4WqQkGz7Nq6qdVztRvL5hFpI26KfXvPcQgjhvkdC4uCnM0sn/4F2rg7G3+La IO+OgbDjxvNJTaecVI9+hhBmAmu9OPsYAvu5QqUn9tIILiF3KXj3FJ0U5ky0pCXFQ0G1 IXK3I74Isay5L7ZOKled//DvqLybCqfLTz01dmLdHYfHtJ2aW6TYkf5T1xIZvmk4v8eR YNxA== X-Gm-Message-State: AOAM530tHQuwmvwBwnws2VjM1cNl1yVGuhK+WLbey/JVr/60PqWGVZoj uud9Bz5UZU/Rc0IsD0i3O0NHoKEx2Ls= X-Google-Smtp-Source: ABdhPJyigUwc8u8FgN4mBn0LVHhvJohksv1PMuX0djqYoRJP9WL3ZKnsJ6RaTqxsrQPYNp122ZLglPNyUfM= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:84c:b0:519:1f69:2224 with SMTP id q12-20020a056a00084c00b005191f692224mr7660579pfk.13.1654217218392; Thu, 02 Jun 2022 17:46:58 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:42:59 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-113-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 112/144] KVM: selftests: Consolidate KVM_{G,S}ET_ONE_REG helpers From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 vcpu_{g,s}et_reg() to provide the APIs that tests actually want to use, and drop the three "one-off" implementations that cropped up due to the poor API. Ignore the handful of direct KVM_{G,S}ET_ONE_REG calls that don't fit the APIs for one reason or another. No functional change intended. Signed-off-by: Sean Christopherson Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../selftests/kvm/aarch64/debug-exceptions.c | 2 +- .../selftests/kvm/aarch64/get-reg-list.c | 2 +- .../selftests/kvm/aarch64/hypercalls.c | 32 ++----- .../testing/selftests/kvm/aarch64/psci_test.c | 6 +- .../selftests/kvm/include/aarch64/processor.h | 18 +--- .../selftests/kvm/include/kvm_util_base.h | 28 ++++++- .../selftests/kvm/include/riscv/processor.h | 20 ----- .../selftests/kvm/lib/aarch64/processor.c | 28 +++---- .../selftests/kvm/lib/riscv/processor.c | 84 +++++++++---------- tools/testing/selftests/kvm/s390x/resets.c | 5 +- 10 files changed, 93 insertions(+), 132 deletions(-) diff --git a/tools/testing/selftests/kvm/aarch64/debug-exceptions.c b/tools= /testing/selftests/kvm/aarch64/debug-exceptions.c index b69db0942169..2fe13e117dba 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); + vcpu_get_reg(vcpu->vm, vcpu->id, KVM_ARM64_SYS_REG(SYS_ID_AA64DFR0_EL1), = &id_aa64dfr0); return id_aa64dfr0 & 0xf; } =20 diff --git a/tools/testing/selftests/kvm/aarch64/get-reg-list.c b/tools/tes= ting/selftests/kvm/aarch64/get-reg-list.c index a8558e462efb..e004afc29387 100644 --- a/tools/testing/selftests/kvm/aarch64/get-reg-list.c +++ b/tools/testing/selftests/kvm/aarch64/get-reg-list.c @@ -457,7 +457,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_get_reg(vm, 0, reg_list->reg[i], &addr); if (ret) { printf("%s: Failed to get ", config_name(c)); print_reg(c, reg.id); diff --git a/tools/testing/selftests/kvm/aarch64/hypercalls.c b/tools/testi= ng/selftests/kvm/aarch64/hypercalls.c index 1eb9738453b4..b1f99e786d05 100644 --- a/tools/testing/selftests/kvm/aarch64/hypercalls.c +++ b/tools/testing/selftests/kvm/aarch64/hypercalls.c @@ -141,26 +141,6 @@ static void guest_code(void) GUEST_DONE(); } =20 -static int set_fw_reg(struct kvm_vm *vm, uint64_t id, uint64_t val) -{ - struct kvm_one_reg reg =3D { - .id =3D id, - .addr =3D (uint64_t)&val, - }; - - return __vcpu_ioctl(vm, 0, KVM_SET_ONE_REG, ®); -} - -static void get_fw_reg(struct kvm_vm *vm, uint64_t id, uint64_t *addr) -{ - struct kvm_one_reg reg =3D { - .id =3D id, - .addr =3D (uint64_t)addr, - }; - - vcpu_ioctl(vm, 0, KVM_GET_ONE_REG, ®); -} - struct st_time { uint32_t rev; uint32_t attr; @@ -196,18 +176,18 @@ static void test_fw_regs_before_vm_start(struct kvm_v= m *vm) const struct kvm_fw_reg_info *reg_info =3D &fw_reg_info[i]; =20 /* First 'read' should be an upper limit of the features supported */ - get_fw_reg(vm, reg_info->reg, &val); + vcpu_get_reg(vm, 0, reg_info->reg, &val); TEST_ASSERT(val =3D=3D FW_REG_ULIMIT_VAL(reg_info->max_feat_bit), "Expected all the features to be set for reg: 0x%lx; expected: 0x%lx; r= ead: 0x%lx\n", reg_info->reg, FW_REG_ULIMIT_VAL(reg_info->max_feat_bit), val); =20 /* Test a 'write' by disabling all the features of the register map */ - ret =3D set_fw_reg(vm, reg_info->reg, 0); + ret =3D __vcpu_set_reg(vm, 0, reg_info->reg, 0); TEST_ASSERT(ret =3D=3D 0, "Failed to clear all the features of reg: 0x%lx; ret: %d\n", reg_info->reg, errno); =20 - get_fw_reg(vm, reg_info->reg, &val); + vcpu_get_reg(vm, 0, reg_info->reg, &val); TEST_ASSERT(val =3D=3D 0, "Expected all the features to be cleared for reg: 0x%lx\n", reg_info->r= eg); =20 @@ -216,7 +196,7 @@ static void test_fw_regs_before_vm_start(struct kvm_vm = *vm) * Avoid this check if all the bits are occupied. */ if (reg_info->max_feat_bit < 63) { - ret =3D set_fw_reg(vm, reg_info->reg, BIT(reg_info->max_feat_bit + 1)); + ret =3D __vcpu_set_reg(vm, 0, reg_info->reg, BIT(reg_info->max_feat_bit= + 1)); TEST_ASSERT(ret !=3D 0 && errno =3D=3D EINVAL, "Unexpected behavior or return value (%d) while setting an unsupported = feature for reg: 0x%lx\n", errno, reg_info->reg); @@ -237,7 +217,7 @@ static void test_fw_regs_after_vm_start(struct kvm_vm *= vm) * Before starting the VM, the test clears all the bits. * Check if that's still the case. */ - get_fw_reg(vm, reg_info->reg, &val); + vcpu_get_reg(vm, 0, reg_info->reg, &val); TEST_ASSERT(val =3D=3D 0, "Expected all the features to be cleared for reg: 0x%lx\n", reg_info->reg); @@ -247,7 +227,7 @@ static void test_fw_regs_after_vm_start(struct kvm_vm *= vm) * the registers and should return EBUSY. Set the registers and check for * the expected errno. */ - ret =3D set_fw_reg(vm, reg_info->reg, FW_REG_ULIMIT_VAL(reg_info->max_fe= at_bit)); + ret =3D __vcpu_set_reg(vm, 0, reg_info->reg, FW_REG_ULIMIT_VAL(reg_info-= >max_feat_bit)); TEST_ASSERT(ret !=3D 0 && errno =3D=3D EBUSY, "Unexpected behavior or return value (%d) while setting a feature while = VM is running for reg: 0x%lx\n", errno, reg_info->reg); diff --git a/tools/testing/selftests/kvm/aarch64/psci_test.c b/tools/testin= g/selftests/kvm/aarch64/psci_test.c index d9695a939cc9..f4f73934351f 100644 --- a/tools/testing/selftests/kvm/aarch64/psci_test.c +++ b/tools/testing/selftests/kvm/aarch64/psci_test.c @@ -102,8 +102,8 @@ static void assert_vcpu_reset(struct kvm_vcpu *vcpu) { uint64_t obs_pc, obs_x0; =20 - get_reg(vcpu->vm, vcpu->id, ARM64_CORE_REG(regs.pc), &obs_pc); - get_reg(vcpu->vm, vcpu->id, ARM64_CORE_REG(regs.regs[0]), &obs_x0); + vcpu_get_reg(vcpu->vm, vcpu->id, ARM64_CORE_REG(regs.pc), &obs_pc); + vcpu_get_reg(vcpu->vm, vcpu->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)", @@ -143,7 +143,7 @@ static void host_test_cpu_on(void) */ vcpu_power_off(target); =20 - get_reg(vm, target->id, KVM_ARM64_SYS_REG(SYS_MPIDR_EL1), &target_mpidr); + vcpu_get_reg(vm, target->id, KVM_ARM64_SYS_REG(SYS_MPIDR_EL1), &target_mp= idr); vcpu_args_set(vm, source->id, 1, target_mpidr & MPIDR_HWID_BITMASK); enter_guest(source); =20 diff --git a/tools/testing/selftests/kvm/include/aarch64/processor.h b/tool= s/testing/selftests/kvm/include/aarch64/processor.h index f774609f7848..ba3e9066d990 100644 --- a/tools/testing/selftests/kvm/include/aarch64/processor.h +++ b/tools/testing/selftests/kvm/include/aarch64/processor.h @@ -19,7 +19,7 @@ /* * KVM_ARM64_SYS_REG(sys_reg_id): Helper macro to convert * SYS_* register definitions in asm/sysreg.h to use in KVM - * calls such as get_reg() and set_reg(). + * calls such as vcpu_get_reg() and vcpu_set_reg(). */ #define KVM_ARM64_SYS_REG(sys_reg_id) \ ARM64_SYS_REG(sys_reg_Op0(sys_reg_id), \ @@ -47,22 +47,6 @@ =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) -{ - struct kvm_one_reg reg; - reg.id =3D id; - reg.addr =3D (uint64_t)addr; - vcpu_ioctl(vm, vcpuid, KVM_GET_ONE_REG, ®); -} - -static inline void set_reg(struct kvm_vm *vm, uint32_t vcpuid, uint64_t id= , uint64_t val) -{ - struct kvm_one_reg reg; - reg.id =3D id; - reg.addr =3D (uint64_t)&val; - vcpu_ioctl(vm, vcpuid, KVM_SET_ONE_REG, ®); -} - void aarch64_vcpu_setup(struct kvm_vm *vm, uint32_t vcpuid, struct kvm_vcp= u_init *init); struct kvm_vcpu *aarch64_vcpu_add(struct kvm_vm *vm, uint32_t vcpu_id, struct kvm_vcpu_init *init, void *guest_code); diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/te= sting/selftests/kvm/include/kvm_util_base.h index c0b2158a53d5..9c29b6797ce8 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -374,16 +374,36 @@ static inline void vcpu_fpu_set(struct kvm_vm *vm, ui= nt32_t vcpuid, { vcpu_ioctl(vm, vcpuid, KVM_SET_FPU, fpu); } + +static inline int __vcpu_get_reg(struct kvm_vm *vm, uint32_t vcpuid, + uint64_t reg_id, void *addr) +{ + struct kvm_one_reg reg =3D { .id =3D reg_id, .addr =3D (uint64_t)addr }; + + return __vcpu_ioctl(vm, vcpuid, KVM_GET_ONE_REG, ®); +} +static inline int __vcpu_set_reg(struct kvm_vm *vm, uint32_t vcpuid, + uint64_t reg_id, uint64_t val) +{ + struct kvm_one_reg reg =3D { .id =3D reg_id, .addr =3D (uint64_t)&val }; + + return __vcpu_ioctl(vm, vcpuid, KVM_SET_ONE_REG, ®); +} static inline void vcpu_get_reg(struct kvm_vm *vm, uint32_t vcpuid, - struct kvm_one_reg *reg) + uint64_t reg_id, void *addr) { - vcpu_ioctl(vm, vcpuid, KVM_GET_ONE_REG, reg); + struct kvm_one_reg reg =3D { .id =3D reg_id, .addr =3D (uint64_t)addr }; + + vcpu_ioctl(vm, vcpuid, KVM_GET_ONE_REG, ®); } static inline void vcpu_set_reg(struct kvm_vm *vm, uint32_t vcpuid, - struct kvm_one_reg *reg) + uint64_t reg_id, uint64_t val) { - vcpu_ioctl(vm, vcpuid, KVM_SET_ONE_REG, reg); + struct kvm_one_reg reg =3D { .id =3D reg_id, .addr =3D (uint64_t)&val }; + + vcpu_ioctl(vm, vcpuid, KVM_SET_ONE_REG, ®); } + #ifdef __KVM_HAVE_VCPU_EVENTS static inline void vcpu_events_get(struct kvm_vm *vm, uint32_t vcpuid, struct kvm_vcpu_events *events) diff --git a/tools/testing/selftests/kvm/include/riscv/processor.h b/tools/= testing/selftests/kvm/include/riscv/processor.h index 4fcfd1c0389d..d00d213c3805 100644 --- a/tools/testing/selftests/kvm/include/riscv/processor.h +++ b/tools/testing/selftests/kvm/include/riscv/processor.h @@ -38,26 +38,6 @@ static inline uint64_t __kvm_reg_id(uint64_t type, uint6= 4_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, - unsigned long *addr) -{ - struct kvm_one_reg reg; - - reg.id =3D id; - reg.addr =3D (unsigned long)addr; - vcpu_get_reg(vm, vcpuid, ®); -} - -static inline void set_reg(struct kvm_vm *vm, uint32_t vcpuid, uint64_t id, - unsigned long val) -{ - struct kvm_one_reg reg; - - reg.id =3D id; - reg.addr =3D (unsigned long)&val; - vcpu_set_reg(vm, vcpuid, ®); -} - /* L3 index Bit[47:39] */ #define PGTBL_L3_INDEX_MASK 0x0000FF8000000000ULL #define PGTBL_L3_INDEX_SHIFT 39 diff --git a/tools/testing/selftests/kvm/lib/aarch64/processor.c b/tools/te= sting/selftests/kvm/lib/aarch64/processor.c index 5b95fa2cce18..d158d5aa26e6 100644 --- a/tools/testing/selftests/kvm/lib/aarch64/processor.c +++ b/tools/testing/selftests/kvm/lib/aarch64/processor.c @@ -232,10 +232,10 @@ void aarch64_vcpu_setup(struct kvm_vm *vm, uint32_t v= cpuid, struct kvm_vcpu_init * 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); + vcpu_set_reg(vm, vcpuid, 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); + vcpu_get_reg(vm, vcpuid, KVM_ARM64_SYS_REG(SYS_SCTLR_EL1), &sctlr_el1); + vcpu_get_reg(vm, vcpuid, KVM_ARM64_SYS_REG(SYS_TCR_EL1), &tcr_el1); =20 /* Configure base granule size */ switch (vm->mode) { @@ -296,19 +296,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); + vcpu_set_reg(vm, vcpuid, KVM_ARM64_SYS_REG(SYS_SCTLR_EL1), sctlr_el1); + vcpu_set_reg(vm, vcpuid, KVM_ARM64_SYS_REG(SYS_TCR_EL1), tcr_el1); + vcpu_set_reg(vm, vcpuid, KVM_ARM64_SYS_REG(SYS_MAIR_EL1), DEFAULT_MAIR_EL= 1); + vcpu_set_reg(vm, vcpuid, KVM_ARM64_SYS_REG(SYS_TTBR0_EL1), vm->pgd); + vcpu_set_reg(vm, vcpuid, KVM_ARM64_SYS_REG(SYS_TPIDR_EL1), vcpuid); } =20 void vcpu_arch_dump(FILE *stream, struct kvm_vm *vm, uint32_t vcpuid, uint= 8_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); + vcpu_get_reg(vm, vcpuid, ARM64_CORE_REG(regs.pstate), &pstate); + vcpu_get_reg(vm, vcpuid, ARM64_CORE_REG(regs.pc), &pc); =20 fprintf(stream, "%*spstate: 0x%.16lx pc: 0x%.16lx\n", indent, "", pstate, pc); @@ -326,8 +326,8 @@ struct kvm_vcpu *aarch64_vcpu_add(struct kvm_vm *vm, ui= nt32_t vcpu_id, =20 aarch64_vcpu_setup(vm, vcpu_id, 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); + vcpu_set_reg(vm, vcpu_id, ARM64_CORE_REG(sp_el1), stack_vaddr + stack_siz= e); + vcpu_set_reg(vm, vcpu_id, ARM64_CORE_REG(regs.pc), (uint64_t)guest_code); =20 return vcpu; } @@ -349,7 +349,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]), + vcpu_set_reg(vm, vcpuid, ARM64_CORE_REG(regs.regs[i]), va_arg(ap, uint64_t)); } =20 @@ -389,7 +389,7 @@ void vcpu_init_descriptor_tables(struct kvm_vm *vm, uin= t32_t vcpuid) { extern char vectors; =20 - set_reg(vm, vcpuid, KVM_ARM64_SYS_REG(SYS_VBAR_EL1), (uint64_t)&vectors); + vcpu_set_reg(vm, vcpuid, KVM_ARM64_SYS_REG(SYS_VBAR_EL1), (uint64_t)&vect= ors); } =20 void route_exception(struct ex_regs *regs, int vector) diff --git a/tools/testing/selftests/kvm/lib/riscv/processor.c b/tools/test= ing/selftests/kvm/lib/riscv/processor.c index ba5761843c76..edbdc7bef05b 100644 --- a/tools/testing/selftests/kvm/lib/riscv/processor.c +++ b/tools/testing/selftests/kvm/lib/riscv/processor.c @@ -198,46 +198,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); + vcpu_set_reg(vm, vcpuid, RISCV_CSR_REG(satp), satp); } =20 void vcpu_arch_dump(FILE *stream, struct kvm_vm *vm, uint32_t vcpuid, uint= 8_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); + vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(mode), &core.mode); + vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.pc), &core.regs.pc); + vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.ra), &core.regs.ra); + vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.sp), &core.regs.sp); + vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.gp), &core.regs.gp); + vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.tp), &core.regs.tp); + vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.t0), &core.regs.t0); + vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.t1), &core.regs.t1); + vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.t2), &core.regs.t2); + vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.s0), &core.regs.s0); + vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.s1), &core.regs.s1); + vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.a0), &core.regs.a0); + vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.a1), &core.regs.a1); + vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.a2), &core.regs.a2); + vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.a3), &core.regs.a3); + vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.a4), &core.regs.a4); + vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.a5), &core.regs.a5); + vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.a6), &core.regs.a6); + vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.a7), &core.regs.a7); + vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.s2), &core.regs.s2); + vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.s3), &core.regs.s3); + vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.s4), &core.regs.s4); + vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.s5), &core.regs.s5); + vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.s6), &core.regs.s6); + vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.s7), &core.regs.s7); + vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.s8), &core.regs.s8); + vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.s9), &core.regs.s9); + vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.s10), &core.regs.s10); + vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.s11), &core.regs.s11); + vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.t3), &core.regs.t3); + vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.t4), &core.regs.t4); + vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.t5), &core.regs.t5); + vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.t6), &core.regs.t6); =20 fprintf(stream, " MODE: 0x%lx\n", core.mode); @@ -302,17 +302,17 @@ struct kvm_vcpu *vm_arch_vcpu_add(struct kvm_vm *vm, = uint32_t vcpu_id, /* 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); + vcpu_set_reg(vm, vcpu_id, 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); + vcpu_set_reg(vm, vcpu_id, RISCV_CORE_REG(regs.sp), + stack_vaddr + stack_size); + vcpu_set_reg(vm, vcpu_id, 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_unexp_trap); + vcpu_set_reg(vm, vcpu_id, RISCV_CSR_REG(stvec), + (unsigned long)guest_unexp_trap); =20 return vcpu; } @@ -355,7 +355,7 @@ 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)); + vcpu_set_reg(vm, vcpuid, id, va_arg(ap, uint64_t)); } =20 va_end(ap); diff --git a/tools/testing/selftests/kvm/s390x/resets.c b/tools/testing/sel= ftests/kvm/s390x/resets.c index cc4b7c86d69f..a62de5351d7b 100644 --- a/tools/testing/selftests/kvm/s390x/resets.c +++ b/tools/testing/selftests/kvm/s390x/resets.c @@ -60,12 +60,9 @@ static void guest_code_initial(void) =20 static void test_one_reg(uint64_t id, uint64_t value) { - 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(vm, VCPU_ID, id, &eval_reg); TEST_ASSERT(eval_reg =3D=3D value, "value =3D=3D 0x%lx", value); } =20 --=20 2.36.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 CF81BC43334 for ; Fri, 3 Jun 2022 01:01:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233887AbiFCBBz (ORCPT ); Thu, 2 Jun 2022 21:01:55 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49312 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240709AbiFCAsf (ORCPT ); Thu, 2 Jun 2022 20:48:35 -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 510D31EACD for ; Thu, 2 Jun 2022 17:47:00 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id i9-20020a632209000000b003facc62e253so3050947pgi.11 for ; Thu, 02 Jun 2022 17:47: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=xCwRt9ASaTV3+voHkN81FJmxrFYBbA6lWLKwN9Fy0tg=; b=mcDG2DdNxkNiwni8UMCxiRrS3SuSLpwAl3RZUPzSnOl/jPnCiOXKX53C00LFpApTRt olB3KMJEttycQKrJ7svDpoWepSn0DYNGUgXysDpE0BSDHkknnzO1ZfZCVeZkEPpKbY90 mR3OX0dkYi65tjZn8SGljFHltOdWs+2DJ63HxLD6jaH/5WJrFfCBWj6/VqCbCZM/sc7h NIox+iS/c7jrQX8Uh1JXfmlXPTsOYazymcdIT/tj+rUIRWOPjtfsgFuv0arEtgI/LcP3 jx9AQZOiUu/jefvZoahh6sa5qxV19taEe5TH1fIoPdulieOOpGJMkK9aClyf4EoHGs+P HYyA== 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=xCwRt9ASaTV3+voHkN81FJmxrFYBbA6lWLKwN9Fy0tg=; b=yQr9t0bvOpZ9ZoX9745cKmGIEmqxiPfTgZEp600sVN2+97R1K/e2DgjdI6MoLtsZBr E8R5SY8eHCDlkA4LOYyoVclS9c9Bkb23XJpK90hj/k6+zZpmOlnQ7HMqPN44shNGUFbV pb0MU87pe2TKRKtWKjEj16bjs21ii6fl/1Y3c9PlXhhBZV54E7Ba4geIWmeOCaInHEqr YCBfZZxN7TzRS5rO1nYczTD0kB0Cz0atpuOXo1i9BybwhvQtI+tVs2JZlddoQNccqGY4 A0gsW8X+w/MidNaFuMaA0TADraFzyNhQVDQODYZ0LRa80x2n2jsrtMUW57NNa/q8vPjU zL3w== X-Gm-Message-State: AOAM533kfmrx7Wv6xok6/lbbOYM+37o6Mc3Bo5sSASqvevLdlnU9qskK r2op7S2QGnScMQR8XM8z4asL86QE4Hs= X-Google-Smtp-Source: ABdhPJxrnzpumre4tShZ2lmGxl76nQm2VNydMb0RO/lnougEU25QvIPALC+CNGHfpFaNC/9WBUc86kytf2w= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:f60e:b0:158:5c4d:d9b0 with SMTP id n14-20020a170902f60e00b001585c4dd9b0mr7686895plg.63.1654217220262; Thu, 02 Jun 2022 17:47:00 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:43:00 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-114-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 113/144] KVM: selftests: Sync stage before VM is freed in hypercalls test From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Sync the next stage using the VM before said VM is potentially freed by the TEST_STAGE_HVC_IFACE_FEAT_DISABLED stage. Opportunistically take a double pointer in anticipation of also having to set the new vCPU pointer once the test stops hardcoding '0' everywhere. Signed-off-by: Sean Christopherson Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../selftests/kvm/aarch64/hypercalls.c | 27 +++++++++---------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/tools/testing/selftests/kvm/aarch64/hypercalls.c b/tools/testi= ng/selftests/kvm/aarch64/hypercalls.c index b1f99e786d05..44ca840e8219 100644 --- a/tools/testing/selftests/kvm/aarch64/hypercalls.c +++ b/tools/testing/selftests/kvm/aarch64/hypercalls.c @@ -246,32 +246,31 @@ static struct kvm_vm *test_vm_create(void) return vm; } =20 -static struct kvm_vm *test_guest_stage(struct kvm_vm *vm) +static void test_guest_stage(struct kvm_vm **vm) { - struct kvm_vm *ret_vm =3D vm; + int prev_stage =3D stage; =20 - pr_debug("Stage: %d\n", stage); + pr_debug("Stage: %d\n", prev_stage); =20 - switch (stage) { + /* Sync the stage early, the VM might be freed below. */ + stage++; + sync_global_to_guest(*vm, stage); + + switch (prev_stage) { case TEST_STAGE_REG_IFACE: - test_fw_regs_after_vm_start(vm); + test_fw_regs_after_vm_start(*vm); break; case TEST_STAGE_HVC_IFACE_FEAT_DISABLED: /* Start a new VM so that all the features are now enabled by default */ - kvm_vm_free(vm); - ret_vm =3D test_vm_create(); + kvm_vm_free(*vm); + *vm =3D test_vm_create(); break; case TEST_STAGE_HVC_IFACE_FEAT_ENABLED: case TEST_STAGE_HVC_IFACE_FALSE_INFO: break; default: - TEST_FAIL("Unknown test stage: %d\n", stage); + TEST_FAIL("Unknown test stage: %d\n", prev_stage); } - - stage++; - sync_global_to_guest(vm, stage); - - return ret_vm; } =20 static void test_run(void) @@ -289,7 +288,7 @@ static void test_run(void) =20 switch (get_ucall(vm, 0, &uc)) { case UCALL_SYNC: - vm =3D test_guest_stage(vm); + test_guest_stage(&vm); break; case UCALL_DONE: guest_done =3D true; --=20 2.36.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 BEB92C43334 for ; Fri, 3 Jun 2022 01:01:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239709AbiFCBBq (ORCPT ); Thu, 2 Jun 2022 21:01:46 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52012 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240719AbiFCAsh (ORCPT ); Thu, 2 Jun 2022 20:48:37 -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 4143E20BC6 for ; Thu, 2 Jun 2022 17:47:03 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id i8-20020a170902c94800b0016517194819so3359255pla.7 for ; Thu, 02 Jun 2022 17:47: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=hdFyPWZi0ai17pbodYXg7vj/r9AKBRzYNtm6bYFX3dw=; b=koKlrfu+kFaLqmk6swDwBDY7pYy61KO/1h5fyD6UCFuwb3mzt0oWDlYcLL8kRJGc8b 90Qxw7zwPYhdkNv9XseJhYhsKNQPmgIOFary1q1IuoUFYXv+oYIpDXeVfr2Q/KgwmQoy dhDIP0ziYm4y+fDQIrGNI+CFwC7mFtU0yFneEMzFEFqTBKNPxjTXL7mEpzYK0ZewYVN2 MbPgYc/DBbesPW6spgHetX+tw4N4hr/pBt5whZvFKbBkjgq5/s5fLAJ/QyS0cU9YS0u0 vSWwcaIOrdJYf1vAKIv8AIPOYc4ox7f4k5g9D78P0QXiXoGBqx1elRBp9X6ttyCSk+Xv ogsA== 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=hdFyPWZi0ai17pbodYXg7vj/r9AKBRzYNtm6bYFX3dw=; b=iQpWt/+pbiPZ+kDx5c3rXJlmv64KaG1T+L09xtNrmhad6EnMZrFvPu/2bEbQ+R1ewX qk0vu3pXtXlrvqWK429DMGCTX/B3E9x2XvnLNu2MK7dEq2o46WBd9+obWYY3vtBYgbBt ZB1XdaIHv+0rxOcYqTTlQ+mLKD9/xvpyGfyoYMMDFXlwzTXvAs19Jj6grRsmub4FS+1O yQwKKGXpV7F6t++QInlYE/WDB/lOYeY8wLD5pQRTk6Jud1wJSlxQXb/qQKiqj93/1i/R kWg4D/KWFcqufOyBNiilApyKx1tpzWWoEs4t0DkmwmIrkHk5S7RLpPVwn1Eq+9ocYZGI wHKA== X-Gm-Message-State: AOAM530bMOyOhvfAPf/KrcIz00VD8MzMhw8PWCp+Na67wGCduZsa1cGo HrAzrry6rcjPbwnXWePlWC9WglWIc9M= X-Google-Smtp-Source: ABdhPJwR7XfuNqWR0Id/AqJcevxNjb2zPVz7bScoF6P9w77H1tpOEY9S02I9azhdW8nRpzbGF086KrfDJ7Q= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a62:d45e:0:b0:51b:4d60:cda4 with SMTP id u30-20020a62d45e000000b0051b4d60cda4mr7686562pfl.17.1654217221863; Thu, 02 Jun 2022 17:47:01 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:43:01 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-115-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 114/144] KVM: selftests: Convert hypercalls test away from vm_create_default() From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../selftests/kvm/aarch64/hypercalls.c | 51 +++++++++---------- 1 file changed, 24 insertions(+), 27 deletions(-) diff --git a/tools/testing/selftests/kvm/aarch64/hypercalls.c b/tools/testi= ng/selftests/kvm/aarch64/hypercalls.c index 44ca840e8219..fefa39dc9bc8 100644 --- a/tools/testing/selftests/kvm/aarch64/hypercalls.c +++ b/tools/testing/selftests/kvm/aarch64/hypercalls.c @@ -150,23 +150,19 @@ struct st_time { #define STEAL_TIME_SIZE ((sizeof(struct st_time) + 63) & ~63) #define ST_GPA_BASE (1 << 30) =20 -static void steal_time_init(struct kvm_vm *vm) +static void steal_time_init(struct kvm_vcpu *vcpu) { uint64_t st_ipa =3D (ulong)ST_GPA_BASE; unsigned int gpages; - 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 gpages =3D vm_calc_num_guest_pages(VM_MODE_DEFAULT, STEAL_TIME_SIZE); - vm_userspace_mem_region_add(vm, VM_MEM_SRC_ANONYMOUS, ST_GPA_BASE, 1, gpa= ges, 0); + vm_userspace_mem_region_add(vcpu->vm, VM_MEM_SRC_ANONYMOUS, ST_GPA_BASE, = 1, gpages, 0); =20 - vcpu_ioctl(vm, 0, KVM_SET_DEVICE_ATTR, &dev); + vcpu_device_attr_set(vcpu->vm, vcpu->id, KVM_ARM_VCPU_PVTIME_CTRL, + KVM_ARM_VCPU_PVTIME_IPA, &st_ipa); } =20 -static void test_fw_regs_before_vm_start(struct kvm_vm *vm) +static void test_fw_regs_before_vm_start(struct kvm_vcpu *vcpu) { uint64_t val; unsigned int i; @@ -176,18 +172,18 @@ static void test_fw_regs_before_vm_start(struct kvm_v= m *vm) const struct kvm_fw_reg_info *reg_info =3D &fw_reg_info[i]; =20 /* First 'read' should be an upper limit of the features supported */ - vcpu_get_reg(vm, 0, reg_info->reg, &val); + vcpu_get_reg(vcpu->vm, vcpu->id, reg_info->reg, &val); TEST_ASSERT(val =3D=3D FW_REG_ULIMIT_VAL(reg_info->max_feat_bit), "Expected all the features to be set for reg: 0x%lx; expected: 0x%lx; r= ead: 0x%lx\n", reg_info->reg, FW_REG_ULIMIT_VAL(reg_info->max_feat_bit), val); =20 /* Test a 'write' by disabling all the features of the register map */ - ret =3D __vcpu_set_reg(vm, 0, reg_info->reg, 0); + ret =3D __vcpu_set_reg(vcpu->vm, vcpu->id, reg_info->reg, 0); TEST_ASSERT(ret =3D=3D 0, "Failed to clear all the features of reg: 0x%lx; ret: %d\n", reg_info->reg, errno); =20 - vcpu_get_reg(vm, 0, reg_info->reg, &val); + vcpu_get_reg(vcpu->vm, vcpu->id, reg_info->reg, &val); TEST_ASSERT(val =3D=3D 0, "Expected all the features to be cleared for reg: 0x%lx\n", reg_info->r= eg); =20 @@ -196,7 +192,7 @@ static void test_fw_regs_before_vm_start(struct kvm_vm = *vm) * Avoid this check if all the bits are occupied. */ if (reg_info->max_feat_bit < 63) { - ret =3D __vcpu_set_reg(vm, 0, reg_info->reg, BIT(reg_info->max_feat_bit= + 1)); + ret =3D __vcpu_set_reg(vcpu->vm, vcpu->id, reg_info->reg, BIT(reg_info-= >max_feat_bit + 1)); TEST_ASSERT(ret !=3D 0 && errno =3D=3D EINVAL, "Unexpected behavior or return value (%d) while setting an unsupported = feature for reg: 0x%lx\n", errno, reg_info->reg); @@ -204,7 +200,7 @@ static void test_fw_regs_before_vm_start(struct kvm_vm = *vm) } } =20 -static void test_fw_regs_after_vm_start(struct kvm_vm *vm) +static void test_fw_regs_after_vm_start(struct kvm_vcpu *vcpu) { uint64_t val; unsigned int i; @@ -217,7 +213,7 @@ static void test_fw_regs_after_vm_start(struct kvm_vm *= vm) * Before starting the VM, the test clears all the bits. * Check if that's still the case. */ - vcpu_get_reg(vm, 0, reg_info->reg, &val); + vcpu_get_reg(vcpu->vm, vcpu->id, reg_info->reg, &val); TEST_ASSERT(val =3D=3D 0, "Expected all the features to be cleared for reg: 0x%lx\n", reg_info->reg); @@ -227,26 +223,26 @@ static void test_fw_regs_after_vm_start(struct kvm_vm= *vm) * the registers and should return EBUSY. Set the registers and check for * the expected errno. */ - ret =3D __vcpu_set_reg(vm, 0, reg_info->reg, FW_REG_ULIMIT_VAL(reg_info-= >max_feat_bit)); + ret =3D __vcpu_set_reg(vcpu->vm, vcpu->id, reg_info->reg, FW_REG_ULIMIT_= VAL(reg_info->max_feat_bit)); TEST_ASSERT(ret !=3D 0 && errno =3D=3D EBUSY, "Unexpected behavior or return value (%d) while setting a feature while = VM is running for reg: 0x%lx\n", errno, reg_info->reg); } } =20 -static struct kvm_vm *test_vm_create(void) +static struct kvm_vm *test_vm_create(struct kvm_vcpu **vcpu) { struct kvm_vm *vm; =20 - vm =3D vm_create_default(0, 0, guest_code); + vm =3D vm_create_with_one_vcpu(vcpu, guest_code); =20 ucall_init(vm, NULL); - steal_time_init(vm); + steal_time_init(*vcpu); =20 return vm; } =20 -static void test_guest_stage(struct kvm_vm **vm) +static void test_guest_stage(struct kvm_vm **vm, struct kvm_vcpu **vcpu) { int prev_stage =3D stage; =20 @@ -258,12 +254,12 @@ static void test_guest_stage(struct kvm_vm **vm) =20 switch (prev_stage) { case TEST_STAGE_REG_IFACE: - test_fw_regs_after_vm_start(*vm); + test_fw_regs_after_vm_start(*vcpu); break; case TEST_STAGE_HVC_IFACE_FEAT_DISABLED: /* Start a new VM so that all the features are now enabled by default */ kvm_vm_free(*vm); - *vm =3D test_vm_create(); + *vm =3D test_vm_create(vcpu); break; case TEST_STAGE_HVC_IFACE_FEAT_ENABLED: case TEST_STAGE_HVC_IFACE_FALSE_INFO: @@ -275,20 +271,21 @@ static void test_guest_stage(struct kvm_vm **vm) =20 static void test_run(void) { + struct kvm_vcpu *vcpu; struct kvm_vm *vm; struct ucall uc; bool guest_done =3D false; =20 - vm =3D test_vm_create(); + vm =3D test_vm_create(&vcpu); =20 - test_fw_regs_before_vm_start(vm); + test_fw_regs_before_vm_start(vcpu); =20 while (!guest_done) { - vcpu_run(vm, 0); + vcpu_run(vcpu->vm, vcpu->id); =20 - switch (get_ucall(vm, 0, &uc)) { + switch (get_ucall(vcpu->vm, vcpu->id, &uc)) { case UCALL_SYNC: - test_guest_stage(&vm); + test_guest_stage(&vm, &vcpu); break; case UCALL_DONE: guest_done =3D true; --=20 2.36.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 6DA26C43334 for ; Fri, 3 Jun 2022 01:01:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239373AbiFCBBi (ORCPT ); Thu, 2 Jun 2022 21:01:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51718 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234189AbiFCAtq (ORCPT ); Thu, 2 Jun 2022 20:49:46 -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 B2211245A2 for ; Thu, 2 Jun 2022 17:47:04 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id il9-20020a17090b164900b001e31dd8be25so6407875pjb.3 for ; Thu, 02 Jun 2022 17:47: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=1bl+lfBCivKh3stXZwAa+/Pwegy1T+bX0bAJQr8vw/8=; b=ZSSdTOuNPJdfN/ES4kW4YgJHhdnNjcQxG3zeTWkpq1CTmZhRhITnIYKhsmm/tzFeWI xBN0wIpH4XiSaIYgeA2MbeMebE09vNDDD4S+sXqGhhpIVmwn2RzDBZPbgU+f0Uwy76A9 07eHeMNa6Tk9XSKZqB/mNvWYEKAw0yLFwHikaLw3EqSX1QyuPi+obDMOMPpfpQbnIqyw unLwPbo9zmKnFf8tbdpkzT0tN5Y4wBWuYY5aeKzyLggf+/yYDAJGIuiWDYSSh6y5cOv6 IOAlmDVB5tQxooWzro4Cb+XG0CNxCNVV6Wu9TOMygfFIaZA9bZhLjdjpBZKUdW44Q0xy CZXA== 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=1bl+lfBCivKh3stXZwAa+/Pwegy1T+bX0bAJQr8vw/8=; b=biuf3IZSRnCk12QoieOmsTZMzX6gohpWcggE3zuawRK0aga8Ndz9zzB6um08roqGXf Kox3HeMK4S7kOom+1om3TLZvpBnh/yDdeka3V3VVGx5qU74TavgMuY6o7vCKLZz/npTf NVUmbxGGg2LITfSZJ73OyoBMW4XvAsn+bWg3bpIBP6kf3FO+cO6snfpVLBWou3XLed0e hWNFDidaahi/84SPiQGqzUdA1hnyi+LV+CGWDMy5ReXlOMkqZ2s+kMzF2snGfKumyfNS XhLWNseNXdXORH8TvkQQiDAVb5eycU80o52ZO42y3Ad6+OlWNElbhzGYgZKxHNF0ATb8 j66Q== X-Gm-Message-State: AOAM533dungz+MY9y4vIvfUZY+MwkGDaCRG7/QrQUBOqhqlSZzkz3YE+ 5b3JDNa5qT9AYtgSy75B99GZcfV0VXE= X-Google-Smtp-Source: ABdhPJzJkP4XHZ+JfLUu46ZO03Y9nDPXMxobVMBA0BBFB8s7XBmPuEwqnza3BckSUGaI8O/dmio10U0yPfg= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a63:c10:0:b0:3da:fb56:648d with SMTP id b16-20020a630c10000000b003dafb56648dmr6547789pgl.590.1654217223718; Thu, 02 Jun 2022 17:47:03 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:43:02 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-116-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 115/144] KVM: selftests: Convert xapic_ipi_test away from *_VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 207C5CCA486 for ; Fri, 3 Jun 2022 01:01:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241916AbiFCBBU (ORCPT ); Thu, 2 Jun 2022 21:01:20 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48904 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240792AbiFCAuK (ORCPT ); Thu, 2 Jun 2022 20:50:10 -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 A2E9923BE0 for ; Thu, 2 Jun 2022 17:47:06 -0700 (PDT) Received: by mail-pg1-x549.google.com with SMTP id t2-20020a635342000000b003fc607eb7feso3040323pgl.20 for ; Thu, 02 Jun 2022 17:47: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=w2AyEzcBMjLc5ThroQYSL3RWFCTuJPRZmNCz6Ggfxlg=; b=HqnRzKbGGG9eUVwub+6PED0m2IoSC2+3mfKWuV9qbGnSH0hIUBxP9deaNhjBEPPhmy oCtMva5q5zFtPOCF64UsfhL1lxBeLIgGVacu4/52gOB17T78DdjIm1GNazyAV7jmRLCl kixoBXegQJngkk+LvHBD0NPKkEdMz5qVlmi0U3roM4qvut8U7ROD2nspgRM0LoD0DL01 dFCkBR2unrvTd28Bk47rgREatKe5I47CoyFrVmV9anVl5sg0FRp2F3TvY+cUIFvFBS4t mi19owyQCrsMKJbLzz0pDgAi3lDony9YhMIxs0FbmNNODQxMazP0UG9qvtz6Alg8Nv3/ pxlg== 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=w2AyEzcBMjLc5ThroQYSL3RWFCTuJPRZmNCz6Ggfxlg=; b=Xa6q/sc4OemlXyWd7ZKXyEPgqfV9KYeYh9mEKRbpjsWXvndPADlBFx1PH5qSqphYZ/ hO6i8bwrhx1YCbuFuBYfdpgLWrvolMBLiP99/YUgLW2tY1VDzV3tX/4foK8cb31lorZf jz9a6PpCcdW0+EWCeehmeKXPAMfLCvNideaGy81toqEtSd+Bhe2aVix1NbifClVwpRUo 9r7VWBrfubvwjoi/+9qOXhjNPIYThQHUCgM0AcnqMuRbryiBrTzn3PWRLF3iATmBnlIO MGJ6FXWPXL0NUMpXpGrC/U3mtd190D5rtnkIDrAZQiw6UNRrIf56EFRc++smTMT6o8Fq B4sw== X-Gm-Message-State: AOAM530OaKNc1ng/M2vk5gY5rx+Vm8+lebvn6rVEeZsoB8DCQZ06QTYt gy7GEKFmaTWFfqj0Y2PROAUsV9fBATU= X-Google-Smtp-Source: ABdhPJwGf2IjFqoBYzy72CXSw8pZO8BluH9ukSAArTU8S6IZuIRc6c82IiI8qCRqMhwINDeJm1fEWUtHaQY= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:903:130d:b0:164:17f5:9de5 with SMTP id iy13-20020a170903130d00b0016417f59de5mr7870605plb.132.1654217225617; Thu, 02 Jun 2022 17:47:05 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:43:03 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-117-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 116/144] KVM: selftests: Convert sync_regs_test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 9AA26C433EF for ; Fri, 3 Jun 2022 01:01:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240713AbiFCBBd (ORCPT ); Thu, 2 Jun 2022 21:01:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54918 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240577AbiFCAtv (ORCPT ); Thu, 2 Jun 2022 20:49:51 -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 B1C0A240AA for ; Thu, 2 Jun 2022 17:47:08 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id q62-20020a17090a17c400b001e31a482241so3403971pja.5 for ; Thu, 02 Jun 2022 17:47: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=SUSBvq+yOLMaxNvGnQWV114iFEv+Mzc/vwuqUVp/f1w=; b=SiWy0tDdCzYtE/3vy+MHM3jxSD2HfYrrWSZ4ct5jdxuWjbBNMTNpQMk9Bff2jMXG/s SBzHimlCB8bKCqp4/nTUuYGhpDfIVG2OESdiiXSOE2R5MdzznLw88/imQNpgAiu5dT6L Z5ICsE8ucbL4ogOUQ+JBT4AIbqAc3HT9nuHSVFSRD3eyP5CTeRG/apxoz3E1stJm/d9X E8NNGkOqXjzbxMLdxhLPL4xWCREcEyZDLPmf+fnz3wWsWtiKAt37eb660Xn9pMfyKnft MjoMYVPBlUqPF+1PIk6XeJIaDiBPH3XVIGbuVFlmD5Yvh3/mb8CGj/E9qAqtD37hkKkt h7lg== 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=SUSBvq+yOLMaxNvGnQWV114iFEv+Mzc/vwuqUVp/f1w=; b=Ms7+s6wjiiqR9v6sPL40kxIml2/Tn3g/PKRWKCqwVtoqSBdGD5qrnNMi7W1CaDluRy y5wXckIcgwvPrQZ3n04d/kpsgJLMkU7EE6UOzqav4bhTxa/XRb4MslKwxQt6N5Uk18qZ DjolGOJbRp5wsUZ8fo80eLUOUwruqwayq8IBedVgvzagQtMB8thHXCBEOQ3Quh3p/dsH 4SWwWa+JYLoHz3NQrvvg4dsqVBiLN85yRki1/mHwe1LgbVBFBsjtcnqHgtjh7D0tXjEJ B66WUELF08WQKyRJyBUNVOm/poeYjfLJXjNdoWXbdo4OVMl47p43Cnu0QYY0DJckZgcU vOuw== X-Gm-Message-State: AOAM5319ckyvtZU+m83x+RtW0jyN+rTASo8PYtTGpyvKv1lZoe0xX/UE MdNGKZeC430fLGa8b6S5YgNAURJLb84= X-Google-Smtp-Source: ABdhPJySs/uBwgb/u9A64yPk/ISneqKw1+cdikIpTTTUATJUs88xlMgcihxZ5bcMsIK13hBtPu1dMwZ8lh8= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:249:b0:1e0:a8a3:3c6c with SMTP id t9-20020a17090a024900b001e0a8a33c6cmr307326pje.0.1654217227378; Thu, 02 Jun 2022 17:47:07 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:43:04 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-118-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 117/144] KVM: selftests: Convert s390's "resets" test away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- 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 a62de5351d7b..f7b938f9f2c6 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,22 +56,22 @@ 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) { uint64_t eval_reg; =20 - vcpu_get_reg(vm, VCPU_ID, id, &eval_reg); + vcpu_get_reg(vcpu->vm, vcpu->id, id, &eval_reg); 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 @@ -83,19 +81,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 */ @@ -109,8 +108,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, @@ -124,13 +125,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)"); @@ -153,36 +155,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]; @@ -192,73 +196,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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 0FC2CCCA487 for ; Fri, 3 Jun 2022 01:01:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241892AbiFCBBS (ORCPT ); Thu, 2 Jun 2022 21:01:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51714 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240777AbiFCAuJ (ORCPT ); Thu, 2 Jun 2022 20:50:09 -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 92FF6248FA for ; Thu, 2 Jun 2022 17:47:10 -0700 (PDT) Received: by mail-pf1-x449.google.com with SMTP id y66-20020a62ce45000000b0051bb4d19f5fso3210235pfg.18 for ; Thu, 02 Jun 2022 17:47: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=3sXZVFdjdjPOWfOq6qfd8QMObItU0tLqpjHp9hxxyGI=; b=cx/LCUCw5HvQFQi3Jpm3E6ICMsKJX1uZO9G/yAp6Daaqgxi9qQlNnOuB1Kqm31oSTl cuAP4BVKnlNXjKkXV/jt7HkMt7j+4aSAFxuKJofYxOobAvKe2vnA7KscGNpL++9x3jXA zrsdr/KahNuqMNbXTUhwSNQbwfrGx/RJMg9FZPHgCfOZJgfw5t/uwCa+vdo9hQiA22pm MEy7Oy8OBnqnlgxMVKqQr/hlCNkyCkWYAP7e8qjo2dDncAISG6IBIXhW5LfDGCIxXjo6 0UVZOAquPjYtE9wV12+RKpXwcQtfkpbTtPe5pmm22y6hbcZKxysR/ocEGqn4T9jVyGSY 1AXw== 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=3sXZVFdjdjPOWfOq6qfd8QMObItU0tLqpjHp9hxxyGI=; b=Ph39/k9kJnDuuDDXz8RL1LvsFW189MpDZS4AEnmvhZ7a0x1Y284Y7lknp5mjcWBij+ /mQt3pYy4wVN5bvzwfQKN3YI8rDTKwGlkwVx09RhuXd7gQliBJEmi+nMUx2wECMTWfo+ 4wQaFwX5KP7agxMLaJmCey0Jn0gc76rBjlQ/1cMakpKdfhVMz3jcfIuVQpCV4cSubkKW O4QNkJI24TJsHZzHgkDqFIUXIdCFL89XlUmMDmYjnxoal1fhoqWE3XufKJPqFfo1fmss 46NiWz5xukGNZ9DOFc+XrWNPi1x/XMYqcNl4mIJrA/tgBTO2SbNFcTNVn+MM+b2Syko9 kbWA== X-Gm-Message-State: AOAM5321Zg1zncwyEBiQH1B2Nc/EOrW5nWMKpzzG4u9/zRdk4/+Yddmh +xCbwB669bV+6CyygZM0ee9gMV2riAs= X-Google-Smtp-Source: ABdhPJyUCxypeGv866RLpUKxu59d6jfAc05aVk13puCksMyS+Kkt/f1q6/JBweoOZ8Fv1oUfk1UQYW7Ec4c= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:2188:b0:50d:b093:12a2 with SMTP id h8-20020a056a00218800b0050db09312a2mr7686221pfi.84.1654217229371; Thu, 02 Jun 2022 17:47:09 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:43:05 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-119-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 118/144] KVM: selftests: Convert memop away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- 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 206ebc2df2d3..d79796e1034d 100644 --- a/tools/testing/selftests/kvm/s390x/memop.c +++ b/tools/testing/selftests/kvm/s390x/memop.c @@ -98,21 +98,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("); @@ -147,25 +144,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), \ @@ -177,13 +178,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__) @@ -200,7 +201,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)) @@ -212,21 +212,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 @@ -241,14 +242,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); \ }) \ @@ -267,7 +269,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); \ \ @@ -282,7 +284,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); \ \ @@ -623,34 +625,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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 3AC99C433EF for ; Fri, 3 Jun 2022 00:59:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240588AbiFCA7M (ORCPT ); Thu, 2 Jun 2022 20:59:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34380 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240784AbiFCAuJ (ORCPT ); Thu, 2 Jun 2022 20:50: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 A409B24BC8 for ; Thu, 2 Jun 2022 17:47:11 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id 35-20020a631563000000b003fc09751ce5so3042248pgv.10 for ; Thu, 02 Jun 2022 17:47: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=atArEiJp1kb8rVKjSaRcbMKJL55Q7qDngNFebbBXIus=; b=a4XpsL8IxxkJ+JjrZIOeRkTqsKontYyIJN3q84RteOSVBDdZlYMxWdTZwTHTHMPQEa RaRdV7i9NZKle0Rmz7tf/limvDNcWuu2Zr+TwvkIkwW16FSXNDS394uZclLKYk7nOy0t JSTbPgbjb6RQz6F44umXnb2QdnKeZ8xvHan50z698w74JneNTfCHVQHn/F+hPGA3hetg 6HDPegIZl9Ie6X90WI9yrjXo0dKo3fdqDl8Jth1VaAwwuGHQd4PIWKwZI0RGrrULlwmA hLUKcC/B1+meOqS5qOXXS3po5TWa/9gKlv74R/Hkcy1LFLKe6rJ4qjKPU1ylqx0uloYH zILg== 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=atArEiJp1kb8rVKjSaRcbMKJL55Q7qDngNFebbBXIus=; b=gVzLcqHNNEGn+aSmIGoiaH/xrUv+G1ZrdbMdic3vWzSgS0150YSfGeyZGJzNUUIP1L i0MBMicwKT5LZKJi6RKBauFslaaxKymvZf3xU3lohpAkWcA2sCXPZ7sN7LTouhyvijpo FnQz++/M7UhUn4LtXLefFn2BqTejzjCjNcEPiU6/joRDslecX0OmnzPH7ENUWdEkVdbR IN6MYFbmXa3rH0rA6KgrMnGFVBbGb7kzIMOgGHyCKvTv7dFc/xlbYAjsfJopoW8h87Rh ltJ9N9ueSL4cyBR7Lcs39ngury29eiZimLt3SOQJa777aakOYkUXckq+v1EQrK1w9UKy +9uw== X-Gm-Message-State: AOAM533qpwAJTNrZJO5G0l2PLIxMeRcXcOScBx/zi45daS2mQ8jJwiBe 5Tluw8PIKUC32B0Gajq/Ia004+g9QPg= X-Google-Smtp-Source: ABdhPJyNb8kAM+QHeYchzj+F8Cq3TlF26hN8NFqs8SmsmkHxITbp+A0uJYgT7Ah/Ak3tRlido5K9J7Qt7Sw= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:903:120a:b0:15f:99f:95bc with SMTP id l10-20020a170903120a00b0015f099f95bcmr7650867plh.48.1654217231179; Thu, 02 Jun 2022 17:47:11 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:43:06 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-120-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 119/144] KVM: selftests: Convert s390x/diag318_test_handler away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 5911CC433EF for ; Fri, 3 Jun 2022 00:59:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240771AbiFCA7V (ORCPT ); Thu, 2 Jun 2022 20:59:21 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52026 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240823AbiFCAuL (ORCPT ); Thu, 2 Jun 2022 20:50:11 -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 5E19125599 for ; Thu, 2 Jun 2022 17:47:13 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id e18-20020a656492000000b003fa4033f9a7so3046202pgv.17 for ; Thu, 02 Jun 2022 17:47: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=K/GapKt00lK/b4VH6VZbwUeiACCV/Jp25wTU5LlSjEo=; b=X2IXT0RmsF0zY/r3+rcg0G7C0hrE6iS6V7KKD9p/Np9QtCskPO4GV3cO12gYN9WkuQ NmrQkBRkm0xx/qNrO+qcpzNeA3OWYrg4Wdf2MOUFsqs6NABGXuoYzjQ9LbTkx1Cz0nw/ tDFNbiEEiAgSx9ThpMfoOAjWs1dLWr8MAymUezFgk/+tw2hG83Eu85WG5ozbm/ibnvpo XRVvbALpSWY9OXefaPMAzOuehDGC3S0BQGbDhXw0vBxzaN33WJfDfxE345WhdQTz+p61 8SUjfqRjN2lBSGP4ijOgwaR95ECZJcwb9SYgp71aVhFNvbZXcdbC44OEfNM3Gakd4TZZ a+lw== 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=K/GapKt00lK/b4VH6VZbwUeiACCV/Jp25wTU5LlSjEo=; b=ZLwHAfAxfN0dHZ2jRyDeyVLzlSBSErq97kQ+0PpE87VjyAkLaUGFBGmj5RcicFIFHe HbOfK6oZ+g3sxk4EsWWgzRtvRW7boshQ0+SgX34qSXZKF76KiLAFuE7Jofw542pwXjgE wkTZcNMhmOdlDKE0ScO+ANZELVLajooVbpszU9CIb8dwBEKecflP7ePtEYpzePZJK/eC dU09Wsz+kwcoRVPyVG4dhnvMMLKghqC2XCA8Miq/ZEoQMV1Ro64c0WnZJ1NZLTPYPjrE MTqp10Ts5f5LdMZ6xJ4072XbqMSBrMbyfbXITZKmtFz070xQjVNJCF3FASNpAwHzTZI1 p5XQ== X-Gm-Message-State: AOAM530KMGjjmJHfL2b+rI9IEiCA+NT4/+0pfqqhn3vP6aj257XM1O6i 8JZo0LKXNX/NoCaHjkzgU/1VNHzLq70= X-Google-Smtp-Source: ABdhPJz0oMbc6PF/cdXfz2aYoOC70tde2qgRd6ZW7Z+zU99O3rq6X7xmmqJ8NqW4An1irf8rGoJk5djhIqU= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:1a4a:b0:518:bbd5:3c1d with SMTP id h10-20020a056a001a4a00b00518bbd53c1dmr7756741pfv.64.1654217233017; Thu, 02 Jun 2022 17:47:13 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:43:07 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-121-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 120/144] KVM: selftests: Convert tprot away from VCPU_ID From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- 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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 0C5DBC43334 for ; Fri, 3 Jun 2022 00:59:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238821AbiFCA72 (ORCPT ); Thu, 2 Jun 2022 20:59:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51834 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240868AbiFCAuN (ORCPT ); Thu, 2 Jun 2022 20:50:13 -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 5177625C7F for ; Thu, 2 Jun 2022 17:47:15 -0700 (PDT) Received: by mail-pf1-x449.google.com with SMTP id j23-20020aa78017000000b005180c6e4ef2so3489678pfi.12 for ; Thu, 02 Jun 2022 17:47: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=hafZYDGgSJ5oFFeJgApxeOqZzhtoEWbmbZkm/ZFP6EY=; b=BFIn8Zeh62lOVKuLdHrV6z7PwDAx4rOZUpY+dQfM/te5p0aQ1pRq1+RwRcnOZm7f33 5dDmrsa2wb6AuAeyjihZzR7u6IFXFh1qPRgXwVjPpCnUdv3vGDC7dXvzaVG2rsSn1XAF M6wvb31EsybnlJZtgDLHWupJQEe+MNEkEVOCejRcBy5BoT2kaSWWyGj/6jzk7l1E8BBJ UeAo3sy/Fi4AyibqcaCpv+6jW3RT8qn6aEipCtmAfz7yjyjrvhDsfgEO0YSfUu4V2eA3 JeeeJImgfF3eBCsQHvf8TYWElysCJgyuCSV44I/2S7OWLtWMEG4x/gPv+ZJRtHswE2FH W89Q== 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=hafZYDGgSJ5oFFeJgApxeOqZzhtoEWbmbZkm/ZFP6EY=; b=N0ZoorIgfHtjwiRsG/JP+Mogbc8Q7CHD6M1NrNHJsMVuXqMA+fAhE641CrBfnxjcpx t6IeMpLpYqnd1mh+y4wQk7msCl06j3EEJPPY70a8/p+At+g7wE9Ef1yYgvXQtewanxSS TH55iikM2g0mrq5Ofwy2AAOnOnVrPZCIsiUjyB7Q1n1Bs58EoMH8bcyPtNOx1v8as/wV v74Aebl/03J8xAFCbq2OfXg6qIMr4B0l4xP86hBeRr2/4VzNo3Ub0ZwFCwiMrB/fLeiH dHN2ZqWfLIMJSzCy7dI7WOclliohyCHk2MvcNXQRgXjmQP5Px77jXcMoePVm1RXyX/Xe hOKw== X-Gm-Message-State: AOAM5329eXz2KqaChuuDFaPopfrYr0y0MKxMD+4etLu+NbVYbELrcS6i 7RPmAZGw4mA+vGVqPj+Pw9O3bsLzaXk= X-Google-Smtp-Source: ABdhPJxlapv4CHNXsH1gmdu3wws4ZOjYR5hqsK3EaxTf7Dj5cAsfititI1pTfA7PJVOVNK8dQn1EPBqDszo= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:db0f:b0:166:42b5:c819 with SMTP id m15-20020a170902db0f00b0016642b5c819mr5582019plx.96.1654217234852; Thu, 02 Jun 2022 17:47:14 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:43:08 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-122-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 121/144] KVM: selftests: Use vm_create() in tsc_scaling_sync From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- 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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 EDC43CCA484 for ; Fri, 3 Jun 2022 01:01:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241875AbiFCBBQ (ORCPT ); Thu, 2 Jun 2022 21:01:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51824 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240873AbiFCAuN (ORCPT ); Thu, 2 Jun 2022 20:50:13 -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 3CB4C26AC1 for ; Thu, 2 Jun 2022 17:47:17 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id p2-20020a170902e74200b00164081f682cso3464547plf.16 for ; Thu, 02 Jun 2022 17:47: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=Bg3FPUcZataZgkboHwnXDx99Xu5ipyIuGSF/1JKcQfw=; b=r5WSnaka7CXH0wlXynNN4uQxttq7kJ4YsbzZ0enYjpYokYGKDW0qbKDCg7eglLaapy F26w1RHjl9BMrbehybOrFS7Prd3nJNTOkk/wlH2sRTn2oqqZlYsIBSlEEqmZVimS5eGE 11JkyiFyYMMhS1LEMVouylNR+RKaX7IeE1S74qkitrUnZIy8OqGmDsYl6DgmuOOoEhx0 R2buenp+ruYspCJ18AjikS+dwpkMqKiQjJoQRfC6ViNSwi1YzsX3AyeYa39S6oAE5zdc hDjLU0AJ7VLT1aQfqgm4eUQtLFunPObAs6mPx6KBsfygcviGukDD+lnoUfvvwrpZy8oV zbag== 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=Bg3FPUcZataZgkboHwnXDx99Xu5ipyIuGSF/1JKcQfw=; b=tIEgLK4sbpEGtgaNp8rVVIHAoQyofksL67gU9FTHMLLl1WVvCj8nuEFPxg1e83yJGo HK1Z+jLXDJJI2AUmNgwIlSTChfcQo/2zzam4Bi13U1bGopMKWPZ5+FuSM/ZYqoxhRtqz xRsbZl/bZvGk7+Uid55m79KRk4RQK0aNBUqdG0lWWia06+KamS8HxKN7BQhBVNB147r9 FMcDwjCrJO2lN++ZF/qY0I3NoM93f3NCEb4okBQmNenkbAKANaxNbKqYEoHSgvdGiwnY ZROELXE+x+8XSUc5ByhExI+Z07W4cdbw9fUCP0q25Y0opCjg4QULCW6nNNM+NFv0+Ij4 0ezg== X-Gm-Message-State: AOAM532KQ2l0Rdmijeyp4KGG3bNHFhFm1xRA46UsuH4KMZzZ1ReMDptt oT18N+bg35fjyunCsbn/b4X5OxqxtG4= X-Google-Smtp-Source: ABdhPJyTO9AHxnuaCGvBwIyBSheX/uf1B7aKrIh+JpxC4rT9IMTY2p60oDRYrHIZnzTXJAtOBByGLqLBGvc= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:d01:b0:1e0:2e32:8650 with SMTP id t1-20020a17090a0d0100b001e02e328650mr8094037pja.156.1654217236702; Thu, 02 Jun 2022 17:47:16 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:43:09 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-123-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 122/144] KVM: selftests: Use vm_create_with_vcpus() in max_guest_memory_test From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 58B2FC433EF for ; Fri, 3 Jun 2022 00:59:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240861AbiFCA7d (ORCPT ); Thu, 2 Jun 2022 20:59:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51974 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240940AbiFCAuR (ORCPT ); Thu, 2 Jun 2022 20:50:17 -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 AE8D328999 for ; Thu, 2 Jun 2022 17:47:24 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id f2-20020a17090a700200b001e6896fbc14so1623374pjk.2 for ; Thu, 02 Jun 2022 17:47:24 -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+UkKD8zfYyaw5dICDDb4lul7M0XYWsAbXRSSleGEkE=; b=bumzTk2U/NhSUJymaQJZo+xCmIR/LVIptbfTbsl1kFJfmPlWlp7+dQ5GyvcMKYU3Qz T+DV2OKIUEr/8OwqTDRsXno3SCLcAr2iUw3DUGjnJ2jyBdnLbFbhaQ88wcw2iSHd+ASc k6vCk1IE96PkOzRqyE7emFixovrrXIxGIyEQWYwoxF+l+M8XluoExKO25YnuIO/7wYOL kp8qG4guk0m5ynNbIQ9D+nJhLoJCCA/fpyycpEUxgYsmrlVtYr+UY0fhjN1yVzX2jJsH O4Ex3XkeS2zKDLC2HrJT4LWKhc90HoeKzbRw9Mg25kWo4r4QaRALTmdOH55gA3GrETx7 y10w== 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+UkKD8zfYyaw5dICDDb4lul7M0XYWsAbXRSSleGEkE=; b=l8N1XMTrIFRaZE9GZtcRcdbmthi5q2O1cMMquVHmebf8VdqHXr1z9uFPCr4dkTSBl9 cMlOcsj84TzmEIu5xFpBjC0285NjTrTv6JGdC/BqgqOPoQG8um8E6yucX5UspOj3JC0t RgLQQxbVzKp9dtRuL3YPK9naWTBPKl7guViWOh3tlBNKEtalX2DSJWqhCyaofOFanHCl 5z+hn5Cz/86n2tN3EglAGsnczXAn+5ITYFJLdTLtskm7plW7kh6EmbnISYwrumr3MHvr oxewcRuCFhAPo6kLn2rtnyOYh6o9RZNy3TSz0DNwOBTCdzz2ptAlNfHLvtCtcnWpzB5v zUzA== X-Gm-Message-State: AOAM532C1Ygtb9UNgV33/pyFCaObJGdGzRqY3rDuEF5puGBpkiPvf5ja 2BDN/Pb55sq+iHN9fW3PP9WRm3rM9Xo= X-Google-Smtp-Source: ABdhPJxFcOl4xBRc4T9lcmjMXu/s6E3FEQ2mHK/RyLSUsHMpSoOfiP+5Vf5ElPvR5NPO1rSa0dFf1Xm8BU0= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:996:b0:50b:76b8:3bb1 with SMTP id u22-20020a056a00099600b0050b76b83bb1mr7870916pfg.9.1654217238479; Thu, 02 Jun 2022 17:47:18 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:43:10 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-124-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 123/144] KVM: selftests: Drop vm_create_default* helpers From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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 9c29b6797ce8..90521c5716b1 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -559,29 +559,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 132a591ba029..03a26ef6a611 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -337,28 +337,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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 D9052CCA485 for ; Fri, 3 Jun 2022 01:01:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241857AbiFCBBO (ORCPT ); Thu, 2 Jun 2022 21:01:14 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49318 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240874AbiFCAuN (ORCPT ); Thu, 2 Jun 2022 20:50:13 -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 8F68B27CED for ; Thu, 2 Jun 2022 17:47:20 -0700 (PDT) Received: by mail-pf1-x449.google.com with SMTP id 144-20020a621496000000b0051ba2e95df2so3498294pfu.11 for ; Thu, 02 Jun 2022 17:47: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=cfSqxZ12Bjmq6fmiqxfECFlT4VDOjDnjNktcrPKbpQI=; b=UCv4baQORggiyocez3lVcY3vzPmXcseuz4pxcWMKcKupvktD9JW4edCO4HWIuv84mn KMyY9egFWEv9ys20K/RR+jbzr5+kBu0JFZNz4BWF6cxQbnNljTMMb8FP0DlKa3gXfM5Z n7cIbmnmeZdB1TbaL18darlvxrMZ8FK9pzGlnuo6QrOWhN0T3uDEuuFgv4+89MLsUttd L13IEAiNyzan76FWmcoTZZ/p8kRnK6Uj8CB/7UwiJO19sDz25MTJRmtFd5iUrovd0hZI rolASGT5RoHEgWpiBWxfQ2T2KaETqYVg0qICExrryGYH8SpuCMqRkXEm76LkbOJshBSG CpvQ== 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=cfSqxZ12Bjmq6fmiqxfECFlT4VDOjDnjNktcrPKbpQI=; b=U3eQdEX+kqil1wb4Ti/DOCQWJhJGBRyGMzQACrM7FCqegXhCUHS35tohiyA06a6UMn iBhovLTCWDCxYD6GS8n+Y2dT7jCK4nCLF40JTakfcHrEnQRd4Canf1GZ8lXpf/OjvL/i WKUbNSj1wFEomTkGkqE/5UKIKI82Vv0Oa6lMNBpxp5nRMu+2UE4Bv5yNNBK4kN6x1Drc pe0w7fL16KTtT+6lix5S1VL5y8Ux9mDiwCv/X84tHl1yzpv/ZJgjcoZ4sJg2XMFh0R6I 8x7sO9p/vuEySkNWc3uLjsfdAs/XNTcMv1PayxyrpK4ZYDhY3AiJIIMs2uIrfV3jMQUZ 4LcQ== X-Gm-Message-State: AOAM530fZLFAnaffj4vEODBsbnp+3FOdTfX+XtiCYuovAQR5B8h38Tz9 zOy5RDYLeVr38XimnF6MfkiDCmrmqrE= X-Google-Smtp-Source: ABdhPJwA0ysu6SfV0rwFqm0B9SriMYHztRZCR7qUr75BrIGBBpLYu9QxeCDPsltwb4RmrUmbNsbBuSdmdhk= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:cf06:b0:163:62cb:250e with SMTP id i6-20020a170902cf0600b0016362cb250emr7609751plg.171.1654217240324; Thu, 02 Jun 2022 17:47:20 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:43:11 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-125-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 124/144] KVM: selftests: Drop @vcpuids param from VM creators From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- 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 90521c5716b1..f409bae336d5 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -563,7 +563,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, @@ -571,7 +571,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 03a26ef6a611..6ba28018e723 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -299,7 +299,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; @@ -327,9 +327,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; } @@ -345,7 +343,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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 C3FDBCCA482 for ; Fri, 3 Jun 2022 01:01:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241834AbiFCBBL (ORCPT ); Thu, 2 Jun 2022 21:01:11 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48792 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240972AbiFCAuT (ORCPT ); Thu, 2 Jun 2022 20:50:19 -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 671C129CBC for ; Thu, 2 Jun 2022 17:47:25 -0700 (PDT) Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-30c2f3431b4so55479037b3.21 for ; Thu, 02 Jun 2022 17:47: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=QoJEOWj2rplHTSZquk9HeSE/5Ypk6TdeP6IEy9Guv6w=; b=nvC25J7Stx/dAZEe/aoNDTFmgMNYA4AFs85B4Sxfhw2gffdZ+E1yPTCpJMKBxsD61z EIW+NQqx6Bf7Y3iYww+ANNkJVyneKs0guSX04pSn6XWiq7Or70oX2lUfUAHGEExCOQQ6 OOEUEM3LimHrXHJmVDtvIM7jYtRYrlDY+tM3Vv2sHYkKl0pwL3DuZNy8rWA6ldDxKA41 KaaVv50ZZp2mpabtDADHcTKLhIAqyibhnTPBxOPoa3cFjp/WaBKG5cSRWAUBVW2/1Hyy bXAnDfjzJGHpElJ+b18OzvyWD2F/c/+7QMAC86QORbiOMTA41gYtsozO5yFcWtK0Elw4 Sz9g== 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=QoJEOWj2rplHTSZquk9HeSE/5Ypk6TdeP6IEy9Guv6w=; b=mb3VNCbltjoOvSSz6dAX/K4CE2ERDzDqQqk3RwxSOTto5GuL6+WMYNQenEMu+OPzs9 e7BwJ6gNB158+YLMMEZUEqwgaqTiN94/jH+8++QMZiZL9GF6qRAdVXABAoXkwSY8njYV YdS4kgzyLEjpJj5Nj83FmG9oFpUTJlxTJ0GuE/OXWQsizDAKQZbBaGe5a57QHqPz6lsw AtEcMmNcuWWREFsydbQdLg1OVYqzx8cBu8qeNs6ak++5VtqK0ORQ3mtIC0Mt3T/xmK7B eDr1S9pF+pYtpoUt2T5tNtb/jZseUDyPAN/XXsaenpX4KeMMESagtQ9UF9CvZmFqaJa3 seWQ== X-Gm-Message-State: AOAM532r86/Ld823x+Np/NOdYqpOsw/dZmvenla1aTgxjwO84qG3+QIi 7D/XyI1THI3eiRgKbYGDdqk6yjWF2to= X-Google-Smtp-Source: ABdhPJwqCOh630W445vnh0/mc0WZr0Sn6dVpMiZ0uGorGpWxF5a5uFPZFxKY79aPxF7zMEnwIDZTSia8As8= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a25:c201:0:b0:654:36f9:f76b with SMTP id s1-20020a25c201000000b0065436f9f76bmr8171227ybf.339.1654217242152; Thu, 02 Jun 2022 17:47:22 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:43:12 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-126-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 125/144] KVM: selftests: Convert kvm_page_table_test away from reliance on vcpu_id From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 AEFC5CCA483 for ; Fri, 3 Jun 2022 01:01:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241813AbiFCBBI (ORCPT ); Thu, 2 Jun 2022 21:01:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54918 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240973AbiFCAuT (ORCPT ); Thu, 2 Jun 2022 20:50:19 -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 672EB29CBE for ; Thu, 2 Jun 2022 17:47:26 -0700 (PDT) Received: by mail-pf1-x449.google.com with SMTP id z186-20020a6233c3000000b00510a6bc2864so3490559pfz.10 for ; Thu, 02 Jun 2022 17:47: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=l/OZjUL38jsfY4/DpTlZPtW8u7Bpzi8r+BXI9KSVCQ8=; b=nIEvPCDXk+dhtPWG/5txV/z74Hw6CBk6fS9BiJZ6DSvcXtK8IX/B77ecEXalkF1ok8 euOlklsQ4pUc/BZDMwSBgm+ao4x6geiLUzOPRiec7ym15s7l5bBZQ0WATTB6IsXTPRCS kXbjfkBuTKGH3yNFvVZtatT9EXdvZX5kI6fhC5xyUz4Xlcj26iFvgdOUKoWNnuCBgYBu /X7IgPTI4ub5kDCcmx3658ZkrDMOuegZ8mUnklM2ywOJRF+KoFhhOn1NWIute1vBTKxF nGywyqh9zbyUBiuCm1gXqlVOZTOLD4N2k0RoizUz0RSCpZUS0Df6TyggGXHMc93JqDfL bXEg== 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=l/OZjUL38jsfY4/DpTlZPtW8u7Bpzi8r+BXI9KSVCQ8=; b=Sl+1eyAotcS39DdXuFMyeQkL5EOx9G3PfeTjqx9Y76aSsUUkQxhwWGKLWegmiXnROP m3+yvH48x6R16m3edrN1lxdl9ZUVTrQl/Ml7gIS6EDHCVA1ZiKy7Cz6cl3vYBTf80MBz mv+T/j1if77SIOD00LegE3trqvSyPBb/nbPSWOXeWtBOXoj3CAUgTvdz6+7nAE0fS74r 3WPjjQipRyJsZLye8FE0IigS8glyot7QelcNJrkMLll3U0IsWXpsmi7E+bVK/1aMAxKh LTvNeT/69vyKyJrqC6E0gPMcriQ/KOwxXj6N6jPXQNWey5039yVJGqdRPRBgykaopG66 dF5Q== X-Gm-Message-State: AOAM531FIv5RJVynCuFCwCCrtgilo7GcDFsI5SxfdysLSLe90eHz4Mae UbGzb2y9532QqtpEnQ3nisvPjbhiPaE= X-Google-Smtp-Source: ABdhPJwOrd21xozUkPSPipBTDUPDfGjWpV3moLecJ+b9YdF1JJEpxNgEGqyPUCWLXp4CF0pd9v+SdzWWRxE= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:aa7:888a:0:b0:518:a0b8:f5c1 with SMTP id z10-20020aa7888a000000b00518a0b8f5c1mr56039909pfe.46.1654217243828; Thu, 02 Jun 2022 17:47:23 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:43:13 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-127-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 126/144] KVM: selftests: Convert kvm_binary_stats_test away from vCPU IDs From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- 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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 9881CCCA480 for ; Fri, 3 Jun 2022 01:01:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241796AbiFCBBF (ORCPT ); Thu, 2 Jun 2022 21:01:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51824 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240989AbiFCAuT (ORCPT ); Thu, 2 Jun 2022 20:50:19 -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 EA6822AC42 for ; Thu, 2 Jun 2022 17:47:26 -0700 (PDT) Received: by mail-pg1-x549.google.com with SMTP id h11-20020a65638b000000b003fad8e1cc9bso3059819pgv.2 for ; Thu, 02 Jun 2022 17:47: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=Wtonz2gVngJJ7uBzze/lIY09PrVFKGL47X53rXdkK9o=; b=Hx+Rm1WelzvlxMNiDL6jH7bDcZTEuPRkFSt1167ZacFemHaqp5eIyk/eOV/aJODyNU 3+RiPMtEf8NcNsqJVh49NQxDGwwODAhK2RLDCl6sh/K9bPg9UKwHvEwrEFonC1fFOoi5 OJq+nNeIA3tQvfOBVnke5UkawsWBSQdhUolkS/VB6WNYwtRcParvmLPFb9RjtJeToYn7 4dV3SsUIfpGzhMNmcJfwUemH4TrOfEEo2p9FaTMHtuR0IDiq1f8UuX8zM9zjcQMAp6dX w7apUSve9mHBwh0lpNoEI8YV8BqXGPQK7ZeqNAKbQQecBdY3hyWmw6KSplMx+RvyRd0x muEQ== 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=Wtonz2gVngJJ7uBzze/lIY09PrVFKGL47X53rXdkK9o=; b=r/othIAzcKf2r22M9hfH6KCRElVD9BJawMzP+rF4EKrhbcVGgU8pPXoNwlXHDcDLtl OuMor7epzI2g80on1Y40/xU8oSF+28n6jH2u2TGATRZIGSWiGCdYePH9XWXTBYtakQW3 DhapwTk0YWuA+ly+awUW/dsYksHex0CH3XxFE8V4b5TFGPJORqM/KVmUDY7mWCyAJk3Z dkzLjeQsz64d2BC9SQoDVDmFe44rlNBsu0DUoc6YaD/MYXwywfjSHH173Imd6bAxdxTz GhlDlgA6XUKLUrSiw0AuXGnIY+pBOzHeGW/tWrBTu2PEyaLC+FEAN1L/N2TyT+TCW5Zo 1hTw== X-Gm-Message-State: AOAM531gDtoax2hJzkA0ks4j5Hb3WTrG0nOhQF13XxL6/+q7XQc8OZ0c 6A+Jrp/uMvkioHRZdzRJtJlc4ZcGhQQ= X-Google-Smtp-Source: ABdhPJwJlWPDHIZqX4XN9J4HUUqVAcAeCBxORebV4fuCyTaja1dn1sXZGHtPO1fiZrDqgNVm8V81m+YST+4= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:7b8b:b0:166:332f:2490 with SMTP id w11-20020a1709027b8b00b00166332f2490mr7497118pll.68.1654217245801; Thu, 02 Jun 2022 17:47:25 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:43:14 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-128-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 127/144] KVM: selftests: Convert get-reg-list away from its "VCPU_ID" From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- 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 e004afc29387..04950b10e083 100644 --- a/tools/testing/selftests/kvm/aarch64/get-reg-list.c +++ b/tools/testing/selftests/kvm/aarch64/get-reg-list.c @@ -411,6 +411,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 @@ -418,10 +419,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(); @@ -457,7 +458,7 @@ static void run_test(struct vcpu_config *c) bool reject_reg =3D false; int ret; =20 - ret =3D __vcpu_get_reg(vm, 0, reg_list->reg[i], &addr); + ret =3D __vcpu_get_reg(vm, vcpu->id, reg_list->reg[i], &addr); if (ret) { printf("%s: Failed to get ", config_name(c)); print_reg(c, reg.id); @@ -469,7 +470,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); @@ -481,7 +482,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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 6B03CC43334 for ; Fri, 3 Jun 2022 00:59:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239573AbiFCA7o (ORCPT ); Thu, 2 Jun 2022 20:59:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51960 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241044AbiFCAuW (ORCPT ); Thu, 2 Jun 2022 20:50: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 72DEA2BB1B for ; Thu, 2 Jun 2022 17:47:30 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id d12-20020a17090a628c00b001dcd2efca39so3410342pjj.2 for ; Thu, 02 Jun 2022 17:47: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=DKAdsy+CbhbQu5idsYWabteAUIKVcNwzF/4fJTm3POU=; b=FGno/y0zjLWs12Taz6KbePN8m9c144rgOp20f5jhnuKd70pSSeW+5LHzDzA9QNhbDK wYGBrC8yYQynrn4wSs6j4O0iBbv/UG7JNyGNQM59ALZICqoHpM2jC3e5BPAH6beIxuXY CT3mGhrmwIOqmJhJ+G/c6leHQ/qjFU5URgTGSLUV3BtaMjxxAH6M9fJ1TYfuV0fNasdH hXRIuUD3dN6FpVLCWRtUIkJjCYy4XEkS8LYaruS+pz23nllOk3K5ZsEyHBea+aGopUrN 1P0EJm225VLUNMOneXHtD8F77F5avW58sCopdvZMGKKqM6xrEaFlzXlqi3mKcIc2xG9m ZEgQ== 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=DKAdsy+CbhbQu5idsYWabteAUIKVcNwzF/4fJTm3POU=; b=EZ7caE3ODGr4NJul+6ifefVLR42s9iuEHYpWdIuAHmBr1ttW5SsDvaQCDM4zO/ss4W ejp42V0F4TK/hFfSapRpHbwHNHPKRmAZFDrXI/KnIu27zgpvR2ejtC7Z4dTbzwffPYZp gvYbDFydinwXX9H9Lqz3qLwAVZFJeCGQDrJ2hPepZg/qojY0SWKMEQCNdf1xwV+yVWx6 J3wUQhnGA9cqG71Okb7o/BdX+TxoAZ/Kn6oa6ea068iIstoICQNiJx01MO0SfzEqpBZs 3SWGlBrBydAkybPrKvRQJB3DawKjseKee7PpkTODqY0I/X93K1ayZVs1VbOA/8jPytsw VZPA== X-Gm-Message-State: AOAM530jTrsN1Ax04rkR6bAG02p09840Xf84lgGZ3DtHAzJexPNtK30L Wo31pbx0NJk/rpX8+HKGySKZjSYCE6Y= X-Google-Smtp-Source: ABdhPJxae9DqBW/W2fOFOGwcmGTuIhm7PePm2k8oFnbO+zZVyH/np/0gy0x+Z0AuQTMQ2TUTGOfE+Nsikzw= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:249:b0:1e0:a8a3:3c6c with SMTP id t9-20020a17090a024900b001e0a8a33c6cmr307330pje.0.1654217247683; Thu, 02 Jun 2022 17:47:27 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:43:15 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-129-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 128/144] KVM: selftests: Stop hardcoding vCPU IDs in vcpu_width_config From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 78910CCA47F for ; Fri, 3 Jun 2022 01:01:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241748AbiFCBA6 (ORCPT ); Thu, 2 Jun 2022 21:00:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49028 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241084AbiFCAuY (ORCPT ); Thu, 2 Jun 2022 20:50: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 0F5792D1CE for ; Thu, 2 Jun 2022 17:47:32 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id om5-20020a17090b3a8500b001df42f1cbaaso6404271pjb.5 for ; Thu, 02 Jun 2022 17:47: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=54xKbfPbda9lBq/BIyn5SRIOrNNvMYE4n4hqgy0RumE=; b=aG/sFQu9HYtAa1UcjSFsSiVpG0nwqEym2G5MqAhissHp7TKP+0HZ+Jz5T5ewWMTenh 9LVR4rVyu1if32kUAuz7N+2VvCtoOABKAW11in9aawQOg+sNxfJ4sfBo1Z8o6mK4P5yD dB/4sBeuEi08D0GABNYs5WW18Mv+J3jzDYVlWB/3XiI/psvu9VAqg2TVIgp8rlSdXC1A WUHnCyulQ9Wgmjfa3YSsOVjgCbW38Zimp70faC+de1CajW1BVVurQ7XTdRQLTk2DVHKD XM5oyZwE8EsrZWuADF7VJ1QL4eUMoV+YGrDLqx6HfHti2TNg2VF02dQfzSHqtaoT5Tfr uSXA== 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=54xKbfPbda9lBq/BIyn5SRIOrNNvMYE4n4hqgy0RumE=; b=zJfUVOi0g/9yeWmYHqQzmmfiFlxcUhEhXRjBZm0IJ0IAlgTi++eRDBSsnspD9PabOM +vmISHVa+N1Ovdy9x9l9Bx2xuCKb4k1OjErNvFEtFCsw1M7HUCH2+SNB2U2OKcghKRVS 81JMnwrGF6Ncjc4NCwZVvG89MLg0Et4iH2fcHcaD+e2v3Nx/6rqALAb5B8gDvFXnZAU0 hmhugQSUcGF+kwbRYcRQpPA7PKyVoaiMUBXebH+pQwtVHYBMqznyf9hzx4LSG0M/2gHN gcQ/1MVXKNktTZWvtGn4B/ctAVmgCdlu9RXot1X6q9uwxqrDn4Sn3sJZ2XzyywCXgkpv I8+Q== X-Gm-Message-State: AOAM533Px+cik5k9sGkNm6WseDIJ73ahS33DrUlSGFVPGYCTxZKhnOWs PXw0VtVYWz4r/Y0VFOpbvuJKRbJH8+w= X-Google-Smtp-Source: ABdhPJxveH31583Uxbe3E1pXIi+Ta1AdmoE0UAVCoe0VGB/zY5VznOrXKSJZaY4CtJh7FXK0+RO8y6nZ5UU= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:d64d:b0:162:3595:220c with SMTP id y13-20020a170902d64d00b001623595220cmr7810528plh.10.1654217249696; Thu, 02 Jun 2022 17:47:29 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:43:16 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-130-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 129/144] KVM: selftests: Stop conflating vCPU index and ID in perf tests From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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 c9acf0c3f016..7b71ebf508b0 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,13 +208,13 @@ static void run_test(enum vm_guest_mode mode, void *a= rg) 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}; struct timespec vcpu_dirty_total =3D (struct timespec){0}; struct timespec avg; 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, @@ -239,15 +240,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) ; } @@ -272,8 +273,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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 88321CCA481 for ; Fri, 3 Jun 2022 01:01:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241773AbiFCBBC (ORCPT ); Thu, 2 Jun 2022 21:01:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49312 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241051AbiFCAuW (ORCPT ); Thu, 2 Jun 2022 20:50: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 07C622D1CA for ; Thu, 2 Jun 2022 17:47:32 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id j15-20020a17090a738f00b001e345e429d2so3542767pjg.0 for ; Thu, 02 Jun 2022 17:47: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=83uHdjveTV9JqF8Qzu1gLbAMw/PFt6x8USvDY99Vle0=; b=aJnxC0JYG1QHPuRXcIx9kJd3MMrm58q4iVFryuMfGAsmCOv3S+3IGtZiDhb/6HYrBY 0zAUzbOWd0MSVHNMaz/mrja/yWNHaMKD+l92I4bGaTv+CIcDA0Ew/SH1t1CevhcCzdc0 BTRLW3dYgjIIV/OtMZ+ARhyI+VFG3/NqdvCHTjvEhSKh0Mtl/uu1eY0H6gUtfL5x5Uly hGFNxK36VBMczD58Qwy3e9nhi3VofST5QmtG94eD7VQiffzsPqYeX8tCKY64YqFGiKfx kCU2XIfLf1yU9od7mc8oTh03uOO+7xU0p6ySJlrdQmijN2dQkyouB972L0UsXqjizFIO 2Qvg== 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=83uHdjveTV9JqF8Qzu1gLbAMw/PFt6x8USvDY99Vle0=; b=kxP2ZqTzi+z16vFGxZYCfmOO4/hnHlK9iRBtbNHJyxbARaETtsOCHG1RV7KvNUoGef 2I9j0Xd+H1ZCZNmpCmB2I9tqioKJRcKD8iKv5g++fjxGS0AJOdusf2A+nS0CCLN0ApRr yjZEKDvqRG67QX+p8YYlKzqNTzrg8gfsBMd2kcEojHnzGu5w8LXlUlh1t6SO+kqjl1gW +ZZDQVlmFRIuz/P0H9jVShXerCXU3DvlFU+nvRHcCCpxph0hrsilYVq99RPWj3txADOj hCfKlYftagl/T0DKYv4Q0GvXDhAjRdZmWBY5E0kskRDluyHLuD6/LnBrqsaXxE0Fln4B 31dw== X-Gm-Message-State: AOAM530ZQFwfWAQsLtOcn61ltPLtDUH8QDReL+hMuaHQMQgKkryR4sYW z0zISboKvAyVY9A+I2tjyrQjdIQIvdk= X-Google-Smtp-Source: ABdhPJwTS6GnZOGxbbEaHTJrMcq3BHfSnkzCF+mGK6UPUtc0wNgiNnwgyfPyzlu5P2+u5T3RiztlsdgAuiM= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:e54e:b0:162:4b8b:f2be with SMTP id n14-20020a170902e54e00b001624b8bf2bemr7673424plf.5.1654217251570; Thu, 02 Jun 2022 17:47:31 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:43:17 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-131-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 130/144] KVM: selftests: Remove vcpu_get() usage from dirty_log_test From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- 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 1a5c01c65044..5db56140a995 100644 --- a/tools/testing/selftests/kvm/dirty_log_test.c +++ b/tools/testing/selftests/kvm/dirty_log_test.c @@ -665,7 +665,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; @@ -676,7 +676,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 @@ -710,10 +710,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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 61D6ACCA47B for ; Fri, 3 Jun 2022 01:01:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241730AbiFCBAy (ORCPT ); Thu, 2 Jun 2022 21:00:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49438 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241085AbiFCAuY (ORCPT ); Thu, 2 Jun 2022 20:50:24 -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 E9F432E0AB for ; Thu, 2 Jun 2022 17:47:34 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id c11-20020a17090a4d0b00b001e4e081d525so3933575pjg.7 for ; Thu, 02 Jun 2022 17:47: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=8JeyZOJgqRFYgLmKXkBPXYw3glS3GBy+qObYYGBlkn8=; b=jIg9k4fyVnKA6hURXpd1DSloJ62tqnK/jZ+j2XJWkPiBVxFvgAf1iN1Ek2x9LWibN3 BycqhT3Q5AuEyjt8d1cwnCCSWJx+5SF/MjNTUvRP1y+R7wS+vQ0YEVR4tW7SOq1dD3oF +5dA2AClwovvzyfG9yjYyrdr65dQmcG3dw8h3MIub5QkPDm5VLaxTtlq6krhyRKqqT5U J48DsF4JDHgKyuWT13xeplJFmVs2p72nhZMj/4E1pb9xMLh1bMEjGb1lKWIFaPa5LKQd gdgoqLqXRgeoSL5roHagtkCg8kqxnG8wgH1NDPR/5Tq+AHn30wZvwWAz1+OraG8G4YhF OaWQ== 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=8JeyZOJgqRFYgLmKXkBPXYw3glS3GBy+qObYYGBlkn8=; b=oWI6/IATrK7k6PkmA4eiIvIzGjq5LvwLgC7twhRGck2duyvt5hWefldvooAUYvu7bV NN2KLaDMljVjM/Dv7Jvc09Par/T8DeeLbnG0m569tUXLfNHpN4tGaF3ClhEAw0S7SfTN tk2Cnw7zgrDN4ov7FB0clPt5zAXuCOckRuWUu4TGHSOTDIk++wSpHsoVrpSv/Z9RlHv4 aCIHoAshlVj4DwP+YUr3tY5v1D473BxyX+pbfUn3iuuabHtLmRwgJDVh6u8s67S2Zn/U NTsycRHtiF11/w/4+xuo0GKvALCWsectIB8no+isRUARcPdduLNLwcexko1ct5YEImXZ kRoQ== X-Gm-Message-State: AOAM533unGuXDQfAe4h5JiOvHSajKMpGGnWE8c05shNJV3ejqRPXtEjQ g6aBcji6UniVWfjSSS6I0cLKPA13QlY= X-Google-Smtp-Source: ABdhPJz12WyKDUQSxgUUJgQEaIGlyjnUyF5u7Z+2RR/3K9Oji+MjLkhAJ6QaZojY1ryHer+I3qHJ7w1Wmfs= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a62:be14:0:b0:505:a43b:cf6e with SMTP id l20-20020a62be14000000b00505a43bcf6emr74919345pff.33.1654217253233; Thu, 02 Jun 2022 17:47:33 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:43:18 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-132-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 131/144] KVM: selftests: Require vCPU output array when creating VM with vCPUs From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- 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 6ba28018e723..36992bace6c0 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -302,10 +302,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; @@ -326,11 +327,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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 34BA2CCA47D for ; Fri, 3 Jun 2022 01:01:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241682AbiFCBAs (ORCPT ); Thu, 2 Jun 2022 21:00:48 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48808 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241177AbiFCAu2 (ORCPT ); Thu, 2 Jun 2022 20:50:28 -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 281F02ED6A for ; Thu, 2 Jun 2022 17:47:37 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id u5-20020a17090341c500b0016648422072so1285389ple.8 for ; Thu, 02 Jun 2022 17:47: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=xY0aya9k98sTyu01TX5yUkoZMc3aDggvUaP8xo1cxJQ=; b=Fnlug3GJpIkx3Kc86uKtLpAp3JbW4gU1sjABCYJHGmEjKGynYGHBmZ4UivDDc+c2BC 4QRdQsiLSqrr4ouPf8LBlAyUuqQG6aMgCCc59yJbO1pY/YTkuGPxuGk6WlK7+zu6W6qe TmhNI99PekCeJ1ZA+tt8uq9Y6zr4JcuJAhzZlPO55vUQG2qR7Owt6s2SVHtShHp8lbwB LBcbfjHiFlKGG4MwFuDeAQLXm8O8A2QDBdBvP8tOg04A654v1Mfwa1V3ZqhXMteqEO2A tTP7zttfEt+mNLTJR3lY62EXqmDrzQodIv8mm2PA0AegxBjCldQvlaNJplY1lkzpQBan cQBA== 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=xY0aya9k98sTyu01TX5yUkoZMc3aDggvUaP8xo1cxJQ=; b=bjWiXNRCCzMxQ/2tdxG9g+yH8G6OJACIRifd7fCesomctTHSdbY8HLUx4MR4nF0Q7q PHjJODpYgmzSDlUklWSDXSmBy+q7ToF5n00lcOXF/7pZ3xQ3QYrtQywyV0qwiJEV3+bN TqBuNLMesKD4s8YMQvCkl1TlToWReD/JypQ+q7hYQPTRrZVq7Oz82UvAGxwLiNJGZmO6 JOd257x9SLYlG/VIewPeqoBQA2w5A4PheU3gZBdvmEAEwmd2OZKPZ3aifc5jLXK0SUTJ vjWGyb1dJSSuoVgbncvJopiuRtYIzkN7b7Fj6WmJne0Fs5+gnMpocNKZjbHBYbWs1hny z1Rw== X-Gm-Message-State: AOAM530XJ8TcZj2xNcK6Bqad0dY9hVW6UpFbfFpauA5LRvST+k9d3nZF 1LOoyEtFymzZRvhb6I+sTgETLljdWJg= X-Google-Smtp-Source: ABdhPJzmlYzgfCChXnzxzZIgaynKGHrRoxtYLDrG/BHdbGRvmOuTecH2aXUJyQwUfUZ3UZnsmafLs8iTA7I= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:ce07:b0:1e3:50eb:64d with SMTP id f7-20020a17090ace0700b001e350eb064dmr15012886pju.22.1654217254933; Thu, 02 Jun 2022 17:47:34 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:43:19 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-133-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 132/144] KVM: selftests: Purge vm+vcpu_id == vcpu silliness From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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/hypercalls.c | 18 +- .../testing/selftests/kvm/aarch64/psci_test.c | 16 +- .../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 | 4 +- .../selftests/kvm/include/kvm_util_base.h | 216 +++++++++--------- .../selftests/kvm/include/ucall_common.h | 2 +- .../selftests/kvm/include/x86_64/evmcs.h | 2 +- .../selftests/kvm/include/x86_64/processor.h | 77 +++---- .../selftests/kvm/kvm_binary_stats_test.c | 2 +- .../selftests/kvm/kvm_page_table_test.c | 7 +- .../selftests/kvm/lib/aarch64/processor.c | 47 ++-- .../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 | 13 +- .../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 | 143 ++++++------ .../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 +- .../kvm/x86_64/svm_nested_soft_inject_test.c | 10 +- .../selftests/kvm/x86_64/svm_vmcall_test.c | 6 +- .../selftests/kvm/x86_64/sync_regs_test.c | 36 +-- .../kvm/x86_64/triple_fault_event_test.c | 16 +- .../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_caps_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 +- 87 files changed, 790 insertions(+), 908 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 2fe13e117dba..c27352b90ccf 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 - vcpu_get_reg(vcpu->vm, vcpu->id, KVM_ARM64_SYS_REG(SYS_ID_AA64DFR0_EL1), = &id_aa64dfr0); + vcpu_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 04950b10e083..d606d64a2ff5 100644 --- a/tools/testing/selftests/kvm/aarch64/get-reg-list.c +++ b/tools/testing/selftests/kvm/aarch64/get-reg-list.c @@ -377,7 +377,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; @@ -385,7 +385,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); } } } @@ -420,9 +420,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(); @@ -458,7 +458,7 @@ static void run_test(struct vcpu_config *c) bool reject_reg =3D false; int ret; =20 - ret =3D __vcpu_get_reg(vm, vcpu->id, reg_list->reg[i], &addr); + ret =3D __vcpu_get_reg(vcpu, reg_list->reg[i], &addr); if (ret) { printf("%s: Failed to get ", config_name(c)); print_reg(c, reg.id); @@ -470,7 +470,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); @@ -482,7 +482,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/hypercalls.c b/tools/testi= ng/selftests/kvm/aarch64/hypercalls.c index fefa39dc9bc8..5fce4969cbb9 100644 --- a/tools/testing/selftests/kvm/aarch64/hypercalls.c +++ b/tools/testing/selftests/kvm/aarch64/hypercalls.c @@ -158,7 +158,7 @@ static void steal_time_init(struct kvm_vcpu *vcpu) gpages =3D vm_calc_num_guest_pages(VM_MODE_DEFAULT, STEAL_TIME_SIZE); vm_userspace_mem_region_add(vcpu->vm, VM_MEM_SRC_ANONYMOUS, ST_GPA_BASE, = 1, gpages, 0); =20 - vcpu_device_attr_set(vcpu->vm, vcpu->id, KVM_ARM_VCPU_PVTIME_CTRL, + vcpu_device_attr_set(vcpu, KVM_ARM_VCPU_PVTIME_CTRL, KVM_ARM_VCPU_PVTIME_IPA, &st_ipa); } =20 @@ -172,18 +172,18 @@ static void test_fw_regs_before_vm_start(struct kvm_v= cpu *vcpu) const struct kvm_fw_reg_info *reg_info =3D &fw_reg_info[i]; =20 /* First 'read' should be an upper limit of the features supported */ - vcpu_get_reg(vcpu->vm, vcpu->id, reg_info->reg, &val); + vcpu_get_reg(vcpu, reg_info->reg, &val); TEST_ASSERT(val =3D=3D FW_REG_ULIMIT_VAL(reg_info->max_feat_bit), "Expected all the features to be set for reg: 0x%lx; expected: 0x%lx; r= ead: 0x%lx\n", reg_info->reg, FW_REG_ULIMIT_VAL(reg_info->max_feat_bit), val); =20 /* Test a 'write' by disabling all the features of the register map */ - ret =3D __vcpu_set_reg(vcpu->vm, vcpu->id, reg_info->reg, 0); + ret =3D __vcpu_set_reg(vcpu, reg_info->reg, 0); TEST_ASSERT(ret =3D=3D 0, "Failed to clear all the features of reg: 0x%lx; ret: %d\n", reg_info->reg, errno); =20 - vcpu_get_reg(vcpu->vm, vcpu->id, reg_info->reg, &val); + vcpu_get_reg(vcpu, reg_info->reg, &val); TEST_ASSERT(val =3D=3D 0, "Expected all the features to be cleared for reg: 0x%lx\n", reg_info->r= eg); =20 @@ -192,7 +192,7 @@ static void test_fw_regs_before_vm_start(struct kvm_vcp= u *vcpu) * Avoid this check if all the bits are occupied. */ if (reg_info->max_feat_bit < 63) { - ret =3D __vcpu_set_reg(vcpu->vm, vcpu->id, reg_info->reg, BIT(reg_info-= >max_feat_bit + 1)); + ret =3D __vcpu_set_reg(vcpu, reg_info->reg, BIT(reg_info->max_feat_bit = + 1)); TEST_ASSERT(ret !=3D 0 && errno =3D=3D EINVAL, "Unexpected behavior or return value (%d) while setting an unsupported = feature for reg: 0x%lx\n", errno, reg_info->reg); @@ -213,7 +213,7 @@ static void test_fw_regs_after_vm_start(struct kvm_vcpu= *vcpu) * Before starting the VM, the test clears all the bits. * Check if that's still the case. */ - vcpu_get_reg(vcpu->vm, vcpu->id, reg_info->reg, &val); + vcpu_get_reg(vcpu, reg_info->reg, &val); TEST_ASSERT(val =3D=3D 0, "Expected all the features to be cleared for reg: 0x%lx\n", reg_info->reg); @@ -223,7 +223,7 @@ static void test_fw_regs_after_vm_start(struct kvm_vcpu= *vcpu) * the registers and should return EBUSY. Set the registers and check for * the expected errno. */ - ret =3D __vcpu_set_reg(vcpu->vm, vcpu->id, reg_info->reg, FW_REG_ULIMIT_= VAL(reg_info->max_feat_bit)); + ret =3D __vcpu_set_reg(vcpu, reg_info->reg, FW_REG_ULIMIT_VAL(reg_info->= max_feat_bit)); TEST_ASSERT(ret !=3D 0 && errno =3D=3D EBUSY, "Unexpected behavior or return value (%d) while setting a feature while = VM is running for reg: 0x%lx\n", errno, reg_info->reg); @@ -281,9 +281,9 @@ static void test_run(void) test_fw_regs_before_vm_start(vcpu); =20 while (!guest_done) { - 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_guest_stage(&vm, &vcpu); break; diff --git a/tools/testing/selftests/kvm/aarch64/psci_test.c b/tools/testin= g/selftests/kvm/aarch64/psci_test.c index f4f73934351f..3e1bebe63adf 100644 --- a/tools/testing/selftests/kvm/aarch64/psci_test.c +++ b/tools/testing/selftests/kvm/aarch64/psci_test.c @@ -67,7 +67,7 @@ static void vcpu_power_off(struct kvm_vcpu *vcpu) .mp_state =3D KVM_MP_STATE_STOPPED, }; =20 - vcpu_mp_state_set(vcpu->vm, vcpu->id, &mp_state); + vcpu_mp_state_set(vcpu, &mp_state); } =20 static struct kvm_vm *setup_vm(void *guest_code, struct kvm_vcpu **source, @@ -92,8 +92,8 @@ static void enter_guest(struct kvm_vcpu *vcpu) { struct ucall uc; =20 - vcpu_run(vcpu->vm, vcpu->id); - if (get_ucall(vcpu->vm, vcpu->id, &uc) =3D=3D UCALL_ABORT) + vcpu_run(vcpu); + if (get_ucall(vcpu, &uc) =3D=3D UCALL_ABORT) TEST_FAIL("%s at %s:%ld", (const char *)uc.args[0], __FILE__, uc.args[1]); } @@ -102,8 +102,8 @@ static void assert_vcpu_reset(struct kvm_vcpu *vcpu) { uint64_t obs_pc, obs_x0; =20 - vcpu_get_reg(vcpu->vm, vcpu->id, ARM64_CORE_REG(regs.pc), &obs_pc); - vcpu_get_reg(vcpu->vm, vcpu->id, ARM64_CORE_REG(regs.regs[0]), &obs_x0); + vcpu_get_reg(vcpu, ARM64_CORE_REG(regs.pc), &obs_pc); + vcpu_get_reg(vcpu, 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)", @@ -143,11 +143,11 @@ static void host_test_cpu_on(void) */ vcpu_power_off(target); =20 - vcpu_get_reg(vm, target->id, KVM_ARM64_SYS_REG(SYS_MPIDR_EL1), &target_mp= idr); - vcpu_args_set(vm, source->id, 1, target_mpidr & MPIDR_HWID_BITMASK); + vcpu_get_reg(target, KVM_ARM64_SYS_REG(SYS_MPIDR_EL1), &target_mpidr); + vcpu_args_set(source, 1, target_mpidr & MPIDR_HWID_BITMASK); enter_guest(source); =20 - if (get_ucall(vm, source->id, &uc) !=3D UCALL_DONE) + if (get_ucall(source, &uc) !=3D UCALL_DONE) TEST_FAIL("Unhandled ucall: %lu", uc.cmd); =20 assert_vcpu_reset(target); 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 7b71ebf508b0..ca896da12e41 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 5db56140a995..906e893375df 100644 --- a/tools/testing/selftests/kvm/dirty_log_test.c +++ b/tools/testing/selftests/kvm/dirty_log_test.c @@ -255,7 +255,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 @@ -346,7 +346,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); @@ -369,7 +369,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 || @@ -521,7 +521,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); @@ -533,7 +533,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 ba3e9066d990..a8124f9dd68a 100644 --- a/tools/testing/selftests/kvm/include/aarch64/processor.h +++ b/tools/testing/selftests/kvm/include/aarch64/processor.h @@ -47,7 +47,7 @@ =20 #define MPIDR_HWID_BITMASK (0xff00fffffful) =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 @@ -101,7 +101,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 f409bae336d5..640634bdba9a 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 @@ -288,7 +288,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); @@ -300,143 +300,132 @@ 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, - uint32_t cap, uint64_t arg0) +static inline void vcpu_enable_cap(struct kvm_vcpu *vcpu, uint32_t cap, + uint64_t arg0) { struct kvm_enable_cap enable_cap =3D { .cap =3D cap, .args =3D { arg0 } }; =20 - vcpu_ioctl(vm, vcpu_id, KVM_ENABLE_CAP, &enable_cap); + vcpu_ioctl(vcpu, KVM_ENABLE_CAP, &enable_cap); } =20 -static inline void vcpu_guest_debug_set(struct kvm_vm *vm, uint32_t vcpuid, +static inline void vcpu_guest_debug_set(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_mp_state_get(struct kvm_vm *vm, uint32_t vcpuid, +static inline void vcpu_mp_state_get(struct kvm_vcpu *vcpu, struct kvm_mp_state *mp_state) { - vcpu_ioctl(vm, vcpuid, KVM_GET_MP_STATE, mp_state); + vcpu_ioctl(vcpu, KVM_GET_MP_STATE, mp_state); } -static inline void vcpu_mp_state_set(struct kvm_vm *vm, uint32_t vcpuid, +static inline void vcpu_mp_state_set(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); } =20 -static inline int __vcpu_get_reg(struct kvm_vm *vm, uint32_t vcpuid, - uint64_t reg_id, void *addr) +static inline int __vcpu_get_reg(struct kvm_vcpu *vcpu, uint64_t id, void = *addr) { - struct kvm_one_reg reg =3D { .id =3D reg_id, .addr =3D (uint64_t)addr }; + struct kvm_one_reg reg =3D { .id =3D id, .addr =3D (uint64_t)addr }; =20 - return __vcpu_ioctl(vm, vcpuid, KVM_GET_ONE_REG, ®); + return __vcpu_ioctl(vcpu, KVM_GET_ONE_REG, ®); } -static inline int __vcpu_set_reg(struct kvm_vm *vm, uint32_t vcpuid, - uint64_t reg_id, uint64_t val) +static inline int __vcpu_set_reg(struct kvm_vcpu *vcpu, uint64_t id, uint6= 4_t val) { - struct kvm_one_reg reg =3D { .id =3D reg_id, .addr =3D (uint64_t)&val }; + struct kvm_one_reg reg =3D { .id =3D id, .addr =3D (uint64_t)&val }; =20 - return __vcpu_ioctl(vm, vcpuid, KVM_SET_ONE_REG, ®); + return __vcpu_ioctl(vcpu, KVM_SET_ONE_REG, ®); } -static inline void vcpu_get_reg(struct kvm_vm *vm, uint32_t vcpuid, - uint64_t reg_id, void *addr) +static inline void vcpu_get_reg(struct kvm_vcpu *vcpu, uint64_t id, void *= addr) { - struct kvm_one_reg reg =3D { .id =3D reg_id, .addr =3D (uint64_t)addr }; + struct kvm_one_reg reg =3D { .id =3D id, .addr =3D (uint64_t)addr }; =20 - vcpu_ioctl(vm, vcpuid, KVM_GET_ONE_REG, ®); + vcpu_ioctl(vcpu, KVM_GET_ONE_REG, ®); } -static inline void vcpu_set_reg(struct kvm_vm *vm, uint32_t vcpuid, - uint64_t reg_id, uint64_t val) +static inline void vcpu_set_reg(struct kvm_vcpu *vcpu, uint64_t id, uint64= _t val) { - struct kvm_one_reg reg =3D { .id =3D reg_id, .addr =3D (uint64_t)&val }; + struct kvm_one_reg reg =3D { .id =3D id, .addr =3D (uint64_t)&val }; =20 - vcpu_ioctl(vm, vcpuid, KVM_SET_ONE_REG, ®); + vcpu_ioctl(vcpu, KVM_SET_ONE_REG, ®); } =20 #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; @@ -471,25 +460,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 @@ -501,14 +507,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 * @@ -516,12 +521,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); @@ -626,32 +631,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 /* @@ -659,7 +647,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/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 895d6974f7f5..974d08746b39 100644 --- a/tools/testing/selftests/kvm/include/x86_64/processor.h +++ b/tools/testing/selftests/kvm/include/x86_64/processor.h @@ -422,9 +422,8 @@ 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 const struct kvm_msr_list *kvm_get_msr_index_list(void); @@ -432,73 +431,71 @@ const struct kvm_msr_list *kvm_get_feature_msr_index_= list(void); bool kvm_msr_is_in_save_restore_list(uint32_t msr_index); uint64_t kvm_get_feature_msr(uint64_t msr_index); =20 -static inline void vcpu_msrs_get(struct kvm_vm *vm, uint32_t vcpuid, +static inline void vcpu_msrs_get(struct kvm_vcpu *vcpu, struct kvm_msrs *msrs) { - int r =3D __vcpu_ioctl(vm, vcpuid, KVM_GET_MSRS, msrs); + int r =3D __vcpu_ioctl(vcpu, KVM_GET_MSRS, msrs); =20 TEST_ASSERT(r =3D=3D msrs->nmsrs, "KVM_GET_MSRS failed, r: %i (failed on MSR %x)", r, r < 0 || r >=3D msrs->nmsrs ? -1 : msrs->entries[r].index); } -static inline void vcpu_msrs_set(struct kvm_vm *vm, uint32_t vcpuid, - struct kvm_msrs *msrs) +static inline void vcpu_msrs_set(struct kvm_vcpu *vcpu, struct kvm_msrs *m= srs) { - int r =3D __vcpu_ioctl(vm, vcpuid, KVM_SET_MSRS, msrs); + int r =3D __vcpu_ioctl(vcpu, KVM_SET_MSRS, msrs); =20 TEST_ASSERT(r =3D=3D msrs->nmsrs, "KVM_GET_MSRS failed, r: %i (failed on MSR %x)", r, r < 0 || r >=3D msrs->nmsrs ? -1 : msrs->entries[r].index); } -static inline void vcpu_debugregs_get(struct kvm_vm *vm, uint32_t vcpuid, +static inline void vcpu_debugregs_get(struct kvm_vcpu *vcpu, struct kvm_debugregs *debugregs) { - vcpu_ioctl(vm, vcpuid, KVM_GET_DEBUGREGS, debugregs); + vcpu_ioctl(vcpu, KVM_GET_DEBUGREGS, debugregs); } -static inline void vcpu_debugregs_set(struct kvm_vm *vm, uint32_t vcpuid, +static inline void vcpu_debugregs_set(struct kvm_vcpu *vcpu, struct kvm_debugregs *debugregs) { - vcpu_ioctl(vm, vcpuid, KVM_SET_DEBUGREGS, debugregs); + vcpu_ioctl(vcpu, KVM_SET_DEBUGREGS, debugregs); } -static inline void vcpu_xsave_get(struct kvm_vm *vm, uint32_t vcpuid, +static inline void vcpu_xsave_get(struct kvm_vcpu *vcpu, struct kvm_xsave *xsave) { - vcpu_ioctl(vm, vcpuid, KVM_GET_XSAVE, xsave); + vcpu_ioctl(vcpu, KVM_GET_XSAVE, xsave); } -static inline void vcpu_xsave2_get(struct kvm_vm *vm, uint32_t vcpuid, +static inline void vcpu_xsave2_get(struct kvm_vcpu *vcpu, struct kvm_xsave *xsave) { - vcpu_ioctl(vm, vcpuid, KVM_GET_XSAVE2, xsave); + vcpu_ioctl(vcpu, KVM_GET_XSAVE2, xsave); } -static inline void vcpu_xsave_set(struct kvm_vm *vm, uint32_t vcpuid, +static inline void vcpu_xsave_set(struct kvm_vcpu *vcpu, struct kvm_xsave *xsave) { - vcpu_ioctl(vm, vcpuid, KVM_SET_XSAVE, xsave); + vcpu_ioctl(vcpu, KVM_SET_XSAVE, xsave); } -static inline void vcpu_xcrs_get(struct kvm_vm *vm, uint32_t vcpuid, +static inline void vcpu_xcrs_get(struct kvm_vcpu *vcpu, struct kvm_xcrs *xcrs) { - vcpu_ioctl(vm, vcpuid, KVM_GET_XCRS, xcrs); + vcpu_ioctl(vcpu, KVM_GET_XCRS, xcrs); } -static inline void vcpu_xcrs_set(struct kvm_vm *vm, uint32_t vcpuid, - struct kvm_xcrs *xcrs) +static inline void vcpu_xcrs_set(struct kvm_vcpu *vcpu, struct kvm_xcrs *x= crs) { - vcpu_ioctl(vm, vcpuid, KVM_SET_XCRS, xcrs); + vcpu_ioctl(vcpu, KVM_SET_XCRS, xcrs); } =20 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 * @@ -510,14 +507,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)); } @@ -541,13 +537,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. @@ -567,8 +564,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 d158d5aa26e6..6bd27782f00c 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. */ - vcpu_set_reg(vm, vcpuid, KVM_ARM64_SYS_REG(SYS_CPACR_EL1), 3 << 20); + vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_CPACR_EL1), 3 << 20); =20 - vcpu_get_reg(vm, vcpuid, KVM_ARM64_SYS_REG(SYS_SCTLR_EL1), &sctlr_el1); - vcpu_get_reg(vm, vcpuid, KVM_ARM64_SYS_REG(SYS_TCR_EL1), &tcr_el1); + vcpu_get_reg(vcpu, KVM_ARM64_SYS_REG(SYS_SCTLR_EL1), &sctlr_el1); + vcpu_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 - vcpu_set_reg(vm, vcpuid, KVM_ARM64_SYS_REG(SYS_SCTLR_EL1), sctlr_el1); - vcpu_set_reg(vm, vcpuid, KVM_ARM64_SYS_REG(SYS_TCR_EL1), tcr_el1); - vcpu_set_reg(vm, vcpuid, KVM_ARM64_SYS_REG(SYS_MAIR_EL1), DEFAULT_MAIR_EL= 1); - vcpu_set_reg(vm, vcpuid, KVM_ARM64_SYS_REG(SYS_TTBR0_EL1), vm->pgd); - vcpu_set_reg(vm, vcpuid, KVM_ARM64_SYS_REG(SYS_TPIDR_EL1), vcpuid); + vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_SCTLR_EL1), sctlr_el1); + vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_TCR_EL1), tcr_el1); + vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_MAIR_EL1), DEFAULT_MAIR_EL1); + vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_TTBR0_EL1), vm->pgd); + vcpu_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 - vcpu_get_reg(vm, vcpuid, ARM64_CORE_REG(regs.pstate), &pstate); - vcpu_get_reg(vm, vcpuid, ARM64_CORE_REG(regs.pc), &pc); + vcpu_get_reg(vcpu, ARM64_CORE_REG(regs.pstate), &pstate); + vcpu_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 - vcpu_set_reg(vm, vcpu_id, ARM64_CORE_REG(sp_el1), stack_vaddr + stack_siz= e); - vcpu_set_reg(vm, vcpu_id, ARM64_CORE_REG(regs.pc), (uint64_t)guest_code); + vcpu_set_reg(vcpu, ARM64_CORE_REG(sp_el1), stack_vaddr + stack_size); + vcpu_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,8 +350,8 @@ 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++) { - vcpu_set_reg(vm, vcpuid, ARM64_CORE_REG(regs.regs[i]), - va_arg(ap, uint64_t)); + vcpu_set_reg(vcpu, ARM64_CORE_REG(regs.regs[i]), + va_arg(ap, uint64_t)); } =20 va_end(ap); @@ -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 - vcpu_set_reg(vm, vcpuid, KVM_ARM64_SYS_REG(SYS_VBAR_EL1), (uint64_t)&vect= ors); + vcpu_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 868ebab5369e..0b949ee06b5e 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 36992bace6c0..e08e89174610 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -1395,88 +1395,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, @@ -1485,73 +1446,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; @@ -1636,36 +1581,6 @@ int __kvm_device_attr_set(int dev_fd, uint32_t group= , uint64_t attr, void *val) return __kvm_ioctl(dev_fd, KVM_SET_DEVICE_ATTR, &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. */ @@ -1781,8 +1696,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 edbdc7bef05b..604478151212 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 - vcpu_set_reg(vm, vcpuid, RISCV_CSR_REG(satp), satp); + vcpu_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 - vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(mode), &core.mode); - vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.pc), &core.regs.pc); - vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.ra), &core.regs.ra); - vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.sp), &core.regs.sp); - vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.gp), &core.regs.gp); - vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.tp), &core.regs.tp); - vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.t0), &core.regs.t0); - vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.t1), &core.regs.t1); - vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.t2), &core.regs.t2); - vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.s0), &core.regs.s0); - vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.s1), &core.regs.s1); - vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.a0), &core.regs.a0); - vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.a1), &core.regs.a1); - vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.a2), &core.regs.a2); - vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.a3), &core.regs.a3); - vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.a4), &core.regs.a4); - vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.a5), &core.regs.a5); - vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.a6), &core.regs.a6); - vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.a7), &core.regs.a7); - vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.s2), &core.regs.s2); - vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.s3), &core.regs.s3); - vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.s4), &core.regs.s4); - vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.s5), &core.regs.s5); - vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.s6), &core.regs.s6); - vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.s7), &core.regs.s7); - vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.s8), &core.regs.s8); - vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.s9), &core.regs.s9); - vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.s10), &core.regs.s10); - vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.s11), &core.regs.s11); - vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.t3), &core.regs.t3); - vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.t4), &core.regs.t4); - vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.t5), &core.regs.t5); - vcpu_get_reg(vm, vcpuid, RISCV_CORE_REG(regs.t6), &core.regs.t6); + vcpu_get_reg(vcpu, RISCV_CORE_REG(mode), &core.mode); + vcpu_get_reg(vcpu, RISCV_CORE_REG(regs.pc), &core.regs.pc); + vcpu_get_reg(vcpu, RISCV_CORE_REG(regs.ra), &core.regs.ra); + vcpu_get_reg(vcpu, RISCV_CORE_REG(regs.sp), &core.regs.sp); + vcpu_get_reg(vcpu, RISCV_CORE_REG(regs.gp), &core.regs.gp); + vcpu_get_reg(vcpu, RISCV_CORE_REG(regs.tp), &core.regs.tp); + vcpu_get_reg(vcpu, RISCV_CORE_REG(regs.t0), &core.regs.t0); + vcpu_get_reg(vcpu, RISCV_CORE_REG(regs.t1), &core.regs.t1); + vcpu_get_reg(vcpu, RISCV_CORE_REG(regs.t2), &core.regs.t2); + vcpu_get_reg(vcpu, RISCV_CORE_REG(regs.s0), &core.regs.s0); + vcpu_get_reg(vcpu, RISCV_CORE_REG(regs.s1), &core.regs.s1); + vcpu_get_reg(vcpu, RISCV_CORE_REG(regs.a0), &core.regs.a0); + vcpu_get_reg(vcpu, RISCV_CORE_REG(regs.a1), &core.regs.a1); + vcpu_get_reg(vcpu, RISCV_CORE_REG(regs.a2), &core.regs.a2); + vcpu_get_reg(vcpu, RISCV_CORE_REG(regs.a3), &core.regs.a3); + vcpu_get_reg(vcpu, RISCV_CORE_REG(regs.a4), &core.regs.a4); + vcpu_get_reg(vcpu, RISCV_CORE_REG(regs.a5), &core.regs.a5); + vcpu_get_reg(vcpu, RISCV_CORE_REG(regs.a6), &core.regs.a6); + vcpu_get_reg(vcpu, RISCV_CORE_REG(regs.a7), &core.regs.a7); + vcpu_get_reg(vcpu, RISCV_CORE_REG(regs.s2), &core.regs.s2); + vcpu_get_reg(vcpu, RISCV_CORE_REG(regs.s3), &core.regs.s3); + vcpu_get_reg(vcpu, RISCV_CORE_REG(regs.s4), &core.regs.s4); + vcpu_get_reg(vcpu, RISCV_CORE_REG(regs.s5), &core.regs.s5); + vcpu_get_reg(vcpu, RISCV_CORE_REG(regs.s6), &core.regs.s6); + vcpu_get_reg(vcpu, RISCV_CORE_REG(regs.s7), &core.regs.s7); + vcpu_get_reg(vcpu, RISCV_CORE_REG(regs.s8), &core.regs.s8); + vcpu_get_reg(vcpu, RISCV_CORE_REG(regs.s9), &core.regs.s9); + vcpu_get_reg(vcpu, RISCV_CORE_REG(regs.s10), &core.regs.s10); + vcpu_get_reg(vcpu, RISCV_CORE_REG(regs.s11), &core.regs.s11); + vcpu_get_reg(vcpu, RISCV_CORE_REG(regs.t3), &core.regs.t3); + vcpu_get_reg(vcpu, RISCV_CORE_REG(regs.t4), &core.regs.t4); + vcpu_get_reg(vcpu, RISCV_CORE_REG(regs.t5), &core.regs.t5); + vcpu_get_reg(vcpu, RISCV_CORE_REG(regs.t6), &core.regs.t6); =20 fprintf(stream, " MODE: 0x%lx\n", core.mode); @@ -288,7 +289,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 @@ -296,28 +297,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"); - vcpu_set_reg(vm, vcpu_id, RISCV_CORE_REG(regs.gp), current_gp); + vcpu_set_reg(vcpu, RISCV_CORE_REG(regs.gp), current_gp); =20 /* Setup stack pointer and program counter of guest */ - vcpu_set_reg(vm, vcpu_id, RISCV_CORE_REG(regs.sp), - stack_vaddr + stack_size); - vcpu_set_reg(vm, vcpu_id, RISCV_CORE_REG(regs.pc), - (unsigned long)guest_code); + vcpu_set_reg(vcpu, RISCV_CORE_REG(regs.sp), stack_vaddr + stack_size); + vcpu_set_reg(vcpu, RISCV_CORE_REG(regs.pc), (unsigned long)guest_code); =20 /* Setup default exception vector of guest */ - vcpu_set_reg(vm, vcpu_id, RISCV_CSR_REG(stvec), - (unsigned long)guest_unexp_trap); + vcpu_set_reg(vcpu, RISCV_CSR_REG(stvec), (unsigned long)guest_unexp_trap); =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); @@ -355,12 +353,12 @@ void vcpu_args_set(struct kvm_vm *vm, uint32_t vcpuid= , unsigned int num, ...) id =3D RISCV_CORE_REG(regs.a7); break; } - vcpu_set_reg(vm, vcpuid, id, va_arg(ap, uint64_t)); + vcpu_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 48d91b77fa1d..087b9740bc8f 100644 --- a/tools/testing/selftests/kvm/lib/riscv/ucall.c +++ b/tools/testing/selftests/kvm/lib/riscv/ucall.c @@ -64,9 +64,9 @@ void ucall(uint64_t cmd, int nargs, ...) (vm_vaddr_t)&uc, 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) @@ -76,16 +76,17 @@ uint64_t get_ucall(struct kvm_vm *vm, uint32_t vcpu_id,= struct ucall *uc) run->riscv_sbi.extension_id =3D=3D KVM_RISCV_SELFTESTS_SBI_EXT) { switch (run->riscv_sbi.function_id) { case KVM_RISCV_SELFTESTS_SBI_UCALL: - memcpy(&ucall, addr_gva2hva(vm, - run->riscv_sbi.args[0]), sizeof(ucall)); + 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)); =20 break; case KVM_RISCV_SELFTESTS_SBI_UNEXP: - vcpu_dump(stderr, vm, vcpu_id, 2); + vcpu_dump(stderr, vcpu, 2); TEST_ASSERT(0, "Unexpected trap taken by guest"); break; default: 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 665267c1135d..73dc4e21190f 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 440ea6e99f08..b95458cadafe 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_mp_state_set(vm, vcpu_id, &mp_state); + vcpu_mp_state_set(vcpu, &mp_state); =20 return vcpu; } @@ -743,20 +745,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; @@ -766,7 +755,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 @@ -813,7 +802,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; @@ -823,13 +812,12 @@ 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 - vcpu_msrs_get(vm, vcpuid, &buffer.header); + vcpu_msrs_get(vcpu, &buffer.header); =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; @@ -841,10 +829,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; @@ -854,7 +842,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); @@ -874,23 +862,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 @@ -960,21 +948,21 @@ bool kvm_msr_is_in_save_restore_list(uint32_t msr_ind= ex) return false; } =20 -static void vcpu_save_xsave_state(struct kvm_vm *vm, uint32_t vcpuid, +static void vcpu_save_xsave_state(struct kvm_vcpu *vcpu, struct kvm_x86_state *state) { - int size =3D vm_check_cap(vm, KVM_CAP_XSAVE2); + int size =3D vm_check_cap(vcpu->vm, KVM_CAP_XSAVE2); =20 if (size) { state->xsave =3D malloc(size); - vcpu_xsave2_get(vm, vcpuid, state->xsave); + vcpu_xsave2_get(vcpu, state->xsave); } else { state->xsave =3D malloc(sizeof(struct kvm_xsave)); - vcpu_xsave_get(vm, vcpuid, state->xsave); + vcpu_xsave_get(vcpu, 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) { const struct kvm_msr_list *msr_list =3D kvm_get_msr_index_list(); struct kvm_x86_state *state; @@ -995,24 +983,24 @@ 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 state =3D malloc(sizeof(*state) + msr_list->nmsrs * sizeof(state->msrs.en= tries[0])); =20 - vcpu_events_get(vm, vcpuid, &state->events); - vcpu_mp_state_get(vm, vcpuid, &state->mp_state); - vcpu_regs_get(vm, vcpuid, &state->regs); - vcpu_save_xsave_state(vm, vcpuid, state); + vcpu_events_get(vcpu, &state->events); + vcpu_mp_state_get(vcpu, &state->mp_state); + vcpu_regs_get(vcpu, &state->regs); + vcpu_save_xsave_state(vcpu, state); =20 if (kvm_check_cap(KVM_CAP_XCRS)) - vcpu_xcrs_get(vm, vcpuid, &state->xcrs); + vcpu_xcrs_get(vcpu, &state->xcrs); =20 - vcpu_sregs_get(vm, vcpuid, &state->sregs); + vcpu_sregs_get(vcpu, &state->sregs); =20 if (nested_size) { state->nested.size =3D sizeof(state->nested_); =20 - vcpu_nested_state_get(vm, vcpuid, &state->nested); + vcpu_nested_state_get(vcpu, &state->nested); TEST_ASSERT(state->nested.size <=3D nested_size, "Nested state size too big, %i (KVM_CHECK_CAP gave %i)", state->nested.size, nested_size); @@ -1023,29 +1011,29 @@ struct kvm_x86_state *vcpu_save_state(struct kvm_vm= *vm, uint32_t vcpuid) state->msrs.nmsrs =3D msr_list->nmsrs; for (i =3D 0; i < msr_list->nmsrs; i++) state->msrs.entries[i].index =3D msr_list->indices[i]; - vcpu_msrs_get(vm, vcpuid, &state->msrs); + vcpu_msrs_get(vcpu, &state->msrs); =20 - vcpu_debugregs_get(vm, vcpuid, &state->debugregs); + vcpu_debugregs_get(vcpu, &state->debugregs); =20 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) { - vcpu_sregs_set(vm, vcpuid, &state->sregs); - vcpu_msrs_set(vm, vcpuid, &state->msrs); + vcpu_sregs_set(vcpu, &state->sregs); + vcpu_msrs_set(vcpu, &state->msrs); =20 if (kvm_check_cap(KVM_CAP_XCRS)) - vcpu_xcrs_set(vm, vcpuid, &state->xcrs); + vcpu_xcrs_set(vcpu, &state->xcrs); =20 - vcpu_xsave_set(vm, vcpuid, state->xsave); - vcpu_events_set(vm, vcpuid, &state->events); - vcpu_mp_state_set(vm, vcpuid, &state->mp_state); - vcpu_debugregs_set(vm, vcpuid, &state->debugregs); - vcpu_regs_set(vm, vcpuid, &state->regs); + vcpu_xsave_set(vcpu, state->xsave); + vcpu_events_set(vcpu, &state->events); + vcpu_mp_state_set(vcpu, &state->mp_state); + vcpu_debugregs_set(vcpu, &state->debugregs); + vcpu_regs_set(vcpu, &state->regs); =20 if (state->nested.size) - vcpu_nested_state_set(vm, vcpuid, &state->nested); + vcpu_nested_state_set(vcpu, &state->nested); } =20 void kvm_x86_state_cleanup(struct kvm_x86_state *state) @@ -1171,17 +1159,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 @@ -1193,11 +1182,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)", @@ -1268,7 +1257,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; @@ -1300,16 +1289,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 2ea31a0ebe30..e5f0f9e0d3ee 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 2ab3f13e221d..5469a1da471a 100644 --- a/tools/testing/selftests/kvm/lib/x86_64/vmx.c +++ b/tools/testing/selftests/kvm/lib/x86_64/vmx.c @@ -42,11 +42,11 @@ 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 - vcpu_enable_cap(vm, vcpu_id, KVM_CAP_HYPERV_ENLIGHTENED_VMCS, + vcpu_enable_cap(vcpu, KVM_CAP_HYPERV_ENLIGHTENED_VMCS, (unsigned long)&evmcs_ver); =20 /* KVM should return supported EVMCS version range */ 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 d79796e1034d..6175cdb61e8a 100644 --- a/tools/testing/selftests/kvm/s390x/memop.c +++ b/tools/testing/selftests/kvm/s390x/memop.c @@ -151,7 +151,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) @@ -161,7 +161,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, ...= ) \ @@ -249,8 +249,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 f7b938f9f2c6..43fa71d90232 100644 --- a/tools/testing/selftests/kvm/s390x/resets.c +++ b/tools/testing/selftests/kvm/s390x/resets.c @@ -60,7 +60,7 @@ static void test_one_reg(struct kvm_vcpu *vcpu, uint64_t = id, uint64_t value) { uint64_t eval_reg; =20 - vcpu_get_reg(vcpu->vm, vcpu->id, id, &eval_reg); + vcpu_get_reg(vcpu, id, &eval_reg); TEST_ASSERT(eval_reg =3D=3D value, "value =3D=3D 0x%lx", value); } =20 @@ -71,7 +71,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 @@ -88,13 +88,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 */ @@ -132,7 +132,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)"); @@ -158,7 +158,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); @@ -197,7 +197,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 @@ -220,11 +220,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); @@ -243,11 +243,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); @@ -266,11 +266,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 7a6645464925..398819d4074f 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) @@ -163,7 +163,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) @@ -178,20 +178,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 @@ -227,9 +227,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; @@ -280,7 +280,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 3cc25714d703..c16799b616e0 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_guest_debug_set(vm, vcpu->id, &debug); - vcpu_run(vm, vcpu->id); + vcpu_guest_debug_set(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_guest_debug_set(vm, vcpu->id, &debug); - vcpu_run(vm, vcpu->id); + vcpu_guest_debug_set(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_guest_debug_set(vm, vcpu->id, &debug); - vcpu_run(vm, vcpu->id); + vcpu_guest_debug_set(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_guest_debug_set(vm, vcpu->id, &debug); - vcpu_run(vm, vcpu->id); + vcpu_guest_debug_set(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_guest_debug_set(vm, vcpu->id, &debug); - vcpu_run(vm, vcpu->id); + vcpu_guest_debug_set(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_guest_debug_set(vm, vcpu->id, &debug); + vcpu_guest_debug_set(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 08a95dab3a6b..fb2a2390b4af 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: @@ -175,7 +175,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"); @@ -190,12 +190,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 ba39042a5d96..6c4e728d2d85 100644 --- a/tools/testing/selftests/kvm/x86_64/evmcs_test.c +++ b/tools/testing/selftests/kvm/x86_64/evmcs_test.c @@ -161,12 +161,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, @@ -175,21 +175,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); @@ -215,14 +215,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 @@ -231,13 +231,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 108c3f75361d..137759547720 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 d0bd9d5e8a99..d5f37495ade8 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) @@ -191,15 +191,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, KVM_CAP_HYPERV_ENFORCE_CPUID, 1); + vcpu_args_set(vcpu, 1, msr_gva); + vcpu_enable_cap(vcpu, KVM_CAP_HYPERV_ENFORCE_CPUID, 1); =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; @@ -333,7 +333,7 @@ static void guest_test_msrs_access(void) * Remains unavailable even with KVM_CAP_HYPERV_SYNIC2 * capability enabled and guest visible CPUID bit unset. */ - vcpu_enable_cap(vm, vcpu->id, KVM_CAP_HYPERV_SYNIC2, 0); + vcpu_enable_cap(vcpu, KVM_CAP_HYPERV_SYNIC2, 0); break; case 22: feat.eax |=3D HV_MSR_SYNIC_AVAILABLE; @@ -471,12 +471,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", @@ -520,7 +520,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 */ @@ -531,10 +531,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, KVM_CAP_HYPERV_ENFORCE_CPUID, 1); + vcpu_args_set(vcpu, 2, addr_gva2gpa(vm, hcall_page), hcall_params); + vcpu_enable_cap(vcpu, KVM_CAP_HYPERV_ENFORCE_CPUID, 1); =20 - vcpu_set_hv_cpuid(vm, vcpu->id); + vcpu_set_hv_cpuid(vcpu); =20 best =3D kvm_get_supported_hv_cpuid(); =20 @@ -641,12 +641,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 b6a749f5c766..171009184c3b 100644 --- a/tools/testing/selftests/kvm/x86_64/hyperv_svm_test.c +++ b/tools/testing/selftests/kvm/x86_64/hyperv_svm_test.c @@ -133,19 +133,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 734e71739d33..f497d6ecec25 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; @@ -211,14 +211,14 @@ int main(void) =20 vm =3D vm_create_with_one_vcpu(&vcpu, guest_main); =20 - vcpu_enable_cap(vm, vcpu->id, KVM_CAP_ENFORCE_PV_FEATURE_CPUID, 1); + vcpu_enable_cap(vcpu, KVM_CAP_ENFORCE_PV_FEATURE_CPUID, 1); =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 eb5e1f972d76..3cb48e4b615b 100644 --- a/tools/testing/selftests/kvm/x86_64/platform_info_test.c +++ b/tools/testing/selftests/kvm/x86_64/platform_info_test.c @@ -40,12 +40,12 @@ static void test_msr_platform_info_enabled(struct kvm_v= cpu *vcpu) struct ucall uc; =20 vm_enable_cap(vcpu->vm, KVM_CAP_MSR_PLATFORM_INFO, 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 @@ -59,7 +59,7 @@ static void test_msr_platform_info_disabled(struct kvm_vc= pu *vcpu) struct kvm_run *run =3D vcpu->run; =20 vm_enable_cap(vcpu->vm, KVM_CAP_MSR_PLATFORM_INFO, 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, @@ -84,12 +84,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 eda4e02f92f6..012741176ae4 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]; @@ -345,7 +345,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."); @@ -444,7 +444,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_nested_soft_inject_test= .c b/tools/testing/selftests/kvm/x86_64/svm_nested_soft_inject_test.c index a337ab2ec101..1c3f457aa3aa 100644 --- a/tools/testing/selftests/kvm/x86_64/svm_nested_soft_inject_test.c +++ b/tools/testing/selftests/kvm/x86_64/svm_nested_soft_inject_test.c @@ -145,7 +145,7 @@ static void run_test(bool is_nmi) 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, NMI_VECTOR, guest_nmi_handler); vm_install_exception_handler(vm, BP_VECTOR, guest_bp_handler); @@ -163,23 +163,23 @@ static void run_test(bool is_nmi) } else { idt_alt_vm =3D 0; } - vcpu_args_set(vm, vcpu->id, 3, svm_gva, (uint64_t)is_nmi, (uint64_t)idt_a= lt_vm); + vcpu_args_set(vcpu, 3, svm_gva, (uint64_t)is_nmi, (uint64_t)idt_alt_vm); =20 memset(&debug, 0, sizeof(debug)); - vcpu_guest_debug_set(vm, vcpu->id, &debug); + vcpu_guest_debug_set(vcpu, &debug); =20 struct kvm_run *run =3D vcpu->run; struct ucall uc; =20 alarm(2); - vcpu_run(vm, vcpu->id); + vcpu_run(vcpu); alarm(0); 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 at %s:%ld, vals =3D 0x%lx 0x%lx 0x%lx", (const char *)uc.a= rgs[0], __FILE__, uc.args[1], uc.args[2], uc.args[3], uc.args[4]); 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/triple_fault_event_test.c b= /tools/testing/selftests/kvm/x86_64/triple_fault_event_test.c index 2b0f19ddbc8b..01d491f849c2 100644 --- a/tools/testing/selftests/kvm/x86_64/triple_fault_event_test.c +++ b/tools/testing/selftests/kvm/x86_64/triple_fault_event_test.c @@ -61,8 +61,8 @@ int main(void) =20 run =3D vcpu->run; vcpu_alloc_vmx(vm, &vmx_pages_gva); - vcpu_args_set(vm, vcpu->id, 1, vmx_pages_gva); - vcpu_run(vm, vcpu->id); + vcpu_args_set(vcpu, 1, vmx_pages_gva); + vcpu_run(vcpu); =20 TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_IO, "Expected KVM_EXIT_IO, got: %u (%s)\n", @@ -70,21 +70,21 @@ int main(void) TEST_ASSERT(run->io.port =3D=3D ARBITRARY_IO_PORT, "Expected IN from port %d from L2, got port %d", ARBITRARY_IO_PORT, run->io.port); - vcpu_events_get(vm, vcpu->id, &events); + vcpu_events_get(vcpu, &events); events.flags |=3D KVM_VCPUEVENT_VALID_TRIPLE_FAULT; events.triple_fault.pending =3D true; - vcpu_events_set(vm, vcpu->id, &events); + vcpu_events_set(vcpu, &events); run->immediate_exit =3D true; - vcpu_run_complete_io(vm, vcpu->id); + vcpu_run_complete_io(vcpu); =20 - vcpu_events_get(vm, vcpu->id, &events); + vcpu_events_get(vcpu, &events); TEST_ASSERT(events.flags & KVM_VCPUEVENT_VALID_TRIPLE_FAULT, "Triple fault event invalid"); TEST_ASSERT(events.triple_fault.pending, "No triple fault pending"); - 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/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 a0d35e578b25..f84dc37426f5 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 @@ -560,7 +560,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 @@ -577,7 +577,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) { @@ -608,7 +608,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; @@ -684,7 +684,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_caps_test.c b/tools= /testing/selftests/kvm/x86_64/vmx_pmu_caps_test.c index 63129ff5d003..a308442458b8 100644 --- a/tools/testing/selftests/kvm/x86_64/vmx_pmu_caps_test.c +++ b/tools/testing/selftests/kvm/x86_64/vmx_pmu_caps_test.c @@ -87,27 +87,27 @@ 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 */ /* Note, on Arch LBR capable platforms, LBR_FMT in perf capability msr is= 0x3f, * to avoid the failure, use a true invalid format 0x30 for the test. */ - ret =3D _vcpu_set_msr(vm, vcpu->id, MSR_IA32_PERF_CAPABILITIES, 0x30); + ret =3D _vcpu_set_msr(vcpu, MSR_IA32_PERF_CAPABILITIES, 0x30); TEST_ASSERT(ret =3D=3D 0, "Bad PERF_CAPABILITIES didn't fail."); =20 printf("Completed perf capability tests.\n"); 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 a89d49ae79a6..1e3506c3deed 100644 --- a/tools/testing/selftests/kvm/x86_64/xss_msr_test.c +++ b/tools/testing/selftests/kvm/x86_64/xss_msr_test.c @@ -38,11 +38,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); =20 /* * At present, KVM only supports a guest IA32_XSS value of 0. Verify @@ -52,7 +52,7 @@ int main(int argc, char *argv[]) */ xss_in_msr_list =3D kvm_msr_is_in_save_restore_list(MSR_IA32_XSS); 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); =20 /* * Setting a list of MSRs returns the entry that "faulted", or --=20 2.36.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 20EACCCA484 for ; Fri, 3 Jun 2022 01:01:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241618AbiFCBAf (ORCPT ); Thu, 2 Jun 2022 21:00:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54918 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241250AbiFCAub (ORCPT ); Thu, 2 Jun 2022 20:50:31 -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 024BC2FE56 for ; Thu, 2 Jun 2022 17:47:38 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id y4-20020a17090322c400b001637287812bso3479141plg.6 for ; Thu, 02 Jun 2022 17:47: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=BrjMyn6UOGwtIz7DDGBy5Pr7ixuSSx4pzqxP/WjUvpg=; b=ls4moDLUsT44nSRyZwv+GbGgLQmDufXHa/fMAqmFfeHCkhU3T63EaZq6nq+SGpeAPD 3FQImgJFIEGzWuCAKYdLLJ/or38qceUZn22OzSBotbLwLtAb1q9IQXZ2AAl0kVe4w/9I Wgdj6AGpYV6xg60tABhHeC4pUiI9UJCsaS7PC5rzJtwBlZHUg8vrymN2rWgTY+YilXG2 iAPQXuXvrd2fyf4hDOcVmtYcSVoIKldxC73ODI8kpbWMFbKBCYdtlFypraHtFZHWhCrg sLlgFXVc4+ZnDLSYhen7uGiViE5RknfYM5mjocDmAROxYL2H5bgUYvLssw+zzTMMqhYc s1LA== 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=BrjMyn6UOGwtIz7DDGBy5Pr7ixuSSx4pzqxP/WjUvpg=; b=ry+N4SDkZHTYy7krQmQL71valfhJa43KUg/1XL1CmtmPaGmEypRKeXbRqTMzACHvMS QzI1F2uy0byUPkMacLnFr5T16UtTsDrGYix364SR/rDrqmCsXOhNUISFZJXxc9H/Cvmb Df3LCQKfnmY+zUGaSepSttcMnJvOsPE1xXCW4zfVflDpEY8RKbV0s/+IwhWeNKlIEKwN DkC/eZAapizg/UAVu2pik+cqEM/pqC6Dla2DVeVycIraZIhv7EO+F2XROTW36J0X29uz 3dqMEU6FZHGWgxRfgzlUJuheXhNCdn9N/hDx3Ex7yeX03dY2GvOdPadQ3mT6LrFmQPCb qZcg== X-Gm-Message-State: AOAM5336zBiHp71v2oqqAr6s5uMN2h9PBKNVLVzi4cDDQmXaPf+13ZJ+ E0qH5bv/JLt0GZ0kdp8bs9+Srsajlys= X-Google-Smtp-Source: ABdhPJz4fBpNAWEDph89ezfjs34+rAvq9PrcFCLjqp23S+Xf4PXagSLiQP9GrUfjN/n9pHc475T1OJvN8Qo= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90a:249:b0:1e0:a8a3:3c6c with SMTP id t9-20020a17090a024900b001e0a8a33c6cmr307332pje.0.1654217256913; Thu, 02 Jun 2022 17:47:36 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:43:20 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-134-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 133/144] KVM: selftests: Drop vcpu_get(), rename vcpu_find() => vcpu_exists() From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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 640634bdba9a..2da9db060378 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 e08e89174610..8775d7ab39c8 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -459,26 +459,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 * @@ -1049,6 +1029,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. @@ -1058,7 +1050,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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 35982CCA489 for ; Fri, 3 Jun 2022 01:01:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241704AbiFCBAx (ORCPT ); Thu, 2 Jun 2022 21:00:53 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51954 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241178AbiFCAu2 (ORCPT ); Thu, 2 Jun 2022 20:50:28 -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 01B5D2FE42 for ; Thu, 2 Jun 2022 17:47:39 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id oa9-20020a17090b1bc900b001e67bbd7f83so2634426pjb.4 for ; Thu, 02 Jun 2022 17:47: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=vzEIkOxF6j+8TaKOQctGK3QAAYgR9NaCVUttrNl7Imc=; b=EmhsuTBMkRSesVSbQRd5b2Br+gEpVvbkc2b/WJMyySFV9xt3jCkETEmd2CCx3cY0ZR nvN0ZHMZR+zCNJB89/Tl1Hz9kZfTPIOmXLM7TMLXsGpI8+/pmYThDR3ZkJrg2URRZEBK QcU8Uy/Fsds7oWJoGpmfkPLSh8Yqxhxi8uugZnodAQKPtoXQ21WDiKZjv4HIusgOt2qa kw6Fv29hc0EUCZTg+v8qFgTH3HhFE3eo1SsAD9uGCItq1jxd5HBSs132xQP+89slOotj MbNkQyrmK0amq++BZg35PDirnbxo09wCzf9JZjQMJWb/v/Nsk6uWNYNNEp5Axz/tZNGM UM9w== 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=vzEIkOxF6j+8TaKOQctGK3QAAYgR9NaCVUttrNl7Imc=; b=nX9ITojWCSzy9YoazfHh5M/eRyX3/phsdbc90qXzC3Kb9vbJUO7HpxPtYjKUI4K+F9 tCcfgTK58NJdbxuRkzYSxQdVALZy7z0Baox9mnwCG9XVi7H4VDvNx/OJVa+e66g1YyHx 9jXIRQGcFfZmx4Jcj0vNRCzS+EX4va6a04W0sdadoWQQWPrGFe6tYREaEWoaB9yKnqcl GtKx2Kj1NU0Y3HqBGWFaUE9DQRJ/AwUa0Wg3sWnXxEZi8Bfggn1bcoVeGq7C8bDR2COf GyQs3Ir0dIjPkyVs+fKUN4guvHn1IliwWB+ttKGxhDWqRaGGi4Lcp0TTwbkrsH5+cqOd pynw== X-Gm-Message-State: AOAM530HEUeoyUJ4QvvrFyBm0JuSuVUSIghMkcZBi3O0MeeRQTnjeZGS GKwKp4qC4+9J1K4KJFXdKAIZO/sBUeU= X-Google-Smtp-Source: ABdhPJydDVJfmiHF6DKJW47aGfDPWoWTmf7NtAN202prI2IgBM0ak4NkgIUfaMJqSiuU0Zxk7LyUt+UWHwg= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:f60c:b0:156:82c9:e44b with SMTP id n12-20020a170902f60c00b0015682c9e44bmr7669686plg.106.1654217258908; Thu, 02 Jun 2022 17:47:38 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:43:21 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-135-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 134/144] KVM: selftests: Remove vcpu_state() helper From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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 2da9db060378..5741a999aca1 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -298,7 +298,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 8775d7ab39c8..2d69ac86d3fb 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -1001,19 +1001,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; @@ -1394,11 +1382,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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 5B88CC43334 for ; Fri, 3 Jun 2022 01:01:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240940AbiFCA7x (ORCPT ); Thu, 2 Jun 2022 20:59:53 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52032 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241216AbiFCAu3 (ORCPT ); Thu, 2 Jun 2022 20:50:29 -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 98C0531DFC for ; Thu, 2 Jun 2022 17:47:44 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id c14-20020a17090a1d0e00b001e328238e7eso3406519pjd.4 for ; Thu, 02 Jun 2022 17:47: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=JJS7EyD4erb5GYrLtMTUJ302sBwmrMBdLGpv7BVItVo=; b=Iy4M77D5zRQ+X7yvDk85qz8ddQRERn6/M+k9sn27vjJcwWJh7DebcVqtZpcMrfLVON 5W2ltZlycjbKAoMr0wATB45LUg05Jt62ZC676Nl4NK6ZqyScUy9qE9osGplFy3LqIzZq 2yxp6978qZThNFMXRh0RGzNkCVnj/IeFVCcIcmctoM5BzQHltT8EDq6fKbB53tRgbvol o2n1gUJ8c1csFB+JHAa6+k9KMgiOO6Dk2+vKviukqe8Jx6p1MTZg/VfSbyAGzDFeXmsM vV1BS9R6jDJNjYLTkPAaAnhvNXUC9eRyTJFG12wJHJ2/b7QRYJ9h7J9E+5d8ADWN54td Cleg== 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=JJS7EyD4erb5GYrLtMTUJ302sBwmrMBdLGpv7BVItVo=; b=VT9U8n2smuvUVsV7pwhboqFY+zJlGJkePJuChbucwC0QoOY7kjtAKMZwmVSJkut+Em QERQmCue7w/rcWJZwZHdTV43O+795LNzOtRa8nd9Vy5+R46scDkEpUu0r8Ci8JfUnebM n0ViOcWU/3agOFcFH4j7GngXB+D87vg7DzdWhAms5+9tisyKkaNO6hGC4sXiupp7oHwJ fW+q9qR5oVh22GNZ6Rksvx4T07mtcH3w9Q5rQE5des0fjSyurDs9hn+lhkgQbSnLuvyp S/UP5DEXNt7AEhyrhk+bcZpCmBd1nzE3T8v7CL6amZE8JUpIgZmjxtfCp0AJS33l5+aW wQZA== X-Gm-Message-State: AOAM530XWN75MNiLX+sJ57W2ABjft/juUUx3xHseU49ES3OvGNThm6Zx r8h06jf2Vx5nLWrDRy1TpLG3su+gdqo= X-Google-Smtp-Source: ABdhPJzkRCWLATITIrZNUBGBs99gDKC9Rn8oUIHOLFvODyewCXSjBhlrPBIOm5jgxnMx83sI+JoY9sBiABU= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:90b:4a4c:b0:1e3:3ad6:a5bd with SMTP id lb12-20020a17090b4a4c00b001e33ad6a5bdmr8065127pjb.172.1654217260658; Thu, 02 Jun 2022 17:47:40 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:43:22 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-136-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 135/144] KVM: selftests: Open code and drop 'struct kvm_vm' accessors From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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 ca896da12e41..ed6d58fd1155 100644 --- a/tools/testing/selftests/kvm/dirty_log_perf_test.c +++ b/tools/testing/selftests/kvm/dirty_log_perf_test.c @@ -221,7 +221,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 906e893375df..ca584b9bf5c0 100644 --- a/tools/testing/selftests/kvm/dirty_log_test.c +++ b/tools/testing/selftests/kvm/dirty_log_test.c @@ -713,21 +713,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 5741a999aca1..45f536f99399 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -592,13 +592,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 2d69ac86d3fb..855ea3dbf8f1 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -1827,36 +1827,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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 A04C7C433EF for ; Fri, 3 Jun 2022 01:01:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241659AbiFCBAo (ORCPT ); Thu, 2 Jun 2022 21:00:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34380 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241195AbiFCAu2 (ORCPT ); Thu, 2 Jun 2022 20:50:28 -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 F1E49326C3 for ; Thu, 2 Jun 2022 17:47:44 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id z11-20020a17090a468b00b001dc792e8660so3414886pjf.1 for ; Thu, 02 Jun 2022 17:47: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=N9Gry8VczxXnWSfDRSE9e8v6DYqSsDG5vuiHaCWrBjk=; b=QN+A6cFHLzyjzlBXY1owXF7+yi2NhK9QGD67wUxrLw2moXoy7f+0O7G23MHZG7zom3 Y00xr66ySRJwWSbE2NZJ23WFC/vqTv1AB0t4gIAmFkdlEEW9PqBM6JF0Y5JdAehNb2LD mvX2rITlYqWrScqs712BIt9sMZRRCiwuE0VPdQrJXuIsIWXft4SDIPpBNh6DudrepBPK SXF7RfgXNRi1iBS8/cvuU/WezLYDFTb4M/hRIUgPdab7RN8W9v2/VHqDxBey8rIYvOIJ E9u6DEgoxubgM5/e7+G2vkmZCc3SPrYXBOH0fsFFABA5Qx30iHwP5ceVfLHcaTVPAV0W VYsA== 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=N9Gry8VczxXnWSfDRSE9e8v6DYqSsDG5vuiHaCWrBjk=; b=kB9KUm/7HoAdZ+4xlj7aKSjFLzE/gFW6uo5C9LbuJcTS3TwM02RTj3CpulZ0BLnej7 qtih48cri3lbaoHait6wJ7dcuoSaByDLOmNI6cxefbr+s4B+zRzqeyXMn2ARWOyZYAib QTBiLFVRJ1WqOiSqcojrNgtZa6pYTW0wwQLsmMzEo5vP9jeESthwK0pYcgzX5fguk+eN BsPM0C10jioVvqyyTtI5e+h+5bxSUBHutaG6zRa9326zD8dxbwGpFSxIYfZUeXrZzmci CobQUB8jdRlq5fJA7KV6yGXx0mC5A9HrRJ8qLYzAHq+yfhJ2a6WAn4Dxv3/1EYi49Zd4 LEVw== X-Gm-Message-State: AOAM532qAMvC0NVnXE+awpRs+mS4rs0S4kibmOJWaQlrCLtu6zRd4ikF nEzeEKAkj7IE5+rjkkdPqLJqRH69lnY= X-Google-Smtp-Source: ABdhPJw6BBqkx846FSdRja5dk88XZjZ/XYOFmW+jZXG0F24dY1V1oIxPVkXQzzFqcFaceks33ky1WAAUpjM= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:903:228c:b0:163:baf6:582a with SMTP id b12-20020a170903228c00b00163baf6582amr7554349plh.43.1654217262359; Thu, 02 Jun 2022 17:47:42 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:43:23 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-137-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 136/144] KVM: selftests: Drop @slot0_mem_pages from __vm_create_with_vcpus() From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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 45f536f99399..f84e01612c52 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -561,18 +561,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 855ea3dbf8f1..f68234a2ee83 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -280,7 +280,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 @@ -291,15 +290,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; @@ -307,10 +304,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 @@ -318,8 +311,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", @@ -340,8 +333,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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 91A98C43334 for ; Fri, 3 Jun 2022 01:01:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241642AbiFCBAj (ORCPT ); Thu, 2 Jun 2022 21:00:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49282 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241248AbiFCAub (ORCPT ); Thu, 2 Jun 2022 20:50:31 -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 15EB933A23 for ; Thu, 2 Jun 2022 17:47:45 -0700 (PDT) Received: by mail-pf1-x44a.google.com with SMTP id z5-20020aa79f85000000b0051baa4e9fb8so3504871pfr.7 for ; Thu, 02 Jun 2022 17:47: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=ppIQviKeXAjnBTE67zRSl+mz1Fz5fT88/u4zDaATcDY=; b=ZYMZuefqQ7VqgcGkwgIuck5ytWZ1wxhU1qBur6BmelEMmu4oOWPTH8gQG6jodbj3mx pc8G/so2nlpShG46ZXNBYya/WdqDMwNyrZfj/RDEVJNFt4OOlVXLho2uY/1HB3NB7cRc jTVFK1C5qpgL3nW+baPppZCthxus7Y7QL0t1TtWlcS59RXQwu8E6ROiJROGaFAwo8YkV kkqe+1kQhzfpn6GsNbwQPsS4KPeMI9F2cBS7CjLL2EnLOceph988mumRcU3z3QtepnOr BtfWI5ufX3VO5dnPGY9jfn2G87tCEj79dlXEPaIm8V+MDIurNCVgfxkzJLl0jH1AM6tG +Wpw== 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=ppIQviKeXAjnBTE67zRSl+mz1Fz5fT88/u4zDaATcDY=; b=IaektHLRM5NMZoQvdSkvSkGQresIOV/CdBvBOp53TtLIbhFrdQS72VYaAr2wIlfK4C YArGKJNP/WMRlEHBBRPMskzuQSL8p2W4vS6fImYuTusTv2BpE/evVp0XIN9Lhfhl7F1a e+DlroY43otc4oe3kGy8kK601cDUuBCCsmfqmVxrSA57DZ9P3f7JIREmsFjQjSsVRQGs L4Lp+X62DBLh9VEo5kOwqocHDEektjQIpuXlQJbnLKDkK6dbKJRUj00jWP8XdtNEyhs4 S/rbLCIA/Sv5X6YdzoEJ6PP6l/uJHYPUIdWFuhwJZre3WD3Vnax7MWB92a7ewUkqNo+w K4Iw== X-Gm-Message-State: AOAM530dp4TyYSra2jl+IB6g5jQiH/6j/sdsk9Ov6bgZdfM05oK/uctk TLLHPZhS9vq+Jdig9v5dKtliWWwWsmI= X-Google-Smtp-Source: ABdhPJysWyQ3LxSjlqrGIKwMROjyt21nArq2Dc3ef8vyjSh29k5NpIASAf6qFvrYCLOspjtFbwgqHhnE4H8= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:e752:b0:165:1282:8d56 with SMTP id p18-20020a170902e75200b0016512828d56mr7738854plf.48.1654217263943; Thu, 02 Jun 2022 17:47:43 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:43:24 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-138-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 137/144] KVM: selftests: Drop @num_percpu_pages from __vm_create_with_vcpus() From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- 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 f84e01612c52..6143d45a02a7 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -562,14 +562,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 f68234a2ee83..508a5eafe15b 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -281,7 +281,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 * @@ -295,7 +294,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; @@ -310,7 +309,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 @@ -333,7 +332,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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 05039CCA481 for ; Fri, 3 Jun 2022 01:01:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241597AbiFCBA1 (ORCPT ); Thu, 2 Jun 2022 21:00:27 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50796 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241274AbiFCAuc (ORCPT ); Thu, 2 Jun 2022 20:50:32 -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 1D86B340E1 for ; Thu, 2 Jun 2022 17:47:47 -0700 (PDT) Received: by mail-pf1-x44a.google.com with SMTP id u67-20020a627946000000b0051b9c1256b0so3499997pfc.9 for ; Thu, 02 Jun 2022 17:47: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=HKE2QNYAlmUb/mlIyUuyBK2fl4XWFlXiXhq504LYE1E=; b=TPwexv+oA9/pziWEcJkkW6PKE1GS7EMq8rfcwtiYxwan8fZGrwhnH1tfGkPp7nnfym W5fNAa/jd7Txqd2M4eF8sK8p6YDjRs0n6PgrQCVzKU2WbZiPwqneiFf/lA2ws4jMXfiF nzs1SmG5X17pBep+dW2GY/b1R+vkfIJNVlcKGYlKrGVhUXQF+Zq1x3IfhfDXgQpMlA9j TkUa8pSFrHM81RfY5a4Y5wDcBCifzWCiNlyU/CIAmLCy4qPzqV2pht/k9rT+Vs13UD74 KvIbw7R5boT6dS8bJZDP3Eg+0PgVBkVScQfgZkoXDUS3+D/+I45HumCh8cBUwBpBtW6c CSVQ== 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=HKE2QNYAlmUb/mlIyUuyBK2fl4XWFlXiXhq504LYE1E=; b=qRiyLTUhQTu6Zaw9qCcjTV/fdUwgWDCQ+tGPLcy8KMiO642mpQyFeSF7jICJYkDNhA YwmGEctuHIVBduYpv0KPzB16Qn7WfuMptxAJC0ZnkKyr7BMWi2zhzFybVz+ZK1kNojEB aNPMzmlH2Pq+7y1N1MaiPmukamp1MaedXm0pdoeeapPniGF2GADM/7/0R8h6R4rmOJH6 FdvOOQnO2QGxBR8O+7TzwrHR4FVFQsPxMZrqkm5Jz92GsEWp5HIZzOJWqbhWyjhtTZYE hJGE2z+//CcNFsWDy3Qje7vHcc1ykGIp95wFzKnZduvmbOZ+uwml8FeZizB7QOOO9nCd Jz9w== X-Gm-Message-State: AOAM530T4IK6YhBRBKgPPafjhiyRN7yk408SbAKIkeoSmDZTwZnUTi3U QgLji125EAiZBi0FmUYtzRWgq8dODzk= X-Google-Smtp-Source: ABdhPJwPNcbxhSWKehOviLkABXsRR5wDj5/8Brl5wwA1Y5fqDWPATjf210fIgG9/5y2xnoSmquLiuqWAODI= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:903:1c3:b0:166:303e:124a with SMTP id e3-20020a17090301c300b00166303e124amr7463156plh.7.1654217265777; Thu, 02 Jun 2022 17:47:45 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:43:25 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-139-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 138/144] KVM: selftests: Move per-VM/per-vCPU nr pages calculation to __vm_create() From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../testing/selftests/kvm/aarch64/psci_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_test.c b/tools/testin= g/selftests/kvm/aarch64/psci_test.c index 3e1bebe63adf..7928c62635fd 100644 --- a/tools/testing/selftests/kvm/aarch64/psci_test.c +++ b/tools/testing/selftests/kvm/aarch64/psci_test.c @@ -76,7 +76,7 @@ static struct kvm_vm *setup_vm(void *guest_code, struct k= vm_vcpu **source, struct kvm_vcpu_init init; struct kvm_vm *vm; =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 ca584b9bf5c0..8542f713a101 100644 --- a/tools/testing/selftests/kvm/dirty_log_test.c +++ b/tools/testing/selftests/kvm/dirty_log_test.c @@ -669,11 +669,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 6143d45a02a7..db9c00a7af4e 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -547,18 +547,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 508a5eafe15b..494bce490344 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -258,12 +258,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); @@ -297,27 +330,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 43fa71d90232..4ba866047401 100644 --- a/tools/testing/selftests/kvm/s390x/resets.c +++ b/tools/testing/selftests/kvm/s390x/resets.c @@ -205,7 +205,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 012741176ae4..ffa6a2f93de2 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 @@ -339,7 +339,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 vm_enable_cap(vm, KVM_CAP_PMU_CAPABILITY, KVM_PMU_CAP_DISABLE); =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 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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 7C5E5CCA47B for ; Fri, 3 Jun 2022 01:01:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240961AbiFCBAA (ORCPT ); Thu, 2 Jun 2022 21:00:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51798 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241348AbiFCAvC (ORCPT ); Thu, 2 Jun 2022 20:51: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 134BF34B87 for ; Thu, 2 Jun 2022 17:47:49 -0700 (PDT) Received: by mail-pg1-x549.google.com with SMTP id o18-20020a63fb12000000b003fb22d1c6a0so3044929pgh.12 for ; Thu, 02 Jun 2022 17:47: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=qpwmRkquR3FvD6K1c9jD4zV/5jApQvMpkB0TPkt8ar8=; b=WFcvw1+2cZu8Cveo209P1VThhIPYOt5yFZ9OE8O7eCtZELcj2TZTcwtQoBAsgPk4TX IEqu8Jy+pw9K0ST3jww1IOskbIpoy4bLx/aZfq28oMyyiv6zqXGLMZJYB+DEK4eu2leK Bg9rP7PQKkZHbUMRakziBomWVIG6gstj79UXM8pWGiRxPIAT/IozkNLnNJ7KPksohYvu DIxlMhWPWi3bCRSsO1pwiH9x2gF8w2C5rwrHHbMgKzn7ATi4CzAC2yJPEGDcCxiRVHI0 LWtA0AVJzBxPIP5JsuIao4AlAL3XPJqzU5w6WOHK5SG78XE56Pb3wL04Yz6BV4RUHpnc njoQ== 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=qpwmRkquR3FvD6K1c9jD4zV/5jApQvMpkB0TPkt8ar8=; b=OqD9N8CY/VgIzNBB6MHOYSADfZBJeujc0nnXzlKn3zZEVaF00oTYK7n+VFhGsH+2pG VB4Yj1eqV4duIHHfSeuNdYwbfrSKQAYTEzQFDEDQ4r1gbwVdqq5Xjd6bpoMZiY4C6DTH JtG+0MPOzn1TGhG+xjzm1MjbVNLOuWtpqm/U2Aww8RuZxQkLWTzh8yLO0AVYLyw+4xSq kryZSyUhBe90kwp1niIMXtBUQxbxsAtQJH8OANFW0P9KqP5MUyLCWKgS0ftaxioEBuDP lQWfsFOCnrUkCqihJN/p4xHNW6AXzXsC15mcm/AgVwF97OU3J0VUhcqJcV5s1QqbENth Svqw== X-Gm-Message-State: AOAM533/glsl2iAKpXz8dt0i89GyAtPXIQoQtdFCOAlimllAwamTfyUV 8jNcqWtJUjpanYc/TXHkKF+T5PXrdO8= X-Google-Smtp-Source: ABdhPJxenSwDKGN5/QFjNnoicNEsOh01ubm9F8V2A2x+4dS3UHh5Nhtv+DsPvRlf1nXQPrZIXW+dNUaqRos= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:1895:b0:51b:c356:c04f with SMTP id x21-20020a056a00189500b0051bc356c04fmr7450606pfh.35.1654217267465; Thu, 02 Jun 2022 17:47:47 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:43:26 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-140-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 139/144] KVM: selftests: Trust that MAXPHYADDR > memslot0 in vmx_apic_access_test From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 EA15BCCA482 for ; Fri, 3 Jun 2022 01:01:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241554AbiFCBAY (ORCPT ); Thu, 2 Jun 2022 21:00:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34930 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241361AbiFCAvD (ORCPT ); Thu, 2 Jun 2022 20:51:03 -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 427893120C for ; Thu, 2 Jun 2022 17:47:50 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id 92-20020a17090a09e500b001d917022847so3532245pjo.1 for ; Thu, 02 Jun 2022 17:47: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=1ZvG+5/wZpUAC90uvh+akjpkSn0i92RxKUjEYWBqrYg=; b=sgScZDk5zVz4fw/BQVRlIJp5pQMk8dEkokKERscif59Eeqo3a6F4CqAk8JFLmpiHXF NHc/CFk6Z91YX0RCXgwFA8DvuUXxo4BmnP2DVk9neuEVzKIHslb2VVPqW2bNUcEIZMNY fJGJxnwGEAYHk+i4RUGq/8ZZebxz6jVwF2ClNhu/0paTnTcwMBboxJ7n+iVMP1cg1ju+ 1lX6HdYzH89D18KqzgJDDkNluwHnLe0iGV0u5cujXLbWt9Btb1vgqP2A6bA1FE+OD0a0 pZ1WAWeRnWW+L5TUiibIQsIPs7zZNQXIF/WRk1mXFLAqkDFbwvq6veSJXeCn41Q4+pS1 0fVw== 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=1ZvG+5/wZpUAC90uvh+akjpkSn0i92RxKUjEYWBqrYg=; b=Ot/HI+og77OXxyVcgBB3le274u+iGQWYhgru1YQlK5zRRliDHjmQpZphY5z757OdXc s+qu0OqJnXA5ST4OB+9gxnnCI1+7MdeznNEaX5R92BKaQ/49FWLb5hYG69NLmKm7tDbH R9AfiLZ73C5ECVh6l52Yi60EWwus8qIA7AT1iD5q9OrchxZkQvDNhjgDrQ0LOaJqz115 4Qvv6TSlH/4MK213UlXhyW52RB91h1UoOi1twdeYula+EiEgUnlIXHJAS8jLBsy8fvda nAjtE7sImM7XxdBLM+7MqZ6BhS4xC4qDmHPoGJ2eNcjFRknhMRPf4MGxBv4ZHbheHBi7 +pjQ== X-Gm-Message-State: AOAM5333LixjnUi7FbLP6za3LS+GWoI0LzJ2JKC4G6MtiYoDqG0PnOeg TsYfWlS1JTm5qHM2uhbcMkK7RRv4qFI= X-Google-Smtp-Source: ABdhPJyVF7MsShOiUhLdM3RTFRisaQrEeNwNutLK3YJNPYJsVvtsN8aAT0rvcmwqun9joKQpqnheHRRFj90= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:6907:b0:162:1237:42df with SMTP id j7-20020a170902690700b00162123742dfmr7622482plk.157.1654217269184; Thu, 02 Jun 2022 17:47:49 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:43:27 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-141-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 140/144] KVM: selftests: Drop DEFAULT_GUEST_PHY_PAGES, open code the magic number From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- 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 db9c00a7af4e..1c762988ab9c 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 494bce490344..2dcd83a03cc2 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -270,7 +270,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.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 8B0BDC433EF for ; Fri, 3 Jun 2022 01:01:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241039AbiFCBAE (ORCPT ); Thu, 2 Jun 2022 21:00:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52002 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241365AbiFCAvD (ORCPT ); Thu, 2 Jun 2022 20:51:03 -0400 Received: from mail-oo1-xc49.google.com (mail-oo1-xc49.google.com [IPv6:2607:f8b0:4864:20::c49]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 93D5135249 for ; Thu, 2 Jun 2022 17:47:51 -0700 (PDT) Received: by mail-oo1-xc49.google.com with SMTP id 188-20020a4a11c5000000b0040e4e4ced2dso3159275ooc.23 for ; Thu, 02 Jun 2022 17:47: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=+4nNoyX7JeBm/N7spsN6DPOga3uPSoar0+etXxoGgD4=; b=NvMh4Yj+8LUmAda/RiZF1K0mOWuGUuA6Hl1yujDnw/gMWAp8EN+UZ0d5KujDvcyVBC QJjP4ouu6XsidrpZw3w/tXGOIhUcFc02xHYtwWFkihpyJfNCOr4Fs/QUg5eQz9tT3uPk mCHUt4t9PYUIBLQ37J6/90GtfjugR+FkSGG7nBYEXljjkvQY7+LJYyip5yTBwgR4yoJM JFJcrlibEbU1UPEfX0Dy5fhvciVLQeIelNfuIcntb5kSusSM5fGE+jZJBTyTkh3tDbnF mBanNkpTk1HglE+10CDnNjFChoKvNPQanFrP5gz9MgPf/j87iDttfGwS1aHvwsagr+5W pbFw== 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=+4nNoyX7JeBm/N7spsN6DPOga3uPSoar0+etXxoGgD4=; b=cg/9y6+1tnk8+x7wVLQiQhcqbr1u8iN0WnmSFd9XLYEg4KoQuMIzIep20Zx2iRcgce exwk7SVRDSEILLBVaUE2eW/ocPOBNJMtFLP8aXb+5ju2cMux/fHufq1VUHLxkTApwi1i OQv1GUn6N9Me4/kviuov5JhH9BhAvBCkttTct9L3qPL5M05ICGNigaxyQSzxTDr5TGHy vWZdicaHHcgJDBNokGO97RsIcP+Onx3cTcvsH2raVRdGUnuRN68Ukqva2DUgtgJm/7t5 7Jg0h50dsiXJzSQYMwUNqEAEn2xEqWa1jQxYBcDYYYwkZ1BVR9AWEPt9eyDV9hVt7vOm gCCQ== X-Gm-Message-State: AOAM530dZt09JXlFUX1efuTpr4JaG7aQONVxxzs5AVPBW0ZCkIJ/3u7s 5JiuA0dPWpQ/ihFbNaxkpNfYtKWhTiM= X-Google-Smtp-Source: ABdhPJz9agXYe3qC0Put60InXSJB1iqnJiW+Ya6NWeg2trr4toG5zFlkBkkvXEHd6cR5tugGatjlX87uXzk= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6870:c193:b0:f3:3d31:1b94 with SMTP id h19-20020a056870c19300b000f33d311b94mr4507626oad.90.1654217271021; Thu, 02 Jun 2022 17:47:51 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:43:28 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-142-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 141/144] KVM: selftests: Return an 'unsigned int' from kvm_check_cap() From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 an 'unsigned int' instead of a signed 'int' from kvm_check_cap(), to make it more obvious that kvm_check_cap() can never return a negative value due to its assertion that the return is ">=3D 0". Signed-off-by: Sean Christopherson Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- tools/testing/selftests/kvm/include/kvm_util_base.h | 2 +- tools/testing/selftests/kvm/kvm_binary_stats_test.c | 2 +- tools/testing/selftests/kvm/lib/kvm_util.c | 2 +- 3 files changed, 3 insertions(+), 3 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 1c762988ab9c..72cc0ecda067 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -167,7 +167,7 @@ extern const struct vm_guest_mode_params vm_guest_mode_= params[]; =20 int open_path_or_exit(const char *path, int flags); int open_kvm_dev_path_or_exit(void); -int kvm_check_cap(long cap); +unsigned int kvm_check_cap(long cap); =20 #define __KVM_SYSCALL_ERROR(_name, _ret) \ "%s failed, rc: %i errno: %i (%s)", (_name), (_ret), errno, strerror(errn= o) diff --git a/tools/testing/selftests/kvm/kvm_binary_stats_test.c b/tools/te= sting/selftests/kvm/kvm_binary_stats_test.c index 7f2ddc1535d7..982bf3f7d9c5 100644 --- a/tools/testing/selftests/kvm/kvm_binary_stats_test.c +++ b/tools/testing/selftests/kvm/kvm_binary_stats_test.c @@ -213,7 +213,7 @@ int main(int argc, char *argv[]) } =20 /* Check the extension for binary stats */ - if (kvm_check_cap(KVM_CAP_BINARY_STATS_FD) <=3D 0) { + if (!kvm_check_cap(KVM_CAP_BINARY_STATS_FD)) { print_skip("Binary form statistics interface is not supported"); exit(KSFT_SKIP); } diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index 2dcd83a03cc2..8f7ee9cb551c 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -69,7 +69,7 @@ int open_kvm_dev_path_or_exit(void) * Looks up and returns the value corresponding to the capability * (KVM_CAP_*) given by cap. */ -int kvm_check_cap(long cap) +unsigned int kvm_check_cap(long cap) { int ret; int kvm_fd; --=20 2.36.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 AD444CCA47D for ; Fri, 3 Jun 2022 01:01:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241217AbiFCBAI (ORCPT ); Thu, 2 Jun 2022 21:00:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34380 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241496AbiFCAvM (ORCPT ); Thu, 2 Jun 2022 20:51:12 -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 39E6637BE6 for ; Thu, 2 Jun 2022 17:47:53 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id y15-20020a17090a16cf00b001e03ac27c30so3523567pje.5 for ; Thu, 02 Jun 2022 17:47: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=Xpy9nxWW290N6cNkcKM7VO2ugdfUgHDgcSvxHbiKmbc=; b=Ql1pO7Y2uOl0ElaLdY9nKkwij0Y78BTAVvTsnYlOWeK/9TgNjq7OOaPZMMX+WEYbWR LGXyZWAVlQisuv8ML1iLjnYXobZWKXqR/zpOLAamlx5lxYs/XBBvlpw7eE0roVlz0rE7 UaP5B7JS0UL5gc6RQpM2Ch56OjyKokublz0bOXcQITSXky4gRGzs4uyG67bOGQxRxyqM BSlN7W+KIsUpQ4z3KVwpjr/FKtdrE+x5lQGqb0NXRCrGHAf+ASoxk2wD/gDwZovIqkRW TQdKZ8m9e1+urko5F2Z0SoEESH02sYFkvHI7VnXBlxwnp7jDCUFEDb31+T3Ti9yahlst CMIA== 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=Xpy9nxWW290N6cNkcKM7VO2ugdfUgHDgcSvxHbiKmbc=; b=Yf/5iYEd5+lwXaP2FMuI6RKmwe3eNK5+kJiw/KbrAFrmlwM4yU9Up0Uz+8oTZRS12o 0qQ68hc9X3F/N5/lS9zgOjqXZuIKStno8m/pH07lpCWmj+TfL7KpSlXRHGuHsnQhl6lQ 7rz1+x36Bcxsy1ZSDOfxBYd7qZyfQOLek/6j9P+CLKZW3d6jAgB7sVqUyyfhGWvM+mao AMgxDfgMkjJ/Yvu5XgADbq4CiHaZU1FqQhMwSC67QqGqP365yKrEa0W7R9Cxkqznl+Ej MvEPsttE0D1gee1Utx7QK+1FtWC12inre7YwSaPnDF0tlBWCUhv1R8rktK78xqLdRO17 zIsQ== X-Gm-Message-State: AOAM530dJroZ7fSqCjsNE21HBXIIFI4oK7iz3zassgKF3Gv1pYDQSrjo qkzDPObW6ENWa80DtKbBRyDbf75+pOk= X-Google-Smtp-Source: ABdhPJySkzx+BXxY1IJPMt36dPS4VVIgN/wvjrbVmG4g5zzSOcNbjjxX2JFDEtWtCvzuCm/BHnDFDGyUTbI= 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-20020a1709026b8300b0015d1ea24f80mr7439717plk.41.1654217272524; Thu, 02 Jun 2022 17:47:52 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:43:29 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-143-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 142/144] KVM: selftests: Add kvm_has_cap() to provide syntactic sugar From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 kvm_has_cap() to wrap kvm_check_cap() and return a bool for the use cases where the caller only wants check if a capability is supported, i.e. doesn't care about the value beyond whether or not it's non-zero. The "check" terminology is somewhat ambiguous as the non-boolean return suggests that '0' might mean "success", i.e. suggests that the ioctl uses the 0/-errno pattern. Provide a wrapper instead of trying to find a new name for the raw helper; the "check" terminology is derived from the name of the ioctl, so using e.g. "get" isn't a clear win. Signed-off-by: Sean Christopherson Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- tools/testing/selftests/kvm/aarch64/get-reg-list.c | 2 +- tools/testing/selftests/kvm/aarch64/vcpu_width_config.c | 2 +- tools/testing/selftests/kvm/dirty_log_test.c | 4 ++-- tools/testing/selftests/kvm/include/kvm_util_base.h | 5 +++++ tools/testing/selftests/kvm/kvm_binary_stats_test.c | 2 +- tools/testing/selftests/kvm/lib/kvm_util.c | 4 ++-- .../testing/selftests/kvm/lib/s390x/diag318_test_handler.c | 2 +- tools/testing/selftests/kvm/x86_64/debug_regs.c | 2 +- tools/testing/selftests/kvm/x86_64/emulator_error_test.c | 2 +- tools/testing/selftests/kvm/x86_64/evmcs_test.c | 4 ++-- tools/testing/selftests/kvm/x86_64/hyperv_cpuid.c | 6 +++--- tools/testing/selftests/kvm/x86_64/kvm_pv_test.c | 2 +- tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c | 2 +- tools/testing/selftests/kvm/x86_64/sev_migrate_tests.c | 4 ++-- .../testing/selftests/kvm/x86_64/triple_fault_event_test.c | 2 +- tools/testing/selftests/kvm/x86_64/tsc_scaling_sync.c | 2 +- .../selftests/kvm/x86_64/vmx_nested_tsc_scaling_test.c | 2 +- .../selftests/kvm/x86_64/vmx_preemption_timer_test.c | 2 +- .../selftests/kvm/x86_64/vmx_set_nested_state_test.c | 2 +- 19 files changed, 29 insertions(+), 24 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 d606d64a2ff5..013bf0f54580 100644 --- a/tools/testing/selftests/kvm/aarch64/get-reg-list.c +++ b/tools/testing/selftests/kvm/aarch64/get-reg-list.c @@ -395,7 +395,7 @@ static void check_supported(struct vcpu_config *c) struct reg_sublist *s; =20 for_each_sublist(c, s) { - if (s->capability && !kvm_check_cap(s->capability)) { + if (s->capability && !kvm_has_cap(s->capability)) { fprintf(stderr, "%s: %s not available, skipping tests\n", config_name(c= ), s->name); exit(KSFT_SKIP); } diff --git a/tools/testing/selftests/kvm/aarch64/vcpu_width_config.c b/tool= s/testing/selftests/kvm/aarch64/vcpu_width_config.c index dd5a1c4b49e0..fff02c442610 100644 --- a/tools/testing/selftests/kvm/aarch64/vcpu_width_config.c +++ b/tools/testing/selftests/kvm/aarch64/vcpu_width_config.c @@ -82,7 +82,7 @@ int main(void) struct kvm_vm *vm; int ret; =20 - if (!kvm_check_cap(KVM_CAP_ARM_EL1_32BIT)) { + if (!kvm_has_cap(KVM_CAP_ARM_EL1_32BIT)) { print_skip("KVM_CAP_ARM_EL1_32BIT is not supported"); exit(KSFT_SKIP); } diff --git a/tools/testing/selftests/kvm/dirty_log_test.c b/tools/testing/s= elftests/kvm/dirty_log_test.c index 8542f713a101..9c883c94d478 100644 --- a/tools/testing/selftests/kvm/dirty_log_test.c +++ b/tools/testing/selftests/kvm/dirty_log_test.c @@ -210,7 +210,7 @@ static void sem_wait_until(sem_t *sem) =20 static bool clear_log_supported(void) { - return kvm_check_cap(KVM_CAP_MANUAL_DIRTY_LOG_PROTECT2); + return kvm_has_cap(KVM_CAP_MANUAL_DIRTY_LOG_PROTECT2); } =20 static void clear_log_create_vm_done(struct kvm_vm *vm) @@ -264,7 +264,7 @@ static void default_after_vcpu_run(struct kvm_vcpu *vcp= u, int ret, int err) =20 static bool dirty_ring_supported(void) { - return kvm_check_cap(KVM_CAP_DIRTY_LOG_RING); + return kvm_has_cap(KVM_CAP_DIRTY_LOG_RING); } =20 static void dirty_ring_create_vm_done(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 72cc0ecda067..04ddab322b6b 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -169,6 +169,11 @@ int open_path_or_exit(const char *path, int flags); int open_kvm_dev_path_or_exit(void); unsigned int kvm_check_cap(long cap); =20 +static inline bool kvm_has_cap(long cap) +{ + return kvm_check_cap(cap); +} + #define __KVM_SYSCALL_ERROR(_name, _ret) \ "%s failed, rc: %i errno: %i (%s)", (_name), (_ret), errno, strerror(errn= o) =20 diff --git a/tools/testing/selftests/kvm/kvm_binary_stats_test.c b/tools/te= sting/selftests/kvm/kvm_binary_stats_test.c index 982bf3f7d9c5..8754b78ae785 100644 --- a/tools/testing/selftests/kvm/kvm_binary_stats_test.c +++ b/tools/testing/selftests/kvm/kvm_binary_stats_test.c @@ -213,7 +213,7 @@ int main(int argc, char *argv[]) } =20 /* Check the extension for binary stats */ - if (!kvm_check_cap(KVM_CAP_BINARY_STATS_FD)) { + if (!kvm_has_cap(KVM_CAP_BINARY_STATS_FD)) { print_skip("Binary form statistics interface is not supported"); exit(KSFT_SKIP); } diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index 8f7ee9cb551c..12b7c40542df 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -80,7 +80,7 @@ unsigned int kvm_check_cap(long cap) =20 close(kvm_fd); =20 - return ret; + return (unsigned int)ret; } =20 void vm_enable_dirty_ring(struct kvm_vm *vm, uint32_t ring_size) @@ -93,7 +93,7 @@ static void vm_open(struct kvm_vm *vm) { vm->kvm_fd =3D _open_kvm_dev_path_or_exit(O_RDWR); =20 - if (!kvm_check_cap(KVM_CAP_IMMEDIATE_EXIT)) { + if (!kvm_has_cap(KVM_CAP_IMMEDIATE_EXIT)) { print_skip("immediate_exit not available"); exit(KSFT_SKIP); } 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 05283f8c9948..cdb7daeed5fd 100644 --- a/tools/testing/selftests/kvm/lib/s390x/diag318_test_handler.c +++ b/tools/testing/selftests/kvm/lib/s390x/diag318_test_handler.c @@ -61,7 +61,7 @@ uint64_t get_diag318_info(void) * If KVM does not support diag318, then return 0 to * ensure tests do not break. */ - if (!kvm_check_cap(KVM_CAP_S390_DIAG318)) { + if (!kvm_has_cap(KVM_CAP_S390_DIAG318)) { if (!printed_skip) { fprintf(stdout, "KVM_CAP_S390_DIAG318 not supported. " "Skipping diag318 test.\n"); diff --git a/tools/testing/selftests/kvm/x86_64/debug_regs.c b/tools/testin= g/selftests/kvm/x86_64/debug_regs.c index c16799b616e0..bba811edef96 100644 --- a/tools/testing/selftests/kvm/x86_64/debug_regs.c +++ b/tools/testing/selftests/kvm/x86_64/debug_regs.c @@ -95,7 +95,7 @@ int main(void) 1, /* cli */ }; =20 - if (!kvm_check_cap(KVM_CAP_SET_GUEST_DEBUG)) { + if (!kvm_has_cap(KVM_CAP_SET_GUEST_DEBUG)) { print_skip("KVM_CAP_SET_GUEST_DEBUG not supported"); return 0; } 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 fb2a2390b4af..119bcb1158d5 100644 --- a/tools/testing/selftests/kvm/x86_64/emulator_error_test.c +++ b/tools/testing/selftests/kvm/x86_64/emulator_error_test.c @@ -162,7 +162,7 @@ int main(int argc, char *argv[]) /* Tell stdout not to buffer its content */ setbuf(stdout, NULL); =20 - if (!kvm_check_cap(KVM_CAP_SMALLER_MAXPHYADDR)) { + if (!kvm_has_cap(KVM_CAP_SMALLER_MAXPHYADDR)) { printf("module parameter 'allow_smaller_maxphyaddr' is not set. Skippin= g test.\n"); return 0; } diff --git a/tools/testing/selftests/kvm/x86_64/evmcs_test.c b/tools/testin= g/selftests/kvm/x86_64/evmcs_test.c index 6c4e728d2d85..a6da1ccbee4e 100644 --- a/tools/testing/selftests/kvm/x86_64/evmcs_test.c +++ b/tools/testing/selftests/kvm/x86_64/evmcs_test.c @@ -209,8 +209,8 @@ int main(int argc, char *argv[]) vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); =20 if (!nested_vmx_supported() || - !kvm_check_cap(KVM_CAP_NESTED_STATE) || - !kvm_check_cap(KVM_CAP_HYPERV_ENLIGHTENED_VMCS)) { + !kvm_has_cap(KVM_CAP_NESTED_STATE) || + !kvm_has_cap(KVM_CAP_HYPERV_ENLIGHTENED_VMCS)) { print_skip("Enlightened VMCS is unsupported"); exit(KSFT_SKIP); } diff --git a/tools/testing/selftests/kvm/x86_64/hyperv_cpuid.c b/tools/test= ing/selftests/kvm/x86_64/hyperv_cpuid.c index 6df5a6356181..e2fac752d354 100644 --- a/tools/testing/selftests/kvm/x86_64/hyperv_cpuid.c +++ b/tools/testing/selftests/kvm/x86_64/hyperv_cpuid.c @@ -137,7 +137,7 @@ int main(int argc, char *argv[]) /* Tell stdout not to buffer its content */ setbuf(stdout, NULL); =20 - if (!kvm_check_cap(KVM_CAP_HYPERV_CPUID)) { + if (!kvm_has_cap(KVM_CAP_HYPERV_CPUID)) { print_skip("KVM_CAP_HYPERV_CPUID not supported"); exit(KSFT_SKIP); } @@ -152,7 +152,7 @@ int main(int argc, char *argv[]) free(hv_cpuid_entries); =20 if (!nested_vmx_supported() || - !kvm_check_cap(KVM_CAP_HYPERV_ENLIGHTENED_VMCS)) { + !kvm_has_cap(KVM_CAP_HYPERV_ENLIGHTENED_VMCS)) { print_skip("Enlightened VMCS is unsupported"); goto do_sys; } @@ -163,7 +163,7 @@ int main(int argc, char *argv[]) =20 do_sys: /* Test system ioctl version */ - if (!kvm_check_cap(KVM_CAP_SYS_HYPERV_CPUID)) { + if (!kvm_has_cap(KVM_CAP_SYS_HYPERV_CPUID)) { print_skip("KVM_CAP_SYS_HYPERV_CPUID not supported"); goto out; } 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 f497d6ecec25..24dad3a47206 100644 --- a/tools/testing/selftests/kvm/x86_64/kvm_pv_test.c +++ b/tools/testing/selftests/kvm/x86_64/kvm_pv_test.c @@ -204,7 +204,7 @@ int main(void) struct kvm_vcpu *vcpu; struct kvm_vm *vm; =20 - if (!kvm_check_cap(KVM_CAP_ENFORCE_PV_FEATURE_CPUID)) { + if (!kvm_has_cap(KVM_CAP_ENFORCE_PV_FEATURE_CPUID)) { print_skip("KVM_CAP_ENFORCE_PV_FEATURE_CPUID not supported"); exit(KSFT_SKIP); } 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 8bcaf4421dc5..abf740f08d68 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 @@ -123,7 +123,7 @@ static void check_set_bsp_busy(void) =20 int main(int argc, char *argv[]) { - if (!kvm_check_cap(KVM_CAP_SET_BOOT_CPU_ID)) { + if (!kvm_has_cap(KVM_CAP_SET_BOOT_CPU_ID)) { print_skip("set_boot_cpu_id not available"); return 0; } 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 ec418b823273..ffd8613987ae 100644 --- a/tools/testing/selftests/kvm/x86_64/sev_migrate_tests.c +++ b/tools/testing/selftests/kvm/x86_64/sev_migrate_tests.c @@ -400,8 +400,8 @@ int main(int argc, char *argv[]) { struct kvm_cpuid_entry2 *cpuid; =20 - if (!kvm_check_cap(KVM_CAP_VM_MOVE_ENC_CONTEXT_FROM) && - !kvm_check_cap(KVM_CAP_VM_COPY_ENC_CONTEXT_FROM)) { + if (!kvm_has_cap(KVM_CAP_VM_MOVE_ENC_CONTEXT_FROM) && + !kvm_has_cap(KVM_CAP_VM_COPY_ENC_CONTEXT_FROM)) { print_skip("Capabilities not available"); exit(KSFT_SKIP); } diff --git a/tools/testing/selftests/kvm/x86_64/triple_fault_event_test.c b= /tools/testing/selftests/kvm/x86_64/triple_fault_event_test.c index 01d491f849c2..078bd7a0bbb1 100644 --- a/tools/testing/selftests/kvm/x86_64/triple_fault_event_test.c +++ b/tools/testing/selftests/kvm/x86_64/triple_fault_event_test.c @@ -51,7 +51,7 @@ int main(void) exit(KSFT_SKIP); } =20 - if (!kvm_check_cap(KVM_CAP_X86_TRIPLE_FAULT_EVENT)) { + if (!kvm_has_cap(KVM_CAP_X86_TRIPLE_FAULT_EVENT)) { print_skip("KVM_CAP_X86_TRIPLE_FAULT_EVENT not supported"); exit(KSFT_SKIP); } 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 4a962952212e..fcc713ff75ff 100644 --- a/tools/testing/selftests/kvm/x86_64/tsc_scaling_sync.c +++ b/tools/testing/selftests/kvm/x86_64/tsc_scaling_sync.c @@ -93,7 +93,7 @@ static void *run_vcpu(void *_cpu_nr) =20 int main(int argc, char *argv[]) { - if (!kvm_check_cap(KVM_CAP_VM_TSC_CONTROL)) { + if (!kvm_has_cap(KVM_CAP_VM_TSC_CONTROL)) { print_skip("KVM_CAP_VM_TSC_CONTROL not available"); exit(KSFT_SKIP); } 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 647a4320d3bc..190af8124677 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 @@ -118,7 +118,7 @@ static void l1_guest_code(struct vmx_pages *vmx_pages) =20 static void tsc_scaling_check_supported(void) { - if (!kvm_check_cap(KVM_CAP_TSC_CONTROL)) { + if (!kvm_has_cap(KVM_CAP_TSC_CONTROL)) { print_skip("TSC scaling not supported by the HW"); exit(KSFT_SKIP); } 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 b775a11ec08b..7438258511da 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 @@ -169,7 +169,7 @@ int main(int argc, char *argv[]) */ nested_vmx_check_supported(); =20 - if (!kvm_check_cap(KVM_CAP_NESTED_STATE)) { + if (!kvm_has_cap(KVM_CAP_NESTED_STATE)) { print_skip("KVM_CAP_NESTED_STATE not supported"); exit(KSFT_SKIP); } 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 ba783ceb007f..21f280a7c5e1 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 @@ -267,7 +267,7 @@ int main(int argc, char *argv[]) =20 have_evmcs =3D kvm_check_cap(KVM_CAP_HYPERV_ENLIGHTENED_VMCS); =20 - if (!kvm_check_cap(KVM_CAP_NESTED_STATE)) { + if (!kvm_has_cap(KVM_CAP_NESTED_STATE)) { print_skip("KVM_CAP_NESTED_STATE not available"); exit(KSFT_SKIP); } --=20 2.36.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 C208ECCA480 for ; Fri, 3 Jun 2022 01:01:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241366AbiFCBAQ (ORCPT ); Thu, 2 Jun 2022 21:00:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51716 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241476AbiFCAvK (ORCPT ); Thu, 2 Jun 2022 20:51:10 -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 2B9D637BCF for ; Thu, 2 Jun 2022 17:47:54 -0700 (PDT) Received: by mail-pl1-x64a.google.com with SMTP id d13-20020a170902728d00b001635c985770so3493509pll.2 for ; Thu, 02 Jun 2022 17:47: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=oai2S4EAAmPa85Y066HalubGdHo4lrztUXD+OqH0Pt0=; b=REisubbk7rC2CW6edImhLHH0fon978Zlg4rD+vjgbXBj09G5w4bujvJ00mSGtO10nd PfPcG/vOQrncclX/jpvpuSG65CdGVnh0Ad2iH74leK7xH59WTPrMsvOz0nKsV6lnlZE7 9YLlozP0MmaoWriGh1kOrbX1jA8ZCgtEAjhTDtS4jUyUF2kfgx7UZ9iHSkC6qt/FgM/z L7Xhu/Y2VtyBApTwy5LhsGiQichsT9odIGZ9vwwiAxgmX5z8xvVH7VIzdpRbFx74m9cw wUMcApHWw7W8VbGWdpeEFNtpzs2DF/KqSjoXJ9cgw6kPDEUPEjEpnikK5T81j12nV0pq dGuQ== 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=oai2S4EAAmPa85Y066HalubGdHo4lrztUXD+OqH0Pt0=; b=aquqmMygetlPQNIg3sOWYA4x4VXUvNLsBPdLUtvmdJR4skBWdPOWkBQrhPTuFEFkYr BM+SkKK7kNIxUiFHwb49OpZJk1zHC5ela3eKD4GOU+yKLkV2+pYYo5crxk9B4EriHLuM 7BxTUpHzVNtXkeP7CzK286xmSDXyUO3dcktl1FQM36Pv14a/HCst6cTfJhYfwlqtM/ud EAkL0Qjl1qFAZJbujYdm1Pfg12IATpnJHgdCxeSOoHZFkHim97uUBANi/3eJFfRz7ydG GyKQ54fdVt0+x+hZdy9hEIRTUfJa/AVBTlXWweEkJjh3zw0yi8mMKyDtaDoK1XjIps9e rQcA== X-Gm-Message-State: AOAM5304WOZuZRxr9yK1HnwkGly/OnEn4BVcDu+USWeiPnTJs0Cv5QEr L+bvKVUDt6Bk2sf5wKa3ihZM89aB/Gs= X-Google-Smtp-Source: ABdhPJybzkfP8XOFigNlJyzeIyrO7HboVnS/qJJzz7nmtrMseCsv7OL9og0Trni5G+5ezjx895WlaNoVaWQ= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a62:3646:0:b0:51b:91c7:fd4a with SMTP id d67-20020a623646000000b0051b91c7fd4amr16238495pfa.78.1654217274137; Thu, 02 Jun 2022 17:47:54 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:43:30 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-144-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 143/144] KVM: selftests: Add TEST_REQUIRE macros to reduce skipping copy+paste From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 TEST_REQUIRE() and __TEST_REQUIRE() to replace the myriad open coded instances of selftests exiting with KSFT_SKIP after printing an informational message. In addition to reducing the amount of boilerplate code in selftests, the UPPERCASE macro names make it easier to visually identify a test's requirements. Convert usage that erroneously uses something other than print_skip() and/or "exits" with '0' or some other non-KSFT_SKIP value. Intentionally drop a kvm_vm_free() in aarch64/debug-exceptions.c as part of the conversion. All memory and file descriptors are freed on process exit, so the explicit free is superfluous. Signed-off-by: Sean Christopherson Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../selftests/kvm/aarch64/arch_timer.c | 11 +++----- .../selftests/kvm/aarch64/debug-exceptions.c | 7 ++---- .../selftests/kvm/aarch64/get-reg-list.c | 10 +++++--- .../testing/selftests/kvm/aarch64/psci_test.c | 5 +--- .../selftests/kvm/aarch64/vcpu_width_config.c | 5 +--- .../testing/selftests/kvm/aarch64/vgic_init.c | 10 +++----- .../testing/selftests/kvm/aarch64/vgic_irq.c | 5 +--- .../selftests/kvm/access_tracking_perf_test.c | 11 +++----- .../testing/selftests/kvm/include/test_util.h | 9 +++++++ .../selftests/kvm/kvm_binary_stats_test.c | 5 +--- .../selftests/kvm/kvm_create_max_vcpus.c | 6 ++--- tools/testing/selftests/kvm/lib/kvm_util.c | 10 ++------ .../selftests/kvm/lib/x86_64/processor.c | 8 +++--- tools/testing/selftests/kvm/lib/x86_64/svm.c | 5 +--- tools/testing/selftests/kvm/lib/x86_64/vmx.c | 5 +--- tools/testing/selftests/kvm/rseq_test.c | 13 ++++------ tools/testing/selftests/kvm/s390x/memop.c | 11 ++------ .../selftests/kvm/s390x/sync_regs_test.c | 8 ++---- tools/testing/selftests/kvm/steal_time.c | 5 +--- .../kvm/system_counter_offset_test.c | 8 +++--- tools/testing/selftests/kvm/x86_64/amx_test.c | 23 ++++++----------- .../kvm/x86_64/cr4_cpuid_sync_test.c | 5 +--- .../testing/selftests/kvm/x86_64/debug_regs.c | 5 +--- .../kvm/x86_64/emulator_error_test.c | 5 +--- .../testing/selftests/kvm/x86_64/evmcs_test.c | 9 +++---- .../selftests/kvm/x86_64/fix_hypercall_test.c | 5 +--- .../kvm/x86_64/get_msr_index_features.c | 5 +--- .../selftests/kvm/x86_64/hyperv_cpuid.c | 5 +--- .../selftests/kvm/x86_64/hyperv_svm_test.c | 6 ++--- .../selftests/kvm/x86_64/kvm_clock_test.c | 6 +---- .../selftests/kvm/x86_64/kvm_pv_test.c | 5 +--- .../selftests/kvm/x86_64/mmio_warning_test.c | 10 ++------ .../selftests/kvm/x86_64/mmu_role_test.c | 10 ++------ .../selftests/kvm/x86_64/platform_info_test.c | 7 +----- .../kvm/x86_64/pmu_event_filter_test.c | 25 ++++--------------- .../selftests/kvm/x86_64/set_boot_cpu_id.c | 5 +--- .../selftests/kvm/x86_64/sev_migrate_tests.c | 19 +++++--------- .../selftests/kvm/x86_64/sync_regs_test.c | 10 ++------ .../kvm/x86_64/triple_fault_event_test.c | 10 ++------ .../selftests/kvm/x86_64/tsc_scaling_sync.c | 5 +--- .../vmx_exception_with_invalid_guest_state.c | 6 ++--- .../kvm/x86_64/vmx_nested_tsc_scaling_test.c | 10 +------- .../selftests/kvm/x86_64/vmx_pmu_caps_test.c | 23 ++++++----------- .../kvm/x86_64/vmx_preemption_timer_test.c | 5 +--- .../kvm/x86_64/vmx_set_nested_state_test.c | 5 +--- .../selftests/kvm/x86_64/xen_shinfo_test.c | 5 +--- .../selftests/kvm/x86_64/xen_vmcall_test.c | 8 +++--- .../selftests/kvm/x86_64/xss_msr_test.c | 13 +++------- 48 files changed, 117 insertions(+), 295 deletions(-) diff --git a/tools/testing/selftests/kvm/aarch64/arch_timer.c b/tools/testi= ng/selftests/kvm/aarch64/arch_timer.c index ca4c08b4e353..f68019be67c0 100644 --- a/tools/testing/selftests/kvm/aarch64/arch_timer.c +++ b/tools/testing/selftests/kvm/aarch64/arch_timer.c @@ -375,10 +375,7 @@ static struct kvm_vm *test_vm_create(void) ucall_init(vm, NULL); test_init_timer_irq(vm); gic_fd =3D vgic_v3_setup(vm, nr_vcpus, 64, GICD_BASE_GPA, GICR_BASE_GPA); - if (gic_fd < 0) { - print_skip("Failed to create vgic-v3"); - exit(KSFT_SKIP); - } + __TEST_REQUIRE(gic_fd >=3D 0, "Failed to create vgic-v3"); =20 /* Make all the test's cmdline args visible to the guest */ sync_global_to_guest(vm, test_args); @@ -468,10 +465,8 @@ int main(int argc, char *argv[]) if (!parse_args(argc, argv)) exit(KSFT_SKIP); =20 - if (test_args.migration_freq_ms && get_nprocs() < 2) { - print_skip("At least two physical CPUs needed for vCPU migration"); - exit(KSFT_SKIP); - } + __TEST_REQUIRE(!test_args.migration_freq_ms || get_nprocs() >=3D 2, + "At least two physical CPUs needed for vCPU migration"); =20 vm =3D test_vm_create(); test_run(vm); diff --git a/tools/testing/selftests/kvm/aarch64/debug-exceptions.c b/tools= /testing/selftests/kvm/aarch64/debug-exceptions.c index c27352b90ccf..b8072b40ccc8 100644 --- a/tools/testing/selftests/kvm/aarch64/debug-exceptions.c +++ b/tools/testing/selftests/kvm/aarch64/debug-exceptions.c @@ -259,11 +259,8 @@ int main(int argc, char *argv[]) vm_init_descriptor_tables(vm); vcpu_init_descriptor_tables(vcpu); =20 - if (debug_version(vcpu) < 6) { - print_skip("Armv8 debug architecture not supported."); - kvm_vm_free(vm); - exit(KSFT_SKIP); - } + __TEST_REQUIRE(debug_version(vcpu) >=3D 6, + "Armv8 debug architecture not supported."); =20 vm_install_sync_handler(vm, VECTOR_SYNC_CURRENT, ESR_EC_BRK_INS, guest_sw_bp_handler); diff --git a/tools/testing/selftests/kvm/aarch64/get-reg-list.c b/tools/tes= ting/selftests/kvm/aarch64/get-reg-list.c index 013bf0f54580..b3116c151d1c 100644 --- a/tools/testing/selftests/kvm/aarch64/get-reg-list.c +++ b/tools/testing/selftests/kvm/aarch64/get-reg-list.c @@ -395,10 +395,12 @@ static void check_supported(struct vcpu_config *c) struct reg_sublist *s; =20 for_each_sublist(c, s) { - if (s->capability && !kvm_has_cap(s->capability)) { - fprintf(stderr, "%s: %s not available, skipping tests\n", config_name(c= ), s->name); - exit(KSFT_SKIP); - } + if (!s->capability) + continue; + + __TEST_REQUIRE(kvm_has_cap(s->capability), + "%s: %s not available, skipping tests\n", + config_name(c), s->name); } } =20 diff --git a/tools/testing/selftests/kvm/aarch64/psci_test.c b/tools/testin= g/selftests/kvm/aarch64/psci_test.c index 7928c62635fd..a889e1cf5e4d 100644 --- a/tools/testing/selftests/kvm/aarch64/psci_test.c +++ b/tools/testing/selftests/kvm/aarch64/psci_test.c @@ -192,10 +192,7 @@ static void host_test_system_suspend(void) =20 int main(void) { - if (!kvm_check_cap(KVM_CAP_ARM_SYSTEM_SUSPEND)) { - print_skip("KVM_CAP_ARM_SYSTEM_SUSPEND not supported"); - exit(KSFT_SKIP); - } + TEST_REQUIRE(kvm_check_cap(KVM_CAP_ARM_SYSTEM_SUSPEND)); =20 host_test_cpu_on(); host_test_system_suspend(); diff --git a/tools/testing/selftests/kvm/aarch64/vcpu_width_config.c b/tool= s/testing/selftests/kvm/aarch64/vcpu_width_config.c index fff02c442610..80b74c6f152b 100644 --- a/tools/testing/selftests/kvm/aarch64/vcpu_width_config.c +++ b/tools/testing/selftests/kvm/aarch64/vcpu_width_config.c @@ -82,10 +82,7 @@ int main(void) struct kvm_vm *vm; int ret; =20 - if (!kvm_has_cap(KVM_CAP_ARM_EL1_32BIT)) { - print_skip("KVM_CAP_ARM_EL1_32BIT is not supported"); - exit(KSFT_SKIP); - } + TEST_REQUIRE(kvm_has_cap(KVM_CAP_ARM_EL1_32BIT)); =20 /* Get the preferred target type and copy that to init1 for later use */ vm =3D vm_create_barebones(); diff --git a/tools/testing/selftests/kvm/aarch64/vgic_init.c b/tools/testin= g/selftests/kvm/aarch64/vgic_init.c index 56b76fbfffea..b91ea02a8a80 100644 --- a/tools/testing/selftests/kvm/aarch64/vgic_init.c +++ b/tools/testing/selftests/kvm/aarch64/vgic_init.c @@ -719,13 +719,9 @@ int main(int ac, char **av) } =20 ret =3D test_kvm_device(KVM_DEV_TYPE_ARM_VGIC_V2); - if (!ret) { - pr_info("Running GIC_v2 tests.\n"); - run_tests(KVM_DEV_TYPE_ARM_VGIC_V2); - return 0; - } + __TEST_REQUIRE(!ret, "No GICv2 nor GICv3 support"); =20 - print_skip("No GICv2 nor GICv3 support"); - exit(KSFT_SKIP); + pr_info("Running GIC_v2 tests.\n"); + run_tests(KVM_DEV_TYPE_ARM_VGIC_V2); return 0; } diff --git a/tools/testing/selftests/kvm/aarch64/vgic_irq.c b/tools/testing= /selftests/kvm/aarch64/vgic_irq.c index 90dbba61d72a..046ba4fde648 100644 --- a/tools/testing/selftests/kvm/aarch64/vgic_irq.c +++ b/tools/testing/selftests/kvm/aarch64/vgic_irq.c @@ -768,10 +768,7 @@ static void test_vgic(uint32_t nr_irqs, bool level_sen= sitive, bool eoi_split) =20 gic_fd =3D vgic_v3_setup(vm, 1, nr_irqs, GICD_BASE_GPA, GICR_BASE_GPA); - if (gic_fd < 0) { - print_skip("Failed to create vgic-v3, skipping"); - exit(KSFT_SKIP); - } + __TEST_REQUIRE(gic_fd >=3D 0, "Failed to create vgic-v3, skipping"); =20 vm_install_exception_handler(vm, VECTOR_IRQ_CURRENT, guest_irq_handlers[args.eoi_split][args.level_sensitive]); diff --git a/tools/testing/selftests/kvm/access_tracking_perf_test.c b/tool= s/testing/selftests/kvm/access_tracking_perf_test.c index 1c771378f7f4..1c2749b1481a 100644 --- a/tools/testing/selftests/kvm/access_tracking_perf_test.c +++ b/tools/testing/selftests/kvm/access_tracking_perf_test.c @@ -104,10 +104,7 @@ static uint64_t lookup_pfn(int pagemap_fd, struct kvm_= vm *vm, uint64_t gva) return 0; =20 pfn =3D entry & PAGEMAP_PFN_MASK; - if (!pfn) { - print_skip("Looking up PFNs requires CAP_SYS_ADMIN"); - exit(KSFT_SKIP); - } + __TEST_REQUIRE(pfn, "Looking up PFNs requires CAP_SYS_ADMIN"); =20 return pfn; } @@ -380,10 +377,8 @@ int main(int argc, char *argv[]) } =20 page_idle_fd =3D open("/sys/kernel/mm/page_idle/bitmap", O_RDWR); - if (page_idle_fd < 0) { - print_skip("CONFIG_IDLE_PAGE_TRACKING is not enabled"); - exit(KSFT_SKIP); - } + __TEST_REQUIRE(page_idle_fd >=3D 0, + "CONFIG_IDLE_PAGE_TRACKING is not enabled"); close(page_idle_fd); =20 for_each_guest_mode(run_test, ¶ms); diff --git a/tools/testing/selftests/kvm/include/test_util.h b/tools/testin= g/selftests/kvm/include/test_util.h index 99e0dcdc923f..493b2a799a61 100644 --- a/tools/testing/selftests/kvm/include/test_util.h +++ b/tools/testing/selftests/kvm/include/test_util.h @@ -34,6 +34,15 @@ static inline int _no_printf(const char *format, ...) { = return 0; } #endif =20 void print_skip(const char *fmt, ...) __attribute__((format(printf, 1, 2))= ); +#define __TEST_REQUIRE(f, fmt, ...) \ +do { \ + if (!(f)) { \ + print_skip(fmt, ##__VA_ARGS__); \ + exit(KSFT_SKIP); \ + } \ +} while (0) + +#define TEST_REQUIRE(f) __TEST_REQUIRE(f, "Requirement not met: %s", #f) =20 ssize_t test_write(int fd, const void *buf, size_t count); ssize_t test_read(int fd, void *buf, size_t count); diff --git a/tools/testing/selftests/kvm/kvm_binary_stats_test.c b/tools/te= sting/selftests/kvm/kvm_binary_stats_test.c index 8754b78ae785..1baabf955d63 100644 --- a/tools/testing/selftests/kvm/kvm_binary_stats_test.c +++ b/tools/testing/selftests/kvm/kvm_binary_stats_test.c @@ -213,10 +213,7 @@ int main(int argc, char *argv[]) } =20 /* Check the extension for binary stats */ - if (!kvm_has_cap(KVM_CAP_BINARY_STATS_FD)) { - print_skip("Binary form statistics interface is not supported"); - exit(KSFT_SKIP); - } + TEST_REQUIRE(kvm_has_cap(KVM_CAP_BINARY_STATS_FD)); =20 /* Create VMs and VCPUs */ vms =3D malloc(sizeof(vms[0]) * max_vm); diff --git a/tools/testing/selftests/kvm/kvm_create_max_vcpus.c b/tools/tes= ting/selftests/kvm/kvm_create_max_vcpus.c index 3ae0237e96b2..31b3cb24b9a7 100644 --- a/tools/testing/selftests/kvm/kvm_create_max_vcpus.c +++ b/tools/testing/selftests/kvm/kvm_create_max_vcpus.c @@ -64,11 +64,9 @@ int main(int argc, char *argv[]) rl.rlim_max =3D nr_fds_wanted; =20 int r =3D setrlimit(RLIMIT_NOFILE, &rl); - if (r < 0) { - printf("RLIMIT_NOFILE hard limit is too low (%d, wanted %d)\n", + __TEST_REQUIRE(r >=3D 0, + "RLIMIT_NOFILE hard limit is too low (%d, wanted %d)\n", old_rlim_max, nr_fds_wanted); - exit(KSFT_SKIP); - } } else { TEST_ASSERT(!setrlimit(RLIMIT_NOFILE, &rl), "setrlimit() failed!"); } diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/sel= ftests/kvm/lib/kvm_util.c index 12b7c40542df..603a6d529357 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -26,10 +26,7 @@ int open_path_or_exit(const char *path, int flags) int fd; =20 fd =3D open(path, flags); - if (fd < 0) { - print_skip("%s not available (errno: %d)", path, errno); - exit(KSFT_SKIP); - } + __TEST_REQUIRE(fd >=3D 0, "%s not available (errno: %d)", path, errno); =20 return fd; } @@ -93,10 +90,7 @@ static void vm_open(struct kvm_vm *vm) { vm->kvm_fd =3D _open_kvm_dev_path_or_exit(O_RDWR); =20 - if (!kvm_has_cap(KVM_CAP_IMMEDIATE_EXIT)) { - print_skip("immediate_exit not available"); - exit(KSFT_SKIP); - } + TEST_REQUIRE(kvm_has_cap(KVM_CAP_IMMEDIATE_EXIT)); =20 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)); diff --git a/tools/testing/selftests/kvm/lib/x86_64/processor.c b/tools/tes= ting/selftests/kvm/lib/x86_64/processor.c index b95458cadafe..a871723f7ee1 100644 --- a/tools/testing/selftests/kvm/lib/x86_64/processor.c +++ b/tools/testing/selftests/kvm/lib/x86_64/processor.c @@ -610,14 +610,14 @@ void vm_xsave_req_perm(int bit) kvm_fd =3D open_kvm_dev_path_or_exit(); 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); TEST_ASSERT(rc =3D=3D 0, "KVM_GET_DEVICE_ATTR(0, KVM_X86_XCOMP_GUEST_SUPP= ) error: %ld", rc); - if (!(bitmask & (1ULL << bit))) - exit(KSFT_SKIP); =20 - if (!is_xfd_supported()) - exit(KSFT_SKIP); + TEST_REQUIRE(bitmask & (1ULL << bit)); + + TEST_REQUIRE(is_xfd_supported()); =20 rc =3D syscall(SYS_arch_prctl, ARCH_REQ_XCOMP_GUEST_PERM, bit); =20 diff --git a/tools/testing/selftests/kvm/lib/x86_64/svm.c b/tools/testing/s= elftests/kvm/lib/x86_64/svm.c index 01a9d831da13..37e9c0a923e0 100644 --- a/tools/testing/selftests/kvm/lib/x86_64/svm.c +++ b/tools/testing/selftests/kvm/lib/x86_64/svm.c @@ -174,10 +174,7 @@ bool nested_svm_supported(void) =20 void nested_svm_check_supported(void) { - if (!nested_svm_supported()) { - print_skip("nested SVM not enabled"); - exit(KSFT_SKIP); - } + TEST_REQUIRE(nested_svm_supported()); } =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 5469a1da471a..3ba8278c5086 100644 --- a/tools/testing/selftests/kvm/lib/x86_64/vmx.c +++ b/tools/testing/selftests/kvm/lib/x86_64/vmx.c @@ -381,10 +381,7 @@ bool nested_vmx_supported(void) =20 void nested_vmx_check_supported(void) { - if (!nested_vmx_supported()) { - print_skip("nested VMX not enabled"); - exit(KSFT_SKIP); - } + TEST_REQUIRE(nested_vmx_supported()); } =20 void nested_pg_map(struct vmx_pages *vmx, struct kvm_vm *vm, diff --git a/tools/testing/selftests/kvm/rseq_test.c b/tools/testing/selfte= sts/kvm/rseq_test.c index 68c0c8bb206e..aba7be178dab 100644 --- a/tools/testing/selftests/kvm/rseq_test.c +++ b/tools/testing/selftests/kvm/rseq_test.c @@ -171,12 +171,11 @@ static void *migration_worker(void *ign) return NULL; } =20 -static int calc_min_max_cpu(void) +static void calc_min_max_cpu(void) { int i, cnt, nproc; =20 - if (CPU_COUNT(&possible_mask) < 2) - return -EINVAL; + TEST_REQUIRE(CPU_COUNT(&possible_mask) >=3D 2); =20 /* * CPU_SET doesn't provide a FOR_EACH helper, get the min/max CPU that @@ -198,7 +197,8 @@ static int calc_min_max_cpu(void) cnt++; } =20 - return (cnt < 2) ? -EINVAL : 0; + __TEST_REQUIRE(cnt >=3D 2, + "Only one usable CPU, task migration not possible"); } =20 int main(int argc, char *argv[]) @@ -215,10 +215,7 @@ int main(int argc, char *argv[]) TEST_ASSERT(!r, "sched_getaffinity failed, errno =3D %d (%s)", errno, strerror(errno)); =20 - if (calc_min_max_cpu()) { - print_skip("Only one usable CPU, task migration not possible"); - exit(KSFT_SKIP); - } + calc_min_max_cpu(); =20 sys_rseq(0); =20 diff --git a/tools/testing/selftests/kvm/s390x/memop.c b/tools/testing/self= tests/kvm/s390x/memop.c index 6175cdb61e8a..2ca141749bcf 100644 --- a/tools/testing/selftests/kvm/s390x/memop.c +++ b/tools/testing/selftests/kvm/s390x/memop.c @@ -695,19 +695,12 @@ static void test_errors(void) =20 int main(int argc, char *argv[]) { - int memop_cap, extension_cap; - setbuf(stdout, NULL); /* Tell stdout not to buffer its content */ =20 - memop_cap =3D kvm_check_cap(KVM_CAP_S390_MEM_OP); - extension_cap =3D kvm_check_cap(KVM_CAP_S390_MEM_OP_EXTENSION); - if (!memop_cap) { - print_skip("CAP_S390_MEM_OP not supported"); - exit(KSFT_SKIP); - } + TEST_REQUIRE(kvm_has_cap(KVM_CAP_S390_MEM_OP)); =20 test_copy(); - if (extension_cap > 0) { + if (kvm_has_cap(KVM_CAP_S390_MEM_OP_EXTENSION)) { test_copy_key(); test_copy_key_storage_prot_override(); test_copy_key_fetch_prot(); diff --git a/tools/testing/selftests/kvm/s390x/sync_regs_test.c b/tools/tes= ting/selftests/kvm/s390x/sync_regs_test.c index 13c4c091aa66..e08629ad19f3 100644 --- a/tools/testing/selftests/kvm/s390x/sync_regs_test.c +++ b/tools/testing/selftests/kvm/s390x/sync_regs_test.c @@ -79,16 +79,12 @@ int main(int argc, char *argv[]) struct kvm_run *run; struct kvm_regs regs; struct kvm_sregs sregs; - int rv, cap; + int rv; =20 /* Tell stdout not to buffer its content */ setbuf(stdout, NULL); =20 - cap =3D kvm_check_cap(KVM_CAP_SYNC_REGS); - if (!cap) { - print_skip("CAP_SYNC_REGS not supported"); - exit(KSFT_SKIP); - } + TEST_REQUIRE(kvm_check_cap(KVM_CAP_SYNC_REGS)); =20 /* Create VM */ vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); diff --git a/tools/testing/selftests/kvm/steal_time.c b/tools/testing/selft= ests/kvm/steal_time.c index 398819d4074f..d122f1e05cdd 100644 --- a/tools/testing/selftests/kvm/steal_time.c +++ b/tools/testing/selftests/kvm/steal_time.c @@ -271,10 +271,7 @@ int main(int ac, char **av) virt_map(vm, ST_GPA_BASE, ST_GPA_BASE, gpages); ucall_init(vm, NULL); =20 - if (!is_steal_time_supported(vcpus[0])) { - print_skip("steal-time not supported"); - exit(KSFT_SKIP); - } + TEST_REQUIRE(is_steal_time_supported(vcpus[0])); =20 /* Run test on each VCPU */ for (i =3D 0; i < NR_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 7c8be0930737..862a8e93e070 100644 --- a/tools/testing/selftests/kvm/system_counter_offset_test.c +++ b/tools/testing/selftests/kvm/system_counter_offset_test.c @@ -28,11 +28,9 @@ static struct test_case test_cases[] =3D { =20 static void check_preconditions(struct kvm_vcpu *vcpu) { - if (!__vcpu_has_device_attr(vcpu, KVM_VCPU_TSC_CTRL, KVM_VCPU_TSC_OFFSET)) - return; - - print_skip("KVM_VCPU_TSC_OFFSET not supported; skipping test"); - exit(KSFT_SKIP); + __TEST_REQUIRE(!__vcpu_has_device_attr(vcpu, KVM_VCPU_TSC_CTRL, + KVM_VCPU_TSC_OFFSET), + "KVM_VCPU_TSC_OFFSET not supported; skipping test"); } =20 static void setup_system_counter(struct kvm_vcpu *vcpu, struct test_case *= test) diff --git a/tools/testing/selftests/kvm/x86_64/amx_test.c b/tools/testing/= selftests/kvm/x86_64/amx_test.c index b421c8369dba..dab4ca16a2df 100644 --- a/tools/testing/selftests/kvm/x86_64/amx_test.c +++ b/tools/testing/selftests/kvm/x86_64/amx_test.c @@ -317,7 +317,6 @@ 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; @@ -334,21 +333,15 @@ int main(int argc, char *argv[]) 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)) { - print_skip("XSAVE feature not supported"); - exit(KSFT_SKIP); - } + TEST_REQUIRE(entry->ecx & X86_FEATURE_XSAVE); =20 - if (kvm_get_cpuid_max_basic() >=3D 0xd) { - entry =3D kvm_get_supported_cpuid_index(0xd, 0); - amx_supported =3D entry && !!(entry->eax & XFEATURE_MASK_XTILE); - if (!amx_supported) { - print_skip("AMX is not supported by the vCPU (eax=3D0x%x)", entry->eax); - exit(KSFT_SKIP); - } - /* Get xsave/restore max size */ - xsave_restore_size =3D entry->ecx; - } + TEST_REQUIRE(kvm_get_cpuid_max_basic() >=3D 0xd); + + entry =3D kvm_get_supported_cpuid_index(0xd, 0); + TEST_REQUIRE(entry->eax & XFEATURE_MASK_XTILE); + + /* Get xsave/restore max size */ + xsave_restore_size =3D entry->ecx; =20 run =3D vcpu->run; vcpu_regs_get(vcpu, ®s1); 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 1635aae970e9..a80940ac420f 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 @@ -70,10 +70,7 @@ int main(int argc, char *argv[]) struct ucall uc; =20 entry =3D kvm_get_supported_cpuid_entry(1); - if (!(entry->ecx & X86_FEATURE_XSAVE)) { - print_skip("XSAVE feature not supported"); - return 0; - } + TEST_REQUIRE(entry->ecx & X86_FEATURE_XSAVE); =20 /* Tell stdout not to buffer its content */ setbuf(stdout, NULL); diff --git a/tools/testing/selftests/kvm/x86_64/debug_regs.c b/tools/testin= g/selftests/kvm/x86_64/debug_regs.c index bba811edef96..7ef99c3359a0 100644 --- a/tools/testing/selftests/kvm/x86_64/debug_regs.c +++ b/tools/testing/selftests/kvm/x86_64/debug_regs.c @@ -95,10 +95,7 @@ int main(void) 1, /* cli */ }; =20 - if (!kvm_has_cap(KVM_CAP_SET_GUEST_DEBUG)) { - print_skip("KVM_CAP_SET_GUEST_DEBUG not supported"); - return 0; - } + TEST_REQUIRE(kvm_has_cap(KVM_CAP_SET_GUEST_DEBUG)); =20 vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); run =3D vcpu->run; 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 119bcb1158d5..bfff2d271c48 100644 --- a/tools/testing/selftests/kvm/x86_64/emulator_error_test.c +++ b/tools/testing/selftests/kvm/x86_64/emulator_error_test.c @@ -162,10 +162,7 @@ int main(int argc, char *argv[]) /* Tell stdout not to buffer its content */ setbuf(stdout, NULL); =20 - if (!kvm_has_cap(KVM_CAP_SMALLER_MAXPHYADDR)) { - printf("module parameter 'allow_smaller_maxphyaddr' is not set. Skippin= g test.\n"); - return 0; - } + TEST_REQUIRE(kvm_has_cap(KVM_CAP_SMALLER_MAXPHYADDR)); =20 vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); =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 a6da1ccbee4e..8dda527cc080 100644 --- a/tools/testing/selftests/kvm/x86_64/evmcs_test.c +++ b/tools/testing/selftests/kvm/x86_64/evmcs_test.c @@ -208,12 +208,9 @@ int main(int argc, char *argv[]) =20 vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); =20 - if (!nested_vmx_supported() || - !kvm_has_cap(KVM_CAP_NESTED_STATE) || - !kvm_has_cap(KVM_CAP_HYPERV_ENLIGHTENED_VMCS)) { - print_skip("Enlightened VMCS is unsupported"); - exit(KSFT_SKIP); - } + TEST_REQUIRE(nested_vmx_supported()); + TEST_REQUIRE(kvm_has_cap(KVM_CAP_NESTED_STATE)); + TEST_REQUIRE(kvm_has_cap(KVM_CAP_HYPERV_ENLIGHTENED_VMCS)); =20 vcpu_set_hv_cpuid(vcpu); vcpu_enable_evmcs(vcpu); 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 137759547720..f6f251ce59e1 100644 --- a/tools/testing/selftests/kvm/x86_64/fix_hypercall_test.c +++ b/tools/testing/selftests/kvm/x86_64/fix_hypercall_test.c @@ -156,10 +156,7 @@ static void test_fix_hypercall_disabled(void) =20 int main(void) { - if (!(kvm_check_cap(KVM_CAP_DISABLE_QUIRKS2) & KVM_X86_QUIRK_FIX_HYPERCAL= L_INSN)) { - print_skip("KVM_X86_QUIRK_HYPERCALL_INSN not supported"); - exit(KSFT_SKIP); - } + TEST_REQUIRE(kvm_check_cap(KVM_CAP_DISABLE_QUIRKS2) & KVM_X86_QUIRK_FIX_H= YPERCALL_INSN); =20 test_fix_hypercall(); test_fix_hypercall_disabled(); 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 1e366fdfe7be..d09b3cbcadc6 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 @@ -25,10 +25,7 @@ int main(int argc, char *argv[]) * will cover the "regular" list of MSRs, the coverage here is purely * opportunistic and not interesting on its own. */ - if (!kvm_check_cap(KVM_CAP_GET_MSR_FEATURES)) { - print_skip("KVM_CAP_GET_MSR_FEATURES not supported"); - exit(KSFT_SKIP); - } + TEST_REQUIRE(kvm_has_cap(KVM_CAP_GET_MSR_FEATURES)); =20 (void)kvm_get_msr_index_list(); =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 e2fac752d354..cbd4a7d36189 100644 --- a/tools/testing/selftests/kvm/x86_64/hyperv_cpuid.c +++ b/tools/testing/selftests/kvm/x86_64/hyperv_cpuid.c @@ -137,10 +137,7 @@ int main(int argc, char *argv[]) /* Tell stdout not to buffer its content */ setbuf(stdout, NULL); =20 - if (!kvm_has_cap(KVM_CAP_HYPERV_CPUID)) { - print_skip("KVM_CAP_HYPERV_CPUID not supported"); - exit(KSFT_SKIP); - } + TEST_REQUIRE(kvm_has_cap(KVM_CAP_HYPERV_CPUID)); =20 vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); =20 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 171009184c3b..c5cd9835dbd6 100644 --- a/tools/testing/selftests/kvm/x86_64/hyperv_svm_test.c +++ b/tools/testing/selftests/kvm/x86_64/hyperv_svm_test.c @@ -127,10 +127,8 @@ int main(int argc, char *argv[]) struct ucall uc; int stage; =20 - if (!nested_svm_supported()) { - print_skip("Nested SVM not supported"); - exit(KSFT_SKIP); - } + TEST_REQUIRE(nested_svm_supported()); + /* Create VM */ vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); vcpu_set_hv_cpuid(vcpu); 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 6e3c4bd60b76..138455575a11 100644 --- a/tools/testing/selftests/kvm/x86_64/kvm_clock_test.c +++ b/tools/testing/selftests/kvm/x86_64/kvm_clock_test.c @@ -181,11 +181,7 @@ int main(void) int flags; =20 flags =3D kvm_check_cap(KVM_CAP_ADJUST_CLOCK); - if (!(flags & KVM_CLOCK_REALTIME)) { - print_skip("KVM_CLOCK_REALTIME not supported; flags: %x", - flags); - exit(KSFT_SKIP); - } + TEST_REQUIRE(flags & KVM_CLOCK_REALTIME); =20 check_clocksource(); =20 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 24dad3a47206..5901ccec7079 100644 --- a/tools/testing/selftests/kvm/x86_64/kvm_pv_test.c +++ b/tools/testing/selftests/kvm/x86_64/kvm_pv_test.c @@ -204,10 +204,7 @@ int main(void) struct kvm_vcpu *vcpu; struct kvm_vm *vm; =20 - if (!kvm_has_cap(KVM_CAP_ENFORCE_PV_FEATURE_CPUID)) { - print_skip("KVM_CAP_ENFORCE_PV_FEATURE_CPUID not supported"); - exit(KSFT_SKIP); - } + TEST_REQUIRE(kvm_has_cap(KVM_CAP_ENFORCE_PV_FEATURE_CPUID)); =20 vm =3D vm_create_with_one_vcpu(&vcpu, guest_main); =20 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 31ae837fedb1..0e4590afd0e1 100644 --- a/tools/testing/selftests/kvm/x86_64/mmio_warning_test.c +++ b/tools/testing/selftests/kvm/x86_64/mmio_warning_test.c @@ -93,15 +93,9 @@ int main(void) { int warnings_before, warnings_after; =20 - if (!is_intel_cpu()) { - print_skip("Must be run on an Intel CPU"); - exit(KSFT_SKIP); - } + TEST_REQUIRE(is_intel_cpu()); =20 - if (vm_is_unrestricted_guest(NULL)) { - print_skip("Unrestricted guest must be disabled"); - exit(KSFT_SKIP); - } + TEST_REQUIRE(!vm_is_unrestricted_guest(NULL)); =20 warnings_before =3D get_warnings_count(); =20 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 62e674095bd2..9fd82580a382 100644 --- a/tools/testing/selftests/kvm/x86_64/mmu_role_test.c +++ b/tools/testing/selftests/kvm/x86_64/mmu_role_test.c @@ -117,16 +117,10 @@ int main(int argc, char *argv[]) } } =20 - if (!do_gbpages && !do_maxphyaddr) { - print_skip("No sub-tests selected"); - return 0; - } + __TEST_REQUIRE(do_gbpages || do_maxphyaddr, "No sub-tests selected"); =20 entry =3D kvm_get_supported_cpuid_entry(0x80000001); - if (!(entry->edx & CPUID_GBPAGES)) { - print_skip("1gb hugepages not supported"); - return 0; - } + TEST_REQUIRE(entry->edx & CPUID_GBPAGES); =20 if (do_gbpages) { pr_info("Test MMIO after toggling CPUID.GBPAGES\n\n"); 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 3cb48e4b615b..76417c7d687b 100644 --- a/tools/testing/selftests/kvm/x86_64/platform_info_test.c +++ b/tools/testing/selftests/kvm/x86_64/platform_info_test.c @@ -70,17 +70,12 @@ int main(int argc, char *argv[]) { struct kvm_vcpu *vcpu; struct kvm_vm *vm; - int rv; uint64_t msr_platform_info; =20 /* Tell stdout not to buffer its content */ setbuf(stdout, NULL); =20 - rv =3D kvm_check_cap(KVM_CAP_MSR_PLATFORM_INFO); - if (!rv) { - print_skip("KVM_CAP_MSR_PLATFORM_INFO not supported"); - exit(KSFT_SKIP); - } + TEST_REQUIRE(kvm_has_cap(KVM_CAP_MSR_PLATFORM_INFO)); =20 vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); =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 ffa6a2f93de2..de9ee00d84cf 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 @@ -417,39 +417,24 @@ static bool use_amd_pmu(void) =20 int main(int argc, char *argv[]) { - void (*guest_code)(void) =3D NULL; + void (*guest_code)(void); struct kvm_vcpu *vcpu; struct kvm_vm *vm; - int r; =20 /* Tell stdout not to buffer its content */ setbuf(stdout, NULL); =20 - r =3D kvm_check_cap(KVM_CAP_PMU_EVENT_FILTER); - if (!r) { - print_skip("KVM_CAP_PMU_EVENT_FILTER not supported"); - exit(KSFT_SKIP); - } + TEST_REQUIRE(kvm_check_cap(KVM_CAP_PMU_EVENT_FILTER)); =20 - if (use_intel_pmu()) - guest_code =3D intel_guest_code; - else if (use_amd_pmu()) - guest_code =3D amd_guest_code; - - if (!guest_code) { - print_skip("Don't know how to test this guest PMU"); - exit(KSFT_SKIP); - } + TEST_REQUIRE(use_intel_pmu() || use_amd_pmu()); + guest_code =3D use_intel_pmu() ? intel_guest_code : amd_guest_code; =20 vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); =20 vm_init_descriptor_tables(vm); vcpu_init_descriptor_tables(vcpu); =20 - if (!sanity_check_pmu(vcpu)) { - print_skip("Guest PMU is not functional"); - exit(KSFT_SKIP); - } + TEST_REQUIRE(sanity_check_pmu(vcpu)); =20 test_without_filter(vcpu); test_member_deny_list(vcpu); 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 abf740f08d68..7ef713fdd0a5 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 @@ -123,10 +123,7 @@ static void check_set_bsp_busy(void) =20 int main(int argc, char *argv[]) { - if (!kvm_has_cap(KVM_CAP_SET_BOOT_CPU_ID)) { - print_skip("set_boot_cpu_id not available"); - return 0; - } + TEST_REQUIRE(kvm_has_cap(KVM_CAP_SET_BOOT_CPU_ID)); =20 run_vm_bsp(0); run_vm_bsp(1); 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 ffd8613987ae..76ba6fc80e37 100644 --- a/tools/testing/selftests/kvm/x86_64/sev_migrate_tests.c +++ b/tools/testing/selftests/kvm/x86_64/sev_migrate_tests.c @@ -400,22 +400,15 @@ int main(int argc, char *argv[]) { struct kvm_cpuid_entry2 *cpuid; =20 - if (!kvm_has_cap(KVM_CAP_VM_MOVE_ENC_CONTEXT_FROM) && - !kvm_has_cap(KVM_CAP_VM_COPY_ENC_CONTEXT_FROM)) { - print_skip("Capabilities not available"); - exit(KSFT_SKIP); - } + TEST_REQUIRE(kvm_has_cap(KVM_CAP_VM_MOVE_ENC_CONTEXT_FROM)); + TEST_REQUIRE(kvm_has_cap(KVM_CAP_VM_COPY_ENC_CONTEXT_FROM)); =20 cpuid =3D kvm_get_supported_cpuid_entry(0x80000000); - if (cpuid->eax < 0x8000001f) { - print_skip("AMD memory encryption not available"); - exit(KSFT_SKIP); - } + TEST_REQUIRE(cpuid->eax >=3D 0x8000001f); + cpuid =3D kvm_get_supported_cpuid_entry(0x8000001f); - if (!(cpuid->eax & X86_FEATURE_SEV)) { - print_skip("AMD SEV not available"); - exit(KSFT_SKIP); - } + TEST_REQUIRE(cpuid->eax & X86_FEATURE_SEV); + have_sev_es =3D !!(cpuid->eax & X86_FEATURE_SEV_ES); =20 if (kvm_check_cap(KVM_CAP_VM_MOVE_ENC_CONTEXT_FROM)) { 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 773db9d4f228..9b6db0b0b13e 100644 --- a/tools/testing/selftests/kvm/x86_64/sync_regs_test.c +++ b/tools/testing/selftests/kvm/x86_64/sync_regs_test.c @@ -94,14 +94,8 @@ int main(int argc, char *argv[]) setbuf(stdout, NULL); =20 cap =3D kvm_check_cap(KVM_CAP_SYNC_REGS); - if ((cap & TEST_SYNC_FIELDS) !=3D TEST_SYNC_FIELDS) { - print_skip("KVM_CAP_SYNC_REGS not supported"); - exit(KSFT_SKIP); - } - if ((cap & INVALID_SYNC_FIELD) !=3D 0) { - print_skip("The \"invalid\" field is not invalid"); - exit(KSFT_SKIP); - } + TEST_REQUIRE((cap & TEST_SYNC_FIELDS) =3D=3D TEST_SYNC_FIELDS); + TEST_REQUIRE(!(cap & INVALID_SYNC_FIELD)); =20 vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); =20 diff --git a/tools/testing/selftests/kvm/x86_64/triple_fault_event_test.c b= /tools/testing/selftests/kvm/x86_64/triple_fault_event_test.c index 078bd7a0bbb1..5a202ecb8ea0 100644 --- a/tools/testing/selftests/kvm/x86_64/triple_fault_event_test.c +++ b/tools/testing/selftests/kvm/x86_64/triple_fault_event_test.c @@ -46,15 +46,9 @@ int main(void) vm_vaddr_t vmx_pages_gva; struct ucall uc; =20 - if (!nested_vmx_supported()) { - print_skip("Nested VMX not supported"); - exit(KSFT_SKIP); - } + nested_vmx_check_supported(); =20 - if (!kvm_has_cap(KVM_CAP_X86_TRIPLE_FAULT_EVENT)) { - print_skip("KVM_CAP_X86_TRIPLE_FAULT_EVENT not supported"); - exit(KSFT_SKIP); - } + TEST_REQUIRE(kvm_has_cap(KVM_CAP_X86_TRIPLE_FAULT_EVENT)); =20 vm =3D vm_create_with_one_vcpu(&vcpu, l1_guest_code); vm_enable_cap(vm, KVM_CAP_X86_TRIPLE_FAULT_EVENT, 1); 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 fcc713ff75ff..47139aab7408 100644 --- a/tools/testing/selftests/kvm/x86_64/tsc_scaling_sync.c +++ b/tools/testing/selftests/kvm/x86_64/tsc_scaling_sync.c @@ -93,10 +93,7 @@ static void *run_vcpu(void *_cpu_nr) =20 int main(int argc, char *argv[]) { - if (!kvm_has_cap(KVM_CAP_VM_TSC_CONTROL)) { - print_skip("KVM_CAP_VM_TSC_CONTROL not available"); - exit(KSFT_SKIP); - } + TEST_REQUIRE(kvm_has_cap(KVM_CAP_VM_TSC_CONTROL)); =20 vm =3D vm_create(NR_TEST_VCPUS); vm_ioctl(vm, KVM_SET_TSC_KHZ, (void *) TEST_TSC_KHZ); 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 5bc2cee0d613..2641b286b4ed 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 @@ -111,10 +111,8 @@ int main(int argc, char *argv[]) struct kvm_vcpu *vcpu; struct kvm_vm *vm; =20 - if (!is_intel_cpu() || vm_is_unrestricted_guest(NULL)) { - print_skip("Must be run with kvm_intel.unrestricted_guest=3D0"); - exit(KSFT_SKIP); - } + TEST_REQUIRE(is_intel_cpu()); + TEST_REQUIRE(!vm_is_unrestricted_guest(NULL)); =20 vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); get_set_sigalrm_vcpu(vcpu); 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 190af8124677..ff4644038c55 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 @@ -116,14 +116,6 @@ static void l1_guest_code(struct vmx_pages *vmx_pages) GUEST_DONE(); } =20 -static void tsc_scaling_check_supported(void) -{ - if (!kvm_has_cap(KVM_CAP_TSC_CONTROL)) { - print_skip("TSC scaling not supported by the HW"); - exit(KSFT_SKIP); - } -} - static void stable_tsc_check_supported(void) { FILE *fp; @@ -159,7 +151,7 @@ int main(int argc, char *argv[]) uint64_t l2_tsc_freq =3D 0; =20 nested_vmx_check_supported(); - tsc_scaling_check_supported(); + TEST_REQUIRE(kvm_has_cap(KVM_CAP_TSC_CONTROL)); stable_tsc_check_supported(); =20 /* diff --git a/tools/testing/selftests/kvm/x86_64/vmx_pmu_caps_test.c b/tools= /testing/selftests/kvm/x86_64/vmx_pmu_caps_test.c index a308442458b8..eb592fae44ef 100644 --- a/tools/testing/selftests/kvm/x86_64/vmx_pmu_caps_test.c +++ b/tools/testing/selftests/kvm/x86_64/vmx_pmu_caps_test.c @@ -57,7 +57,6 @@ int main(int argc, char *argv[]) struct kvm_cpuid2 *cpuid; struct kvm_cpuid_entry2 *entry_1_0; struct kvm_cpuid_entry2 *entry_a_0; - bool pdcm_supported =3D false; struct kvm_vm *vm; struct kvm_vcpu *vcpu; int ret; @@ -71,20 +70,14 @@ int main(int argc, char *argv[]) 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) { - entry_1_0 =3D kvm_get_supported_cpuid_index(1, 0); - entry_a_0 =3D kvm_get_supported_cpuid_index(0xa, 0); - pdcm_supported =3D entry_1_0 && !!(entry_1_0->ecx & X86_FEATURE_PDCM); - eax.full =3D entry_a_0->eax; - } - if (!pdcm_supported) { - print_skip("MSR_IA32_PERF_CAPABILITIES is not supported by the vCPU"); - exit(KSFT_SKIP); - } - if (!eax.split.version_id) { - print_skip("PMU is not supported by the vCPU"); - exit(KSFT_SKIP); - } + TEST_REQUIRE(kvm_get_cpuid_max_basic() >=3D 0xa); + + entry_1_0 =3D kvm_get_supported_cpuid_index(1, 0); + entry_a_0 =3D kvm_get_supported_cpuid_index(0xa, 0); + TEST_REQUIRE(entry_1_0->ecx & X86_FEATURE_PDCM); + + eax.full =3D entry_a_0->eax; + __TEST_REQUIRE(eax.split.version_id, "PMU is not supported by the vCPU"); =20 /* testcase 1, set capabilities when we have PDCM bit */ vcpu_set_cpuid(vcpu, cpuid); 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 7438258511da..99e57b0cc2c9 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 @@ -169,10 +169,7 @@ int main(int argc, char *argv[]) */ nested_vmx_check_supported(); =20 - if (!kvm_has_cap(KVM_CAP_NESTED_STATE)) { - print_skip("KVM_CAP_NESTED_STATE not supported"); - exit(KSFT_SKIP); - } + TEST_REQUIRE(kvm_has_cap(KVM_CAP_NESTED_STATE)); =20 /* Create VM */ vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); 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 21f280a7c5e1..b564b86dfc1d 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 @@ -267,10 +267,7 @@ int main(int argc, char *argv[]) =20 have_evmcs =3D kvm_check_cap(KVM_CAP_HYPERV_ENLIGHTENED_VMCS); =20 - if (!kvm_has_cap(KVM_CAP_NESTED_STATE)) { - print_skip("KVM_CAP_NESTED_STATE not available"); - exit(KSFT_SKIP); - } + TEST_REQUIRE(kvm_has_cap(KVM_CAP_NESTED_STATE)); =20 /* * AMD currently does not implement set_nested_state, so for now we 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 4340c2f2300f..bdcb28186ccc 100644 --- a/tools/testing/selftests/kvm/x86_64/xen_shinfo_test.c +++ b/tools/testing/selftests/kvm/x86_64/xen_shinfo_test.c @@ -362,10 +362,7 @@ int main(int argc, char *argv[]) !strncmp(argv[1], "--verbose", 10)); =20 int xen_caps =3D kvm_check_cap(KVM_CAP_XEN_HVM); - if (!(xen_caps & KVM_XEN_HVM_CONFIG_SHARED_INFO) ) { - print_skip("KVM_XEN_HVM_CONFIG_SHARED_INFO not available"); - exit(KSFT_SKIP); - } + TEST_REQUIRE(xen_caps & KVM_XEN_HVM_CONFIG_SHARED_INFO); =20 bool do_runstate_tests =3D !!(xen_caps & KVM_XEN_HVM_CONFIG_RUNSTATE); bool do_eventfd_tests =3D !!(xen_caps & KVM_XEN_HVM_CONFIG_EVTCHN_2LEVEL); 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 a91f11fb26f4..8b76cade9bcd 100644 --- a/tools/testing/selftests/kvm/x86_64/xen_vmcall_test.c +++ b/tools/testing/selftests/kvm/x86_64/xen_vmcall_test.c @@ -80,14 +80,12 @@ static void guest_code(void) =20 int main(int argc, char *argv[]) { + unsigned int xen_caps; struct kvm_vcpu *vcpu; struct kvm_vm *vm; =20 - 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); - } + xen_caps =3D kvm_check_cap(KVM_CAP_XEN_HVM); + TEST_REQUIRE(xen_caps & KVM_XEN_HVM_CONFIG_INTERCEPT_HCALL); =20 vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); vcpu_set_hv_cpuid(vcpu); 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 1e3506c3deed..4e2e08059b95 100644 --- a/tools/testing/selftests/kvm/x86_64/xss_msr_test.c +++ b/tools/testing/selftests/kvm/x86_64/xss_msr_test.c @@ -19,7 +19,6 @@ int main(int argc, char *argv[]) { struct kvm_cpuid_entry2 *entry; - bool xss_supported =3D false; bool xss_in_msr_list; struct kvm_vm *vm; struct kvm_vcpu *vcpu; @@ -29,14 +28,10 @@ int main(int argc, char *argv[]) /* Create VM */ 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); - xss_supported =3D entry && !!(entry->eax & X86_FEATURE_XSAVES); - } - if (!xss_supported) { - print_skip("IA32_XSS is not supported by the vCPU"); - exit(KSFT_SKIP); - } + TEST_REQUIRE(kvm_get_cpuid_max_basic() >=3D 0xd); + + entry =3D kvm_get_supported_cpuid_index(0xd, 1); + TEST_REQUIRE(entry->eax & X86_FEATURE_XSAVES); =20 xss_val =3D vcpu_get_msr(vcpu, MSR_IA32_XSS); TEST_ASSERT(xss_val =3D=3D 0, --=20 2.36.1.255.ge46751e96f-goog From nobody Tue Apr 28 07:43:45 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 D8611CCA47F for ; Fri, 3 Jun 2022 01:01:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241472AbiFCBAU (ORCPT ); Thu, 2 Jun 2022 21:00:20 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34860 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241475AbiFCAvK (ORCPT ); Thu, 2 Jun 2022 20:51:10 -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 2B42C37BC2 for ; Thu, 2 Jun 2022 17:47:56 -0700 (PDT) Received: by mail-pg1-x549.google.com with SMTP id t14-20020a65608e000000b003fa321e8ea3so3039045pgu.18 for ; Thu, 02 Jun 2022 17:47: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=JWFE/jjOXHS1mFvFYygFdMopCxVjk77rB6nYuDplK34=; b=aUM4pGmPqNHYIGZyunuBfnVyKE/+oQ1ITUTUXye1SmORNwFqYZX7NHMUBNgzFWdToc 3E4oWJ4BBNPfvz1wBle+5PXlz1/UNk+8ehuHKSPznbHskPeqSYzkczUgQw82NCaILca7 g2FXzqxBZYzfgj5yy+4vJ8ymST2txyLXTrOHR+KqGZOHDgvGFUsyV9IGLnWQ44AvMkf0 0obyQBX1owuDLKvrrHyWj5bWnHij6SgS1pQreu+Tkge7wnGzGjJ7Q4GN9foOlzp5KStn SOoeX+tWpZxXp0dA4T2Y/7CgoYMnzkKKFjKSrRyD7QY1EqCA6ekh8kDCC/aQVMJN+/HY 2hcA== 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=JWFE/jjOXHS1mFvFYygFdMopCxVjk77rB6nYuDplK34=; b=8NtHn8yUUHNymowno06h9n6LjWnAlF7JE5b6yU402SYVlmAOQMNCjKQe+BdA/Ldurq g9E3vUjRYWE0VgoiPE5SwC6VDjD6nDwJAmcu3Fl/ZwEVBxePahQWGvzRdkL4K9uccqAK Cva4S89XlWyL3xvKzlMlB20iUHLtiMlaH56b4TX90w7qvrdnYKhyq2KsArLjIrY0FjIR j7uQbVsbm7jgB3lHi6cgoJhpeEQ5S4Numw8PtZWgKn9EcChzz78zb8u31XzFHP2/l9ct /PwnwZuKjRP2F8xjOfMaeXqDzCqgcFs9AtcKofJaEkoFd+y9kJxAmTxuqAdWEQAyn8vO iaTg== X-Gm-Message-State: AOAM531if0P+SEaCAzEeCHXOa/F4u/sSavghEQFp8oqv/3k59rO8Pkwe rdCy/3+hWD/e5KOFds4v07vZb1mriqE= X-Google-Smtp-Source: ABdhPJxhm+WJm0+KtPscOsIcz90Ey/7Ta5KlCastPuv974OLtLpiVNimkyfuc6Zay1MDTyERZWvWtB+4oe0= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:8f86:b0:162:22ff:496b with SMTP id z6-20020a1709028f8600b0016222ff496bmr7288600plo.105.1654217275704; Thu, 02 Jun 2022 17:47:55 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 3 Jun 2022 00:43:31 +0000 In-Reply-To: <20220603004331.1523888-1-seanjc@google.com> Message-Id: <20220603004331.1523888-145-seanjc@google.com> Mime-Version: 1.0 References: <20220603004331.1523888-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.255.ge46751e96f-goog Subject: [PATCH v2 144/144] KVM: selftests: Sanity check input to ioctls() at build time From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Vitaly Kuznetsov , Andrew Jones , David Matlack , Ben Gardon , Oliver Upton , linux-kernel@vger.kernel.org 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 static assert to the KVM/VM/vCPU ioctl() helpers to verify that the size of the argument provided matches the expected size of the IOCTL. Because ioctl() ultimately takes a "void *", it's all too easy to pass in garbage and not detect the error until runtime. E.g. while working on a CPUID rework, selftests happily compiled when vcpu_set_cpuid() unintentionally passed the cpuid() function as the parameter to ioctl() (a local "cpuid" parameter was removed, but its use was not replaced with "vcpu->cpuid" as intended). Tweak a variety of benign issues that aren't compatible with the sanity check, e.g. passing a non-pointer for ioctls(). Note, static_assert() requires a string on older versions of GCC. Feed it an empty string to make the compiler happy. Signed-off-by: Sean Christopherson Reviewed-by: Andrew Jones Tested-by: Anup Patel Tested-by: Thomas Huth --- .../selftests/kvm/include/kvm_util_base.h | 61 +++++++++++++------ .../selftests/kvm/lib/aarch64/processor.c | 2 +- tools/testing/selftests/kvm/lib/guest_modes.c | 2 +- tools/testing/selftests/kvm/lib/kvm_util.c | 29 +-------- tools/testing/selftests/kvm/s390x/resets.c | 6 +- .../selftests/kvm/x86_64/mmio_warning_test.c | 2 +- .../kvm/x86_64/pmu_event_filter_test.c | 2 +- .../selftests/kvm/x86_64/xen_shinfo_test.c | 6 +- 8 files changed, 56 insertions(+), 54 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 04ddab322b6b..0eaf0c9b7612 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -180,29 +180,56 @@ static inline bool kvm_has_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 -#define __kvm_ioctl(kvm_fd, cmd, arg) \ - ioctl(kvm_fd, cmd, arg) +#define kvm_do_ioctl(fd, cmd, arg) \ +({ \ + static_assert(!_IOC_SIZE(cmd) || sizeof(*arg) =3D=3D _IOC_SIZE(cmd), "");= \ + ioctl(fd, cmd, arg); \ +}) =20 -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); +#define __kvm_ioctl(kvm_fd, cmd, arg) \ + kvm_do_ioctl(kvm_fd, cmd, arg) =20 - TEST_ASSERT(!ret, __KVM_IOCTL_ERROR(name, ret)); -} + +#define _kvm_ioctl(kvm_fd, cmd, name, arg) \ +({ \ + int ret =3D __kvm_ioctl(kvm_fd, cmd, arg); \ + \ + TEST_ASSERT(!ret, __KVM_IOCTL_ERROR(name, ret)); \ +}) =20 #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); -#define vm_ioctl(vm, cmd, arg) _vm_ioctl(vm, cmd, #cmd, arg) - -int __vcpu_ioctl(struct kvm_vcpu *vcpu, unsigned long cmd, - void *arg); -void _vcpu_ioctl(struct kvm_vcpu *vcpu, unsigned long cmd, - const char *name, void *arg); -#define vcpu_ioctl(vcpu, cmd, arg) \ +#define __vm_ioctl(vm, cmd, arg) \ +({ \ + static_assert(sizeof(*(vm)) =3D=3D sizeof(struct kvm_vm), ""); \ + kvm_do_ioctl((vm)->fd, cmd, arg); \ +}) + +#define _vm_ioctl(vcpu, cmd, name, arg) \ +({ \ + int ret =3D __vm_ioctl(vcpu, cmd, arg); \ + \ + TEST_ASSERT(!ret, __KVM_IOCTL_ERROR(name, ret)); \ +}) + +#define vm_ioctl(vm, cmd, arg) \ + _vm_ioctl(vm, cmd, #cmd, arg) + +#define __vcpu_ioctl(vcpu, cmd, arg) \ +({ \ + static_assert(sizeof(*(vcpu)) =3D=3D sizeof(struct kvm_vcpu), ""); \ + kvm_do_ioctl((vcpu)->fd, cmd, arg); \ +}) + +#define _vcpu_ioctl(vcpu, cmd, name, arg) \ +({ \ + int ret =3D __vcpu_ioctl(vcpu, cmd, arg); \ + \ + TEST_ASSERT(!ret, __KVM_IOCTL_ERROR(name, ret)); \ +}) + +#define vcpu_ioctl(vcpu, cmd, arg) \ _vcpu_ioctl(vcpu, cmd, #cmd, arg) =20 /* diff --git a/tools/testing/selftests/kvm/lib/aarch64/processor.c b/tools/te= sting/selftests/kvm/lib/aarch64/processor.c index 6bd27782f00c..6f5551368944 100644 --- a/tools/testing/selftests/kvm/lib/aarch64/processor.c +++ b/tools/testing/selftests/kvm/lib/aarch64/processor.c @@ -472,7 +472,7 @@ void aarch64_get_supported_page_sizes(uint32_t ipa, }; =20 kvm_fd =3D open_kvm_dev_path_or_exit(); - vm_fd =3D __kvm_ioctl(kvm_fd, KVM_CREATE_VM, ipa); + vm_fd =3D __kvm_ioctl(kvm_fd, KVM_CREATE_VM, (void *)(unsigned long)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); diff --git a/tools/testing/selftests/kvm/lib/guest_modes.c b/tools/testing/= selftests/kvm/lib/guest_modes.c index 0be56c63aed6..99a575bbbc52 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 __kvm_ioctl(kvm_fd, KVM_CREATE_VM, 0); + vm_fd =3D __kvm_ioctl(kvm_fd, KVM_CREATE_VM, NULL); kvm_device_attr_get(vm_fd, KVM_S390_VM_CPU_MODEL, KVM_S390_VM_CPU_PROCESSOR, &info); 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 603a6d529357..f0300767df16 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -72,7 +72,7 @@ unsigned int kvm_check_cap(long cap) int kvm_fd; =20 kvm_fd =3D open_kvm_dev_path_or_exit(); - ret =3D __kvm_ioctl(kvm_fd, KVM_CHECK_EXTENSION, cap); + ret =3D __kvm_ioctl(kvm_fd, KVM_CHECK_EXTENSION, (void *)cap); TEST_ASSERT(ret >=3D 0, KVM_IOCTL_ERROR(KVM_CHECK_EXTENSION, ret)); =20 close(kvm_fd); @@ -92,7 +92,7 @@ static void vm_open(struct kvm_vm *vm) =20 TEST_REQUIRE(kvm_has_cap(KVM_CAP_IMMEDIATE_EXIT)); =20 - vm->fd =3D __kvm_ioctl(vm->kvm_fd, KVM_CREATE_VM, vm->type); + vm->fd =3D __kvm_ioctl(vm->kvm_fd, KVM_CREATE_VM, (void *)vm->type); TEST_ASSERT(vm->fd >=3D 0, KVM_IOCTL_ERROR(KVM_CREATE_VM, vm->fd)); } =20 @@ -1449,19 +1449,6 @@ struct kvm_reg_list *vcpu_get_reg_list(struct kvm_vc= pu *vcpu) return reg_list; } =20 -int __vcpu_ioctl(struct kvm_vcpu *vcpu, unsigned long cmd, void *arg) -{ - return ioctl(vcpu->fd, cmd, arg); -} - -void _vcpu_ioctl(struct kvm_vcpu *vcpu, unsigned long cmd, const char *nam= e, - void *arg) -{ - int ret =3D __vcpu_ioctl(vcpu, cmd, arg); - - TEST_ASSERT(!ret, __KVM_IOCTL_ERROR(name, ret)); -} - void *vcpu_map_dirty_ring(struct kvm_vcpu *vcpu) { uint32_t page_size =3D vcpu->vm->page_size; @@ -1491,18 +1478,6 @@ void *vcpu_map_dirty_ring(struct kvm_vcpu *vcpu) return vcpu->dirty_gfns; } =20 -int __vm_ioctl(struct kvm_vm *vm, unsigned long cmd, void *arg) -{ - return ioctl(vm->fd, cmd, arg); -} - -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)); -} - /* * Device Ioctl */ diff --git a/tools/testing/selftests/kvm/s390x/resets.c b/tools/testing/sel= ftests/kvm/s390x/resets.c index 4ba866047401..359fd18f473b 100644 --- a/tools/testing/selftests/kvm/s390x/resets.c +++ b/tools/testing/selftests/kvm/s390x/resets.c @@ -224,7 +224,7 @@ static void test_normal(void) =20 inject_irq(vcpu); =20 - vcpu_ioctl(vcpu, KVM_S390_NORMAL_RESET, 0); + vcpu_ioctl(vcpu, KVM_S390_NORMAL_RESET, NULL); =20 /* must clears */ assert_normal(vcpu); @@ -247,7 +247,7 @@ static void test_initial(void) =20 inject_irq(vcpu); =20 - vcpu_ioctl(vcpu, KVM_S390_INITIAL_RESET, 0); + vcpu_ioctl(vcpu, KVM_S390_INITIAL_RESET, NULL); =20 /* must clears */ assert_normal(vcpu); @@ -270,7 +270,7 @@ static void test_clear(void) =20 inject_irq(vcpu); =20 - vcpu_ioctl(vcpu, KVM_S390_CLEAR_RESET, 0); + vcpu_ioctl(vcpu, KVM_S390_CLEAR_RESET, NULL); =20 /* must clears */ assert_normal(vcpu); 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 0e4590afd0e1..fb02581953a3 100644 --- a/tools/testing/selftests/kvm/x86_64/mmio_warning_test.c +++ b/tools/testing/selftests/kvm/x86_64/mmio_warning_test.c @@ -59,7 +59,7 @@ void test(void) =20 kvm =3D open("/dev/kvm", O_RDWR); TEST_ASSERT(kvm !=3D -1, "failed to open /dev/kvm"); - kvmvm =3D __kvm_ioctl(kvm, KVM_CREATE_VM, 0); + kvmvm =3D __kvm_ioctl(kvm, KVM_CREATE_VM, NULL); 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_IOCTL_ERROR(KVM_CREATE_VCPU, kvmcpu)); 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 de9ee00d84cf..66930384ef97 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 @@ -266,7 +266,7 @@ static void test_without_filter(struct kvm_vcpu *vcpu) static uint64_t test_with_filter(struct kvm_vcpu *vcpu, struct kvm_pmu_event_filter *f) { - vm_ioctl(vcpu->vm, KVM_SET_PMU_EVENT_FILTER, (void *)f); + vm_ioctl(vcpu->vm, KVM_SET_PMU_EVENT_FILTER, f); return run_vcpu_to_sync(vcpu); } =20 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 bdcb28186ccc..a4a78637c35a 100644 --- a/tools/testing/selftests/kvm/x86_64/xen_shinfo_test.c +++ b/tools/testing/selftests/kvm/x86_64/xen_shinfo_test.c @@ -472,7 +472,7 @@ int main(int argc, char *argv[]) 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); + vm_ioctl(vm, KVM_SET_GSI_ROUTING, &irq_routes.info); =20 struct kvm_irqfd ifd =3D { }; =20 @@ -716,7 +716,7 @@ int main(int argc, char *argv[]) if (verbose) printf("Testing restored oneshot timer\n"); =20 - tmr.u.timer.expires_ns =3D rs->state_entry_time + 100000000, + tmr.u.timer.expires_ns =3D rs->state_entry_time + 100000000; vcpu_ioctl(vcpu, KVM_XEN_VCPU_SET_ATTR, &tmr); evtchn_irq_expected =3D true; alarm(1); @@ -743,7 +743,7 @@ int main(int argc, char *argv[]) if (verbose) printf("Testing SCHEDOP_poll wake on masked event\n"); =20 - tmr.u.timer.expires_ns =3D rs->state_entry_time + 100000000, + tmr.u.timer.expires_ns =3D rs->state_entry_time + 100000000; vcpu_ioctl(vcpu, KVM_XEN_VCPU_SET_ATTR, &tmr); alarm(1); break; --=20 2.36.1.255.ge46751e96f-goog