aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/1250-drm-amdgpu-Add-command-to-override-the-context-prior.patch
diff options
context:
space:
mode:
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.patch117
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
+