diff --git a/src/gallium/drivers/iris/i915/iris_bufmgr.c b/src/gallium/drivers/iris/i915/iris_bufmgr.c index de503967aa7..3eb3bd98043 100644 --- a/src/gallium/drivers/iris/i915/iris_bufmgr.c +++ b/src/gallium/drivers/iris/i915/iris_bufmgr.c @@ -39,3 +39,19 @@ bool iris_i915_bo_busy_gem(struct iris_bo *bo) return busy.busy; } + +int iris_i915_bo_wait_gem(struct iris_bo *bo, int64_t timeout_ns) +{ + assert(iris_bo_is_real(bo)); + + struct iris_bufmgr *bufmgr = bo->bufmgr; + struct drm_i915_gem_wait wait = { + .bo_handle = bo->gem_handle, + .timeout_ns = timeout_ns, + }; + + if (intel_ioctl(iris_bufmgr_get_fd(bufmgr), DRM_IOCTL_I915_GEM_WAIT, &wait)) + return -errno; + + return 0; +} diff --git a/src/gallium/drivers/iris/i915/iris_bufmgr.h b/src/gallium/drivers/iris/i915/iris_bufmgr.h index cf9d5394084..1702b032b3a 100644 --- a/src/gallium/drivers/iris/i915/iris_bufmgr.h +++ b/src/gallium/drivers/iris/i915/iris_bufmgr.h @@ -23,7 +23,9 @@ #pragma once #include +#include struct iris_bo; bool iris_i915_bo_busy_gem(struct iris_bo *bo); +int iris_i915_bo_wait_gem(struct iris_bo *bo, int64_t timeout_ns); diff --git a/src/gallium/drivers/iris/iris_bufmgr.c b/src/gallium/drivers/iris/iris_bufmgr.c index 77687e0f993..17dc7049c1d 100644 --- a/src/gallium/drivers/iris/iris_bufmgr.c +++ b/src/gallium/drivers/iris/iris_bufmgr.c @@ -1643,24 +1643,6 @@ iris_bo_map(struct util_debug_callback *dbg, return map; } -static int -iris_bo_wait_gem(struct iris_bo *bo, int64_t timeout_ns) -{ - assert(iris_bo_is_real(bo)); - - struct iris_bufmgr *bufmgr = bo->bufmgr; - struct drm_i915_gem_wait wait = { - .bo_handle = bo->gem_handle, - .timeout_ns = timeout_ns, - }; - - int ret = intel_ioctl(bufmgr->fd, DRM_IOCTL_I915_GEM_WAIT, &wait); - if (ret != 0) - return -errno; - - return 0; -} - /** * Waits on a BO for the given amount of time. * @@ -1693,10 +1675,17 @@ iris_bo_wait(struct iris_bo *bo, int64_t timeout_ns) { int ret; - if (iris_bo_is_external(bo)) - ret = iris_bo_wait_gem(bo, timeout_ns); - else - ret = iris_bo_wait_syncobj(bo, timeout_ns); + switch (iris_bufmgr_get_device_info(bo->bufmgr)->kmd_type) { + case INTEL_KMD_TYPE_I915: + if (iris_bo_is_external(bo)) + ret = iris_i915_bo_wait_gem(bo, timeout_ns); + else + ret = iris_bo_wait_syncobj(bo, timeout_ns); + break; + default: + unreachable("missing"); + ret = -1; + } bo->idle = ret == 0;