summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2015-02-18 15:58:06 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2015-02-18 16:04:12 +0000
commiteaa7e6183cedee10acfa321ac3c66bfe58c0ed5a (patch)
tree20a84d07613de8b3df42e09a1c45c44a5805c19b
parenta22548fec06faba738a2d59b45b54704e4757685 (diff)
lib: Cache DRM device id to reduce number of ioctls
The DRM device id for the igfx is fixed, since there can only be one in the system. So once we query it for the first time we can safely report that value on every subsequent request, cutting out a lot of noisy ioctls from inside tests. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r--lib/drmtest.c8
-rw-r--r--lib/intel_chipset.c25
2 files changed, 15 insertions, 18 deletions
diff --git a/lib/drmtest.c b/lib/drmtest.c
index 1d6e882c..ee5c1232 100644
--- a/lib/drmtest.c
+++ b/lib/drmtest.c
@@ -73,6 +73,8 @@
* and [batchbuffer](intel-gpu-tools-intel-batchbuffer.html) libraries as dependencies.
*/
+uint16_t __drm_device_id;
+
static int is_i915_device(int fd)
{
drm_version_t version;
@@ -101,7 +103,11 @@ is_intel(int fd)
if (ioctl(fd, DRM_IOCTL_I915_GETPARAM, &gp, sizeof(gp)))
return 0;
- return IS_INTEL(devid);
+ if (!IS_INTEL(devid))
+ return 0;
+
+ __drm_device_id = devid;
+ return 1;
}
static void check_stop_rings(void)
diff --git a/lib/intel_chipset.c b/lib/intel_chipset.c
index fafd232f..a3085734 100644
--- a/lib/intel_chipset.c
+++ b/lib/intel_chipset.c
@@ -112,6 +112,8 @@ intel_get_pci_device(void)
return pci_dev;
}
+extern uint16_t __drm_device_id;
+
/**
* intel_get_drm_devid:
* @fd: open i915 drm file descriptor
@@ -125,26 +127,15 @@ intel_get_pci_device(void)
uint32_t
intel_get_drm_devid(int fd)
{
- uint32_t devid = 0;
const char *override;
- override = getenv("INTEL_DEVID_OVERRIDE");
- if (override) {
- devid = strtod(override, NULL);
- } else {
- struct drm_i915_getparam gp;
- int ret;
-
- memset(&gp, 0, sizeof(gp));
- gp.param = I915_PARAM_CHIPSET_ID;
- gp.value = (int *)&devid;
-
- ret = ioctl(fd, DRM_IOCTL_I915_GETPARAM, &gp, sizeof(gp));
- igt_assert(ret == 0);
- errno = 0;
- }
+ igt_assert(__drm_device_id);
- return devid;
+ override = getenv("INTEL_DEVID_OVERRIDE");
+ if (override)
+ return strtod(override, NULL);
+ else
+ return __drm_device_id;
}
/**