Module: Mesa Branch: main Commit: 39486661e9c24e39a21bc8e9e8fdc8ccf45216ad URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=39486661e9c24e39a21bc8e9e8fdc8ccf45216ad
Author: José Roberto de Souza <[email protected]> Date: Wed Oct 5 09:10:24 2022 -0700 intel: Add and use intel_gem_set_context_param() Again sharing the same function across all Intel drivers. Signed-off-by: José Roberto de Souza <[email protected]> Reviewed-by: Lionel Landwerlin <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18974> --- src/gallium/drivers/crocus/crocus_bufmgr.c | 20 +++++-------------- src/gallium/drivers/iris/iris_bufmgr.c | 31 ++++++++---------------------- src/intel/common/intel_gem.c | 11 +++++++++++ src/intel/common/intel_gem.h | 3 +++ src/intel/vulkan/anv_gem.c | 10 ++-------- src/intel/vulkan/anv_gem_stubs.c | 2 +- src/intel/vulkan/anv_private.h | 2 +- src/intel/vulkan_hasvk/anv_gem.c | 10 ++-------- src/intel/vulkan_hasvk/anv_gem_stubs.c | 2 +- src/intel/vulkan_hasvk/anv_private.h | 2 +- 10 files changed, 35 insertions(+), 58 deletions(-) diff --git a/src/gallium/drivers/crocus/crocus_bufmgr.c b/src/gallium/drivers/crocus/crocus_bufmgr.c index d618083ee84..a17f87da9a5 100644 --- a/src/gallium/drivers/crocus/crocus_bufmgr.c +++ b/src/gallium/drivers/crocus/crocus_bufmgr.c @@ -1538,12 +1538,8 @@ crocus_create_hw_context(struct crocus_bufmgr *bufmgr) * context is lost, and we will do the recovery ourselves. Ideally, * we'll have two lost batches instead of a continual stream of hangs. */ - struct drm_i915_gem_context_param p = { - .ctx_id = ctx_id, - .param = I915_CONTEXT_PARAM_RECOVERABLE, - .value = false, - }; - drmIoctl(bufmgr->fd, DRM_IOCTL_I915_GEM_CONTEXT_SETPARAM, &p); + intel_gem_set_context_param(bufmgr->fd, ctx_id, + I915_CONTEXT_PARAM_RECOVERABLE, false); return ctx_id; } @@ -1564,15 +1560,9 @@ crocus_hw_context_set_priority(struct crocus_bufmgr *bufmgr, uint32_t ctx_id, int priority) { - struct drm_i915_gem_context_param p = { - .ctx_id = ctx_id, - .param = I915_CONTEXT_PARAM_PRIORITY, - .value = priority, - }; - int err; - - err = 0; - if (intel_ioctl(bufmgr->fd, DRM_IOCTL_I915_GEM_CONTEXT_SETPARAM, &p)) + int err = 0; + if (!intel_gem_set_context_param(bufmgr->fd, ctx_id, + I915_CONTEXT_PARAM_PRIORITY, priority)) err = -errno; return err; diff --git a/src/gallium/drivers/iris/iris_bufmgr.c b/src/gallium/drivers/iris/iris_bufmgr.c index c4af964f954..9228de94b96 100644 --- a/src/gallium/drivers/iris/iris_bufmgr.c +++ b/src/gallium/drivers/iris/iris_bufmgr.c @@ -2184,12 +2184,8 @@ iris_hw_context_set_unrecoverable(struct iris_bufmgr *bufmgr, * context is lost, and we will do the recovery ourselves. Ideally, * we'll have two lost batches instead of a continual stream of hangs. */ - struct drm_i915_gem_context_param p = { - .ctx_id = ctx_id, - .param = I915_CONTEXT_PARAM_RECOVERABLE, - .value = false, - }; - intel_ioctl(bufmgr->fd, DRM_IOCTL_I915_GEM_CONTEXT_SETPARAM, &p); + intel_gem_set_context_param(bufmgr->fd, ctx_id, + I915_CONTEXT_PARAM_RECOVERABLE, false); } void @@ -2198,16 +2194,11 @@ iris_hw_context_set_vm_id(struct iris_bufmgr *bufmgr, uint32_t ctx_id) if (!bufmgr->use_global_vm) return; - struct drm_i915_gem_context_param p = { - .ctx_id = ctx_id, - .param = I915_CONTEXT_PARAM_VM, - .value = bufmgr->global_vm_id, - }; - int ret = intel_ioctl(bufmgr->fd, DRM_IOCTL_I915_GEM_CONTEXT_SETPARAM, &p); - if (ret != 0) { + if (!intel_gem_set_context_param(bufmgr->fd, ctx_id, + I915_CONTEXT_PARAM_VM, + bufmgr->global_vm_id)) DBG("DRM_IOCTL_I915_GEM_CONTEXT_SETPARAM failed: %s\n", strerror(errno)); - } } uint32_t @@ -2251,15 +2242,9 @@ iris_hw_context_set_priority(struct iris_bufmgr *bufmgr, uint32_t ctx_id, int priority) { - struct drm_i915_gem_context_param p = { - .ctx_id = ctx_id, - .param = I915_CONTEXT_PARAM_PRIORITY, - .value = priority, - }; - int err; - - err = 0; - if (intel_ioctl(bufmgr->fd, DRM_IOCTL_I915_GEM_CONTEXT_SETPARAM, &p)) + int err = 0; + if (!intel_gem_set_context_param(bufmgr->fd, ctx_id, + I915_CONTEXT_PARAM_PRIORITY, priority)) err = -errno; return err; diff --git a/src/intel/common/intel_gem.c b/src/intel/common/intel_gem.c index 7819be0aae0..af6b75c5fe7 100644 --- a/src/intel/common/intel_gem.c +++ b/src/intel/common/intel_gem.c @@ -161,6 +161,17 @@ intel_gem_create_context_engines(int fd, return true; } +bool +intel_gem_set_context_param(int fd, uint32_t context, uint32_t param, + uint64_t value) +{ + struct drm_i915_gem_context_param p = { + .ctx_id = context, + .param = param, + .value = value, + }; + return intel_ioctl(fd, DRM_IOCTL_I915_GEM_CONTEXT_SETPARAM, &p) == 0; +} bool intel_gem_read_render_timestamp(int fd, uint64_t *value) { diff --git a/src/intel/common/intel_gem.h b/src/intel/common/intel_gem.h index 9f9ce9ed919..9d49710f4b2 100644 --- a/src/intel/common/intel_gem.h +++ b/src/intel/common/intel_gem.h @@ -166,6 +166,9 @@ intel_gem_create_context_engines(int fd, const struct intel_query_engine_info *info, int num_engines, enum intel_engine_class *engine_classes, uint32_t *context_id); +bool +intel_gem_set_context_param(int fd, uint32_t context, uint32_t param, + uint64_t value); bool intel_gem_read_render_timestamp(int fd, uint64_t *value); diff --git a/src/intel/vulkan/anv_gem.c b/src/intel/vulkan/anv_gem.c index c0c60d75bf1..6c5317dc31f 100644 --- a/src/intel/vulkan/anv_gem.c +++ b/src/intel/vulkan/anv_gem.c @@ -320,19 +320,13 @@ vk_priority_to_i915(VkQueueGlobalPriorityKHR priority) } int -anv_gem_set_context_param(int fd, int context, uint32_t param, uint64_t value) +anv_gem_set_context_param(int fd, uint32_t context, uint32_t param, uint64_t value) { if (param == I915_CONTEXT_PARAM_PRIORITY) value = vk_priority_to_i915(value); - struct drm_i915_gem_context_param p = { - .ctx_id = context, - .param = param, - .value = value, - }; int err = 0; - - if (intel_ioctl(fd, DRM_IOCTL_I915_GEM_CONTEXT_SETPARAM, &p)) + if (!intel_gem_set_context_param(fd, context, param, value)) err = -errno; return err; } diff --git a/src/intel/vulkan/anv_gem_stubs.c b/src/intel/vulkan/anv_gem_stubs.c index ea17982ad0e..8b0dc4cf9ca 100644 --- a/src/intel/vulkan/anv_gem_stubs.c +++ b/src/intel/vulkan/anv_gem_stubs.c @@ -125,7 +125,7 @@ anv_gem_get_param(int fd, uint32_t param) } int -anv_gem_set_context_param(int fd, int context, uint32_t param, uint64_t value) +anv_gem_set_context_param(int fd, uint32_t context, uint32_t param, uint64_t value) { unreachable("Unused"); } diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index f7f919cb581..1f19228e1d0 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -1347,7 +1347,7 @@ int anv_gem_execbuffer(struct anv_device *device, int anv_gem_set_tiling(struct anv_device *device, uint32_t gem_handle, uint32_t stride, uint32_t tiling); bool anv_gem_has_context_priority(int fd, VkQueueGlobalPriorityKHR priority); -int anv_gem_set_context_param(int fd, int context, uint32_t param, +int anv_gem_set_context_param(int fd, uint32_t context, uint32_t param, uint64_t value); int anv_gem_get_param(int fd, uint32_t param); int anv_gem_get_tiling(struct anv_device *device, uint32_t gem_handle); diff --git a/src/intel/vulkan_hasvk/anv_gem.c b/src/intel/vulkan_hasvk/anv_gem.c index a383f8e17f6..a9582fa4bba 100644 --- a/src/intel/vulkan_hasvk/anv_gem.c +++ b/src/intel/vulkan_hasvk/anv_gem.c @@ -274,16 +274,10 @@ anv_gem_has_context_priority(int fd, int priority) } int -anv_gem_set_context_param(int fd, int context, uint32_t param, uint64_t value) +anv_gem_set_context_param(int fd, uint32_t context, uint32_t param, uint64_t value) { - struct drm_i915_gem_context_param p = { - .ctx_id = context, - .param = param, - .value = value, - }; int err = 0; - - if (intel_ioctl(fd, DRM_IOCTL_I915_GEM_CONTEXT_SETPARAM, &p)) + if (!intel_gem_set_context_param(fd, context, param, value)) err = -errno; return err; } diff --git a/src/intel/vulkan_hasvk/anv_gem_stubs.c b/src/intel/vulkan_hasvk/anv_gem_stubs.c index 751e206de2c..0c99f02517b 100644 --- a/src/intel/vulkan_hasvk/anv_gem_stubs.c +++ b/src/intel/vulkan_hasvk/anv_gem_stubs.c @@ -117,7 +117,7 @@ anv_gem_get_param(int fd, uint32_t param) } int -anv_gem_set_context_param(int fd, int context, uint32_t param, uint64_t value) +anv_gem_set_context_param(int fd, uint32_t context, uint32_t param, uint64_t value) { unreachable("Unused"); } diff --git a/src/intel/vulkan_hasvk/anv_private.h b/src/intel/vulkan_hasvk/anv_private.h index b1143fbb984..cd5e215d1c9 100644 --- a/src/intel/vulkan_hasvk/anv_private.h +++ b/src/intel/vulkan_hasvk/anv_private.h @@ -1382,7 +1382,7 @@ int anv_gem_execbuffer(struct anv_device *device, int anv_gem_set_tiling(struct anv_device *device, uint32_t gem_handle, uint32_t stride, uint32_t tiling); bool anv_gem_has_context_priority(int fd, int priority); -int anv_gem_set_context_param(int fd, int context, uint32_t param, +int anv_gem_set_context_param(int fd, uint32_t context, uint32_t param, uint64_t value); int anv_gem_get_param(int fd, uint32_t param); int anv_gem_get_tiling(struct anv_device *device, uint32_t gem_handle);
