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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 18/07/17 19:14, Chris Wilson wrote:
Quoting Lionel Landwerlin (2017-07-18 18:18:52)
v2: Add tests regarding removing configs (Matthew)
     Add tests regarding adding/removing configs without permissions
     (Matthew)

v3: Add some flex registers (Matthew)

v4: memset oa_config to 0 (Lionel)
     Change error code for removing unexisting config EINVAL->ENOENT (Lionel)

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@xxxxxxxxx>
---
  tests/perf.c | 208 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1 file changed, 208 insertions(+)

diff --git a/tests/perf.c b/tests/perf.c
index 1c5cf351..66ec731a 100644
--- a/tests/perf.c
+++ b/tests/perf.c
@@ -146,6 +146,36 @@ 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;
+       __u32 pad0;
+       __u64 mux_regs;
+
+       __u32 n_boolean_regs;
+       __u32 pad1;
+       __u64 boolean_regs;
+
+       __u32 n_flex_regs;
+       __u32 pad2;
+       __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 +4031,175 @@ test_rc6_disable(void)
         igt_assert_neq(n_events_end - n_events_start, 0);
  }

+static void
+test_invalid_userspace_config_create(void)
+{
+       struct drm_i915_perf_oa_config 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(&config, 0, sizeof(config));
+
+       /* invalid uuid */
+       config.uuid = to_user_pointer(invalid_uuid);
+       config.n_mux_regs = 1;
+       config.mux_regs = to_user_pointer(mux_regs);
+       config.n_boolean_regs = 0;
+       config.n_flex_regs = 0;
+
+       do_ioctl_err(drm_fd, DRM_IOCTL_I915_PERF_ADD_CONFIG, &config, EINVAL);
Create little stubs like
int __i915_perf_add_config(int fd, config)
{
	int err;

	err = 0;
	if (igt_ioctl(fd, DRM_IOCTL_I915_PERF_ADD_CONFIG, config))
		err = -errno;
	
	return err;
}

void i915_perf_add_config(int fd, config)
{
	igt_assert_eq(__i915_perf_add_config(fd, config), 0);
}

and here use igt_assert_eq(__i915_perf_add_config(fd, config), -EINVAL);

The benefit is that if you ever do hit the error, the message is much
more understandable than the macro expansion of
DRM_IOCTL_I915_PERF_ADD_CONFIG.
-Chris


Done.


_______________________________________________
Intel-gfx mailing list
Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/intel-gfx




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux