diff mbox

[i-g-t] igt/perf: add tests to verify create/destroy userspace configs

Message ID 20170707165713.9883-1-lionel.g.landwerlin@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Lionel Landwerlin July 7, 2017, 4:57 p.m. UTC
Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
---
 tests/perf.c | 135 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 135 insertions(+)

Comments

Matthew Auld July 10, 2017, 11:55 a.m. UTC | #1
On 7 July 2017 at 17:57, Lionel Landwerlin
<lionel.g.landwerlin@intel.com> wrote:
> Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
> ---
>  tests/perf.c | 135 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 135 insertions(+)
>
> diff --git a/tests/perf.c b/tests/perf.c
> index db28ba1f..14bbb361 100644
> --- a/tests/perf.c
> +++ b/tests/perf.c
> @@ -146,6 +146,33 @@ enum drm_i915_perf_record_type {
>  };
>  #endif /* !DRM_I915_PERF_OPEN */
>
> +#ifndef DRM_IOCTL_I915_PERF_ADD_CONFIG
> +
> +#define DRM_I915_PERF_ADD_CONFIG       0x37
> +#define DRM_I915_PERF_REMOVE_CONFIG    0x38
> +
> +#define DRM_IOCTL_I915_PERF_ADD_CONFIG DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_PERF_ADD_CONFIG, struct drm_i915_perf_oa_config)
> +#define DRM_IOCTL_I915_PERF_REMOVE_CONFIG      DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_PERF_REMOVE_CONFIG, __u64)
> +
> +/**
> + * Structure to upload perf dynamic configuration into the kernel.
> + */
> +struct drm_i915_perf_oa_config {
> +       /* string formatted like "%08x-%04x-%04x-%04x-%012x" **/
> +       __u64 uuid;
> +
> +       __u32 n_mux_regs;
> +       __u64 mux_regs;
> +
> +       __u32 n_boolean_regs;
> +       __u64 boolean_regs;
> +
> +       __u32 n_flex_regs;
> +       __u64 flex_regs;
> +};
> +
> +#endif /* !DRM_IOCTL_I915_PERF_ADD_CONFIG */
> +
>  struct accumulator {
>  #define MAX_RAW_OA_COUNTERS 62
>         enum drm_i915_oa_format format;
> @@ -4001,6 +4028,108 @@ test_rc6_disable(void)
>         igt_assert_neq(n_events_end - n_events_start, 0);
>  }
>
> +static void
> +test_create_destroy_userspace_invalid_config(void)
> +{
> +       struct drm_i915_perf_oa_config userspace_config;
> +       const char *uuid = "01234567-0123-0123-0123-0123456789ab";
> +       const char *invalid_uuid = "blablabla-wrong";
> +       uint32_t mux_regs[] = { 0x9888 /* NOA_WRITE */, 0x0 };
> +       uint32_t invalid_mux_regs[] = { 0x12345678 /* invalid register */, 0x0 };
Maybe also test for bool/flex?

> +
> +       memset(&userspace_config, 0, sizeof(userspace_config));
> +
> +       /* invalid uuid */
> +       userspace_config.uuid = to_user_pointer(invalid_uuid);
> +       userspace_config.n_mux_regs = 1;
> +       userspace_config.mux_regs = to_user_pointer(mux_regs);
> +       userspace_config.n_boolean_regs = 0;
> +       userspace_config.n_flex_regs = 0;
Test for adding two configs with conflicting uuid's?

> +
> +       do_ioctl_err(drm_fd, DRM_IOCTL_I915_PERF_ADD_CONFIG, &userspace_config, EINVAL);
> +
> +       /* invalid mux_regs */
> +       userspace_config.uuid = to_user_pointer(uuid);
> +       userspace_config.n_mux_regs = 1;
> +       userspace_config.mux_regs = to_user_pointer(invalid_mux_regs);
> +       userspace_config.n_boolean_regs = 0;
> +       userspace_config.n_flex_regs = 0;
> +
> +       do_ioctl_err(drm_fd, DRM_IOCTL_I915_PERF_ADD_CONFIG, &userspace_config, EINVAL);
> +
> +       /* empty config */
> +       userspace_config.uuid = to_user_pointer(uuid);
> +       userspace_config.n_mux_regs = 0;
> +       userspace_config.mux_regs = to_user_pointer(mux_regs);
> +       userspace_config.n_boolean_regs = 0;
> +       userspace_config.n_flex_regs = 0;
> +
> +       do_ioctl_err(drm_fd, DRM_IOCTL_I915_PERF_ADD_CONFIG, &userspace_config, EINVAL);
> +
> +       /* empty config with null pointers */
> +       userspace_config.uuid = to_user_pointer(uuid);
> +       userspace_config.n_mux_regs = 1;
> +       userspace_config.mux_regs = to_user_pointer(NULL);
> +       userspace_config.n_boolean_regs = 2;
> +       userspace_config.boolean_regs = to_user_pointer(NULL);
> +       userspace_config.n_flex_regs = 3;
> +       userspace_config.flex_regs = to_user_pointer(NULL);
> +
> +       do_ioctl_err(drm_fd, DRM_IOCTL_I915_PERF_ADD_CONFIG, &userspace_config, EINVAL);
> +}
Maybe we also want some invalid tests for removing a config?

