Strange profiling value are returned when running clGetEventProfilingInfo on G77

I am running OpenCL program on Mali-G77 r0p1, I want to query profiling data with OpenCL program. Sample OpenCL program like below:

/* Enqueue kernel */
clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &num_items,
NULL, 0, NULL, &prof_event);
if(err < 0) {
perror("Couldn't enqueue the kernel");
/* Finish processing the queue and get profiling information */
clGetEventProfilingInfo(prof_event, CL_PROFILING_COMMAND_QUEUED, sizeof(queued_time), &queued_time, NULL);
clGetEventProfilingInfo(prof_event, CL_PROFILING_COMMAND_SUBMIT, sizeof(submit_time), &submit_time, NULL); 
clGetEventProfilingInfo(prof_event, CL_PROFILING_COMMAND_START, sizeof(time_start), &time_start, NULL);
clGetEventProfilingInfo(prof_event, CL_PROFILING_COMMAND_END, sizeof(time_end), &time_end, NULL);
printf("queued_time = %lu\n", queued_time);
printf("submit_time = %lu\n", submit_time);
printf("time_start= %lu\n", time_start);
printf("time_end = %lu\n", time_end);

After running upper code, I get following result:

You can see the results are very wired, there are so much gap between time_start and submit_time. 
I can't get real submitted time by subtraction "time_start - submit_time", what is the problem with clGetEventProfilingInfo()?
Why it return so strange value?

More questions in this forum