[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