amdgpu: Add context priority override function.
This way we can override the priority of a single context using a master fd. Since we cannot usefully create an amdgpu device of a master fd without the fd deduplication kicking in this takes a plain fd. This can be used by e.g. radv to get high priority contexts using a master fd from the primary node or a lease. Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Andres Rodriguez <andresx7@gmail.com> Reviewed-by: Chunming Zhou <david1.zhou@amd.com>main
parent
0b474eab3d
commit
232dc3305d
|
@ -38,6 +38,7 @@ amdgpu_cs_create_syncobj2
|
||||||
amdgpu_cs_ctx_create
|
amdgpu_cs_ctx_create
|
||||||
amdgpu_cs_ctx_create2
|
amdgpu_cs_ctx_create2
|
||||||
amdgpu_cs_ctx_free
|
amdgpu_cs_ctx_free
|
||||||
|
amdgpu_cs_ctx_override_priority
|
||||||
amdgpu_cs_destroy_semaphore
|
amdgpu_cs_destroy_semaphore
|
||||||
amdgpu_cs_destroy_syncobj
|
amdgpu_cs_destroy_syncobj
|
||||||
amdgpu_cs_export_syncobj
|
amdgpu_cs_export_syncobj
|
||||||
|
|
|
@ -911,6 +911,21 @@ int amdgpu_cs_ctx_create(amdgpu_device_handle dev,
|
||||||
*/
|
*/
|
||||||
int amdgpu_cs_ctx_free(amdgpu_context_handle context);
|
int amdgpu_cs_ctx_free(amdgpu_context_handle context);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Override the submission priority for the given context using a master fd.
|
||||||
|
*
|
||||||
|
* \param dev - \c [in] device handle
|
||||||
|
* \param context - \c [in] context handle for context id
|
||||||
|
* \param master_fd - \c [in] The master fd to authorize the override.
|
||||||
|
* \param priority - \c [in] The priority to assign to the context.
|
||||||
|
*
|
||||||
|
* \return 0 on success or a a negative Posix error code on failure.
|
||||||
|
*/
|
||||||
|
int amdgpu_cs_ctx_override_priority(amdgpu_device_handle dev,
|
||||||
|
amdgpu_context_handle context,
|
||||||
|
int master_fd,
|
||||||
|
unsigned priority);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Query reset state for the specific GPU Context
|
* Query reset state for the specific GPU Context
|
||||||
*
|
*
|
||||||
|
|
|
@ -142,6 +142,31 @@ drm_public int amdgpu_cs_ctx_free(amdgpu_context_handle context)
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
drm_public int amdgpu_cs_ctx_override_priority(amdgpu_device_handle dev,
|
||||||
|
amdgpu_context_handle context,
|
||||||
|
int master_fd,
|
||||||
|
unsigned priority)
|
||||||
|
{
|
||||||
|
int r;
|
||||||
|
|
||||||
|
if (!dev || !context || master_fd < 0)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
union drm_amdgpu_sched args;
|
||||||
|
memset(&args, 0, sizeof(args));
|
||||||
|
|
||||||
|
args.in.op = AMDGPU_SCHED_OP_CONTEXT_PRIORITY_OVERRIDE;
|
||||||
|
args.in.fd = dev->fd;
|
||||||
|
args.in.priority = priority;
|
||||||
|
args.in.ctx_id = context->id;
|
||||||
|
|
||||||
|
r = drmCommandWrite(master_fd, DRM_AMDGPU_SCHED, &args, sizeof(args));
|
||||||
|
if (r)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
drm_public int amdgpu_cs_query_reset_state(amdgpu_context_handle context,
|
drm_public int amdgpu_cs_query_reset_state(amdgpu_context_handle context,
|
||||||
uint32_t *state, uint32_t *hangs)
|
uint32_t *state, uint32_t *hangs)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue