diff --git a/src/gallium/drivers/iris/i915/iris_bufmgr.c b/src/gallium/drivers/iris/i915/iris_bufmgr.c index ba9e948048c..de503967aa7 100644 --- a/src/gallium/drivers/iris/i915/iris_bufmgr.c +++ b/src/gallium/drivers/iris/i915/iris_bufmgr.c @@ -27,3 +27,15 @@ #include "drm-uapi/i915_drm.h" +bool iris_i915_bo_busy_gem(struct iris_bo *bo) +{ + assert(iris_bo_is_real(bo)); + + struct iris_bufmgr *bufmgr = bo->bufmgr; + struct drm_i915_gem_busy busy = { .handle = bo->gem_handle }; + + if (intel_ioctl(iris_bufmgr_get_fd(bufmgr), DRM_IOCTL_I915_GEM_BUSY, &busy)) + return false; + + return busy.busy; +} diff --git a/src/gallium/drivers/iris/i915/iris_bufmgr.h b/src/gallium/drivers/iris/i915/iris_bufmgr.h index 1dcb27008f0..cf9d5394084 100644 --- a/src/gallium/drivers/iris/i915/iris_bufmgr.h +++ b/src/gallium/drivers/iris/i915/iris_bufmgr.h @@ -26,3 +26,4 @@ struct iris_bo; +bool iris_i915_bo_busy_gem(struct iris_bo *bo); diff --git a/src/gallium/drivers/iris/iris_bufmgr.c b/src/gallium/drivers/iris/iris_bufmgr.c index aa17bf63755..77687e0f993 100644 --- a/src/gallium/drivers/iris/iris_bufmgr.c +++ b/src/gallium/drivers/iris/iris_bufmgr.c @@ -432,21 +432,6 @@ vma_free(struct iris_bufmgr *bufmgr, util_vma_heap_free(&bufmgr->vma_allocator[memzone], address, size); } -static bool -iris_bo_busy_gem(struct iris_bo *bo) -{ - assert(iris_bo_is_real(bo)); - - struct iris_bufmgr *bufmgr = bo->bufmgr; - struct drm_i915_gem_busy busy = { .handle = bo->gem_handle }; - - int ret = intel_ioctl(bufmgr->fd, DRM_IOCTL_I915_GEM_BUSY, &busy); - if (ret == 0) { - return busy.busy; - } - return false; -} - /* A timeout of 0 just checks for busyness. */ static int iris_bo_wait_syncobj(struct iris_bo *bo, int64_t timeout_ns) @@ -518,10 +503,18 @@ bool iris_bo_busy(struct iris_bo *bo) { bool busy; - if (iris_bo_is_external(bo)) - busy = iris_bo_busy_gem(bo); - else - busy = iris_bo_busy_syncobj(bo); + + switch (iris_bufmgr_get_device_info(bo->bufmgr)->kmd_type) { + case INTEL_KMD_TYPE_I915: + if (iris_bo_is_external(bo)) + busy = iris_i915_bo_busy_gem(bo); + else + busy = iris_bo_busy_syncobj(bo); + break; + default: + unreachable("missing"); + busy = true; + } bo->idle = !busy;