Hi Shaoqin,
On 2/2/24 03:56, Shaoqin Huang wrote:
Add the invalid filter test includes sets the filter beyond the event
s/includes/which
space and sets the invalid action to double check if the KVM_ARM_VCPU_PMU_V3_FILTER will return the expected error.
Signed-off-by: Shaoqin Huang shahuang@redhat.com
.../kvm/aarch64/pmu_event_filter_test.c | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+)
diff --git a/tools/testing/selftests/kvm/aarch64/pmu_event_filter_test.c b/tools/testing/selftests/kvm/aarch64/pmu_event_filter_test.c index d280382f362f..68e1f2003312 100644 --- a/tools/testing/selftests/kvm/aarch64/pmu_event_filter_test.c +++ b/tools/testing/selftests/kvm/aarch64/pmu_event_filter_test.c @@ -7,6 +7,7 @@
- This test checks if the guest only see the limited pmu event that userspace
- sets, if the guest can use those events which user allow, and if the guest
- can't use those events which user deny.
*/
- It also checks that setting invalid filter ranges return the expected error.
- This test runs only when KVM_CAP_ARM_PMU_V3, KVM_ARM_VCPU_PMU_V3_FILTER
- is supported on the host.
@@ -183,6 +184,39 @@ static void for_each_test(void) run_test(t); } +static void set_invalid_filter(struct vpmu_vm *vm, void *arg) +{
- struct kvm_pmu_event_filter invalid;
- struct kvm_device_attr attr = {
.group = KVM_ARM_VCPU_PMU_V3_CTRL,
.attr = KVM_ARM_VCPU_PMU_V3_FILTER,
.addr = (uint64_t)&invalid,
- };
- int ret = 0;
- /* The max event number is (1 << 16), set a range largeer than it. */
in practice it is 16b on ARMv8.1 and 10b on ARMv8.0 but obvioulsy the check below works for both ;-)
larger typ
- invalid = __DEFINE_FILTER(BIT(15), BIT(15)+1, 0);
space between "+"
- ret = __vcpu_ioctl(vm->vcpu, KVM_SET_DEVICE_ATTR, &attr);
kvm_device_attr_set() as commented by Oliver
- TEST_ASSERT(ret && errno == EINVAL, "Set Invalid filter range "
"ret = %d, errno = %d (expected ret = -1, errno = EINVAL)",
ret, errno);
- ret = 0;
- /* Set the Invalid action. */
- invalid = __DEFINE_FILTER(0, 1, 3);
- ret = __vcpu_ioctl(vm->vcpu, KVM_SET_DEVICE_ATTR, &attr);
- TEST_ASSERT(ret && errno == EINVAL, "Set Invalid filter action "
"ret = %d, errno = %d (expected ret = -1, errno = EINVAL)",
ret, errno);
+}
+static void test_invalid_filter(void) +{
- vpmu_vm = __create_vpmu_vm(guest_code, set_invalid_filter, NULL);
- destroy_vpmu_vm(vpmu_vm);
+}
static bool kvm_supports_pmu_event_filter(void) { int r; @@ -216,4 +250,6 @@ int main(void) TEST_REQUIRE(host_pmu_supports_events()); for_each_test();
- test_invalid_filter();
}
Thanks
Eric