[Intel-gfx] [PATCH i-g-t v2] tests/core_prop_blob: Fix core_prop_blob for android
Thomas Wood
thomas.wood at intel.com
Thu Oct 15 09:04:35 PDT 2015
On 14 October 2015 at 17:23, Derek Morton <derek.j.morton at intel.com> wrote:
> core_prop_blob was using ioctls not in the android kernel. Added a
> igt_require_propblob() function and local defines/structures so the
> test will compile and skip on kernels where the feature is unsupported.
>
> v2: moved igt_require_propblob() to core_prop_blob.c (Daniel Vetter)
> Moved gem_blt.c to a seperate patch (Thomas Wood)
>
> Signed-off-by: Derek Morton <derek.j.morton at intel.com>
> ---
> tests/core_prop_blob.c | 71 ++++++++++++++++++++++++++++++++++++--------------
> 1 file changed, 52 insertions(+), 19 deletions(-)
>
> diff --git a/tests/core_prop_blob.c b/tests/core_prop_blob.c
> index d704158..4dc6d7d 100644
> --- a/tests/core_prop_blob.c
> +++ b/tests/core_prop_blob.c
> @@ -25,18 +25,35 @@
> * Daniel Stone <daniels at collabora.com>
> */
>
> +#include "igt.h"
> #include <errno.h>
> #include <stdbool.h>
> #include <stdio.h>
> #include <string.h>
>
> -#include "drmtest.h"
> -#include "igt_debugfs.h"
> -#include "igt_kms.h"
> -#include "igt_aux.h"
> -
> IGT_TEST_DESCRIPTION("Tests behaviour of mass-data 'blob' properties.");
>
> +struct local_drm_mode_get_blob {
> + uint32_t blob_id;
> + uint32_t length;
> + uint64_t data;
> +};
> +struct local_drm_mode_create_blob {
> + uint64_t data;
> + uint32_t length;
> + uint32_t blob_id;
> +};
> +struct local_drm_mode_destroy_blob {
> + uint32_t blob_id;
> +};
> +
> +#define LOCAL_DRM_IOCTL_MODE_GETPROPBLOB DRM_IOWR(0xAC, \
> + struct local_drm_mode_get_blob)
> +#define LOCAL_DRM_IOCTL_MODE_CREATEPROPBLOB DRM_IOWR(0xBD, \
> + struct local_drm_mode_create_blob)
> +#define LOCAL_DRM_IOCTL_MODE_DESTROYPROPBLOB DRM_IOWR(0xBE, \
> + struct local_drm_mode_destroy_blob)
> +
> static const struct drm_mode_modeinfo test_mode_valid = {
> .clock = 1234,
> .hdisplay = 640,
> @@ -61,22 +78,35 @@ static const struct drm_mode_modeinfo test_mode_valid = {
> return errno; \
> }
>
> +static void igt_require_propblob(int fd)
> +{
> + struct local_drm_mode_create_blob c;
> + struct local_drm_mode_destroy_blob d;
> + uint32_t blob_data;
> + c.data = &blob_data;
Thanks for the patch. I fixed the compiler warning here (integer from
pointer) and pushed along with the gem_blt.c patch.
> + c.length = sizeof(blob_data);
> +
> + igt_require(drmIoctl(fd, LOCAL_DRM_IOCTL_MODE_CREATEPROPBLOB, &c) == 0);
> + d.blob_id = c.blob_id;
> + igt_require(drmIoctl(fd, LOCAL_DRM_IOCTL_MODE_DESTROYPROPBLOB, &d) == 0);
> +}
> +
> static int
> validate_prop(int fd, uint32_t prop_id)
> {
> - struct drm_mode_get_blob get;
> + struct local_drm_mode_get_blob get;
> struct drm_mode_modeinfo ret_mode;
>
> get.blob_id = prop_id;
> get.length = 0;
> get.data = (uintptr_t) 0;
> - ioctl_or_ret_errno(fd, DRM_IOCTL_MODE_GETPROPBLOB, &get);
> + ioctl_or_ret_errno(fd, LOCAL_DRM_IOCTL_MODE_GETPROPBLOB, &get);
>
> if (get.length != sizeof(test_mode_valid))
> return ENOMEM;
>
> get.data = (uintptr_t) &ret_mode;
> - ioctl_or_ret_errno(fd, DRM_IOCTL_MODE_GETPROPBLOB, &get);
> + ioctl_or_ret_errno(fd, LOCAL_DRM_IOCTL_MODE_GETPROPBLOB, &get);
>
> if (memcmp(&ret_mode, &test_mode_valid, sizeof(test_mode_valid)) != 0)
> return EINVAL;
> @@ -87,12 +117,12 @@ validate_prop(int fd, uint32_t prop_id)
> static uint32_t
> create_prop(int fd)
> {
> - struct drm_mode_create_blob create;
> + struct local_drm_mode_create_blob create;
>
> create.length = sizeof(test_mode_valid);
> create.data = (uintptr_t) &test_mode_valid;
>
> - do_ioctl(fd, DRM_IOCTL_MODE_CREATEPROPBLOB, &create);
> + do_ioctl(fd, LOCAL_DRM_IOCTL_MODE_CREATEPROPBLOB, &create);
> igt_assert_neq_u32(create.blob_id, 0);
>
> return create.blob_id;
> @@ -101,10 +131,10 @@ create_prop(int fd)
> static int
> destroy_prop(int fd, uint32_t prop_id)
> {
> - struct drm_mode_destroy_blob destroy;
> + struct local_drm_mode_destroy_blob destroy;
>
> destroy.blob_id = prop_id;
> - ioctl_or_ret_errno(fd, DRM_IOCTL_MODE_DESTROYPROPBLOB, &destroy);
> + ioctl_or_ret_errno(fd, LOCAL_DRM_IOCTL_MODE_DESTROYPROPBLOB, &destroy);
>
> return 0;
> }
> @@ -112,8 +142,8 @@ destroy_prop(int fd, uint32_t prop_id)
> static void
> test_validate(int fd)
> {
> - struct drm_mode_create_blob create;
> - struct drm_mode_get_blob get;
> + struct local_drm_mode_create_blob create;
> + struct local_drm_mode_get_blob get;
> char too_small[32];
> uint32_t prop_id;
>
> @@ -122,24 +152,24 @@ test_validate(int fd)
> /* Outlandish size. */
> create.length = 0x10000;
> create.data = (uintptr_t) &too_small;
> - do_ioctl_err(fd, DRM_IOCTL_MODE_CREATEPROPBLOB, &create, EFAULT);
> + do_ioctl_err(fd, LOCAL_DRM_IOCTL_MODE_CREATEPROPBLOB, &create, EFAULT);
>
> /* Outlandish address. */
> create.length = sizeof(test_mode_valid);
> create.data = (uintptr_t) 0xdeadbeee;
> - do_ioctl_err(fd, DRM_IOCTL_MODE_CREATEPROPBLOB, &create, EFAULT);
> + do_ioctl_err(fd, LOCAL_DRM_IOCTL_MODE_CREATEPROPBLOB, &create, EFAULT);
>
> /* When we pass an incorrect size, the kernel should correct us. */
> prop_id = create_prop(fd);
> get.blob_id = prop_id;
> get.length = sizeof(too_small);
> get.data = (uintptr_t) too_small;
> - do_ioctl(fd, DRM_IOCTL_MODE_GETPROPBLOB, &get);
> + do_ioctl(fd, LOCAL_DRM_IOCTL_MODE_GETPROPBLOB, &get);
> igt_assert_eq_u32(get.length, sizeof(test_mode_valid));
>
> get.blob_id = prop_id;
> get.data = (uintptr_t) 0xdeadbeee;
> - do_ioctl_err(fd, DRM_IOCTL_MODE_CREATEPROPBLOB, &create, EFAULT);
> + do_ioctl_err(fd, LOCAL_DRM_IOCTL_MODE_CREATEPROPBLOB, &create, EFAULT);
> }
>
> static void
> @@ -211,9 +241,12 @@ igt_main
> igt_fixture {
> fd = drm_open_driver(DRIVER_ANY);
> igt_require(fd >= 0);
> - test_basic(fd);
> + igt_require_propblob(fd);
> }
>
> + igt_subtest("basic")
> + test_basic(fd);
> +
> igt_subtest("blob-prop-core")
> test_core(fd);
>
> --
> 1.9.1
>
More information about the Intel-gfx
mailing list