Also add/remove without root?

> +
> +static void
> +test_create_destroy_userspace_config(void)
> +{
> +       struct drm_i915_perf_oa_config config;
> +       const char *uuid = "01234567-0123-0123-0123-0123456789ab";
> +       uint32_t mux_regs[] = { 0x9888 /* NOA_WRITE */, 0x0 };
> +       int ret;
> +       uint64_t config_id;
int config_id;

> +       uint64_t properties[] = {
> +               DRM_I915_PERF_PROP_OA_METRICS_SET, 0, /* Filled later */
> +
> +               /* OA unit configuration */
> +               DRM_I915_PERF_PROP_SAMPLE_OA, true,
> +               DRM_I915_PERF_PROP_OA_FORMAT, test_oa_format,
> +               DRM_I915_PERF_PROP_OA_EXPONENT, oa_exp_1_millisec,
> +               DRM_I915_PERF_PROP_OA_METRICS_SET
> +       };
> +       struct drm_i915_perf_open_param param = {
> +               .flags = I915_PERF_FLAG_FD_CLOEXEC |
> +               I915_PERF_FLAG_FD_NONBLOCK |
> +               I915_PERF_FLAG_DISABLED,
> +               .num_properties = ARRAY_SIZE(properties) / 2,
> +               .properties_ptr = to_user_pointer(properties),
> +       };
> +       char path[512];
> +
> +       snprintf(path, sizeof(path), "/sys/class/drm/card%d/metrics/%s/id", card, uuid);
> +
> +       /* Destroy previous configuration if present */
> +       if (try_read_u64_file(path, &config_id))
> +         igt_assert(igt_ioctl(drm_fd, DRM_IOCTL_I915_PERF_REMOVE_CONFIG, &config_id) == 0);
> +
> +       config.uuid = (uintptr_t) uuid;
> +
> +       config.n_mux_regs = 1;
> +       config.mux_regs = (uintptr_t) mux_regs;
> +       config.n_boolean_regs = 0;
> +       config.n_flex_regs = 0;
> +
> +       /* Create a new config */
> +       ret = igt_ioctl(drm_fd, DRM_IOCTL_I915_PERF_ADD_CONFIG, &config);
> +       igt_assert(ret > 0); /* Config 0 should be used by the kernel */
> +       config_id = ret;
> +
> +       /* Try to use the new config */
> +       properties[1] = config_id;
> +       stream_fd = __perf_open(drm_fd, &param);
> +       __perf_close(stream_fd);
> +
> +       igt_assert(igt_ioctl(drm_fd, DRM_IOCTL_I915_PERF_REMOVE_CONFIG, &config_id) == 0);
> +}
> +
>  static unsigned
>  read_i915_module_ref(void)
>  {
> @@ -4223,6 +4352,12 @@ igt_main
>         igt_subtest("rc6-disable")
>                 test_rc6_disable();
>
> +       igt_subtest("invalid-userspace-config")
> +               test_create_destroy_userspace_invalid_config();
> +
> +       igt_subtest("create-destroy-userspace-config")
> +               test_create_destroy_userspace_config();
> +
>         igt_fixture {
>                 /* leave sysctl options in their default state... */
>                 write_u64_file("/proc/sys/dev/i915/oa_max_sample_rate", 100000);
> --
> 2.13.2
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Lionel Landwerlin July 13, 2017, 11:12 a.m. UTC | #2
On 10/07/17 12:55, Matthew Auld wrote:
> On 7 July 2017 at 17:57, Lionel Landwerlin
> <lionel.g.landwerlin@intel.com> wrote:
>> Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
>> ---
>>   tests/perf.c | 135 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>>   1 file changed, 135 insertions(+)
>>
>> diff --git a/tests/perf.c b/tests/perf.c
>> index db28ba1f..14bbb361 100644
>> --- a/tests/perf.c
>> +++ b/tests/perf.c
>> @@ -146,6 +146,33 @@ enum drm_i915_perf_record_type {
>>   };
>>   #endif /* !DRM_I915_PERF_OPEN */
>>
>> +#ifndef DRM_IOCTL_I915_PERF_ADD_CONFIG
>> +
>> +#define DRM_I915_PERF_ADD_CONFIG       0x37
>> +#define DRM_I915_PERF_REMOVE_CONFIG    0x38
>> +
>> +#define DRM_IOCTL_I915_PERF_ADD_CONFIG DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_PERF_ADD_CONFIG, struct drm_i915_perf_oa_config)
>> +#define DRM_IOCTL_I915_PERF_REMOVE_CONFIG      DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_PERF_REMOVE_CONFIG, __u64)
>> +
>> +/**
>> + * Structure to upload perf dynamic configuration into the kernel.
>> + */
>> +struct drm_i915_perf_oa_config {
>> +       /* string formatted like "%08x-%04x-%04x-%04x-%012x" **/
>> +       __u64 uuid;
>> +
>> +       __u32 n_mux_regs;
>> +       __u64 mux_regs;
>> +
>> +       __u32 n_boolean_regs;
>> +       __u64 boolean_regs;
>> +
>> +       __u32 n_flex_regs;
>> +       __u64 flex_regs;
>> +};
>> +
>> +#endif /* !DRM_IOCTL_I915_PERF_ADD_CONFIG */
>> +
>>   struct accumulator {
>>   #define MAX_RAW_OA_COUNTERS 62
>>          enum drm_i915_oa_format format;
>> @@ -4001,6 +4028,108 @@ test_rc6_disable(void)
>>          igt_assert_neq(n_events_end - n_events_start, 0);
>>   }
>>
>> +static void
>> +test_create_destroy_userspace_invalid_config(void)
>> +{
>> +       struct drm_i915_perf_oa_config userspace_config;
>> +       const char *uuid = "01234567-0123-0123-0123-0123456789ab";
>> +       const char *invalid_uuid = "blablabla-wrong";
>> +       uint32_t mux_regs[] = { 0x9888 /* NOA_WRITE */, 0x0 };
>> +       uint32_t invalid_mux_regs[] = { 0x12345678 /* invalid register */, 0x0 };
> Maybe also test for bool/flex?

It's a bit tricky because this is per generation stuff...

>
>> +
>> +       memset(&userspace_config, 0, sizeof(userspace_config));
>> +
>> +       /* invalid uuid */
>> +       userspace_config.uuid = to_user_pointer(invalid_uuid);
>> +       userspace_config.n_mux_regs = 1;
>> +       userspace_config.mux_regs = to_user_pointer(mux_regs);
>> +       userspace_config.n_boolean_regs = 0;
>> +       userspace_config.n_flex_regs = 0;
> Test for adding two configs with conflicting uuid's?

Done.

>
>> +
>> +       do_ioctl_err(drm_fd, DRM_IOCTL_I915_PERF_ADD_CONFIG, &userspace_config, EINVAL);
>> +
>> +       /* invalid mux_regs */
>> +       userspace_config.uuid = to_user_pointer(uuid);
>> +       userspace_config.n_mux_regs = 1;
>> +       userspace_config.mux_regs = to_user_pointer(invalid_mux_regs);
>> +       userspace_config.n_boolean_regs = 0;
>> +       userspace_config.n_flex_regs = 0;
>> +
>> +       do_ioctl_err(drm_fd, DRM_IOCTL_I915_PERF_ADD_CONFIG, &userspace_config, EINVAL);
>> +
>> +       /* empty config */
>> +       userspace_config.uuid = to_user_pointer(uuid);
>> +       userspace_config.n_mux_regs = 0;
>> +       userspace_config.mux_regs = to_user_pointer(mux_regs);
>> +       userspace_config.n_boolean_regs = 0;
>> +       userspace_config.n_flex_regs = 0;
>> +
>> +       do_ioctl_err(drm_fd, DRM_IOCTL_I915_PERF_ADD_CONFIG, &userspace_config, EINVAL);
>> +
>> +       /* empty config with null pointers */
>> +       userspace_config.uuid = to_user_pointer(uuid);
>> +       userspace_config.n_mux_regs = 1;
>> +       userspace_config.mux_regs = to_user_pointer(NULL);
>> +       userspace_config.n_boolean_regs = 2;
>> +       userspace_config.boolean_regs = to_user_pointer(NULL);
>> +       userspace_config.n_flex_regs = 3;
>> +       userspace_config.flex_regs = to_user_pointer(NULL);
>> +
>> +       do_ioctl_err(drm_fd, DRM_IOCTL_I915_PERF_ADD_CONFIG, &userspace_config, EINVAL);
>> +}
> Maybe we also want some invalid tests for removing a config?
>
> Also add/remove without root?

Done.

>
>> +
>> +static void
>> +test_create_destroy_userspace_config(void)
>> +{
>> +       struct drm_i915_perf_oa_config config;
>> +       const char *uuid = "01234567-0123-0123-0123-0123456789ab";
>> +       uint32_t mux_regs[] = { 0x9888 /* NOA_WRITE */, 0x0 };
>> +       int ret;
>> +       uint64_t config_id;
> int config_id;

The kernel interface takes a uint64_t.

>
>> +       uint64_t properties[] = {
>> +               DRM_I915_PERF_PROP_OA_METRICS_SET, 0, /* Filled later */
>> +
>> +               /* OA unit configuration */
>> +               DRM_I915_PERF_PROP_SAMPLE_OA, true,
>> +               DRM_I915_PERF_PROP_OA_FORMAT, test_oa_format,
>> +               DRM_I915_PERF_PROP_OA_EXPONENT, oa_exp_1_millisec,
>> +               DRM_I915_PERF_PROP_OA_METRICS_SET
>> +       };
>> +       struct drm_i915_perf_open_param param = {
>> +               .flags = I915_PERF_FLAG_FD_CLOEXEC |
>> +               I915_PERF_FLAG_FD_NONBLOCK |
>> +               I915_PERF_FLAG_DISABLED,
>> +               .num_properties = ARRAY_SIZE(properties) / 2,
>> +               .properties_ptr = to_user_pointer(properties),
>> +       };
>> +       char path[512];
>> +
>> +       snprintf(path, sizeof(path), "/sys/class/drm/card%d/metrics/%s/id", card, uuid);
>> +
>> +       /* Destroy previous configuration if present */
>> +       if (try_read_u64_file(path, &config_id))
>> +         igt_assert(igt_ioctl(drm_fd, DRM_IOCTL_I915_PERF_REMOVE_CONFIG, &config_id) == 0);
>> +
>> +       config.uuid = (uintptr_t) uuid;
>> +
>> +       config.n_mux_regs = 1;
>> +       config.mux_regs = (uintptr_t) mux_regs;
>> +       config.n_boolean_regs = 0;
>> +       config.n_flex_regs = 0;
>> +
>> +       /* Create a new config */
>> +       ret = igt_ioctl(drm_fd, DRM_IOCTL_I915_PERF_ADD_CONFIG, &config);
>> +       igt_assert(ret > 0); /* Config 0 should be used by the kernel */
>> +       config_id = ret;
>> +
>> +       /* Try to use the new config */
>> +       properties[1] = config_id;
>> +       stream_fd = __perf_open(drm_fd, &param);
>> +       __perf_close(stream_fd);
>> +
>> +       igt_assert(igt_ioctl(drm_fd, DRM_IOCTL_I915_PERF_REMOVE_CONFIG, &config_id) == 0);
>> +}
>> +
>>   static unsigned
>>   read_i915_module_ref(void)
>>   {
>> @@ -4223,6 +4352,12 @@ igt_main
>>          igt_subtest("rc6-disable")
>>                  test_rc6_disable();
>>
>> +       igt_subtest("invalid-userspace-config")
>> +               test_create_destroy_userspace_invalid_config();
>> +
>> +       igt_subtest("create-destroy-userspace-config")
>> +               test_create_destroy_userspace_config();
>> +
>>          igt_fixture {
>>                  /* leave sysctl options in their default state... */
>>                  write_u64_file("/proc/sys/dev/i915/oa_max_sample_rate", 100000);
>> --
>> 2.13.2
>>
>> _______________________________________________
>> Intel-gfx mailing list
>> Intel-gfx@lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
diff mbox

Patch

diff --git a/tests/perf.c b/tests/perf.c
index db28ba1f..14bbb361 100644
--- a/tests/perf.c
+++ b/tests/perf.c
@@ -146,6 +146,33 @@  enum drm_i915_perf_record_type {
 };
 #endif /* !DRM_I915_PERF_OPEN */
 
+#ifndef DRM_IOCTL_I915_PERF_ADD_CONFIG
+
+#define DRM_I915_PERF_ADD_CONFIG	0x37
+#define DRM_I915_PERF_REMOVE_CONFIG	0x38
+
+#define DRM_IOCTL_I915_PERF_ADD_CONFIG	DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_PERF_ADD_CONFIG, struct drm_i915_perf_oa_config)
+#define DRM_IOCTL_I915_PERF_REMOVE_CONFIG	DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_PERF_REMOVE_CONFIG, __u64)
+
+/**
+ * Structure to upload perf dynamic configuration into the kernel.
+ */
+struct drm_i915_perf_oa_config {
+	/* string formatted like "%08x-%04x-%04x-%04x-%012x" **/
+	__u64 uuid;
+
+	__u32 n_mux_regs;
+	__u64 mux_regs;
+
+	__u32 n_boolean_regs;
+	__u64 boolean_regs;
+
+	__u32 n_flex_regs;
+	__u64 flex_regs;
+};
+
+#endif /* !DRM_IOCTL_I915_PERF_ADD_CONFIG */
+
 struct accumulator {
 #define MAX_RAW_OA_COUNTERS 62
 	enum drm_i915_oa_format format;
@@ -4001,6 +4028,108 @@  test_rc6_disable(void)
 	igt_assert_neq(n_events_end - n_events_start, 0);
 }
 
+static void
+test_create_destroy_userspace_invalid_config(void)
+{
+	struct drm_i915_perf_oa_config userspace_config;
+	const char *uuid = "01234567-0123-0123-0123-0123456789ab";
+	const char *invalid_uuid = "blablabla-wrong";
+	uint32_t mux_regs[] = { 0x9888 /* NOA_WRITE */, 0x0 };
+	uint32_t invalid_mux_regs[] = { 0x12345678 /* invalid register */, 0x0 };
+
+	memset(&userspace_config, 0, sizeof(userspace_config));
+
+	/* invalid uuid */
+	userspace_config.uuid = to_user_pointer(invalid_uuid);
+	userspace_config.n_mux_regs = 1;
+	userspace_config.mux_regs = to_user_pointer(mux_regs);
+	userspace_config.n_boolean_regs = 0;
+	userspace_config.n_flex_regs = 0;
+
+	do_ioctl_err(drm_fd, DRM_IOCTL_I915_PERF_ADD_CONFIG, &userspace_config, EINVAL);
+
+	/* invalid mux_regs */
+	userspace_config.uuid = to_user_pointer(uuid);
+	userspace_config.n_mux_regs = 1;
+	userspace_config.mux_regs = to_user_pointer(invalid_mux_regs);
+	userspace_config.n_boolean_regs = 0;
+	userspace_config.n_flex_regs = 0;
+
+	do_ioctl_err(drm_fd, DRM_IOCTL_I915_PERF_ADD_CONFIG, &userspace_config, EINVAL);
+
+	/* empty config */
+	userspace_config.uuid = to_user_pointer(uuid);
+	userspace_config.n_mux_regs = 0;
+	userspace_config.mux_regs = to_user_pointer(mux_regs);
+	userspace_config.n_boolean_regs = 0;
+	userspace_config.n_flex_regs = 0;
+
+	do_ioctl_err(drm_fd, DRM_IOCTL_I915_PERF_ADD_CONFIG, &userspace_config, EINVAL);
+
+	/* empty config with null pointers */
+	userspace_config.uuid = to_user_pointer(uuid);
+	userspace_config.n_mux_regs = 1;
+	userspace_config.mux_regs = to_user_pointer(NULL);
+	userspace_config.n_boolean_regs = 2;
+	userspace_config.boolean_regs = to_user_pointer(NULL);
+	userspace_config.n_flex_regs = 3;
+	userspace_config.flex_regs = to_user_pointer(NULL);
+
+	do_ioctl_err(drm_fd, DRM_IOCTL_I915_PERF_ADD_CONFIG, &userspace_config, EINVAL);
+}
+
+static void
+test_create_destroy_userspace_config(void)
+{
+	struct drm_i915_perf_oa_config config;
+	const char *uuid = "01234567-0123-0123-0123-0123456789ab";
+	uint32_t mux_regs[] = { 0x9888 /* NOA_WRITE */, 0x0 };
+	int ret;
+	uint64_t config_id;
+	uint64_t properties[] = {
+		DRM_I915_PERF_PROP_OA_METRICS_SET, 0, /* Filled later */
+
+		/* OA unit configuration */
+		DRM_I915_PERF_PROP_SAMPLE_OA, true,
+		DRM_I915_PERF_PROP_OA_FORMAT, test_oa_format,
+		DRM_I915_PERF_PROP_OA_EXPONENT, oa_exp_1_millisec,
+		DRM_I915_PERF_PROP_OA_METRICS_SET
+	};
+	struct drm_i915_perf_open_param param = {
+		.flags = I915_PERF_FLAG_FD_CLOEXEC |
+		I915_PERF_FLAG_FD_NONBLOCK |
+		I915_PERF_FLAG_DISABLED,
+		.num_properties = ARRAY_SIZE(properties) / 2,
+		.properties_ptr = to_user_pointer(properties),
+	};
+	char path[512];
+
+	snprintf(path, sizeof(path), "/sys/class/drm/card%d/metrics/%s/id", card, uuid);
+
+	/* Destroy previous configuration if present */
+	if (try_read_u64_file(path, &config_id))
+	  igt_assert(igt_ioctl(drm_fd, DRM_IOCTL_I915_PERF_REMOVE_CONFIG, &config_id) == 0);
+
+	config.uuid = (uintptr_t) uuid;
+
+	config.n_mux_regs = 1;
+	config.mux_regs = (uintptr_t) mux_regs;
+	config.n_boolean_regs = 0;
+	config.n_flex_regs = 0;
+
+	/* Create a new config */
+	ret = igt_ioctl(drm_fd, DRM_IOCTL_I915_PERF_ADD_CONFIG, &config);
+	igt_assert(ret > 0); /* Config 0 should be used by the kernel */
+	config_id = ret;
+
+	/* Try to use the new config */
+	properties[1] = config_id;
+	stream_fd = __perf_open(drm_fd, &param);
+	__perf_close(stream_fd);
+
+	igt_assert(igt_ioctl(drm_fd, DRM_IOCTL_I915_PERF_REMOVE_CONFIG, &config_id) == 0);
+}
+
 static unsigned
 read_i915_module_ref(void)
 {
@@ -4223,6 +4352,12 @@  igt_main
 	igt_subtest("rc6-disable")
 		test_rc6_disable();
 
+	igt_subtest("invalid-userspace-config")
+		test_create_destroy_userspace_invalid_config();
+
+	igt_subtest("create-destroy-userspace-config")
+		test_create_destroy_userspace_config();
+
 	igt_fixture {
 		/* leave sysctl options in their default state... */
 		write_u64_file("/proc/sys/dev/i915/oa_max_sample_rate", 100000);