From nobody Tue Sep 16 20:07:42 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4C2DFC3DA7A for ; Wed, 28 Dec 2022 19:25:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232366AbiL1TY7 (ORCPT ); Wed, 28 Dec 2022 14:24:59 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46094 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233144AbiL1TYv (ORCPT ); Wed, 28 Dec 2022 14:24:51 -0500 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 697E61741D for ; Wed, 28 Dec 2022 11:24:50 -0800 (PST) Received: by mail-pl1-x649.google.com with SMTP id o18-20020a170902d4d200b00189d4c25568so12649695plg.13 for ; Wed, 28 Dec 2022 11:24:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=Mo9WWk49bq3o6GgXHJZvpBlrKizEyknLEVuJxarZm6w=; b=cpM7ihQBd4FEp1qLIXzpJmruvJ3gQgEt9GzCCQuDYzGWE0/JQl180tij1IgB+3C1fI NI/CRB81Gq7Pn7zvsbktzzDsMrOjqyRGhefHNbr/27eV0KSb4bCymBjgValGjt5659P5 hnCuNueNq8N5g0T66+w9ELo5UBp8JnSXjCa9c3UVTjbtYAeJzkqJcs5a1fnnFFO1mAp1 LDzoMxKw2q/igdHUkIIUKWPRY4xdesLfXRisswaP4wC5MvSNJbOf3E1Y+S66a+hQj4lS 5oYExQ4FmaX+p9xdEUupA5dRNDU9nWqyptcGEq35t6lkLJu41sgez82NakYbR60frdT0 RgJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=Mo9WWk49bq3o6GgXHJZvpBlrKizEyknLEVuJxarZm6w=; b=qWd5t4M0dEV3w8+LQYRzIUw3EzBk9vk0NlC0PkrpZjzikZNKh4O8QHhuDP0gUyVQ8X rgh0xCOexEZNAtbtLUVoZSUfSNCknxlljmFoW4Ovu6ogahS3WTMGetzFhbS5++WdhPji B9BivnWAp3MAp9eHSINHPjdeb4IrQSgP96/0u4mndRJSd6ppScBFBIjJfzyOrtQMgsr8 GAsSedRwReQSX2m60ZJxUPqJy0d8siYeH1ILIWXDSS77as0SEcOuDRdTxsSJ6apKgF0V cQ4XzbvbRxBT83sKx7ZYQaSmAbkTrU4dIC4L9I//o8ZHk4y2B4hDdpMs17m/UCqpUgaj mIPg== X-Gm-Message-State: AFqh2kppVZgS/4oPMI31Bq/fM56GbpLm+G2I7vdFOydXdfuYPPQL/w6/ qa0TnQxliTwiei4saJ0P+JjOJJEogv9eFZjU X-Google-Smtp-Source: AMrXdXtkZ+HcHbVmFeuaUfv5lwMV1eVF0Rl5j7xYKonekBJINuj3BtwPXCLd3BflIhE0ONbuqzWkDl/Nee6iIaDK X-Received: from vannapurve2.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:41f8]) (user=vannapurve job=sendgmr) by 2002:a17:90b:4d83:b0:220:1f03:129b with SMTP id oj3-20020a17090b4d8300b002201f03129bmr106930pjb.0.1672255489536; Wed, 28 Dec 2022 11:24:49 -0800 (PST) Date: Wed, 28 Dec 2022 19:24:35 +0000 In-Reply-To: <20221228192438.2835203-1-vannapurve@google.com> Mime-Version: 1.0 References: <20221228192438.2835203-1-vannapurve@google.com> X-Mailer: git-send-email 2.39.0.314.g84b9a713c41-goog Message-ID: <20221228192438.2835203-2-vannapurve@google.com> Subject: [V4 PATCH 1/4] KVM: selftests: x86: use this_cpu_* helpers From: Vishal Annapurve To: x86@kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org Cc: pbonzini@redhat.com, shuah@kernel.org, bgardon@google.com, seanjc@google.com, oupton@google.com, peterx@redhat.com, vkuznets@redhat.com, dmatlack@google.com, Vishal Annapurve 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 this_cpu_* helpers to query the cpu vendor. Suggested-by: Sean Christopherson Signed-off-by: Vishal Annapurve Reviewed-by: David Matlack --- .../selftests/kvm/include/x86_64/processor.h | 22 +++++++++++++++++++ .../selftests/kvm/lib/x86_64/processor.c | 16 ++------------ 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/tools/testing/selftests/kvm/include/x86_64/processor.h b/tools= /testing/selftests/kvm/include/x86_64/processor.h index 2a5f47d51388..84edac133d8f 100644 --- a/tools/testing/selftests/kvm/include/x86_64/processor.h +++ b/tools/testing/selftests/kvm/include/x86_64/processor.h @@ -555,6 +555,28 @@ static inline uint32_t this_cpu_model(void) return x86_model(this_cpu_fms()); } =20 +static inline bool this_cpu_vendor_string_is(const char *vendor) +{ + const uint32_t *chunk =3D (const uint32_t *)vendor; + uint32_t eax, ebx, ecx, edx; + + cpuid(0, &eax, &ebx, &ecx, &edx); + return (ebx =3D=3D chunk[0] && edx =3D=3D chunk[1] && ecx =3D=3D chunk[2]= ); +} + +static inline bool this_cpu_is_intel(void) +{ + return this_cpu_vendor_string_is("GenuineIntel"); +} + +/* + * Exclude early K5 samples with a vendor string of "AMDisbetter!" + */ +static inline bool this_cpu_is_amd(void) +{ + return this_cpu_vendor_string_is("AuthenticAMD"); +} + static inline uint32_t __this_cpu_has(uint32_t function, uint32_t index, uint8_t reg, uint8_t lo, uint8_t hi) { diff --git a/tools/testing/selftests/kvm/lib/x86_64/processor.c b/tools/tes= ting/selftests/kvm/lib/x86_64/processor.c index acfa1d01e7df..a799af572f3f 100644 --- a/tools/testing/selftests/kvm/lib/x86_64/processor.c +++ b/tools/testing/selftests/kvm/lib/x86_64/processor.c @@ -1006,26 +1006,14 @@ void kvm_x86_state_cleanup(struct kvm_x86_state *st= ate) free(state); } =20 -static bool cpu_vendor_string_is(const char *vendor) -{ - const uint32_t *chunk =3D (const uint32_t *)vendor; - uint32_t eax, ebx, ecx, edx; - - cpuid(0, &eax, &ebx, &ecx, &edx); - return (ebx =3D=3D chunk[0] && edx =3D=3D chunk[1] && ecx =3D=3D chunk[2]= ); -} - bool is_intel_cpu(void) { - return cpu_vendor_string_is("GenuineIntel"); + return this_cpu_is_intel(); } =20 -/* - * Exclude early K5 samples with a vendor string of "AMDisbetter!" - */ bool is_amd_cpu(void) { - return cpu_vendor_string_is("AuthenticAMD"); + return this_cpu_is_amd(); } =20 void kvm_get_cpu_address_width(unsigned int *pa_bits, unsigned int *va_bit= s) --=20 2.39.0.314.g84b9a713c41-goog From nobody Tue Sep 16 20:07:42 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E5CBCC4332F for ; Wed, 28 Dec 2022 19:25:05 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233438AbiL1TZE (ORCPT ); Wed, 28 Dec 2022 14:25:04 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46296 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233285AbiL1TY6 (ORCPT ); Wed, 28 Dec 2022 14:24:58 -0500 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 8B05D1838A for ; Wed, 28 Dec 2022 11:24:52 -0800 (PST) Received: by mail-pf1-x44a.google.com with SMTP id e6-20020aa78c46000000b005772151d489so8656618pfd.15 for ; Wed, 28 Dec 2022 11:24:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=eezWDwyqk949sEAV6VBZXvmE65PTPfqNCFhhSoX++44=; b=VQLWwAsnp8xEr114AAmlLuYwOEaQZ3kuhyeF6c365GeAlZ4EMzS8MiWB11jz/EMUgm khDN6r175XUEyW7m/oNk3OZkdkPyvwGwmsgCd4NMjRYpSLjTAYPrx72KQCfsNXcbQRLr 0EkXan3XgXT5CLnAlpsw0Vmj/h7JMY+8peywoXVo1O9CJLLG6GhpKfyUTh1zNLRd6zLY FEq1Y+kNPCkX43rdGocrQGj5MgGl4RnJaqHBexdt3XuZeOQtdNgiFzgO99+DYRM3JFBZ 20n74dHtErcViR3PW+5hpXz5jvnhsU/bhHiP4KqIRiiRfueHHRoeui8yVMj5sxFSEL5j 47jA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=eezWDwyqk949sEAV6VBZXvmE65PTPfqNCFhhSoX++44=; b=2SMcvlyi+qWifjT+KmkYnsPj3gj52RaZygWetdu0H/hKtQA/AC4OjajPD7HdrxZq6N sEzuvqS9OwuPqLUxmRoZ/meF3G+7xjUOHrho8E6VPDfPXOLqIXad8a357AJDyHRjxXPm 9jrR2Qr0MecDfYo8V/rp1FrbdExIpRuypPWt8ccsMzlqfmiTGOAvaLPhuM4p0LzBpGno ztl1Ku6TBYNxL8pi1OpLa6DML9/6u294KBskGq84+XIjyI3zvNM+ePP0esKhfZIZppA5 Z4WlIjwQZf+K9TcJ4evJ3Pk0nkYFbgk7d3w/JhzqoCSNEogeDOv8+5h5gW2V5sWpVrqq RjAQ== X-Gm-Message-State: AFqh2koD2iqPVrElVCO46SYusSG/EM/3G8H6j2tV/OqebuSi746gxe3z 10HRT4krdaW/jOBCQv3mBSyW3o7WAmDJ7eiH X-Google-Smtp-Source: AMrXdXuFouVTMxaq7VekFjs4wz2DtSH9W9iNxpumCXLOPTj16YNvmf/eBWS8w7lu3B8BzCIKLgDjy4XmaacOkKAz X-Received: from vannapurve2.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:41f8]) (user=vannapurve job=sendgmr) by 2002:a17:90a:5c86:b0:219:c1fb:5da8 with SMTP id r6-20020a17090a5c8600b00219c1fb5da8mr2330892pji.221.1672255492112; Wed, 28 Dec 2022 11:24:52 -0800 (PST) Date: Wed, 28 Dec 2022 19:24:36 +0000 In-Reply-To: <20221228192438.2835203-1-vannapurve@google.com> Mime-Version: 1.0 References: <20221228192438.2835203-1-vannapurve@google.com> X-Mailer: git-send-email 2.39.0.314.g84b9a713c41-goog Message-ID: <20221228192438.2835203-3-vannapurve@google.com> Subject: [V4 PATCH 2/4] KVM: selftests: x86: Add variables to store cpu type From: Vishal Annapurve To: x86@kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org Cc: pbonzini@redhat.com, shuah@kernel.org, bgardon@google.com, seanjc@google.com, oupton@google.com, peterx@redhat.com, vkuznets@redhat.com, dmatlack@google.com, Vishal Annapurve 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 variables to hold the cpu vendor type that are initialized early during the selftest setup and later synced to guest vm post VM creation. These variables will be used in later patches to avoid querying CPU type multiple times. Suggested-by: Sean Christopherson Signed-off-by: Vishal Annapurve Reviewed-by: David Matlack --- tools/testing/selftests/kvm/lib/x86_64/processor.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tools/testing/selftests/kvm/lib/x86_64/processor.c b/tools/tes= ting/selftests/kvm/lib/x86_64/processor.c index a799af572f3f..b3d2a9ab5ced 100644 --- a/tools/testing/selftests/kvm/lib/x86_64/processor.c +++ b/tools/testing/selftests/kvm/lib/x86_64/processor.c @@ -19,6 +19,8 @@ #define MAX_NR_CPUID_ENTRIES 100 =20 vm_vaddr_t exception_handlers; +static bool host_cpu_is_amd; +static bool host_cpu_is_intel; =20 static void regs_dump(FILE *stream, struct kvm_regs *regs, uint8_t indent) { @@ -555,6 +557,8 @@ static void vcpu_setup(struct kvm_vm *vm, struct kvm_vc= pu *vcpu) void kvm_arch_vm_post_create(struct kvm_vm *vm) { vm_create_irqchip(vm); + sync_global_to_guest(vm, host_cpu_is_intel); + sync_global_to_guest(vm, host_cpu_is_amd); } =20 struct kvm_vcpu *vm_arch_vcpu_add(struct kvm_vm *vm, uint32_t vcpu_id, @@ -1264,3 +1268,9 @@ bool vm_is_unrestricted_guest(struct kvm_vm *vm) =20 return get_kvm_intel_param_bool("unrestricted_guest"); } + +void kvm_selftest_arch_init(void) +{ + host_cpu_is_intel =3D this_cpu_is_intel(); + host_cpu_is_amd =3D this_cpu_is_amd(); +} --=20 2.39.0.314.g84b9a713c41-goog From nobody Tue Sep 16 20:07:42 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 654D2C4332F for ; Wed, 28 Dec 2022 19:25:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232696AbiL1TZQ (ORCPT ); Wed, 28 Dec 2022 14:25:16 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46288 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233383AbiL1TZA (ORCPT ); Wed, 28 Dec 2022 14:25:00 -0500 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 0DCD3183A2 for ; Wed, 28 Dec 2022 11:24:55 -0800 (PST) Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-410f1a84ed2so182739257b3.15 for ; Wed, 28 Dec 2022 11:24:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=LehCRL1Bkg7m894um912QRzB94JErMqn1lJvj9EXRDg=; b=cao+rbPpEh0CM4eNRLM1YYxP2pEUWPF5BIRkUsfj4rNDx9tMa1UMwmLh/gsaxT2R9a TbQDPuzyWb+6AvKoXOoitB7sfl2tOX95dPoFEieF6+auG+rGxQ66VFr4zH6vQONur46I E9C6zsVWj3ij2PphdLOmMeH7rnbP+i5AUrfwl2QILD5/cgGK75dPOYvlRSzrbIvXlEwk jhMEhmlYZ5OxI3FTKKztXe0lmlyo26WoZ+dlHx80UviSfbIX7/1Op1MDK5HttSQH0PaX zNpWm8sAlZ/V98i3QgOxtGG42hcvfkqugKnzTNTSN9ahBF+13zPLYfz2E3W9eMDSycLT 2uAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=LehCRL1Bkg7m894um912QRzB94JErMqn1lJvj9EXRDg=; b=mXkUMK3GXw42CP6B5WrRISgAcxLnqni5gYJZN70z8Xeay785d7pYauBLmNoUIKQlCc +k72b/kOr4uVoHogP+aeemnvI3Hf7393szK8ydpip0UHLfxIAt102HPqkiB6OxQU35uS dGfojLCl6WIX+YABQccwl4Jds+kx0Se24YB26cwscqj53w0tt6pZN5TpsVUq7bcYTgas YXxHYxOA4ewjk+lhqGFvrO+K3B/n1cMOnfhMELn6RoudF+srfwjte5mWWBGgHODj3aFW 1HYfe4mG/ifpZQIYHMx7NrIFvy6xoz0wjAgQAC432OZmWCAAwVERKu5PRB3FfpLXPFZl MdYA== X-Gm-Message-State: AFqh2kokOs2Mdmg48NiowuYu0QDUe5WRltLrTqtN0obR4ZpNAOLybcna bk52sIcgOugnjU+PYG/oHBeph4gk77ZuC/2m X-Google-Smtp-Source: AMrXdXt2PhDvXl+WzsMKN54s0aF5L1C+kZGlOoaZPgyAMGpBWfQ5J1M81ETncp31dtw2epZSxW6pqVYR5e1dbGEx X-Received: from vannapurve2.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:41f8]) (user=vannapurve job=sendgmr) by 2002:a25:bbd1:0:b0:70b:87c6:4fe with SMTP id c17-20020a25bbd1000000b0070b87c604femr2824610ybk.550.1672255494272; Wed, 28 Dec 2022 11:24:54 -0800 (PST) Date: Wed, 28 Dec 2022 19:24:37 +0000 In-Reply-To: <20221228192438.2835203-1-vannapurve@google.com> Mime-Version: 1.0 References: <20221228192438.2835203-1-vannapurve@google.com> X-Mailer: git-send-email 2.39.0.314.g84b9a713c41-goog Message-ID: <20221228192438.2835203-4-vannapurve@google.com> Subject: [V4 PATCH 3/4] KVM: sefltests: x86: Replace is_*cpu with is_host_*cpu From: Vishal Annapurve To: x86@kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org Cc: pbonzini@redhat.com, shuah@kernel.org, bgardon@google.com, seanjc@google.com, oupton@google.com, peterx@redhat.com, vkuznets@redhat.com, dmatlack@google.com, Vishal Annapurve 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 APIs to query cpu type with APIs always checking the host cpu type. This way there are two set of APIs to query CPU type: 1) this_cpu_is_*() 2) is_host_*cpu() that can be invoked as per the usecase. All the current callers of is_*cpu actually care about host cpu type so they are updated to invoke is_host*cpu. Suggested-by: Sean Christopherson Signed-off-by: Vishal Annapurve Reviewed-by: David Matlack --- .../testing/selftests/kvm/include/x86_64/processor.h | 4 ++-- tools/testing/selftests/kvm/lib/x86_64/processor.c | 12 ++++++------ .../selftests/kvm/x86_64/fix_hypercall_test.c | 4 ++-- .../testing/selftests/kvm/x86_64/mmio_warning_test.c | 2 +- .../selftests/kvm/x86_64/pmu_event_filter_test.c | 4 ++-- .../x86_64/vmx_exception_with_invalid_guest_state.c | 2 +- 6 files changed, 14 insertions(+), 14 deletions(-) diff --git a/tools/testing/selftests/kvm/include/x86_64/processor.h b/tools= /testing/selftests/kvm/include/x86_64/processor.h index 84edac133d8f..8f9e066c89d9 100644 --- a/tools/testing/selftests/kvm/include/x86_64/processor.h +++ b/tools/testing/selftests/kvm/include/x86_64/processor.h @@ -713,8 +713,8 @@ static inline void cpu_relax(void) "hlt\n" \ ) =20 -bool is_intel_cpu(void); -bool is_amd_cpu(void); +bool is_host_cpu_intel(void); +bool is_host_cpu_amd(void); =20 struct kvm_x86_state *vcpu_save_state(struct kvm_vcpu *vcpu); void vcpu_load_state(struct kvm_vcpu *vcpu, struct kvm_x86_state *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 b3d2a9ab5ced..18f0608743d1 100644 --- a/tools/testing/selftests/kvm/lib/x86_64/processor.c +++ b/tools/testing/selftests/kvm/lib/x86_64/processor.c @@ -115,7 +115,7 @@ static void sregs_dump(FILE *stream, struct kvm_sregs *= sregs, uint8_t indent) =20 bool kvm_is_tdp_enabled(void) { - if (is_intel_cpu()) + if (is_host_cpu_intel()) return get_kvm_intel_param_bool("ept"); else return get_kvm_amd_param_bool("npt"); @@ -1010,14 +1010,14 @@ void kvm_x86_state_cleanup(struct kvm_x86_state *st= ate) free(state); } =20 -bool is_intel_cpu(void) +bool is_host_cpu_intel(void) { - return this_cpu_is_intel(); + return host_cpu_is_intel; } =20 -bool is_amd_cpu(void) +bool is_host_cpu_amd(void) { - return this_cpu_is_amd(); + return host_cpu_is_amd; } =20 void kvm_get_cpu_address_width(unsigned int *pa_bits, unsigned int *va_bit= s) @@ -1228,7 +1228,7 @@ unsigned long vm_compute_max_gfn(struct kvm_vm *vm) max_gfn =3D (1ULL << (vm->pa_bits - vm->page_shift)) - 1; =20 /* Avoid reserved HyperTransport region on AMD processors. */ - if (!is_amd_cpu()) + if (!is_host_cpu_amd()) return max_gfn; =20 /* On parts with <40 physical address bits, the area is fully hidden */ 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 32f7e09ef67c..e84c0c5a73b1 100644 --- a/tools/testing/selftests/kvm/x86_64/fix_hypercall_test.c +++ b/tools/testing/selftests/kvm/x86_64/fix_hypercall_test.c @@ -48,10 +48,10 @@ static void guest_main(void) const uint8_t *other_hypercall_insn; uint64_t ret; =20 - if (is_intel_cpu()) { + if (is_host_cpu_intel()) { native_hypercall_insn =3D vmx_vmcall; other_hypercall_insn =3D svm_vmmcall; - } else if (is_amd_cpu()) { + } else if (is_host_cpu_amd()) { native_hypercall_insn =3D svm_vmmcall; other_hypercall_insn =3D vmx_vmcall; } else { 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 fb02581953a3..d2d5dcae98e7 100644 --- a/tools/testing/selftests/kvm/x86_64/mmio_warning_test.c +++ b/tools/testing/selftests/kvm/x86_64/mmio_warning_test.c @@ -93,7 +93,7 @@ int main(void) { int warnings_before, warnings_after; =20 - TEST_REQUIRE(is_intel_cpu()); + TEST_REQUIRE(is_host_cpu_intel()); =20 TEST_REQUIRE(!vm_is_unrestricted_guest(NULL)); =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 2de98fce7edd..289226117513 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 @@ -363,7 +363,7 @@ static void test_pmu_config_disable(void (*guest_code)(= void)) */ static bool use_intel_pmu(void) { - return is_intel_cpu() && + return is_host_cpu_intel() && kvm_cpu_property(X86_PROPERTY_PMU_VERSION) && kvm_cpu_property(X86_PROPERTY_PMU_NR_GP_COUNTERS) && kvm_pmu_has(X86_PMU_FEATURE_BRANCH_INSNS_RETIRED); @@ -397,7 +397,7 @@ static bool use_amd_pmu(void) uint32_t family =3D kvm_cpu_family(); uint32_t model =3D kvm_cpu_model(); =20 - return is_amd_cpu() && + return is_host_cpu_amd() && (is_zen1(family, model) || is_zen2(family, model) || is_zen3(family, model)); 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 2641b286b4ed..d74b0d22385a 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,7 +111,7 @@ int main(int argc, char *argv[]) struct kvm_vcpu *vcpu; struct kvm_vm *vm; =20 - TEST_REQUIRE(is_intel_cpu()); + TEST_REQUIRE(is_host_cpu_intel()); TEST_REQUIRE(!vm_is_unrestricted_guest(NULL)); =20 vm =3D vm_create_with_one_vcpu(&vcpu, guest_code); --=20 2.39.0.314.g84b9a713c41-goog From nobody Tue Sep 16 20:07:42 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7D9DCC4332F for ; Wed, 28 Dec 2022 19:25:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233642AbiL1TZ1 (ORCPT ); Wed, 28 Dec 2022 14:25:27 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46530 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233350AbiL1TZF (ORCPT ); Wed, 28 Dec 2022 14:25:05 -0500 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 E32AB183AE for ; Wed, 28 Dec 2022 11:24:56 -0800 (PST) Received: by mail-pj1-x1049.google.com with SMTP id v16-20020a17090a899000b00219b1f0ddebso12926757pjn.5 for ; Wed, 28 Dec 2022 11:24:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=sIyfuO6L8HnU8CmCldKrIpDi7aTZJyxJfn1wljTzIeI=; b=HbphtqtIjGcu1bCKK6wFWu4E/GlYZGDlsYger0IgbCeUkoHRrvjgvwYnY/vOQNJS3v FyjI7bdMglfCpRTTsNvK49p8IyLNoVRBVdcnldRVB+HUTo08LKiSrhC5Q/0Uc+QQdp+X IHJ89MTp65CrwucYaVMtjMiROhNdBnnGYlBREUmDHiQkTkehUA4DlpRUBvud1+SVqpMC 6jKDiAXw31yGNOiO07z1YlMzIXbFVC8qVLvnQMkUpOleAVc5L3CryHcplcqTmY4Pt+Gf tXjGKaI88IH6T+SOZw737PpHr745DcyWzXyYFxhUqfzzIygXPYuztcWMdNooU6ZBsvBQ U5Yg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=sIyfuO6L8HnU8CmCldKrIpDi7aTZJyxJfn1wljTzIeI=; b=ijMKKStsaTT14hNkFE01kEl5JP/h2MWruEIyM6BTf+AxRM+IVyORAZrsPha63LnCIX qiDB88VHs/xP/iUddCEECIHmr1CSvT/HHCd++2T7u/0DqIkixT+H4fCUOEAYddtg2FeK V609AF7q4hb4wSDsyEms1WSkocZ81isCUieE/OWcDCP8WRFyOvyux2zb3knmbHjhMhQ+ Pv7WZtutlRvyt9idQa9Ozejq+fAjCIphFRnpbipOmetoQSB6fBmTDcSIBxT26I90nJKA 8u0Xb4Ocbjf4buQWf3gakdsmcxY1bOqa29606hCZETfGeofo4HhTWelePS58DJxq2Jio c6/A== X-Gm-Message-State: AFqh2kqu03RUUl5/y986hBc84477lok6BB31BTse57cXrxaud8WaKId7 FjMdtLjJUheFka6W7UWM5d/y4CUhvJCXNDXu X-Google-Smtp-Source: AMrXdXvOH+6kWmrNXWr4DzT0DiqLcTz70aEBBsdc901akacOkyNgSBf4mYJaruRIUQ+DNlIh+bmPNeoAoGZ2Pser X-Received: from vannapurve2.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:41f8]) (user=vannapurve job=sendgmr) by 2002:a17:90a:7c48:b0:225:ff38:5494 with SMTP id e8-20020a17090a7c4800b00225ff385494mr796035pjl.151.1672255496443; Wed, 28 Dec 2022 11:24:56 -0800 (PST) Date: Wed, 28 Dec 2022 19:24:38 +0000 In-Reply-To: <20221228192438.2835203-1-vannapurve@google.com> Mime-Version: 1.0 References: <20221228192438.2835203-1-vannapurve@google.com> X-Mailer: git-send-email 2.39.0.314.g84b9a713c41-goog Message-ID: <20221228192438.2835203-5-vannapurve@google.com> Subject: [V4 PATCH 4/4] KVM: selftests: x86: Invoke kvm hypercall as per host cpu From: Vishal Annapurve To: x86@kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org Cc: pbonzini@redhat.com, shuah@kernel.org, bgardon@google.com, seanjc@google.com, oupton@google.com, peterx@redhat.com, vkuznets@redhat.com, dmatlack@google.com, Vishal Annapurve Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Invoke vmcall/vmmcall instructions from kvm_hypercall as per host CPU type. CVMs and current kvm_hyerpcall callers need to execute hypercall as per the cpu type to avoid KVM having to emulate the instruction anyways. CVMs need to avoid KVM emulation as the guest code is not updatable from KVM. Guest code region can be marked un-mondifiable from KVM without CVMs as well, so in general it's safer to avoid KVM emulation for vmcall/vmmcall instructions. Suggested-by: Sean Christopherson Signed-off-by: Vishal Annapurve Reviewed-by: David Matlack --- tools/testing/selftests/kvm/lib/x86_64/processor.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/kvm/lib/x86_64/processor.c b/tools/tes= ting/selftests/kvm/lib/x86_64/processor.c index 18f0608743d1..cc0b9c17fa91 100644 --- a/tools/testing/selftests/kvm/lib/x86_64/processor.c +++ b/tools/testing/selftests/kvm/lib/x86_64/processor.c @@ -1154,9 +1154,15 @@ uint64_t kvm_hypercall(uint64_t nr, uint64_t a0, uin= t64_t a1, uint64_t a2, { uint64_t r; =20 - asm volatile("vmcall" + asm volatile("test %[use_vmmcall], %[use_vmmcall]\n\t" + "jnz 1f\n\t" + "vmcall\n\t" + "jmp 2f\n\t" + "1: vmmcall\n\t" + "2:" : "=3Da"(r) - : "a"(nr), "b"(a0), "c"(a1), "d"(a2), "S"(a3)); + : "a"(nr), "b"(a0), "c"(a1), "d"(a2), "S"(a3), + [use_vmmcall] "r" (is_host_cpu_amd())); return r; } =20 --=20 2.39.0.314.g84b9a713c41-goog