[PATCH 2/2] drm/scheduler: Remove priority macro INVALID
Luben Tuikov
luben.tuikov at amd.com
Fri Aug 14 21:37:59 UTC 2020
On 2020-08-14 3:28 p.m., Alex Deucher wrote:
> + dri-devel
>
>
> On Fri, Aug 14, 2020 at 3:14 PM Luben Tuikov <luben.tuikov at amd.com> wrote:
>>
>> Remove DRM_SCHED_PRIORITY_INVALID. We no longer
>> carry around an invalid priority and cut it off
>> at the source.
>>
>> Backwards compatibility behaviour of AMDGPU CTX
>> IOCTL passing in garbage for context priority
>> from user space and then mapping that to
>> DRM_SCHED_PRIORITY_NORMAL is preserved.
>>
>> Signed-off-by: Luben Tuikov <luben.tuikov at amd.com>
>> ---
>> drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c | 21 ++++----
>> drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c | 62 +++++++++++++++--------
>> drivers/gpu/drm/amd/amdgpu/amdgpu_sched.h | 3 +-
>> include/drm/gpu_scheduler.h | 1 -
>> 4 files changed, 53 insertions(+), 34 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
>> index fd97ac34277b..10d3bfa416c0 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
>> @@ -384,42 +384,41 @@ static int amdgpu_ctx_query2(struct amdgpu_device *adev,
>> int amdgpu_ctx_ioctl(struct drm_device *dev, void *data,
>> struct drm_file *filp)
>> {
>> - int r;
>> + int res;
>> uint32_t id;
>> - enum drm_sched_priority priority;
>> + enum drm_sched_priority prio;
>
> The variable renaming is not directly related to the functional change
> in the patch and should be split out as a separate patch is you think
> it should be applied. I personally prefer the original naming. The
> driver uses r or ret for return value checking pretty consistently. I
> also prefer to spell things out unless the names are really long.
> Makes it more obvious what they are for. Same comment on the
> functions below as well.
Sure, I can revert this. Personally, I don't like single letter
variables as they are very inexpressive and hard to search for.
I thought "prio" to be easier to type than "priority", but I can
revert this.
Regards,
Luben
>
> Alex
>
>>
>> union drm_amdgpu_ctx *args = data;
>> struct amdgpu_device *adev = dev->dev_private;
>> struct amdgpu_fpriv *fpriv = filp->driver_priv;
>>
>> - r = 0;
>> id = args->in.ctx_id;
>> - priority = amdgpu_to_sched_priority(args->in.priority);
>> + res = amdgpu_to_sched_priority(args->in.priority, &prio);
>>
>> /* For backwards compatibility reasons, we need to accept
>> * ioctls with garbage in the priority field */
>> - if (priority == DRM_SCHED_PRIORITY_INVALID)
>> - priority = DRM_SCHED_PRIORITY_NORMAL;
>> + if (res == -EINVAL)
>> + prio = DRM_SCHED_PRIORITY_NORMAL;
>>
>> switch (args->in.op) {
>> case AMDGPU_CTX_OP_ALLOC_CTX:
>> - r = amdgpu_ctx_alloc(adev, fpriv, filp, priority, &id);
>> + res = amdgpu_ctx_alloc(adev, fpriv, filp, prio, &id);
>> args->out.alloc.ctx_id = id;
>> break;
>> case AMDGPU_CTX_OP_FREE_CTX:
>> - r = amdgpu_ctx_free(fpriv, id);
>> + res = amdgpu_ctx_free(fpriv, id);
>> break;
>> case AMDGPU_CTX_OP_QUERY_STATE:
>> - r = amdgpu_ctx_query(adev, fpriv, id, &args->out);
>> + res = amdgpu_ctx_query(adev, fpriv, id, &args->out);
>> break;
>> case AMDGPU_CTX_OP_QUERY_STATE2:
>> - r = amdgpu_ctx_query2(adev, fpriv, id, &args->out);
>> + res = amdgpu_ctx_query2(adev, fpriv, id, &args->out);
>> break;
>> default:
>> return -EINVAL;
>> }
>>
>> - return r;
>> + return res;
>> }
>>
>> struct amdgpu_ctx *amdgpu_ctx_get(struct amdgpu_fpriv *fpriv, uint32_t id)
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c
>> index e05bc22a0a49..2398eb646043 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c
>> @@ -32,24 +32,32 @@
>>
>> #include "amdgpu_vm.h"
>>
>> -enum drm_sched_priority amdgpu_to_sched_priority(int amdgpu_priority)
>> +int amdgpu_to_sched_priority(int amdgpu_priority,
>> + enum drm_sched_priority *prio)
>> {
>> switch (amdgpu_priority) {
>> case AMDGPU_CTX_PRIORITY_VERY_HIGH:
>> - return DRM_SCHED_PRIORITY_HW;
>> + *prio = DRM_SCHED_PRIORITY_HW;
>> + break;
>> case AMDGPU_CTX_PRIORITY_HIGH:
>> - return DRM_SCHED_PRIORITY_SW;
>> + *prio = DRM_SCHED_PRIORITY_SW;
>> + break;
>> case AMDGPU_CTX_PRIORITY_NORMAL:
>> - return DRM_SCHED_PRIORITY_NORMAL;
>> + *prio = DRM_SCHED_PRIORITY_NORMAL;
>> + break;
>> case AMDGPU_CTX_PRIORITY_LOW:
>> case AMDGPU_CTX_PRIORITY_VERY_LOW:
>> - return DRM_SCHED_PRIORITY_MIN;
>> + *prio = DRM_SCHED_PRIORITY_MIN;
>> + break;
>> case AMDGPU_CTX_PRIORITY_UNSET:
>> - return DRM_SCHED_PRIORITY_UNSET;
>> + *prio = DRM_SCHED_PRIORITY_UNSET;
>> + break;
>> default:
>> WARN(1, "Invalid context priority %d\n", amdgpu_priority);
>> - return DRM_SCHED_PRIORITY_INVALID;
>> + return -EINVAL;
>> }
>> +
>> + return 0;
>> }
>>
>> static int amdgpu_sched_process_priority_override(struct amdgpu_device *adev,
>> @@ -116,30 +124,42 @@ int amdgpu_sched_ioctl(struct drm_device *dev, void *data,
>> {
>> union drm_amdgpu_sched *args = data;
>> struct amdgpu_device *adev = dev->dev_private;
>> - enum drm_sched_priority priority;
>> - int r;
>> + enum drm_sched_priority prio;
>> + int res;
>>
>> - priority = amdgpu_to_sched_priority(args->in.priority);
>> - if (priority == DRM_SCHED_PRIORITY_INVALID)
>> + /* First check the op, then the op's argument.
>> + */
>> + switch (args->in.op) {
>> + case AMDGPU_SCHED_OP_PROCESS_PRIORITY_OVERRIDE:
>> + case AMDGPU_SCHED_OP_CONTEXT_PRIORITY_OVERRIDE:
>> + break;
>> + default:
>> + DRM_ERROR("Invalid sched op specified: %d\n", args->in.op);
>> return -EINVAL;
>> + }
>> +
>> + res = amdgpu_to_sched_priority(args->in.priority, &prio);
>> + if (res)
>> + return res;
>>
>> switch (args->in.op) {
>> case AMDGPU_SCHED_OP_PROCESS_PRIORITY_OVERRIDE:
>> - r = amdgpu_sched_process_priority_override(adev,
>> - args->in.fd,
>> - priority);
>> + res = amdgpu_sched_process_priority_override(adev,
>> + args->in.fd,
>> + prio);
>> break;
>> case AMDGPU_SCHED_OP_CONTEXT_PRIORITY_OVERRIDE:
>> - r = amdgpu_sched_context_priority_override(adev,
>> - args->in.fd,
>> - args->in.ctx_id,
>> - priority);
>> + res = amdgpu_sched_context_priority_override(adev,
>> + args->in.fd,
>> + args->in.ctx_id,
>> + prio);
>> break;
>> default:
>> - DRM_ERROR("Invalid sched op specified: %d\n", args->in.op);
>> - r = -EINVAL;
>> + /* Impossible.
>> + */
>> + res = -EINVAL;
>> break;
>> }
>>
>> - return r;
>> + return res;
>> }
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.h
>> index 12299fd95691..67e5b2472f6a 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.h
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.h
>> @@ -30,7 +30,8 @@ enum drm_sched_priority;
>> struct drm_device;
>> struct drm_file;
>>
>> -enum drm_sched_priority amdgpu_to_sched_priority(int amdgpu_priority);
>> +int amdgpu_to_sched_priority(int amdgpu_priority,
>> + enum drm_sched_priority *prio);
>> int amdgpu_sched_ioctl(struct drm_device *dev, void *data,
>> struct drm_file *filp);
>>
>> diff --git a/include/drm/gpu_scheduler.h b/include/drm/gpu_scheduler.h
>> index 8ae9b8f73bf9..d6ee3b2e8407 100644
>> --- a/include/drm/gpu_scheduler.h
>> +++ b/include/drm/gpu_scheduler.h
>> @@ -44,7 +44,6 @@ enum drm_sched_priority {
>> DRM_SCHED_PRIORITY_HIGH,
>>
>> DRM_SCHED_PRIORITY_COUNT,
>> - DRM_SCHED_PRIORITY_INVALID = -1,
>> DRM_SCHED_PRIORITY_UNSET = -2
>> };
>>
>> --
>> 2.28.0.215.g878e727637
>>
>> _______________________________________________
>> amd-gfx mailing list
>> amd-gfx at lists.freedesktop.org
>> https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.freedesktop.org%2Fmailman%2Flistinfo%2Famd-gfx&data=02%7C01%7Cluben.tuikov%40amd.com%7Cfa26637c8f4243baea4708d84088507f%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637330301495842311&sdata=4CH%2Fu%2BbtRqKWJF5ZvRqaEeacOdTXJrLOTOz0Fi9ZwTo%3D&reserved=0
More information about the amd-gfx
mailing list