diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/1250-drm-amdgpu-Add-command-to-override-the-context-prior.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/1250-drm-amdgpu-Add-command-to-override-the-context-prior.patch | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/1250-drm-amdgpu-Add-command-to-override-the-context-prior.patch b/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/1250-drm-amdgpu-Add-command-to-override-the-context-prior.patch new file mode 100644 index 00000000..215f242c --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/1250-drm-amdgpu-Add-command-to-override-the-context-prior.patch @@ -0,0 +1,117 @@ +From adb12752c6b55e07ffa65ab86b254ecc84472ecd Mon Sep 17 00:00:00 2001 +From: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> +Date: Wed, 30 Jan 2019 02:53:22 +0100 +Subject: [PATCH 1250/2940] drm/amdgpu: Add command to override the context + priority. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Given a master fd we can then override the priority of the context +in another fd. + +Using these overrides was recommended by Christian instead of trying +to submit from a master fd, and I am adding a way to override a +single context instead of the entire process so we can only upgrade +a single Vulkan queue and not effectively the entire process. + +Reused the flags field as it was checked to be 0 anyways, so nothing +used it. This is source-incompatible (due to the name change), but +ABI compatible. + +Signed-off-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> +Reviewed-by: Christian König <christian.koenig@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c | 41 ++++++++++++++++++++++- + include/uapi/drm/amdgpu_drm.h | 3 +- + 2 files changed, 42 insertions(+), 2 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c +index 0b70410488b6..0767a93e4d91 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c +@@ -76,6 +76,39 @@ static int amdgpu_sched_process_priority_override(struct amdgpu_device *adev, + return 0; + } + ++static int amdgpu_sched_context_priority_override(struct amdgpu_device *adev, ++ int fd, ++ unsigned ctx_id, ++ enum drm_sched_priority priority) ++{ ++ struct file *filp = fget(fd); ++ struct amdgpu_fpriv *fpriv; ++ struct amdgpu_ctx *ctx; ++ int r; ++ ++ if (!filp) ++ return -EINVAL; ++ ++ r = amdgpu_file_to_fpriv(filp, &fpriv); ++ if (r) { ++ fput(filp); ++ return r; ++ } ++ ++ ctx = amdgpu_ctx_get(fpriv, ctx_id); ++ ++ if (!ctx) { ++ fput(filp); ++ return -EINVAL; ++ } ++ ++ amdgpu_ctx_priority_override(ctx, priority); ++ amdgpu_ctx_put(ctx); ++ fput(filp); ++ ++ return 0; ++} ++ + int amdgpu_sched_ioctl(struct drm_device *dev, void *data, + struct drm_file *filp) + { +@@ -85,7 +118,7 @@ int amdgpu_sched_ioctl(struct drm_device *dev, void *data, + int r; + + priority = amdgpu_to_sched_priority(args->in.priority); +- if (args->in.flags || priority == DRM_SCHED_PRIORITY_INVALID) ++ if (priority == DRM_SCHED_PRIORITY_INVALID) + return -EINVAL; + + switch (args->in.op) { +@@ -94,6 +127,12 @@ int amdgpu_sched_ioctl(struct drm_device *dev, void *data, + args->in.fd, + priority); + break; ++ case AMDGPU_SCHED_OP_CONTEXT_PRIORITY_OVERRIDE: ++ r = amdgpu_sched_context_priority_override(adev, ++ args->in.fd, ++ args->in.ctx_id, ++ priority); ++ break; + default: + DRM_ERROR("Invalid sched op specified: %d\n", args->in.op); + r = -EINVAL; +diff --git a/include/uapi/drm/amdgpu_drm.h b/include/uapi/drm/amdgpu_drm.h +index b54b02502867..32208b1d4e0d 100644 +--- a/include/uapi/drm/amdgpu_drm.h ++++ b/include/uapi/drm/amdgpu_drm.h +@@ -321,13 +321,14 @@ union drm_amdgpu_vm { + + /* sched ioctl */ + #define AMDGPU_SCHED_OP_PROCESS_PRIORITY_OVERRIDE 1 ++#define AMDGPU_SCHED_OP_CONTEXT_PRIORITY_OVERRIDE 2 + + struct drm_amdgpu_sched_in { + /* AMDGPU_SCHED_OP_* */ + __u32 op; + __u32 fd; + __s32 priority; +- __u32 flags; ++ __u32 ctx_id; + }; + + union drm_amdgpu_sched { +-- +2.17.1 + |