[Intel-gfx] [PATCH intel-gpu-tools 1/3] drmtest: Add non-i915 device open helpers
Micah Fedke
micah.fedke at collabora.co.uk
Tue Apr 21 08:03:47 PDT 2015
From: Daniel Stone <daniels at collabora.com>
Add helpers which will open a device which may or may not be i915 to
test on.
Signed-off-by: Daniel Stone <daniels at collabora.com>
---
lib/drmtest.c | 139 ++++++++++++++++++++++++++++++++++++++++++++++--------
lib/drmtest.h | 6 ++-
tests/gem_alive.c | 2 +-
3 files changed, 125 insertions(+), 22 deletions(-)
diff --git a/lib/drmtest.c b/lib/drmtest.c
index ee5c123..c73434e 100644
--- a/lib/drmtest.c
+++ b/lib/drmtest.c
@@ -190,16 +190,7 @@ void gem_quiescent_gpu(int fd)
gem_close(fd, handle);
}
-/**
- * drm_get_card:
- *
- * Get an i915 drm card index number for use in /dev or /sys. The minor index of
- * the legacy node is returned, not of the control or render node.
- *
- * Returns:
- * The i915 drm index or -1 on error
- */
-int drm_get_card(void)
+static int __drm_get_card(bool anygpu)
{
char *name;
int i, fd;
@@ -216,7 +207,7 @@ int drm_get_card(void)
if (fd == -1)
continue;
- if (!is_i915_device(fd) || !is_intel(fd)) {
+ if (!anygpu && (!is_i915_device(fd) || !is_intel(fd))) {
close(fd);
continue;
}
@@ -230,8 +221,50 @@ int drm_get_card(void)
return -1;
}
-/** Open the first DRM device we can find, searching up to 16 device nodes */
-int __drm_open_any(void)
+/**
+ * drm_get_card:
+ *
+ * Get an i915 drm card index number for use in /dev or /sys. The minor index of
+ * the legacy node is returned, not of the control or render node.
+ *
+ * The non-Intel-specific version is drm_get_any_card().
+ *
+ * Returns:
+ * The i915 drm index or -1 on error
+ */
+int drm_get_card(void)
+{
+ return __drm_get_card(false);
+}
+
+/**
+ * drm_get_any_card:
+ *
+ * Get any drm card index number for use in /dev or /sys. The minor index of
+ * the legacy node is returned, not of the control or render node.
+ *
+ * The Intel-specific version is drm_get_card().
+ *
+ * Returns:
+ * The drm index or -1 on error
+ */
+int drm_get_any_card(void)
+{
+ return __drm_get_card(true);
+}
+
+/**
+ * __drm_open_any:
+ *
+ * Open the first DRM device we can find, searching up to 16 device nodes
+ *
+ * @anygpu: If TRUE, will open any device; if FALSE, will only open Intel
+ * devices
+ *
+ * Returns:
+ * An open DRM fd or -1 on error
+ */
+int __drm_open_any(bool anygpu)
{
for (int i = 0; i < 16; i++) {
char name[80];
@@ -242,7 +275,7 @@ int __drm_open_any(void)
if (fd == -1)
continue;
- if (is_i915_device(fd) && is_intel(fd))
+ if (anygpu || (is_i915_device(fd) && is_intel(fd)))
return fd;
close(fd);
@@ -252,7 +285,7 @@ int __drm_open_any(void)
return -1;
}
-static int __drm_open_any_render(void)
+static int __drm_open_any_render(bool anygpu)
{
char *name;
int i, fd;
@@ -269,7 +302,7 @@ static int __drm_open_any_render(void)
if (fd == -1)
continue;
- if (!is_i915_device(fd) || !is_intel(fd)) {
+ if (!anygpu && (!is_i915_device(fd) || !is_intel(fd))) {
close(fd);
fd = -1;
continue;
@@ -312,12 +345,14 @@ static void quiescent_gpu_at_exit_render(int sig)
* Open an i915 drm legacy device node. This function always returns a valid
* file descriptor.
*
+ * drm_open_any_any() is the non-Intel-specific version of this function.
+ *
* Returns: a i915 drm file descriptor
*/
int drm_open_any(void)
{
static int open_count;
- int fd = __drm_open_any();
+ int fd = __drm_open_any(false);
igt_require(fd >= 0);
@@ -325,13 +360,34 @@ int drm_open_any(void)
return fd;
gem_quiescent_gpu(fd);
- at_exit_drm_fd = __drm_open_any();
+ at_exit_drm_fd = __drm_open_any(false);
igt_install_exit_handler(quiescent_gpu_at_exit);
return fd;
}
/**
+ * drm_open_any_any:
+ *
+ * Literally the worst-named function I've ever written.
+ *
+ * Open a drm legacy device node. This function always returns a valid
+ * file descriptor.
+ *
+ * drm_open_any() is the Intel-specific version of this function.
+ *
+ * Returns: a drm file descriptor
+ */
+int drm_open_any_any(void)
+{
+ int fd = __drm_open_any(true);
+
+ igt_require(fd >= 0);
+
+ return fd;
+}
+
+/**
* drm_open_any_master:
*
* Open an i915 drm legacy device node and ensure that it is drm master.
@@ -351,17 +407,39 @@ int drm_open_any_master(void)
}
/**
+ * drm_open_any_master:
+ *
+ * Open an i915 drm legacy device node and ensure that it is drm master.
+ *
+ * Returns:
+ * The i915 drm file descriptor or -1 on error
+ */
+int drm_open_any_master_any(void)
+{
+ int fd = drm_open_any_any();
+
+ igt_require(fd >= 0);
+ igt_require_f(drmSetMaster(fd) == 0, "Can't become DRM master, "
+ "please check if no other DRM client is running.\n");
+
+ return fd;
+}
+
+/**
* drm_open_any_render:
*
* Open an i915 drm render device node.
*
+ * drm_open_any_render_any() is the non-Intel-specific version of this
+ * function.
+ *
* Returns:
* The i915 drm file descriptor or -1 on error
*/
int drm_open_any_render(void)
{
static int open_count;
- int fd = __drm_open_any_render();
+ int fd = __drm_open_any_render(false);
/* no render nodes, fallback to drm_open_any() */
if (fd == -1)
@@ -370,9 +448,30 @@ int drm_open_any_render(void)
if (__sync_fetch_and_add(&open_count, 1))
return fd;
- at_exit_drm_render_fd = __drm_open_any();
+ at_exit_drm_render_fd = __drm_open_any(false);
gem_quiescent_gpu(fd);
igt_install_exit_handler(quiescent_gpu_at_exit_render);
return fd;
}
+
+/**
+ * drm_open_any_render_any:
+ *
+ * Open a drm render device node.
+ *
+ * drm_open_any_render() is the Intel-specific version of this function.
+ *
+ * Returns:
+ * The drm file descriptor or -1 on error
+ */
+int drm_open_any_render_any(void)
+{
+ int fd = __drm_open_any_render(true);
+
+ /* no render nodes, fallback to drm_open_any() */
+ if (fd == -1)
+ return drm_open_any_any();
+
+ return fd;
+}
diff --git a/lib/drmtest.h b/lib/drmtest.h
index 508cc83..84b9b05 100644
--- a/lib/drmtest.h
+++ b/lib/drmtest.h
@@ -71,10 +71,14 @@ static inline void *igt_mmap64(void *addr, size_t length, int prot, int flags,
#define ALIGN(v, a) (((v) + (a)-1) & ~((a)-1))
int drm_get_card(void);
-int __drm_open_any(void);
+int drm_get_any_card(void);
+int __drm_open_any(bool anygpu);
int drm_open_any(void);
+int drm_open_any_any(void);
int drm_open_any_master(void);
+int drm_open_any_master_any(void);
int drm_open_any_render(void);
+int drm_open_any_render_any(void);
void gem_quiescent_gpu(int fd);
diff --git a/tests/gem_alive.c b/tests/gem_alive.c
index 390a54f..53f2466 100644
--- a/tests/gem_alive.c
+++ b/tests/gem_alive.c
@@ -14,7 +14,7 @@ int main(void)
signal(SIGALRM, SIG_IGN);
- fd = __drm_open_any();
+ fd = __drm_open_any(false);
if (fd < 0)
return IGT_EXIT_SKIP;
--
2.3.5
More information about the Intel-gfx
mailing list