From: Raghavendra Rao Ananta <rananta@google.com>
To: Oliver Upton <oupton@google.com>,
Reiji Watanabe <reijiw@google.com>, Marc Zyngier <maz@kernel.org>,
Ricardo Koller <ricarkol@google.com>,
James Morse <james.morse@arm.com>,
Suzuki K Poulose <suzuki.poulose@arm.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
Jing Zhang <jingzhangos@google.com>,
Colton Lewis <coltonlewis@google.com>,
Raghavendra Rao Anata <rananta@google.com>,
linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev,
linux-kernel@vger.kernel.org, kvm@vger.kernel.org
Subject: [PATCH 12/13] selftests: KVM: aarch64: Add multi-vCPU support for vPMU VM creation
Date: Mon, 13 Feb 2023 18:02:33 +0000 [thread overview]
Message-ID: <20230213180234.2885032-13-rananta@google.com> (raw)
In-Reply-To: <20230213180234.2885032-1-rananta@google.com>
The PMU test's create_vpmu_vm() currently creates a VM with only
one cpu. Extend this to accept a number of cpus as a argument
to create a multi-vCPU VM. This would help the upcoming patches
to test the vPMU context across multiple vCPUs.
No functional change intended.
Signed-off-by: Raghavendra Rao Ananta <rananta@google.com>
---
.../testing/selftests/kvm/aarch64/vpmu_test.c | 82 +++++++++++--------
1 file changed, 49 insertions(+), 33 deletions(-)
diff --git a/tools/testing/selftests/kvm/aarch64/vpmu_test.c b/tools/testing/selftests/kvm/aarch64/vpmu_test.c
index fd00acb9391c8..239fc7e06b3b9 100644
--- a/tools/testing/selftests/kvm/aarch64/vpmu_test.c
+++ b/tools/testing/selftests/kvm/aarch64/vpmu_test.c
@@ -320,7 +320,8 @@ uint64_t op_end_addr;
struct vpmu_vm {
struct kvm_vm *vm;
- struct kvm_vcpu *vcpu;
+ int nr_vcpus;
+ struct kvm_vcpu **vcpus;
int gic_fd;
unsigned long *pmu_filter;
};
@@ -1164,10 +1165,11 @@ set_event_filters(struct kvm_vcpu *vcpu, struct kvm_pmu_event_filter *pmu_event_
return pmu_filter;
}
-/* Create a VM that has one vCPU with PMUv3 configured. */
+/* Create a VM that with PMUv3 configured. */
static struct vpmu_vm *
-create_vpmu_vm(void *guest_code, struct kvm_pmu_event_filter *pmu_event_filters)
+create_vpmu_vm(int nr_vcpus, void *guest_code, struct kvm_pmu_event_filter *pmu_event_filters)
{
+ int i;
struct kvm_vm *vm;
struct kvm_vcpu *vcpu;
struct kvm_vcpu_init init;
@@ -1187,7 +1189,11 @@ create_vpmu_vm(void *guest_code, struct kvm_pmu_event_filter *pmu_event_filters)
vpmu_vm = calloc(1, sizeof(*vpmu_vm));
TEST_ASSERT(vpmu_vm, "Failed to allocate vpmu_vm");
- vpmu_vm->vm = vm = vm_create(1);
+ vpmu_vm->vcpus = calloc(nr_vcpus, sizeof(struct kvm_vcpu *));
+ TEST_ASSERT(vpmu_vm->vcpus, "Failed to allocate kvm_vpus");
+ vpmu_vm->nr_vcpus = nr_vcpus;
+
+ vpmu_vm->vm = vm = vm_create(nr_vcpus);
vm_init_descriptor_tables(vm);
vm_install_exception_handler(vm, VECTOR_IRQ_CURRENT, guest_irq_handler);
@@ -1197,26 +1203,35 @@ create_vpmu_vm(void *guest_code, struct kvm_pmu_event_filter *pmu_event_filters)
guest_sync_handler);
}
- /* Create vCPU with PMUv3 */
+ /* Create vCPUs with PMUv3 */
vm_ioctl(vm, KVM_ARM_PREFERRED_TARGET, &init);
init.features[0] |= (1 << KVM_ARM_VCPU_PMU_V3);
- vpmu_vm->vcpu = vcpu = aarch64_vcpu_add(vm, 0, &init, guest_code);
- vcpu_init_descriptor_tables(vcpu);
- vpmu_vm->gic_fd = vgic_v3_setup(vm, 1, 64, GICD_BASE_GPA, GICR_BASE_GPA);
- /* Make sure that PMUv3 support is indicated in the ID register */
- vcpu_get_reg(vcpu, KVM_ARM64_SYS_REG(SYS_ID_AA64DFR0_EL1), &dfr0);
- pmuver = FIELD_GET(ARM64_FEATURE_MASK(ID_AA64DFR0_PMUVER), dfr0);
- TEST_ASSERT(pmuver != ID_AA64DFR0_PMUVER_IMP_DEF &&
- pmuver >= ID_AA64DFR0_PMUVER_8_0,
- "Unexpected PMUVER (0x%x) on the vCPU with PMUv3", pmuver);
+ for (i = 0; i < nr_vcpus; i++) {
+ vpmu_vm->vcpus[i] = vcpu = aarch64_vcpu_add(vm, i, &init, guest_code);
+ vcpu_init_descriptor_tables(vcpu);
+ }
- /* Initialize vPMU */
- if (pmu_event_filters)
- vpmu_vm->pmu_filter = set_event_filters(vcpu, pmu_event_filters);
+ /* vGIC setup is expected after the vCPUs are created but before the vPMU is initialized */
+ vpmu_vm->gic_fd = vgic_v3_setup(vm, nr_vcpus, 64, GICD_BASE_GPA, GICR_BASE_GPA);
- vcpu_ioctl(vcpu, KVM_SET_DEVICE_ATTR, &irq_attr);
- vcpu_ioctl(vcpu, KVM_SET_DEVICE_ATTR, &init_attr);
+ for (i = 0; i < nr_vcpus; i++) {
+ vcpu = vpmu_vm->vcpus[i];
+
+ /* Make sure that PMUv3 support is indicated in the ID register */
+ vcpu_get_reg(vcpu, KVM_ARM64_SYS_REG(SYS_ID_AA64DFR0_EL1), &dfr0);
+ pmuver = FIELD_GET(ARM64_FEATURE_MASK(ID_AA64DFR0_PMUVER), dfr0);
+ TEST_ASSERT(pmuver != ID_AA64DFR0_PMUVER_IMP_DEF &&
+ pmuver >= ID_AA64DFR0_PMUVER_8_0,
+ "Unexpected PMUVER (0x%x) on the vCPU %d with PMUv3", i, pmuver);
+
+ /* Initialize vPMU */
+ if (pmu_event_filters)
+ vpmu_vm->pmu_filter = set_event_filters(vcpu, pmu_event_filters);
+
+ vcpu_ioctl(vcpu, KVM_SET_DEVICE_ATTR, &irq_attr);
+ vcpu_ioctl(vcpu, KVM_SET_DEVICE_ATTR, &init_attr);
+ }
return vpmu_vm;
}
@@ -1227,6 +1242,7 @@ static void destroy_vpmu_vm(struct vpmu_vm *vpmu_vm)
bitmap_free(vpmu_vm->pmu_filter);
close(vpmu_vm->gic_fd);
kvm_vm_free(vpmu_vm->vm);
+ free(vpmu_vm->vcpus);
free(vpmu_vm);
}
@@ -1264,8 +1280,8 @@ static void run_counter_access_test(uint64_t pmcr_n)
guest_data.expected_pmcr_n = pmcr_n;
pr_debug("Test with pmcr_n %lu\n", pmcr_n);
- vpmu_vm = create_vpmu_vm(guest_code, NULL);
- vcpu = vpmu_vm->vcpu;
+ vpmu_vm = create_vpmu_vm(1, guest_code, NULL);
+ vcpu = vpmu_vm->vcpus[0];
/* Save the initial sp to restore them later to run the guest again */
vcpu_get_reg(vcpu, ARM64_CORE_REG(sp_el1), &sp);
@@ -1309,8 +1325,8 @@ static void run_counter_access_error_test(uint64_t pmcr_n)
guest_data.expected_pmcr_n = pmcr_n;
pr_debug("Error test with pmcr_n %lu (larger than the host)\n", pmcr_n);
- vpmu_vm = create_vpmu_vm(guest_code, NULL);
- vcpu = vpmu_vm->vcpu;
+ vpmu_vm = create_vpmu_vm(1, guest_code, NULL);
+ vcpu = vpmu_vm->vcpus[0];
/* Update the PMCR_EL0.N with @pmcr_n */
vcpu_get_reg(vcpu, KVM_ARM64_SYS_REG(SYS_PMCR_EL0), &pmcr_orig);
@@ -1396,8 +1412,8 @@ static void run_kvm_event_filter_error_tests(void)
};
/* KVM should not allow configuring filters after the PMU is initialized */
- vpmu_vm = create_vpmu_vm(guest_code, NULL);
- ret = __vcpu_ioctl(vpmu_vm->vcpu, KVM_SET_DEVICE_ATTR, &filter_attr);
+ vpmu_vm = create_vpmu_vm(1, guest_code, NULL);
+ ret = __vcpu_ioctl(vpmu_vm->vcpus[0], KVM_SET_DEVICE_ATTR, &filter_attr);
TEST_ASSERT(ret == -1 && errno == EBUSY,
"Failed to disallow setting an event filter after PMU init");
destroy_vpmu_vm(vpmu_vm);
@@ -1427,14 +1443,14 @@ static void run_kvm_event_filter_test(void)
/* Test for valid filter configurations */
for (i = 0; i < ARRAY_SIZE(pmu_event_filters); i++) {
- vpmu_vm = create_vpmu_vm(guest_code, pmu_event_filters[i]);
+ vpmu_vm = create_vpmu_vm(1, guest_code, pmu_event_filters[i]);
vm = vpmu_vm->vm;
pmu_filter_gva = vm_vaddr_alloc(vm, pmu_filter_bmap_sz, KVM_UTIL_MIN_VADDR);
memcpy(addr_gva2hva(vm, pmu_filter_gva), vpmu_vm->pmu_filter, pmu_filter_bmap_sz);
guest_data.pmu_filter = (unsigned long *) pmu_filter_gva;
- run_vcpu(vpmu_vm->vcpu);
+ run_vcpu(vpmu_vm->vcpus[0]);
destroy_vpmu_vm(vpmu_vm);
}
@@ -1449,8 +1465,8 @@ static void run_kvm_evtype_filter_test(void)
guest_data.test_stage = TEST_STAGE_KVM_EVTYPE_FILTER;
- vpmu_vm = create_vpmu_vm(guest_code, NULL);
- run_vcpu(vpmu_vm->vcpu);
+ vpmu_vm = create_vpmu_vm(1, guest_code, NULL);
+ run_vcpu(vpmu_vm->vcpus[0]);
destroy_vpmu_vm(vpmu_vm);
}
@@ -1465,7 +1481,7 @@ static void *run_vcpus_migrate_test_func(void *arg)
struct vcpu_migrate_data *migrate_data = arg;
struct vpmu_vm *vpmu_vm = migrate_data->vpmu_vm;
- run_vcpu(vpmu_vm->vcpu);
+ run_vcpu(vpmu_vm->vcpus[0]);
migrate_data->vcpu_done = true;
return NULL;
@@ -1535,7 +1551,7 @@ static void run_vcpu_migration_test(uint64_t pmcr_n)
guest_data.test_stage = TEST_STAGE_VCPU_MIGRATION;
guest_data.expected_pmcr_n = pmcr_n;
- migrate_data.vpmu_vm = vpmu_vm = create_vpmu_vm(guest_code, NULL);
+ migrate_data.vpmu_vm = vpmu_vm = create_vpmu_vm(1, guest_code, NULL);
/* Initialize random number generation for migrating vCPUs to random pCPUs */
srand(time(NULL));
@@ -1571,8 +1587,8 @@ static uint64_t get_pmcr_n_limit(void)
struct vpmu_vm *vpmu_vm;
uint64_t pmcr;
- vpmu_vm = create_vpmu_vm(guest_code, NULL);
- vcpu_get_reg(vpmu_vm->vcpu, KVM_ARM64_SYS_REG(SYS_PMCR_EL0), &pmcr);
+ vpmu_vm = create_vpmu_vm(1, guest_code, NULL);
+ vcpu_get_reg(vpmu_vm->vcpus[0], KVM_ARM64_SYS_REG(SYS_PMCR_EL0), &pmcr);
destroy_vpmu_vm(vpmu_vm);
return FIELD_GET(ARMV8_PMU_PMCR_N, pmcr);
--
2.39.1.581.gbfd45094c4-goog
WARNING: multiple messages have this Message-ID (diff)
From: Raghavendra Rao Ananta <rananta@google.com>
To: Oliver Upton <oupton@google.com>,
Reiji Watanabe <reijiw@google.com>, Marc Zyngier <maz@kernel.org>,
Ricardo Koller <ricarkol@google.com>,
James Morse <james.morse@arm.com>,
Suzuki K Poulose <suzuki.poulose@arm.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
Jing Zhang <jingzhangos@google.com>,
Colton Lewis <coltonlewis@google.com>,
Raghavendra Rao Anata <rananta@google.com>,
linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev,
linux-kernel@vger.kernel.org, kvm@vger.kernel.org
Subject: [PATCH 12/13] selftests: KVM: aarch64: Add multi-vCPU support for vPMU VM creation
Date: Mon, 13 Feb 2023 18:02:33 +0000 [thread overview]
Message-ID: <20230213180234.2885032-13-rananta@google.com> (raw)
In-Reply-To: <20230213180234.2885032-1-rananta@google.com>
The PMU test's create_vpmu_vm() currently creates a VM with only
one cpu. Extend this to accept a number of cpus as a argument
to create a multi-vCPU VM. This would help the upcoming patches
to test the vPMU context across multiple vCPUs.
No functional change intended.
Signed-off-by: Raghavendra Rao Ananta <rananta@google.com>
---
.../testing/selftests/kvm/aarch64/vpmu_test.c | 82 +++++++++++--------
1 file changed, 49 insertions(+), 33 deletions(-)
diff --git a/tools/testing/selftests/kvm/aarch64/vpmu_test.c b/tools/testing/selftests/kvm/aarch64/vpmu_test.c
index fd00acb9391c8..239fc7e06b3b9 100644
--- a/tools/testing/selftests/kvm/aarch64/vpmu_test.c
+++ b/tools/testing/selftests/kvm/aarch64/vpmu_test.c
@@ -320,7 +320,8 @@ uint64_t op_end_addr;
struct vpmu_vm {
struct kvm_vm *vm;
- struct kvm_vcpu *vcpu;
+ int nr_vcpus;
+ struct kvm_vcpu **vcpus;
int gic_fd;
unsigned long *pmu_filter;
};
@@ -1164,10 +1165,11 @@ set_event_filters(struct kvm_vcpu *vcpu, struct kvm_pmu_event_filter *pmu_event_
return pmu_filter;
}
-/* Create a VM that has one vCPU with PMUv3 configured. */
+/* Create a VM that with PMUv3 configured. */
static struct vpmu_vm *
-create_vpmu_vm(void *guest_code, struct kvm_pmu_event_filter *pmu_event_filters)
+create_vpmu_vm(int nr_vcpus, void *guest_code, struct kvm_pmu_event_filter *pmu_event_filters)
{
+ int i;
struct kvm_vm *vm;
struct kvm_vcpu *vcpu;
struct kvm_vcpu_init init;
@@ -1187,7 +1189,11 @@ create_vpmu_vm(void *guest_code, struct kvm_pmu_event_filter *pmu_event_filters)
vpmu_vm = calloc(1, sizeof(*vpmu_vm));
TEST_ASSERT(vpmu_vm, "Failed to allocate vpmu_vm");
- vpmu_vm->vm = vm = vm_create(1);
+ vpmu_vm->vcpus = calloc(nr_vcpus, sizeof(struct kvm_vcpu *));
+ TEST_ASSERT(vpmu_vm->vcpus, "Failed to allocate kvm_vpus");
+ vpmu_vm->nr_vcpus = nr_vcpus;
+
+ vpmu_vm->vm = vm = vm_create(nr_vcpus);
vm_init_descriptor_tables(vm);
vm_install_exception_handler(vm, VECTOR_IRQ_CURRENT, guest_irq_handler);
@@ -1197,26 +1203,35 @@ create_vpmu_vm(void *guest_code, struct kvm_pmu_event_filter *pmu_event_filters)
guest_sync_handler);
}
- /* Create vCPU with PMUv3 */
+ /* Create vCPUs with PMUv3 */
vm_ioctl(vm, KVM_ARM_PREFERRED_TARGET, &init);
init.features[0] |= (1 << KVM_ARM_VCPU_PMU_V3);
- vpmu_vm->vcpu = vcpu = aarch64_vcpu_add(vm, 0, &init, guest_code);
- vcpu_init_descriptor_tables(vcpu);
- vpmu_vm->gic_fd = vgic_v3_setup(vm, 1, 64, GICD_BASE_GPA, GICR_BASE_GPA);
- /* Make sure that PMUv3 support is indicated in the ID register */
- vcpu_get_reg(vcpu, KVM_ARM64_SYS_REG(SYS_ID_AA64DFR0_EL1), &dfr0);
- pmuver = FIELD_GET(ARM64_FEATURE_MASK(ID_AA64DFR0_PMUVER), dfr0);
- TEST_ASSERT(pmuver != ID_AA64DFR0_PMUVER_IMP_DEF &&
- pmuver >= ID_AA64DFR0_PMUVER_8_0,
- "Unexpected PMUVER (0x%x) on the vCPU with PMUv3", pmuver);
+ for (i = 0; i < nr_vcpus; i++) {
+ vpmu_vm->vcpus[i] = vcpu = aarch64_vcpu_add(vm, i, &init, guest_code);
+ vcpu_init_descriptor_tables(vcpu);
+ }
- /* Initialize vPMU */
- if (pmu_event_filters)
- vpmu_vm->pmu_filter = set_event_filters(vcpu, pmu_event_filters);
+ /* vGIC setup is expected after the vCPUs are created but before the vPMU is initialized */
+ vpmu_vm->gic_fd = vgic_v3_setup(vm, nr_vcpus, 64, GICD_BASE_GPA, GICR_BASE_GPA);
- vcpu_ioctl(vcpu, KVM_SET_DEVICE_ATTR, &irq_attr);
- vcpu_ioctl(vcpu, KVM_SET_DEVICE_ATTR, &init_attr);
+ for (i = 0; i < nr_vcpus; i++) {
+ vcpu = vpmu_vm->vcpus[i];
+
+ /* Make sure that PMUv3 support is indicated in the ID register */
+ vcpu_get_reg(vcpu, KVM_ARM64_SYS_REG(SYS_ID_AA64DFR0_EL1), &dfr0);
+ pmuver = FIELD_GET(ARM64_FEATURE_MASK(ID_AA64DFR0_PMUVER), dfr0);
+ TEST_ASSERT(pmuver != ID_AA64DFR0_PMUVER_IMP_DEF &&
+ pmuver >= ID_AA64DFR0_PMUVER_8_0,
+ "Unexpected PMUVER (0x%x) on the vCPU %d with PMUv3", i, pmuver);
+
+ /* Initialize vPMU */
+ if (pmu_event_filters)
+ vpmu_vm->pmu_filter = set_event_filters(vcpu, pmu_event_filters);
+
+ vcpu_ioctl(vcpu, KVM_SET_DEVICE_ATTR, &irq_attr);
+ vcpu_ioctl(vcpu, KVM_SET_DEVICE_ATTR, &init_attr);
+ }
return vpmu_vm;
}
@@ -1227,6 +1242,7 @@ static void destroy_vpmu_vm(struct vpmu_vm *vpmu_vm)
bitmap_free(vpmu_vm->pmu_filter);
close(vpmu_vm->gic_fd);
kvm_vm_free(vpmu_vm->vm);
+ free(vpmu_vm->vcpus);
free(vpmu_vm);
}
@@ -1264,8 +1280,8 @@ static void run_counter_access_test(uint64_t pmcr_n)
guest_data.expected_pmcr_n = pmcr_n;
pr_debug("Test with pmcr_n %lu\n", pmcr_n);
- vpmu_vm = create_vpmu_vm(guest_code, NULL);
- vcpu = vpmu_vm->vcpu;
+ vpmu_vm = create_vpmu_vm(1, guest_code, NULL);
+ vcpu = vpmu_vm->vcpus[0];
/* Save the initial sp to restore them later to run the guest again */
vcpu_get_reg(vcpu, ARM64_CORE_REG(sp_el1), &sp);
@@ -1309,8 +1325,8 @@ static void run_counter_access_error_test(uint64_t pmcr_n)
guest_data.expected_pmcr_n = pmcr_n;
pr_debug("Error test with pmcr_n %lu (larger than the host)\n", pmcr_n);
- vpmu_vm = create_vpmu_vm(guest_code, NULL);
- vcpu = vpmu_vm->vcpu;
+ vpmu_vm = create_vpmu_vm(1, guest_code, NULL);
+ vcpu = vpmu_vm->vcpus[0];
/* Update the PMCR_EL0.N with @pmcr_n */
vcpu_get_reg(vcpu, KVM_ARM64_SYS_REG(SYS_PMCR_EL0), &pmcr_orig);
@@ -1396,8 +1412,8 @@ static void run_kvm_event_filter_error_tests(void)
};
/* KVM should not allow configuring filters after the PMU is initialized */
- vpmu_vm = create_vpmu_vm(guest_code, NULL);
- ret = __vcpu_ioctl(vpmu_vm->vcpu, KVM_SET_DEVICE_ATTR, &filter_attr);
+ vpmu_vm = create_vpmu_vm(1, guest_code, NULL);
+ ret = __vcpu_ioctl(vpmu_vm->vcpus[0], KVM_SET_DEVICE_ATTR, &filter_attr);
TEST_ASSERT(ret == -1 && errno == EBUSY,
"Failed to disallow setting an event filter after PMU init");
destroy_vpmu_vm(vpmu_vm);
@@ -1427,14 +1443,14 @@ static void run_kvm_event_filter_test(void)
/* Test for valid filter configurations */
for (i = 0; i < ARRAY_SIZE(pmu_event_filters); i++) {
- vpmu_vm = create_vpmu_vm(guest_code, pmu_event_filters[i]);
+ vpmu_vm = create_vpmu_vm(1, guest_code, pmu_event_filters[i]);
vm = vpmu_vm->vm;
pmu_filter_gva = vm_vaddr_alloc(vm, pmu_filter_bmap_sz, KVM_UTIL_MIN_VADDR);
memcpy(addr_gva2hva(vm, pmu_filter_gva), vpmu_vm->pmu_filter, pmu_filter_bmap_sz);
guest_data.pmu_filter = (unsigned long *) pmu_filter_gva;
- run_vcpu(vpmu_vm->vcpu);
+ run_vcpu(vpmu_vm->vcpus[0]);
destroy_vpmu_vm(vpmu_vm);
}
@@ -1449,8 +1465,8 @@ static void run_kvm_evtype_filter_test(void)
guest_data.test_stage = TEST_STAGE_KVM_EVTYPE_FILTER;
- vpmu_vm = create_vpmu_vm(guest_code, NULL);
- run_vcpu(vpmu_vm->vcpu);
+ vpmu_vm = create_vpmu_vm(1, guest_code, NULL);
+ run_vcpu(vpmu_vm->vcpus[0]);
destroy_vpmu_vm(vpmu_vm);
}
@@ -1465,7 +1481,7 @@ static void *run_vcpus_migrate_test_func(void *arg)
struct vcpu_migrate_data *migrate_data = arg;
struct vpmu_vm *vpmu_vm = migrate_data->vpmu_vm;
- run_vcpu(vpmu_vm->vcpu);
+ run_vcpu(vpmu_vm->vcpus[0]);
migrate_data->vcpu_done = true;
return NULL;
@@ -1535,7 +1551,7 @@ static void run_vcpu_migration_test(uint64_t pmcr_n)
guest_data.test_stage = TEST_STAGE_VCPU_MIGRATION;
guest_data.expected_pmcr_n = pmcr_n;
- migrate_data.vpmu_vm = vpmu_vm = create_vpmu_vm(guest_code, NULL);
+ migrate_data.vpmu_vm = vpmu_vm = create_vpmu_vm(1, guest_code, NULL);
/* Initialize random number generation for migrating vCPUs to random pCPUs */
srand(time(NULL));
@@ -1571,8 +1587,8 @@ static uint64_t get_pmcr_n_limit(void)
struct vpmu_vm *vpmu_vm;
uint64_t pmcr;
- vpmu_vm = create_vpmu_vm(guest_code, NULL);
- vcpu_get_reg(vpmu_vm->vcpu, KVM_ARM64_SYS_REG(SYS_PMCR_EL0), &pmcr);
+ vpmu_vm = create_vpmu_vm(1, guest_code, NULL);
+ vcpu_get_reg(vpmu_vm->vcpus[0], KVM_ARM64_SYS_REG(SYS_PMCR_EL0), &pmcr);
destroy_vpmu_vm(vpmu_vm);
return FIELD_GET(ARMV8_PMU_PMCR_N, pmcr);
--
2.39.1.581.gbfd45094c4-goog
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2023-02-13 18:02 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-13 18:02 [PATCH 00/13] Extend the vPMU selftest Raghavendra Rao Ananta
2023-02-13 18:02 ` Raghavendra Rao Ananta
2023-02-13 18:02 ` [PATCH 01/13] selftests: KVM: aarch64: Rename vpmu_counter_access.c to vpmu_test.c Raghavendra Rao Ananta
2023-02-13 18:02 ` Raghavendra Rao Ananta
2023-02-13 18:02 ` [PATCH 02/13] selftests: KVM: aarch64: Refactor the vPMU counter access tests Raghavendra Rao Ananta
2023-02-13 18:02 ` Raghavendra Rao Ananta
2023-02-13 18:02 ` [PATCH 03/13] tools: arm64: perf_event: Define Cycle counter enable/overflow bits Raghavendra Rao Ananta
2023-02-13 18:02 ` Raghavendra Rao Ananta
2023-02-13 18:02 ` [PATCH 04/13] selftests: KVM: aarch64: Add PMU cycle counter helpers Raghavendra Rao Ananta
2023-02-13 18:02 ` Raghavendra Rao Ananta
2023-02-13 18:02 ` [PATCH 05/13] selftests: KVM: aarch64: Consider PMU event filters for VM creation Raghavendra Rao Ananta
2023-02-13 18:02 ` Raghavendra Rao Ananta
2023-02-13 18:02 ` [PATCH 06/13] selftests: KVM: aarch64: Add KVM PMU event filter test Raghavendra Rao Ananta
2023-02-13 18:02 ` Raghavendra Rao Ananta
2023-02-13 18:02 ` [PATCH 07/13] selftests: KVM: aarch64: Add KVM EVTYPE filter PMU test Raghavendra Rao Ananta
2023-02-13 18:02 ` Raghavendra Rao Ananta
2023-02-13 18:02 ` [PATCH 08/13] selftests: KVM: aarch64: Add vCPU migration test for PMU Raghavendra Rao Ananta
2023-02-13 18:02 ` Raghavendra Rao Ananta
2023-02-13 18:02 ` [PATCH 09/13] selftests: KVM: aarch64: Test PMU overflow/IRQ functionality Raghavendra Rao Ananta
2023-02-13 18:02 ` Raghavendra Rao Ananta
2023-02-13 18:02 ` [PATCH 10/13] selftests: KVM: aarch64: Test chained events for PMU Raghavendra Rao Ananta
2023-02-13 18:02 ` Raghavendra Rao Ananta
2023-02-13 18:02 ` [PATCH 11/13] selftests: KVM: aarch64: Add PMU test to chain all the counters Raghavendra Rao Ananta
2023-02-13 18:02 ` Raghavendra Rao Ananta
2023-02-13 18:02 ` Raghavendra Rao Ananta [this message]
2023-02-13 18:02 ` [PATCH 12/13] selftests: KVM: aarch64: Add multi-vCPU support for vPMU VM creation Raghavendra Rao Ananta
2023-02-13 18:02 ` [PATCH 13/13] selftests: KVM: aarch64: Extend the vCPU migration test to multi-vCPUs Raghavendra Rao Ananta
2023-02-13 18:02 ` Raghavendra Rao Ananta
2023-02-13 23:39 ` [PATCH 00/13] Extend the vPMU selftest Raghavendra Rao Ananta
2023-02-13 23:39 ` Raghavendra Rao Ananta
2023-02-14 8:19 ` Oliver Upton
2023-02-14 8:19 ` Oliver Upton
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=20230213180234.2885032-13-rananta@google.com \
--to=rananta@google.com \
--cc=coltonlewis@google.com \
--cc=james.morse@arm.com \
--cc=jingzhangos@google.com \
--cc=kvm@vger.kernel.org \
--cc=kvmarm@lists.linux.dev \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=maz@kernel.org \
--cc=oupton@google.com \
--cc=pbonzini@redhat.com \
--cc=reijiw@google.com \
--cc=ricarkol@google.com \
--cc=suzuki.poulose@arm.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.