lkml.org 
[lkml]   [2024]   [Feb]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    SubjectRe: [PATCH v4 5/5] KVM: selftests: aarch64: Add invalid filter test in pmu_event_filter_test
    From
    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


    \
     
     \ /
      Last update: 2024-05-27 15:05    [W:5.117 / U:0.264 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site