diff mbox

[i-g-t,v2] tests/core_prop_blob: Fix core_prop_blob for android

Message ID 1444839780-18694-1-git-send-email-derek.j.morton@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Derek Morton Oct. 14, 2015, 4:23 p.m. UTC
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@intel.com>
---
 tests/core_prop_blob.c | 71 ++++++++++++++++++++++++++++++++++++--------------
 1 file changed, 52 insertions(+), 19 deletions(-)

Comments

Thomas Wood Oct. 15, 2015, 4:04 p.m. UTC | #1
On 14 October 2015 at 17:23, Derek Morton <derek.j.morton@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@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@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
>
diff mbox

Patch

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@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;
+	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);