From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pf1-f198.google.com (mail-pf1-f198.google.com [209.85.210.198]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 53AF942A170 for ; Tue, 4 Aug 2026 20:40:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.198 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785876052; cv=none; b=eto/9Zcy9nMLM9HP66Z2w4HLWr8aYWRz3pUMystTnUSR3iwxFP6rJUI4/Nvq4v+3ZEf2MdQit5ARct2HPRmrvCXVbHjU5TuQHdXGP2DcswZYt8p9o1PcNwGADZYOYpHLdSuOGv8z/NsY7lDcrnLB6D21JsTEVi8qCHXkLfi9SYI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785876052; c=relaxed/simple; bh=cxsYu/SAZXKKH+qzPWN68EM5LaGATeu0vffi9KXr19s=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=boGLd6nRLE1XkjcBI4rYdw/4rr8s5sNR/aOSv5lBm3Lb7HVnsj2JpI3ZLul/GEumfF6d3OrwLQERP8+tcuYQthJ5k88TZ+O5ZHJmh0V/fV9Jmi6EOBmnhMc3xl+LLdaPsz8GmwRtVSjBA6j/vb1XjYX6f1/1esoc7pYS1hd+EHQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=TwvuqOHq; arc=none smtp.client-ip=209.85.210.198 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="TwvuqOHq" Received: by mail-pf1-f198.google.com with SMTP id d2e1a72fcca58-848662cd2a1so271978b3a.2 for ; Tue, 04 Aug 2026 13:40:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1785876051; x=1786480851; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=UeyWwtdawyJZ7yaU5xxuUItmJbT+/6l6O65XfniG79w=; b=TwvuqOHqX8acnc/yeIchcskRWTh6JwHxId8guASklJJcmB/melTUFhtiZCgHOU4IE8 6HvbySJru8lDtUwNPrufvJJFGHPigXmoRhl3AON+5vFP2zzSb6GcHBFw+m0eXmMDHiWx hg5wx3GEjwy7Fy00VjroICsYUS1CJb5dSsOZd/FaAolQ8WrTky8exmJ+CGlpvCRqwMYP L5bUyie4L1t76GH51dTb5Ok90rg0kgSC93NPE2g7dLBE66mpTflyfPAOaDwhlZsZuuVR y9skT6Jr06Tnmt/JmUhKXEaXg41/yar2USR30jQ2p0jzc9BezklIQ7Kcgg+AFrHxjk/t 7M5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785876051; x=1786480851; h=content-type: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:content-type; bh=UeyWwtdawyJZ7yaU5xxuUItmJbT+/6l6O65XfniG79w=; b=ZFjR3kH2VqfbsF57OJHXliiQGwy+2n7V7qXhA8rmYlpDuZ0+HfVfyvTtXt9zhMvUDN krRUnsnX1zel7KqRb5LYW814os1onBdQEhcH9ulQQd1WoMGSHheF/4Ft773B7nXYRF6K 3WV1BccP6ZWsTQAqJf7Xpn0ww4XOSxzlhmi0mbRzOW9+jAw9GDwrvmvDI9JGibqD/d+0 uuYZtUONgt0Us8Lvdeks4Rc08Yk78og9Y/nIVsv+cN+3f9V6uFrxqAbtmJ3uRfGoEwAd uVbi0N69zmxmIdsT1egIB/Up6aHkQBjdL3NVluxXrskvS7xYsdOm83OxdKVkutyvWsmI 06YQ== X-Forwarded-Encrypted: i=1; AHgh+Rqiy13h5xSjzmrNgEzlhRxemYCir1+lCnQwr5ltoabRJkTWM0PryEt9PzmlthRgh37Pl2rIkoJtVOveyCI=@vger.kernel.org X-Gm-Message-State: AOJu0YyNLZzdYK7EZtcVuW3x9JUPNl5msf5eitm6L31cc6v0xOO94zo8 jig9qielFpl9GxbySqBpVn1aOttFJ01dy3eBgghUTM8fSQkwWDZ62sWqlaR0XKNoAhRe2M1F2gv bJuqrQw== X-Received: from pgvt1.prod.google.com ([2002:a65:64c1:0:b0:c9e:63b8:11b5]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:3cc6:b0:847:9267:2104 with SMTP id d2e1a72fcca58-84f2e031753mr1347845b3a.12.1785876050393; Tue, 04 Aug 2026 13:40:50 -0700 (PDT) Reply-To: Sean Christopherson Date: Tue, 4 Aug 2026 13:40:46 -0700 In-Reply-To: <20260804204048.3401810-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260804204048.3401810-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.571.g244d577d93-goog Message-ID: <20260804204048.3401810-2-seanjc@google.com> Subject: [PATCH v2 1/2] KVM: selftests: Test one random GP counter in PMU arch events testcase From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" To significantly reduce the PMU counter test's runtime, without sacrificing test coverage in the aggregate, test a random GP counter in the arch events testcase instead of testing every possible GP counter. Testing every PMC in every run of the test significantly increases the runtime of the test, without providing an equivalent increase in validation coverage, as the odds of a KVM having a bug that only affected a subset of counters and only when testing all other counters are extremely low. Opportunistically clean up kvm_random_u64_in_range() to eliminate unnecessary newlines. Signed-off-by: Sean Christopherson --- .../testing/selftests/kvm/include/test_util.h | 4 ++-- tools/testing/selftests/kvm/lib/test_util.c | 22 +++++++++++++++---- .../selftests/kvm/x86/pmu_counters_test.c | 18 +++++++-------- 3 files changed, 28 insertions(+), 16 deletions(-) diff --git a/tools/testing/selftests/kvm/include/test_util.h b/tools/testing/selftests/kvm/include/test_util.h index e8356ee54d7b..a6a3e1657895 100644 --- a/tools/testing/selftests/kvm/include/test_util.h +++ b/tools/testing/selftests/kvm/include/test_util.h @@ -135,8 +135,8 @@ static inline u64 kvm_random_u64(struct kvm_random_state *state) return ((u64)kvm_random_u32(state) << 32) | kvm_random_u32(state); } -u64 kvm_random_u64_in_range(struct kvm_random_state *state, u64 min, - u64 max); +u32 kvm_random_u32_in_range(struct kvm_random_state *state, u32 min, u32 max); +u64 kvm_random_u64_in_range(struct kvm_random_state *state, u64 min, u64 max); enum vm_mem_backing_src_type { VM_MEM_SRC_ANONYMOUS, diff --git a/tools/testing/selftests/kvm/lib/test_util.c b/tools/testing/selftests/kvm/lib/test_util.c index 6b00ab11f3c0..4dff72f6bd34 100644 --- a/tools/testing/selftests/kvm/lib/test_util.c +++ b/tools/testing/selftests/kvm/lib/test_util.c @@ -43,12 +43,26 @@ u32 kvm_random_u32(struct kvm_random_state *state) return state->seed; } +/* Returns a random u32 in the inclusive range [min, max] */ +u32 kvm_random_u32_in_range(struct kvm_random_state *state, u32 min, u32 max) +{ + u32 value, range; + + TEST_ASSERT(min <= max, "PEBKAC, min = 0x%x, max = 0x%x", min, max); + + value = kvm_random_u32(state); + + range = max - min; + if (range == UINT_MAX) + return value; + + return min + (value % (range + 1)); +} + /* Returns a random u64 in the inclusive range [min, max] */ -u64 kvm_random_u64_in_range(struct kvm_random_state *state, u64 min, - u64 max) +u64 kvm_random_u64_in_range(struct kvm_random_state *state, u64 min, u64 max) { - u64 value; - u64 range; + u64 value, range; TEST_ASSERT(min <= max, "PEBKAC, min = 0x%lx, max = 0x%lx", min, max); diff --git a/tools/testing/selftests/kvm/x86/pmu_counters_test.c b/tools/testing/selftests/kvm/x86/pmu_counters_test.c index dc6afac3aa91..8abf17cc9469 100644 --- a/tools/testing/selftests/kvm/x86/pmu_counters_test.c +++ b/tools/testing/selftests/kvm/x86/pmu_counters_test.c @@ -273,6 +273,7 @@ static void guest_test_arch_event(u8 idx) struct kvm_x86_pmu_feature gp_event, fixed_event; u32 base_pmc_msr; unsigned int i; + u64 eventsel; /* The host side shouldn't invoke this without a guest PMU. */ GUEST_ASSERT(pmu_version); @@ -287,19 +288,16 @@ static void guest_test_arch_event(u8 idx) GUEST_ASSERT_EQ(idx, gp_event.f.bit); GUEST_ASSERT(nr_gp_counters); + i = kvm_random_u32_in_range(&kvm_rng, 0, nr_gp_counters - 1); - for (i = 0; i < nr_gp_counters; i++) { - u64 eventsel = ARCH_PERFMON_EVENTSEL_OS | - ARCH_PERFMON_EVENTSEL_ENABLE | - intel_pmu_arch_events[idx]; + eventsel = ARCH_PERFMON_EVENTSEL_OS | ARCH_PERFMON_EVENTSEL_ENABLE | + intel_pmu_arch_events[idx]; - wrmsr(MSR_P6_EVNTSEL0 + i, 0); - if (guest_has_perf_global_ctrl) - wrmsr(MSR_CORE_PERF_GLOBAL_CTRL, BIT_ULL(i)); + wrmsr(MSR_P6_EVNTSEL0 + i, 0); + if (guest_has_perf_global_ctrl) + wrmsr(MSR_CORE_PERF_GLOBAL_CTRL, BIT_ULL(i)); - __guest_test_arch_event(idx, i, base_pmc_msr + i, - MSR_P6_EVNTSEL0 + i, eventsel); - } + __guest_test_arch_event(idx, i, base_pmc_msr + i, MSR_P6_EVNTSEL0 + i, eventsel); if (!guest_has_perf_global_ctrl) return; -- 2.55.0.571.g244d577d93-goog