From: Marek Olšák <marek.ol...@amd.com>

This reverts commit f6f25d67a9c0d26be9b8021a45f2acf3a4042ade.

Required by the new semaphore patches.
---
 amdgpu/amdgpu_cs.c       | 10 ++++++++++
 amdgpu/amdgpu_internal.h |  3 +++
 2 files changed, 13 insertions(+)

diff --git a/amdgpu/amdgpu_cs.c b/amdgpu/amdgpu_cs.c
index 6747158..511d53f 100644
--- a/amdgpu/amdgpu_cs.c
+++ b/amdgpu/amdgpu_cs.c
@@ -66,6 +66,10 @@ int amdgpu_cs_ctx_create(amdgpu_device_handle dev,

        gpu_context->dev = dev;

+       r = pthread_mutex_init(&gpu_context->sequence_mutex, NULL);
+       if (r)
+               goto error;
+
        /* Create the context */
        memset(&args, 0, sizeof(args));
        args.in.op = AMDGPU_CTX_OP_ALLOC_CTX;
@@ -79,6 +83,7 @@ int amdgpu_cs_ctx_create(amdgpu_device_handle dev,
        return 0;

 error:
+       pthread_mutex_destroy(&gpu_context->sequence_mutex);
        free(gpu_context);
        return r;
 }
@@ -99,6 +104,8 @@ int amdgpu_cs_ctx_free(amdgpu_context_handle context)
        if (NULL == context)
                return -EINVAL;

+       pthread_mutex_destroy(&context->sequence_mutex);
+
        /* now deal with kernel side */
        memset(&args, 0, sizeof(args));
        args.in.op = AMDGPU_CTX_OP_FREE_CTX;
@@ -196,6 +203,8 @@ static int amdgpu_cs_submit_one(amdgpu_context_handle 
context,
                chunk_data[i].ib_data.flags = ib->flags;
        }

+       pthread_mutex_lock(&context->sequence_mutex);
+
        if (user_fence) {
                i = cs.in.num_chunks++;

@@ -248,6 +257,7 @@ static int amdgpu_cs_submit_one(amdgpu_context_handle 
context,
        ibs_request->seq_no = cs.out.handle;

 error_unlock:
+       pthread_mutex_unlock(&context->sequence_mutex);
        free(dependencies);
        return r;
 }
diff --git a/amdgpu/amdgpu_internal.h b/amdgpu/amdgpu_internal.h
index 7dd5c1c..5d86603 100644
--- a/amdgpu/amdgpu_internal.h
+++ b/amdgpu/amdgpu_internal.h
@@ -111,6 +111,9 @@ struct amdgpu_bo_list {

 struct amdgpu_context {
        struct amdgpu_device *dev;
+       /** Mutex for accessing fences and to maintain command submissions
+           in good sequence. */
+       pthread_mutex_t sequence_mutex;
        /* context id*/
        uint32_t id;
 };
-- 
2.1.4

Reply via email to