From patchwork Fri Nov 10 02:12:57 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 163744 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b129:0:b0:403:3b70:6f57 with SMTP id q9csp837935vqs; Thu, 9 Nov 2023 18:16:41 -0800 (PST) X-Google-Smtp-Source: AGHT+IHTD9GYhqB0+9PdGrYvH/HurmMsUzh3YUuM/bNNePlT4YPJltdQAfXCQpBDwQeEykgGH4NU X-Received: by 2002:a05:6808:179e:b0:3ad:f536:2f26 with SMTP id bg30-20020a056808179e00b003adf5362f26mr4215656oib.18.1699582601535; Thu, 09 Nov 2023 18:16:41 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1699582601; cv=none; d=google.com; s=arc-20160816; b=ON0i5lCn9C6G7yBrPNthegy+G21+8oElpjNws032jqoOrCnW4iTG8otr3zq7afhiZq +rF7hlSQQjBw7ZYF7n4XwBY12F13/hK184EJnPSg+XLLb9/mR1qCI/PNe5pUShbw0BDK qUOq5795LQc58lCehhFgbdsmNKYlJtDzYtNzK1h9H9P8OqiyDSwLRj2mqRu/szYkDEYQ XvuZ1GIpRTUndzSSiE8VUYz5/3wFvaWv5uMGJHeoZJwtcpJqVvP0w4e5ifYCf55VA4/x YauP/g0ueMXrz91wnONo6qgTDXLYEBr79BNTt243oJy/pxjs/HaWBsoA8asqdPc+Jyn6 5JkA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=JH9+qpUXl836Ph+awMmTwSGh8Ty89oPMRk1LH3tw8s4=; fh=gm96CM+cG0KJxn7vnhn0c1c98ILNP1HHUrKfrGecw3M=; b=KgtFUxgXTdUi9UNQrtJfSDJn50eDsSAh3a5tibF7p8YoYEqlyPyFboGEMeI3qe3ior 95zfEvvrzwvhh2Qx9G6xF/4STkCTpRMoclLZ0PzbxCP5b4BUSv2tahjbVtsVTkfI41hM IxyZQNe04yieFpTjaJRv3DgCku5vnEHGCZ3emi2lOow7fbgKBsLzE/8cMEw9GZCUC4Rn Wz7PD6tXgOTbpzPAYKi52q0Xo5rJMX5fhXRtvqEFQyoFc+QflG4Oy7tptA0Uk0flXleL JNc0BcgwKeiw4SlV9FXutpBKbSxie2E5MDKy2AOSmvDRv4TJNerobBX+bdRfvAtxmIIv P0rQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=U5mwE0HK; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from agentk.vger.email (agentk.vger.email. [23.128.96.32]) by mx.google.com with ESMTPS id k63-20020a633d42000000b005b92b8e70f1si8163401pga.27.2023.11.09.18.16.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Nov 2023 18:16:41 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) client-ip=23.128.96.32; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=U5mwE0HK; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by agentk.vger.email (Postfix) with ESMTP id 0003C8090EB6; Thu, 9 Nov 2023 18:15:17 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at agentk.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1345789AbjKJCOr (ORCPT + 30 others); Thu, 9 Nov 2023 21:14:47 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59070 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234983AbjKJCOT (ORCPT ); Thu, 9 Nov 2023 21:14:19 -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 3BCC04C38 for ; Thu, 9 Nov 2023 18:13:46 -0800 (PST) Received: by mail-pj1-x1049.google.com with SMTP id 98e67ed59e1d1-28047dbd6dcso1733529a91.0 for ; Thu, 09 Nov 2023 18:13:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1699582426; x=1700187226; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=JH9+qpUXl836Ph+awMmTwSGh8Ty89oPMRk1LH3tw8s4=; b=U5mwE0HKUK4wWia7KWOs+sRqcQy6ImyUbbQIakpNYTH45YOdXze0K14XrNHwr8RRG5 bCtVZZUHlMsKtxlsb3Y9SmNPH0knDNFbD1BFyfelTG72vn64mq2C6jOrTwvhJObP/H2a hlUQmYDmq22eigaxFP6otUMQMZoEv10coOxLsd3z6Q+D8O0bDO2YRNAxlL5P0g3q3VVP kGhCvJq3OhBJLuJqNL7MIyvz/EsYKvhEXxqXsl3Rwg5va5uwF82RgSg9jO7FufumDBsF 7cT9i1zfW7Rm2OL3xjqOt73tnLhqlOuo7L4qE7yQfGHTrQaaIhpEauybF5RNi736GdwL lPRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699582426; x=1700187226; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=JH9+qpUXl836Ph+awMmTwSGh8Ty89oPMRk1LH3tw8s4=; b=EwSYgwUCeU3agafxNpUMzKDwGMDYCF9Aso7M6zVfIE3W3YGFidPCbO36VazTq8gBlO ACi5YoFDfzwlrL6FwjSmykTvFqilc52iYlzRVvcr53GvJYb4G7UKBk+lZ8RCbTzZS93q FJxVxCcr5IZzknStzpVdFgYcOK2UBM77dnTSe8PEEzjU2c/zot8848gDXzjwU8TYnotj EYQQPjq2bg1mfP98T2f1ljvp+1483ePkxrJiZ/2sdNI0K3lRJyBhi/094fPiwh2gty7h jQOndLbIfI68AII8hmWdVGGQqDDaLV9PTqXUHVMyGy38Huxwvv6kHuFCT8v5w8Mg1jFa QCfg== X-Gm-Message-State: AOJu0YyFGNQ5Dt+iftsE9FGrghyOhhfXjNCaV5RjX3sAptlJRd8Ws64w qTGxWx5J0QQeJJzchXK7DVGxpbvvF/w= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:90a:69a4:b0:27c:ff2d:418 with SMTP id s33-20020a17090a69a400b0027cff2d0418mr827687pjj.6.1699582425767; Thu, 09 Nov 2023 18:13:45 -0800 (PST) Reply-To: Sean Christopherson Date: Thu, 9 Nov 2023 18:12:57 -0800 In-Reply-To: <20231110021306.1269082-1-seanjc@google.com> Mime-Version: 1.0 References: <20231110021306.1269082-1-seanjc@google.com> X-Mailer: git-send-email 2.42.0.869.gea05f2083d-goog Message-ID: <20231110021306.1269082-18-seanjc@google.com> Subject: [PATCH v8 17/26] KVM: selftests: Add functional test for Intel's fixed PMU counters From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Kan Liang , Dapeng Mi , Jim Mattson , Jinrong Liang , Aaron Lewis , Like Xu Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (agentk.vger.email [0.0.0.0]); Thu, 09 Nov 2023 18:15:18 -0800 (PST) X-Spam-Status: No, score=-8.4 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE, USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on agentk.vger.email X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1782141525779946017 X-GMAIL-MSGID: 1782141525779946017 From: Jinrong Liang Extend the fixed counters test to verify that supported counters can actually be enabled in the control MSRs, that unsupported counters cannot, and that enabled counters actually count. Co-developed-by: Like Xu Signed-off-by: Like Xu Signed-off-by: Jinrong Liang [sean: fold into the rd/wr access test, massage changelog] Reviewed-by: Dapeng Mi Signed-off-by: Sean Christopherson --- .../selftests/kvm/x86_64/pmu_counters_test.c | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/kvm/x86_64/pmu_counters_test.c b/tools/testing/selftests/kvm/x86_64/pmu_counters_test.c index b07294af71a3..f5dedd112471 100644 --- a/tools/testing/selftests/kvm/x86_64/pmu_counters_test.c +++ b/tools/testing/selftests/kvm/x86_64/pmu_counters_test.c @@ -332,7 +332,6 @@ static void guest_rd_wr_counters(uint32_t base_msr, uint8_t nr_possible_counters vector = wrmsr_safe(msr, 0); GUEST_ASSERT_PMC_MSR_ACCESS(WRMSR, msr, expect_gp, vector); } - GUEST_DONE(); } static void guest_test_gp_counters(void) @@ -350,6 +349,7 @@ static void guest_test_gp_counters(void) base_msr = MSR_IA32_PERFCTR0; guest_rd_wr_counters(base_msr, MAX_NR_GP_COUNTERS, nr_gp_counters, 0); + GUEST_DONE(); } static void test_gp_counters(uint8_t pmu_version, uint64_t perf_capabilities, @@ -373,6 +373,7 @@ static void guest_test_fixed_counters(void) { uint64_t supported_bitmask = 0; uint8_t nr_fixed_counters = 0; + uint8_t i; /* Fixed counters require Architectural vPMU Version 2+. */ if (guest_get_pmu_version() >= 2) @@ -387,6 +388,34 @@ static void guest_test_fixed_counters(void) guest_rd_wr_counters(MSR_CORE_PERF_FIXED_CTR0, MAX_NR_FIXED_COUNTERS, nr_fixed_counters, supported_bitmask); + + for (i = 0; i < MAX_NR_FIXED_COUNTERS; i++) { + uint8_t vector; + uint64_t val; + + if (i >= nr_fixed_counters && !(supported_bitmask & BIT_ULL(i))) { + vector = wrmsr_safe(MSR_CORE_PERF_FIXED_CTR_CTRL, + FIXED_PMC_CTRL(i, FIXED_PMC_KERNEL)); + __GUEST_ASSERT(vector == GP_VECTOR, + "Expected #GP for counter %u in FIXED_CTR_CTRL", i); + + vector = wrmsr_safe(MSR_CORE_PERF_GLOBAL_CTRL, + FIXED_PMC_GLOBAL_CTRL_ENABLE(i)); + __GUEST_ASSERT(vector == GP_VECTOR, + "Expected #GP for counter %u in PERF_GLOBAL_CTRL", i); + continue; + } + + wrmsr(MSR_CORE_PERF_FIXED_CTR0 + i, 0); + wrmsr(MSR_CORE_PERF_FIXED_CTR_CTRL, FIXED_PMC_CTRL(i, FIXED_PMC_KERNEL)); + wrmsr(MSR_CORE_PERF_GLOBAL_CTRL, FIXED_PMC_GLOBAL_CTRL_ENABLE(i)); + __asm__ __volatile__("loop ." : "+c"((int){NUM_BRANCHES})); + wrmsr(MSR_CORE_PERF_GLOBAL_CTRL, 0); + val = rdmsr(MSR_CORE_PERF_FIXED_CTR0 + i); + + GUEST_ASSERT_NE(val, 0); + } + GUEST_DONE(); } static void test_fixed_counters(uint8_t pmu_version, uint64_t perf_capabilities,