[Beignet] [PATCH 09/11] Runtime: Apply base object to cl_command_queue.

junyan.he at inbox.com junyan.he at inbox.com
Tue Jul 19 11:25:55 UTC 2016


From: Junyan He <junyan.he at intel.com>

Signed-off-by: Junyan He <junyan.he at intel.com>
---
 src/cl_api.c           |    2 +-
 src/cl_command_queue.c |   10 ++++------
 src/cl_command_queue.h |    8 +++++---
 src/cl_utils.h         |    2 +-
 4 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/src/cl_api.c b/src/cl_api.c
index 06b5548..790e692 100644
--- a/src/cl_api.c
+++ b/src/cl_api.c
@@ -472,7 +472,7 @@ clGetCommandQueueInfo(cl_command_queue       command_queue,
   } else if (param_name == CL_QUEUE_DEVICE) {
     FILL_GETINFO_RET (cl_device_id, 1, &command_queue->ctx->device, CL_SUCCESS);
   } else if (param_name == CL_QUEUE_REFERENCE_COUNT) {
-    cl_uint ref = command_queue->ref_n;
+    cl_uint ref = CL_OBJECT_GET_REF(command_queue);
     FILL_GETINFO_RET (cl_uint, 1, &ref, CL_SUCCESS);
   } else if (param_name == CL_QUEUE_PROPERTIES) {
     FILL_GETINFO_RET (cl_command_queue_properties, 1, &command_queue->props, CL_SUCCESS);
diff --git a/src/cl_command_queue.c b/src/cl_command_queue.c
index b66928f..172ea94 100644
--- a/src/cl_command_queue.c
+++ b/src/cl_command_queue.c
@@ -44,9 +44,7 @@ cl_command_queue_new(cl_context ctx)
 
   assert(ctx);
   TRY_ALLOC_NO_ERR (queue, CALLOC(struct _cl_command_queue));
-  SET_ICD(queue->dispatch)
-  queue->magic = CL_MAGIC_QUEUE_HEADER;
-  queue->ref_n = 1;
+  CL_OBJECT_INIT_BASE(queue, CL_OBJECT_COMMAND_QUEUE_MAGIC);
   queue->ctx = ctx;
   queue->cmrt_event = NULL;
   if ((queue->thread_data = cl_thread_data_create()) == NULL) {
@@ -76,7 +74,7 @@ LOCAL void
 cl_command_queue_delete(cl_command_queue queue)
 {
   assert(queue);
-  if (atomic_dec(&queue->ref_n) != 1) return;
+  if (CL_OBJECT_DEC_REF(queue) != 1) return;
 
 #ifdef HAS_CMRT
   if (queue->cmrt_event != NULL)
@@ -103,14 +101,14 @@ cl_command_queue_delete(cl_command_queue queue)
   cl_context_delete(queue->ctx);
   cl_free(queue->wait_events);
   cl_free(queue->barrier_events);
-  queue->magic = CL_MAGIC_DEAD_HEADER; /* For safety */
+  CL_OBJECT_DESTROY_BASE(queue);
   cl_free(queue);
 }
 
 LOCAL void
 cl_command_queue_add_ref(cl_command_queue queue)
 {
-  atomic_inc(&queue->ref_n);
+  CL_OBJECT_INC_REF(queue);
 }
 
 static void
diff --git a/src/cl_command_queue.h b/src/cl_command_queue.h
index d1b8c44..72b7c55 100644
--- a/src/cl_command_queue.h
+++ b/src/cl_command_queue.h
@@ -23,6 +23,7 @@
 #include "cl_internals.h"
 #include "cl_driver.h"
 #include "cl_thread.h"
+#include "cl_base_object.h"
 #include "CL/cl.h"
 #include <stdint.h>
 
@@ -30,9 +31,7 @@ struct intel_gpgpu;
 
 /* Basically, this is a (kind-of) batch buffer */
 struct _cl_command_queue {
-  DEFINE_ICD(dispatch)
-  uint64_t magic;                      /* To identify it as a command queue */
-  volatile int ref_n;                  /* We reference count this object */
+  _cl_base_object base;
   cl_context ctx;                      /* Its parent context */
   cl_event* barrier_events;               /* Point to array of non-complete user events that block this command queue */
   cl_int    barrier_events_num;           /* Number of Non-complete user events */
@@ -48,6 +47,9 @@ struct _cl_command_queue {
   void* cmrt_event;                    /* the latest CmEvent* of the command queue */
 };
 
+#define CL_OBJECT_COMMAND_QUEUE_MAGIC 0x83650a12b79ce4efLL
+#define CL_OBJECT_IS_COMMAND_QUEUE(obj) (((cl_base_object)obj)->magic == CL_OBJECT_COMMAND_QUEUE_MAGIC)
+
 /* The macro to get the thread specified gpgpu struct. */
 #define GET_QUEUE_THREAD_GPGPU(queue) \
 	cl_gpgpu gpgpu = queue ? cl_get_thread_gpgpu(queue) : NULL;  \
diff --git a/src/cl_utils.h b/src/cl_utils.h
index dce9fd1..02ccc72 100644
--- a/src/cl_utils.h
+++ b/src/cl_utils.h
@@ -136,7 +136,7 @@ do {                                                        \
     err = CL_INVALID_COMMAND_QUEUE;                         \
     goto error;                                             \
   }                                                         \
-  if (UNLIKELY(QUEUE->magic != CL_MAGIC_QUEUE_HEADER)) {    \
+  if (UNLIKELY(!CL_OBJECT_IS_COMMAND_QUEUE(QUEUE))) {      \
     err = CL_INVALID_COMMAND_QUEUE;                         \
     goto error;                                             \
   }                                                         \
-- 
1.7.9.5

____________________________________________________________
FREE ONLINE PHOTOSHARING - Share your photos online with your friends and family!
Visit http://www.inbox.com/photosharing to find out more!




More information about the Beignet mailing list