From patchwork Wed Feb 15 01:07:01 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Raghavendra Rao Ananta X-Patchwork-Id: 13141106 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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 5DA28C05027 for ; Wed, 15 Feb 2023 01:08:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Cc:To:From:Subject:Message-ID: Mime-Version:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To: References:List-Owner; bh=tX6vZziQzQyH54VvaNVqEHrJJmaa/7grMz5YhEw++c8=; b=N3q 3MrNjiqi3rxYWhVwaepCmi8fcJtppCK8LFL3qg2NeB/Vqq1bCmf2cCzqnZXYGBRr/4rORCa/d3Ic5 IRkqEdpj/Ub6KdEbQ2Zf9VpFnUjwkXONOtPa4s3PbMq6A4mlsIy2lE5+mrJs/X3T6guKC9UGMsJQz hae2853/kvSysDduBQ9Zk2w+Jq7pfHWOCbsDwKO8aJh8ciS1av/fN7WnpS1jEngpBUt+rOGUeBdju 8ypSkuBfAphPUngh23CV2rsaykmPVBnVWzsP23IdL3y9/DIEmmftYqeorLGqdBbFrrdV/H4KZLXco EsoPZ8y4SuIjml09VGiDnlcfUec0uUQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1pS6Gd-0048yv-GY; Wed, 15 Feb 2023 01:07:27 +0000 Received: from mail-io1-xd49.google.com ([2607:f8b0:4864:20::d49]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1pS6GZ-0048wj-1Z for linux-arm-kernel@lists.infradead.org; Wed, 15 Feb 2023 01:07:25 +0000 Received: by mail-io1-xd49.google.com with SMTP id r9-20020a0566022b8900b007407df88db0so291290iov.23 for ; Tue, 14 Feb 2023 17:07:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:mime-version:date:from:to:cc:subject :date:message-id:reply-to; bh=IyNPeLOdyUSRCloXmM+8l8tMrO7/92CcJQeGkdKd/vw=; b=a3RFuz2JUP+kYHqqv6Gl99pOIwgDCa05eLIbj2NAByamb9c87BYsdvwxSsltqlpuTj G5bChEn3dvtuU/Zn/BWCKyZk07px3NCmu8Z7Eyewl9O+etu7BOXo/pGAhhwDWb+RofUf UY6O8BrPc0LpoYEbfvBh3vYBSpVnCO+zJ/76Ecmegs8MzRSqk+w1yE103NepU7HN1/6e VwSD+ZVgh1SJWgb7GFmq2TZjZaYbfX9ne88fw/xhK+Lh0frKX3CYWN6CjCp7QgJ66mhA 8ld3bdlRiq0Mh27BOLutcQQ4BHuJ1jQWhO3HqmaP7p3TrxwMal8Rk0LRiM2xuK3+aI3A fsrA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:mime-version:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=IyNPeLOdyUSRCloXmM+8l8tMrO7/92CcJQeGkdKd/vw=; b=2G4Ejr27g25dO5GDvVQKvOjQkHfehpcTL0Lp5EawVhOZ3hJV9LNxhxgwILIavoKwzw 3mJT8cWQm4TvZpXWPqDwqncGyNX37PKxNo0r2UPxwoYYX2YZIOu1+7OwPM8D7xRHjFVO JIGqk/qybboIcsLGLuPtKkHn+suHPMBzI7/UYasOh6JFwFiwcWmoZ1LQD2m30rk73Yqm KJop5YwcPubRLu6a0C9ghgLbOGFM101duLWFbjQhvQQqW2RkfjMRDkA0osHcSdC6bzhn 1zyF88prmIsGUqqgyou1tpkLrv9ZvsQiAAhhzIeESdIkTEcDr5odU01A7BYfFxMUcbk7 R/tA== X-Gm-Message-State: AO0yUKWRkiE6jgLGrlcmSlEd3jmtNL/fi9E3G6gT6G/SP9FlWuaLYsxy z/TyTuCBPZ6JgBNAjrO/384NpdN8Bwrs X-Google-Smtp-Source: AK7set/hhwzs3tBETMRfIHWDYFlERciNM8DL4xWOpJy9YppTznI6bpJLKBiVPnqbNBCyVEoxYd0Fj8xSX5cn X-Received: from rananta-linux.c.googlers.com ([fda3:e722:ac3:cc00:2b:ff92:c0a8:22b5]) (user=rananta job=sendgmr) by 2002:a6b:4015:0:b0:6df:2c9f:f8fc with SMTP id k21-20020a6b4015000000b006df2c9ff8fcmr306048ioa.4.1676423240257; Tue, 14 Feb 2023 17:07:20 -0800 (PST) Date: Wed, 15 Feb 2023 01:07:01 +0000 Mime-Version: 1.0 X-Mailer: git-send-email 2.39.1.581.gbfd45094c4-goog Message-ID: <20230215010717.3612794-1-rananta@google.com> Subject: [REPOST PATCH 00/16] Add support for vPMU selftests From: Raghavendra Rao Ananta To: Oliver Upton , Reiji Watanabe , Marc Zyngier , Ricardo Koller , James Morse , Suzuki K Poulose Cc: Paolo Bonzini , Jing Zhang , Colton Lewis , Raghavendra Rao Anata , linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, linux-kernel@vger.kernel.org, kvm@vger.kernel.org X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230214_170723_128792_9B7CEDEA X-CRM114-Status: GOOD ( 17.79 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Hello, The series aims to add vPMU selftests to improve the test coverage for KVM's PMU emulation. It includes the tests that validates actions from userspace, such as verifying the guest read/write accesses to the PMu registers while limiting the number for PMCs, and allowing or denying certain events via KVM_ARM_VCPU_PMU_V3_FILTER attribute. It also includes tests for KVM's guarding of the PMU attributes to count EL2/EL3 events, and formal KVM behavior that enables PMU emulation. The last part validates the guest expectations of the vPMU by setting up a stress test that force-migrates multiple vCPUs frequently across random pCPUs in the system, thus ensuring KVM's management of vCPU PMU contexts correctly. As suggested by Oliver in my original post of the series [1] (and with Reiji's permission), I'm re-posting the series to include the selftest patches from Reiji's series that aims to limit the number of PMCs for the guest [2]. Patches 1-4 are unmodified patches 11-14 from Reiji's series [2], which introduces the vPMU selftests that adds a test to validate the read/write functionalities for the guest accesses to the implemented and unimplemented counters. Patch-5 refactors the existing tests for plugging-in the upcoming tests easily and rename the test file to a more generic name. Patch-6 and 7 add helper macros and functions respectively to interact with the cycle counter. Patch-8 extends create_vpmu_vm() to accept an array of event filters as an argument that are to be applied to the VM. Patch-9 tests the KVM_ARM_VCPU_PMU_V3_FILTER attribute by scripting various combinations of events that are to be allowed or denied to the guest and verifying guest's behavior. Patch-10 adds test to validate KVM's handling of guest requests to count events in EL2/EL3. Patch-11 introduces the vCPU migration stress testing by validating cycle counter and general purpose counter's behavior across vCPU migrations. Patch-12, 13, and 14 expands the tests in patch-8 to validate overflow/IRQ functionality, chained events, and occupancy of all the PMU counters, respectively. Patch-15 extends create_vpmu_vm() to create multiple vCPUs for the VM. Patch-16 expands the stress tests for multiple vCPUs. The series has been tested on hardwares with PMUv3p1 and PMUv3p5 on top of v6.2-rc7 plus Reiji's series [2]. Thank you. Raghavendra [1]: https://lore.kernel.org/all/20230213180234.2885032-1-rananta@google.com/ [2]: https://lore.kernel.org/all/20230211031506.4159098-1-reijiw@google.com/ Raghavendra Rao Ananta (12): selftests: KVM: aarch64: Refactor the vPMU counter access tests tools: arm64: perf_event: Define Cycle counter enable/overflow bits selftests: KVM: aarch64: Add PMU cycle counter helpers selftests: KVM: aarch64: Consider PMU event filters for VM creation selftests: KVM: aarch64: Add KVM PMU event filter test selftests: KVM: aarch64: Add KVM EVTYPE filter PMU test selftests: KVM: aarch64: Add vCPU migration test for PMU selftests: KVM: aarch64: Test PMU overflow/IRQ functionality selftests: KVM: aarch64: Test chained events for PMU selftests: KVM: aarch64: Add PMU test to chain all the counters selftests: KVM: aarch64: Add multi-vCPU support for vPMU VM creation selftests: KVM: aarch64: Extend the vCPU migration test to multi-vCPUs Reiji Watanabe (4): tools: arm64: Import perf_event.h KVM: selftests: aarch64: Introduce vpmu_counter_access test KVM: selftests: aarch64: vPMU register test for implemented counters KVM: selftests: aarch64: vPMU register test for unimplemented counters tools/arch/arm64/include/asm/perf_event.h | 265 +++ tools/testing/selftests/kvm/Makefile | 1 + .../testing/selftests/kvm/aarch64/vpmu_test.c | 1710 +++++++++++++++++ .../selftests/kvm/include/aarch64/processor.h | 1 + 4 files changed, 1977 insertions(+) create mode 100644 tools/arch/arm64/include/asm/perf_event.h create mode 100644 tools/testing/selftests/kvm/aarch64/vpmu_test.c