[Intel-gfx] [PATCH v4 i-g-t] igt/perf: add tests to verify create/destroy userspace configs
Lionel Landwerlin
lionel.g.landwerlin at intel.com
Fri Jul 21 17:18:21 UTC 2017
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 at intel.com>
>> ---
>> 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.
More information about the Intel-gfx
mailing list