public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Jinrong Liang <ljr.kernel@gmail.com>
To: Sean Christopherson <seanjc@google.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
	Jim Mattson <jmattson@google.com>, Shuah Khan <shuah@kernel.org>,
	Aaron Lewis <aaronlewis@google.com>,
	David Matlack <dmatlack@google.com>,
	Vishal Annapurve <vannapurve@google.com>,
	Wanpeng Li <wanpengli@tencent.com>,
	Like Xu <like.xu.linux@gmail.com>,
	Jinrong Liang <cloudliang@tencent.com>,
	linux-kselftest@vger.kernel.org, kvm@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: [PATCH v3 2/4] KVM: selftests: Test unavailable event filters are rejected
Date: Wed,  7 Jun 2023 20:36:58 +0800	[thread overview]
Message-ID: <20230607123700.40229-3-cloudliang@tencent.com> (raw)
In-Reply-To: <20230607123700.40229-1-cloudliang@tencent.com>

From: Jinrong Liang <cloudliang@tencent.com>

This commit adds test cases for unsupported input values in the
PMU event filter. The tests cover unsupported "action" values,
unsupported "flags" values, and unsupported "nevents" values.
All these cases should return an error, as they are currently
not supported by the filter. Additionally, the patch tests setting
non-exist fixed counters in the fixed bitmap doesn't fail.

Signed-off-by: Jinrong Liang <cloudliang@tencent.com>
---
 .../kvm/x86_64/pmu_event_filter_test.c        | 48 +++++++++++++++++--
 1 file changed, 45 insertions(+), 3 deletions(-)

diff --git a/tools/testing/selftests/kvm/x86_64/pmu_event_filter_test.c b/tools/testing/selftests/kvm/x86_64/pmu_event_filter_test.c
index 26f674c32cde..7555e0f4290c 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
@@ -11,9 +11,7 @@
  */
 
 #define _GNU_SOURCE /* for program_invocation_short_name */
-#include "test_util.h"
-#include "kvm_util.h"
-#include "processor.h"
+#include "pmu.h"
 
 /*
  * In lieu of copying perf_event.h into tools...
@@ -32,6 +30,10 @@
 #define MAX_FILTER_EVENTS	300
 #define MAX_TEST_EVENTS	10
 
+#define PMU_EVENT_FILTER_INVALID_ACTION		(KVM_PMU_EVENT_DENY + 1)
+#define PMU_EVENT_FILTER_INVALID_FLAGS			(KVM_PMU_EVENT_FLAG_MASKED_EVENTS + 1)
+#define PMU_EVENT_FILTER_INVALID_NEVENTS		(MAX_FILTER_EVENTS + 1)
+
 /*
  * This is how the event selector and unit mask are stored in an AMD
  * core performance event-select register. Intel's format is similar,
@@ -762,6 +764,7 @@ static void test_filter_ioctl(struct kvm_vcpu *vcpu)
 {
 	uint64_t e = ~0ul;
 	int r;
+	struct __kvm_pmu_event_filter f;
 
 	/*
 	 * Unfortunately having invalid bits set in event data is expected to
@@ -780,6 +783,45 @@ static void test_filter_ioctl(struct kvm_vcpu *vcpu)
 					KVM_PMU_EVENT_FLAG_MASKED_EVENTS,
 					KVM_PMU_EVENT_ALLOW);
 	TEST_ASSERT(r == 0, "Valid PMU Event Filter is failing");
+
+	/*
+	 * Testing unsupported "action" input values should return an error.
+	 * Currently, only values 0 or 1 are supported.
+	 */
+	f = base_event_filter;
+	f.action = PMU_EVENT_FILTER_INVALID_ACTION;
+	r = do_vcpu_set_pmu_event_filter(vcpu, &f);
+	TEST_ASSERT(r != 0, "Set invalid action is expected to fail.");
+
+	/*
+	 * Testing unsupported "flags" input values should return an error.
+	 * Currently, only values 0 or 1 are supported.
+	 */
+	f = base_event_filter;
+	f.flags = PMU_EVENT_FILTER_INVALID_FLAGS;
+	r = do_vcpu_set_pmu_event_filter(vcpu, &f);
+	TEST_ASSERT(r != 0, "Set invalid flags is expected to fail.");
+
+	/*
+	 * Testing unsupported "nevents" input values should return an error.
+	 * Currently, only values less than or equal to
+	 * MAX_FILTER_EVENTS are supported.
+	 */
+	f = base_event_filter;
+	f.nevents = PMU_EVENT_FILTER_INVALID_NEVENTS;
+	r = do_vcpu_set_pmu_event_filter(vcpu, &f);
+	TEST_ASSERT(r != 0,
+		    "Setting PMU event filters that exceeds the maximum supported value should fail");
+
+	/*
+	 * In this case, setting non-exist fixed counters in the fixed bitmap
+	 * doesn't fail.
+	 */
+	f = base_event_filter;
+	f.fixed_counter_bitmap = ~GENMASK_ULL(X86_INTEL_MAX_FIXED_CTR_NUM, 0);
+	r = do_vcpu_set_pmu_event_filter(vcpu, &f);
+	TEST_ASSERT(r == 0,
+		    "Setting invalid or non-exist fixed cunters in the fixed bitmap fail.");
 }
 
 int main(int argc, char *argv[])
-- 
2.31.1


  parent reply	other threads:[~2023-06-07 12:38 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-07 12:36 [PATCH v3 0/4] KVM: selftests: Improve PMU event filter settings and add test cases Jinrong Liang
2023-06-07 12:36 ` [PATCH v3 1/4] KVM: selftests: Introduce __kvm_pmu_event_filter to improved event filter settings Jinrong Liang
2023-06-28 21:19   ` Sean Christopherson
2023-06-30  2:47     ` Jinrong Liang
2023-06-07 12:36 ` Jinrong Liang [this message]
2023-06-28 21:26   ` [PATCH v3 2/4] KVM: selftests: Test unavailable event filters are rejected Sean Christopherson
2023-06-07 12:36 ` [PATCH v3 3/4] KVM: selftests: Check if event filter meets expectations on fixed counters Jinrong Liang
2023-06-28 21:29   ` Sean Christopherson
2023-06-07 12:37 ` [PATCH v3 4/4] KVM: selftests: Test gp event filters don't affect fixed event filters Jinrong Liang
2023-06-28 21:30   ` Sean Christopherson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230607123700.40229-3-cloudliang@tencent.com \
    --to=ljr.kernel@gmail.com \
    --cc=aaronlewis@google.com \
    --cc=cloudliang@tencent.com \
    --cc=dmatlack@google.com \
    --cc=jmattson@google.com \
    --cc=kvm@vger.kernel.org \
    --cc=like.xu.linux@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=pbonzini@redhat.com \
    --cc=seanjc@google.com \
    --cc=shuah@kernel.org \
    --cc=vannapurve@google.com \
    --cc=wanpengli@tencent.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox