[Beignet] [Patch V2] Refine error check in clCreateContext()

Ruiling Song ruiling.song at intel.com
Thu Jun 6 01:44:27 PDT 2013


v2: check is also needed in clCreateContextFromType()

Signed-off-by: Ruiling Song <ruiling.song at intel.com>
---
 src/cl_api.c     |   27 +++++++++++++++++++++++++--
 src/cl_context.c |   21 +--------------------
 2 files changed, 26 insertions(+), 22 deletions(-)

diff --git a/src/cl_api.c b/src/cl_api.c
index 6887add..a813c65 100644
--- a/src/cl_api.c
+++ b/src/cl_api.c
@@ -55,6 +55,12 @@ cl_check_device_type(cl_device_type device_type)
   return CL_SUCCESS;
 }
 
+static cl_int
+cl_device_id_is_ok(const cl_device_id device)
+{
+  return device != cl_get_gt_device() ? CL_FALSE : CL_TRUE;
+}
+
 cl_int
 clGetPlatformIDs(cl_uint          num_entries,
                  cl_platform_id * platforms,
@@ -161,12 +167,27 @@ clCreateContext(const cl_context_properties *  properties,
                 void *                         user_data,
                 cl_int *                       errcode_ret)
 {
-  return cl_create_context(properties,
+  cl_int err = CL_SUCCESS;
+  cl_context context = NULL;
+
+  /* Assert parameters correctness */
+  INVALID_VALUE_IF (devices == NULL);
+  INVALID_VALUE_IF (num_devices == 0);
+  INVALID_VALUE_IF (pfn_notify == NULL && user_data != NULL);
+
+  /* Now check if the user is asking for the right device */
+  INVALID_DEVICE_IF (cl_device_id_is_ok(*devices) == CL_FALSE);
+
+  context = cl_create_context(properties,
                            num_devices,
                            devices,
                            pfn_notify,
                            user_data,
-                           errcode_ret);
+                           &err);
+error:
+  if (errcode_ret)
+    *errcode_ret = err;
+  return context;
 }
 
 cl_context
@@ -181,6 +202,8 @@ clCreateContextFromType(const cl_context_properties *  properties,
   cl_device_id devices[1];
   cl_uint num_devices = 1;
 
+  INVALID_VALUE_IF (pfn_notify == NULL && user_data != NULL);
+
   err = cl_check_device_type(device_type);
   if(err != CL_SUCCESS) {
     goto error;
diff --git a/src/cl_context.c b/src/cl_context.c
index fc75d62..6cde988 100644
--- a/src/cl_context.c
+++ b/src/cl_context.c
@@ -87,11 +87,7 @@ error:
   return err;
 }
 
-static cl_int
-cl_device_id_is_ok(const cl_device_id device)
-{
-  return device != cl_get_gt_device() ? CL_FALSE : CL_TRUE;
-}
+
 
 LOCAL cl_context
 cl_create_context(const cl_context_properties *  properties,
@@ -106,28 +102,13 @@ cl_create_context(const cl_context_properties *  properties,
   cl_context ctx = NULL;
   cl_int err = CL_SUCCESS;
 
-  /* Assert parameters correctness */
-  INVALID_VALUE_IF (devices == NULL);
-  INVALID_VALUE_IF (num_devices == 0);
-  INVALID_VALUE_IF (pfn_notify == NULL && user_data != NULL);
-
   /* XXX */
   FATAL_IF (pfn_notify != NULL || user_data != NULL, "Unsupported call back");
   FATAL_IF (num_devices != 1, "Only one device is supported");
 
   /* Check that we are getting the right platform */
-//  if (UNLIKELY((err = cl_context_properties_is_ok(properties)) != CL_SUCCESS))
-//    goto error;
-
   if (UNLIKELY(((err = cl_context_properties_process(properties, &props)) != CL_SUCCESS)))
     goto error;
-  /* platform = intel_platform; */
-
-  /* Now check if the user is asking for the right device */
-  if (UNLIKELY(cl_device_id_is_ok(*devices) == CL_FALSE)) {
-    err = CL_INVALID_DEVICE;
-    goto error;
-  }
 
   /* We are good */
   if (UNLIKELY((ctx = cl_context_new(&props)) == NULL)) {
-- 
1.7.9.5



More information about the Beignet mailing list