LGTM, pushed, thanks.
> -----Original Message----- > From: Beignet [mailto:[email protected]] On Behalf Of > [email protected] > Sent: Thursday, September 29, 2016 18:05 > To: [email protected] > Subject: [Beignet] [PATCH V2] Fix a bug for event error status. > > From: Junyan He <[email protected]> > > V2: > Move the event list status check to clWaitForEvents API. > > Signed-off-by: Junyan He <[email protected]> > --- > src/cl_api.c | 5 +++-- > src/cl_api_event.c | 8 ++++++++ > src/cl_event.c | 18 ++++++++++-------- > 3 files changed, 21 insertions(+), 10 deletions(-) > > diff --git a/src/cl_api.c b/src/cl_api.c index f8c48de..1d4c5a1 100644 > --- a/src/cl_api.c > +++ b/src/cl_api.c > @@ -1280,6 +1280,7 @@ clGetEventInfo(cl_event event, > size_t * param_value_size_ret) > { > cl_int err = CL_SUCCESS; > + cl_int status; > CHECK_EVENT(event); > > if (param_name == CL_EVENT_COMMAND_QUEUE) { > @@ -1289,8 +1290,8 @@ clGetEventInfo(cl_event event, > } else if (param_name == CL_EVENT_COMMAND_TYPE) { > FILL_GETINFO_RET (cl_command_type, 1, &event->event_type, > CL_SUCCESS); > } else if (param_name == CL_EVENT_COMMAND_EXECUTION_STATUS) { > - cl_event_get_status(event); > - FILL_GETINFO_RET (cl_int, 1, &event->status, CL_SUCCESS); > + status = cl_event_get_status(event); > + FILL_GETINFO_RET (cl_int, 1, &status, CL_SUCCESS); > } else if (param_name == CL_EVENT_REFERENCE_COUNT) { > cl_uint ref = CL_OBJECT_GET_REF(event); > FILL_GETINFO_RET (cl_int, 1, &ref, CL_SUCCESS); diff --git > a/src/cl_api_event.c b/src/cl_api_event.c index aec2cdf..63bccf2 100644 > --- a/src/cl_api_event.c > +++ b/src/cl_api_event.c > @@ -190,6 +190,7 @@ clWaitForEvents(cl_uint num_events, > const cl_event *event_list) { > cl_int err = CL_SUCCESS; > + cl_uint i; > > if (num_events == 0 || event_list == NULL) { > return CL_INVALID_VALUE; > @@ -200,6 +201,13 @@ clWaitForEvents(cl_uint num_events, > return err; > } > > + for (i = 0; i < num_events; i++) { > + if (cl_event_get_status(event_list[i]) < CL_COMPLETE) { > + err = CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST; > + return err; > + } > + } > + > err = cl_event_wait_for_events_list(num_events, event_list); > return err; > } > diff --git a/src/cl_event.c b/src/cl_event.c index 4acd619..0804dbd 100644 > --- a/src/cl_event.c > +++ b/src/cl_event.c > @@ -436,6 +436,8 @@ cl_event_wait_for_events_list(cl_uint num_events, > const cl_event *event_list) > while (e->status > CL_COMPLETE) { > CL_OBJECT_WAIT_ON_COND(e); > } > + > + assert(e->status <= CL_COMPLETE); > /* Iff some error happened, return the error. */ > if (e->status < CL_COMPLETE) { > ret = CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST; > @@ -467,16 +469,11 @@ cl_event_check_waitlist(cl_uint > num_events_in_wait_list, const cl_event *event_w > > /* check the event and context */ > for (i = 0; i < num_events_in_wait_list; i++) { > - if (event_wait_list[i] == NULL > || !CL_OBJECT_IS_EVENT(event_wait_list[i])) { > + if (!CL_OBJECT_IS_EVENT(event_wait_list[i])) { > err = CL_INVALID_EVENT; > break; > } > > - if (cl_event_get_status(event_wait_list[i]) < CL_COMPLETE) { > - err = CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST; > - break; > - } > - > if (event == event_wait_list + i) { /* Pointer of element of the wait > list */ > err = CL_INVALID_EVENT_WAIT_LIST; > break; > @@ -541,16 +538,21 @@ cl_event_is_ready(cl_event event) { > int i; > int status; > + int ret_status = CL_COMPLETE; > > for (i = 0; i < event->depend_event_num; i++) { > status = cl_event_get_status(event->depend_events[i]); > > - if (status != CL_COMPLETE) { > + if (status > CL_COMPLETE) { // Find some not ready, just OK > return status; > } > + > + if (status < CL_COMPLETE) { // Record some error. > + ret_status = status; > + } > } > > - return CL_COMPLETE; > + return ret_status; > } > > LOCAL cl_event > -- > 2.7.4 > > > > _______________________________________________ > Beignet mailing list > [email protected] > https://lists.freedesktop.org/mailman/listinfo/beignet _______________________________________________ Beignet mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/beignet
