drm: Branch 'master'

[email protected] (GitLab Mirror) Thu, 18 Apr 2019 09:02:54 +0000 (UTC)
Newsgroups gmane.comp.video.dri.patches
Message-ID <[email protected]>
 amdgpu/amdgpu-symbol-check |    1 +
 amdgpu/amdgpu.h            |   15 +++++++++++++++
 amdgpu/amdgpu_cs.c         |   25 +++++++++++++++++++++++++
 3 files changed, 41 insertions(+)

New commits:
commit 232dc3305d55d199f4765968d299bfc2a249d920
Author: Bas Nieuwenhuizen <[email protected]>
Date:   Mon Jan 28 22:20:20 2019 +0100

    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 <[email protected]>
    Reviewed-by: Andres Rodriguez <[email protected]>
    Reviewed-by: Chunming Zhou <[email protected]>

diff --git a/amdgpu/amdgpu-symbol-check b/amdgpu/amdgpu-symbol-check
index 96a44b40..4d806922 100755
--- a/amdgpu/amdgpu-symbol-check
+++ b/amdgpu/amdgpu-symbol-check
@@ -38,6 +38,7 @@ amdgpu_cs_create_syncobj2
 amdgpu_cs_ctx_create
 amdgpu_cs_ctx_create2
 amdgpu_cs_ctx_free
+amdgpu_cs_ctx_override_priority
 amdgpu_cs_destroy_semaphore
 amdgpu_cs_destroy_syncobj
 amdgpu_cs_export_syncobj
diff --git a/amdgpu/amdgpu.h b/amdgpu/amdgpu.h
index 621e7163..c44a495a 100644
--- a/amdgpu/amdgpu.h
+++ b/amdgpu/amdgpu.h
@@ -912,6 +912,21 @@ int amdgpu_cs_ctx_create(amdgpu_device_handle dev,
 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
  *
  * \param   context - \c [in]  GPU Context handle
diff --git a/amdgpu/amdgpu_cs.c b/amdgpu/amdgpu_cs.c
index 5bedf748..7ee844fb 100644
--- a/amdgpu/amdgpu_cs.c
+++ b/amdgpu/amdgpu_cs.c
@@ -142,6 +142,31 @@ drm_public int amdgpu_cs_ctx_free(amdgpu_context_handle context)
 	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,
 					   uint32_t *state, uint32_t *hangs)
 {


--