Received: by 2002:a05:7412:e794:b0:fa:551:50a7 with SMTP id o20csp2172861rdd; Fri, 12 Jan 2024 01:17:37 -0800 (PST) X-Google-Smtp-Source: AGHT+IFzM9NKUyGt2ynfRgBq/7RawxVg8ouTnYtgpRuoBzPKyl19zA5e2PdR4SqzVDCeWRw172KV X-Received: by 2002:a50:c30f:0:b0:558:d381:a2db with SMTP id a15-20020a50c30f000000b00558d381a2dbmr276011edb.56.1705051057089; Fri, 12 Jan 2024 01:17:37 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1705051057; cv=none; d=google.com; s=arc-20160816; b=nQ/OJDOWP84qTyzydV8gzHcdmf4uRVvXe8CcodghCFqnx7VnO0UiOtESSwRy7wpa8I 7IGQk4di3AvYH6v6nHa89/b5PD6+dW+DG+hzRgciwRq3T7wUx1tXl4SHX4Juf7yaZtuW 0KgSWVWUrlmarhsR1C2fL4nsEX2wrQdsW7GWcP432FrOxi81ecp3x3tnPHAvhLSP+I3n t4B9da0VClvF+8QOrUqsNhDkZqERceN+Ak9Op6o4FW410HShuPc4ujeXOCqS4K7mvCs3 ihztfw6caYixkhadjL3EkKpDoiBJx7b4f8pIw3DoyI67sxBO1WBHNIcJu2E0n6xjQ9eW RAsg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:date:message-id:dkim-signature; bh=x5s+2fsKpt8VMMys7+3iyf2v7xr8d/XJatcVchWIH3o=; fh=8hMhf/bWLGeBzWmgLGn3yaL17tj1bW1VaYHi0JARJ5w=; b=HqzqE03MdBcR3R0tY9RJZfprtWJ9PdX7lerbslqLeSGnFA1q06oTLLDSvHeY4PwZC2 RVywko+S3iqaaPamicQs602I86N3mPzGMRWiM4Iz5dSuHC2Etswtsm623x3hh/UODjsi LYabCcOX+sgbUF+PhMoj6DYeLyUC6/hau87LjDCDb3JsIrMO69RIVwQKvLx/EGMJyRCC f9pseqyRYuiUrHVTplXnSgPtEjM7cpVDUJNuZK5czpEtsYlYRze/R4SES0ePTXGV9n+G /Hieviv5llb9fXuTIr2ncfcGqJ/d7TP6wwTAi+NYsGjlGuAvBYJNRidIXdxlKHwnOOd0 wBZA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=NB29RUKb; spf=pass (google.com: domain of linux-kernel+bounces-24455-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-24455-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [2604:1380:4601:e00::3]) by mx.google.com with ESMTPS id ch26-20020a0564021bda00b00553059ffc89si1268054edb.530.2024.01.12.01.17.37 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Jan 2024 01:17:37 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-24455-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) client-ip=2604:1380:4601:e00::3; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=NB29RUKb; spf=pass (google.com: domain of linux-kernel+bounces-24455-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-24455-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id A17DD1F24CD3 for ; Fri, 12 Jan 2024 09:17:36 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id CDA2E55C32; Fri, 12 Jan 2024 09:17:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="NB29RUKb" Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2775755C00; Fri, 12 Jan 2024 09:17:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1705051043; x=1736587043; h=message-id:date:mime-version:subject:to:cc:references: from:in-reply-to:content-transfer-encoding; bh=jrQBu045tUNN/WugD7J1TvCVL3IEFRj8WSed83Rkgpo=; b=NB29RUKbFDUtMsly42Hasn0duOaskyoO1TEs2FQx6gnUOMZjXrMBMqA6 3PEGMUrFiVPopwNXSD8k1SG5MKabMX0Fw6Bj7F0Yg2YHRQkCEimK4yD7N gWW9ZOVE4KwkoYe1W7jOz9bXmeOHMptLXotk1P8y5HOHAw9/WQnIyeb6t nuoTv7vF9ysUjxE1KQulcfG5/4Wdh4CXAKVmEu13d+heBbXmVnXI2V6fQ v6LCu9b379KCBjUpeIaF0oyd6xMzgt6k7UWJjFIivTlhQnhOLEjnSSFlQ i49w8mfUfesOCPvJ+6sqZ/wHtqiFIxQ+N63jvaqXqn8XTJpcLrIb2Oybz w==; X-IronPort-AV: E=McAfee;i="6600,9927,10950"; a="6492592" X-IronPort-AV: E=Sophos;i="6.04,189,1695711600"; d="scan'208";a="6492592" Received: from fmviesa001.fm.intel.com ([10.60.135.141]) by orvoesa104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Jan 2024 01:17:22 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.04,189,1695711600"; d="scan'208";a="24945522" Received: from dapengmi-mobl1.ccr.corp.intel.com (HELO [10.93.5.98]) ([10.93.5.98]) by smtpauth.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Jan 2024 01:17:19 -0800 Message-ID: <07bae927-150e-4a81-a3c7-6617a73bba27@linux.intel.com> Date: Fri, 12 Jan 2024 17:17:16 +0800 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v10 00/29] KVM: x86/pmu: selftests: Fixes and new tests Content-Language: en-US To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Kan Liang , Jim Mattson , Jinrong Liang , Aaron Lewis , Like Xu References: <20240109230250.424295-1-seanjc@google.com> From: "Mi, Dapeng" In-Reply-To: <20240109230250.424295-1-seanjc@google.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 1/10/2024 7:02 AM, Sean Christopherson wrote: > Knock wood, _this_ is the final of fixes and tests for PMU counters. New > in v10 is a small refactor to treat FIXED as a value, not a flag, when > emulating RDPMC. Everything else is the same as v9 (although rebased, but > there were no conflicts). > > v10: > - Collect review. [Dapeng] > - Treat the FIXED type in RDPMC's ECX as a value, not a flag. [Jim] > > v9: > - https://lore.kernel.org/all/20231202000417.922113-1-seanjc@google.com > - Collect reviews. [Dapeng, Kan] > - Fix a 63:31 => 63:32 typo in a changelog. [Dapeng] > - Actually check that forced emulation is enabled before trying to force > emulation on RDPMC. [Jinrong] > - Fix the aformentioned priority inversion issue. > - Completely drop "support" for fast RDPMC, in quotes because KVM doesn't > actually support RDPMC for non-architectural PMUs. I had left the code > in v8 because I didn't fully grok what the early emulator check was > doing, i.e. wasn't 100% confident it was dead code. > > v8: > - https://lore.kernel.org/all/20231110021306.1269082-1-seanjc@google.com > - Collect reviews. [Jim, Dapeng, Kan] > - Tweak names for the RDPMC flags in the selftests #defines. > - Get the event selectors used to virtualize fixed straight from perf > instead of hardcoding the (wrong) selectors in KVM. [Kan] > - Rename an "eventsel" field to "event" for a patch that gets blasted > away in the end anyways. [Jim] > - Add patches to fix RDPMC emulation and to test the behavior on Intel. > I spot tested on AMD and spent ~30 minutes trying to squeeze in the > bare minimum AMD support, but the PMU implementations between Intel > and AMD are juuuust different enough to make adding AMD support non- > trivial, and this series is already way too big. > > v7: > - https://lore.kernel.org/all/20231108003135.546002-1-seanjc@google.com > - Drop patches that unnecessarily sanitized supported CPUID. [Jim] > - Purge the array of architectural event encodings. [Jim, Dapeng] > - Clean up pmu.h to remove useless macros, and make it easier to use the > new macros. [Jim] > - Port more of pmu_event_filter_test.c to pmu.h macros. [Jim, Jinrong] > - Clean up test comments and error messages. [Jim] > - Sanity check the value provided to vcpu_set_cpuid_property(). [Jim] > > v6: > - https://lore.kernel.org/all/20231104000239.367005-1-seanjc@google.com > - Test LLC references/misses with CFLUSH{OPT}. [Jim] > - Make the tests play nice without PERF_CAPABILITIES. [Mingwei] > - Don't squash eventsels that happen to match an unsupported arch event. [Kan] > - Test PMC counters with forced emulation (don't ask how long it took me to > figure out how to read integer module params). > > v5: https://lore.kernel.org/all/20231024002633.2540714-1-seanjc@google.com > v4: https://lore.kernel.org/all/20230911114347.85882-1-cloudliang@tencent.com > v3: https://lore.kernel.org/kvm/20230814115108.45741-1-cloudliang@tencent.com > > Jinrong Liang (7): > KVM: selftests: Add vcpu_set_cpuid_property() to set properties > KVM: selftests: Add pmu.h and lib/pmu.c for common PMU assets > KVM: selftests: Test Intel PMU architectural events on gp counters > KVM: selftests: Test Intel PMU architectural events on fixed counters > KVM: selftests: Test consistency of CPUID with num of gp counters > KVM: selftests: Test consistency of CPUID with num of fixed counters > KVM: selftests: Add functional test for Intel's fixed PMU counters > > Sean Christopherson (22): > KVM: x86/pmu: Always treat Fixed counters as available when supported > KVM: x86/pmu: Allow programming events that match unsupported arch > events > KVM: x86/pmu: Remove KVM's enumeration of Intel's architectural > encodings > KVM: x86/pmu: Setup fixed counters' eventsel during PMU initialization > KVM: x86/pmu: Get eventsel for fixed counters from perf > KVM: x86/pmu: Don't ignore bits 31:30 for RDPMC index on AMD > KVM: x86/pmu: Prioritize VMX interception over #GP on RDPMC due to bad > index > KVM: x86/pmu: Apply "fast" RDPMC only to Intel PMUs > KVM: x86/pmu: Disallow "fast" RDPMC for architectural Intel PMUs > KVM: x86/pmu: Treat "fixed" PMU type in RDPMC as index as a value, not > flag > KVM: x86/pmu: Explicitly check for RDPMC of unsupported Intel PMC > types > KVM: selftests: Drop the "name" param from KVM_X86_PMU_FEATURE() > KVM: selftests: Extend {kvm,this}_pmu_has() to support fixed counters > KVM: selftests: Expand PMU counters test to verify LLC events > KVM: selftests: Add a helper to query if the PMU module param is > enabled > KVM: selftests: Add helpers to read integer module params > KVM: selftests: Query module param to detect FEP in MSR filtering test > KVM: selftests: Move KVM_FEP macro into common library header > KVM: selftests: Test PMC virtualization with forced emulation > KVM: selftests: Add a forced emulation variation of KVM_ASM_SAFE() > KVM: selftests: Add helpers for safe and safe+forced RDMSR, RDPMC, and > XGETBV > KVM: selftests: Extend PMU counters test to validate RDPMC after WRMSR > > arch/x86/include/asm/kvm-x86-pmu-ops.h | 3 +- > arch/x86/kvm/emulate.c | 2 +- > arch/x86/kvm/kvm_emulate.h | 2 +- > arch/x86/kvm/pmu.c | 20 +- > arch/x86/kvm/pmu.h | 5 +- > arch/x86/kvm/svm/pmu.c | 17 +- > arch/x86/kvm/vmx/pmu_intel.c | 178 +++-- > arch/x86/kvm/x86.c | 9 +- > tools/testing/selftests/kvm/Makefile | 2 + > .../selftests/kvm/include/kvm_util_base.h | 4 + > tools/testing/selftests/kvm/include/pmu.h | 97 +++ > .../selftests/kvm/include/x86_64/processor.h | 148 ++++- > tools/testing/selftests/kvm/lib/kvm_util.c | 62 +- > tools/testing/selftests/kvm/lib/pmu.c | 31 + > .../selftests/kvm/lib/x86_64/processor.c | 15 +- > .../selftests/kvm/x86_64/pmu_counters_test.c | 617 ++++++++++++++++++ > .../kvm/x86_64/pmu_event_filter_test.c | 143 ++-- > .../smaller_maxphyaddr_emulation_test.c | 2 +- > .../kvm/x86_64/userspace_msr_exit_test.c | 29 +- > .../selftests/kvm/x86_64/vmx_pmu_caps_test.c | 2 +- > 20 files changed, 1097 insertions(+), 291 deletions(-) > create mode 100644 tools/testing/selftests/kvm/include/pmu.h > create mode 100644 tools/testing/selftests/kvm/lib/pmu.c > create mode 100644 tools/testing/selftests/kvm/x86_64/pmu_counters_test.c > > > base-commit: 1c6d984f523f67ecfad1083bb04c55d91977bb15 pmu_counters_test passes on Intel Sapphire Rapids platform. Tested-by:  Dapeng Mi