at page 124 of the specification, about clGetEventProfilingInfo, we can read :

returns CL_SUCCESS if the function is executed successfully and the
profiling information has been recorded,
returns CL_PROFILING_INFO_NOT_AVAILABLE if the
CL_QUEUE_PROFILING_ENABLE flag is not set for the command-queue and if the profiling
information is currently not available (because the command identified by event has not
completed)
, returns CL_INVALID_VALUE if param_name is not valid, or if size in bytes
specified by param_value_size is < size of return type as described in table 5.16 and
param_value is not NULL, and returns CL_INVALID_EVENT if event is a not a valid event
object.
Should'nt not be :
"returns CL_PROFILING_INFO_NOT_AVAILABLE if the
CL_QUEUE_PROFILING_ENABLE flag is not set for the command-queue OR if the profiling
information is currently not available (because the command identified by event has not
completed)"

or

"returns CL_PROFILING_INFO_NOT_AVAILABLE if the
CL_QUEUE_PROFILING_ENABLE flag is [remove_this_not]not[/remove_this_not] set for the command-queue OR if the profiling
information is currently not available (because the command identified by event has not
completed)"

I think the first solution would be the best.

When command queue profiling is'nt enabled, the last AMD OpenCL SDK raise CL_QUEUE_PROFILING_ENABLE, but last nVidia implementation raise CL_INVALID_VALUE.