[Beignet] [PATCH] Fix clGetKernelArgInfo fail on piglit

Yang, Rong R rong.r.yang at intel.com
Tue Sep 1 22:29:26 PDT 2015


LGTM, pushed, thanks.

> -----Original Message-----
> From: Beignet [mailto:beignet-bounces at lists.freedesktop.org] On Behalf Of
> Pan Xiuli
> Sent: Monday, August 31, 2015 11:04
> To: beignet at lists.freedesktop.org
> Cc: Pan, Xiuli
> Subject: [Beignet] [PATCH] Fix clGetKernelArgInfo fail on piglit
> 
> 1.Change the code for null param_value
> 2.Add the return value check for build option "-cl-kernel-arg-info"
> 3.Correct one return value typo
> 
> Signed-off-by: Pan Xiuli <xiuli.pan at intel.com>
> ---
>  src/cl_api.c    |  4 ++++
>  src/cl_kernel.c | 18 +++++++++---------
>  2 files changed, 13 insertions(+), 9 deletions(-)
> 
> diff --git a/src/cl_api.c b/src/cl_api.c index 5c9b250..d1d7a09 100644
> --- a/src/cl_api.c
> +++ b/src/cl_api.c
> @@ -1251,6 +1251,10 @@ cl_int clGetKernelArgInfo(cl_kernel kernel, cl_uint
> arg_index, cl_kernel_arg_inf
>    cl_int err = CL_SUCCESS;
>    CHECK_KERNEL(kernel);
> 
> +  if(strstr(kernel->program->build_opts,"-cl-kernel-arg-info") == NULL ) {
> +    err = CL_KERNEL_ARG_INFO_NOT_AVAILABLE;
> +    goto error;
> +  }
>    if (param_name != CL_KERNEL_ARG_ADDRESS_QUALIFIER
>            && param_name != CL_KERNEL_ARG_ACCESS_QUALIFIER
>            && param_name != CL_KERNEL_ARG_TYPE_NAME diff --git
> a/src/cl_kernel.c b/src/cl_kernel.c index 28d88b6..286e57c 100644
> --- a/src/cl_kernel.c
> +++ b/src/cl_kernel.c
> @@ -227,11 +227,11 @@ cl_get_kernel_arg_info(cl_kernel k, cl_uint
> arg_index, cl_kernel_arg_info param_
> 
>    switch (param_name) {
>    case CL_KERNEL_ARG_ADDRESS_QUALIFIER:
> -    if (param_value_size < sizeof(cl_kernel_arg_address_qualifier))
> -      return CL_INVALID_VALUE;
>      if (param_value_size_ret)
>        *param_value_size_ret = sizeof(cl_kernel_arg_address_qualifier);
>      if (!param_value) return CL_SUCCESS;
> +    if (param_value_size < sizeof(cl_kernel_arg_address_qualifier))
> +      return CL_INVALID_VALUE;
>      if ((cl_ulong)ret_info == 0) {
>        *(cl_kernel_arg_address_qualifier *)param_value =
> CL_KERNEL_ARG_ADDRESS_PRIVATE;
>      } else if ((cl_ulong)ret_info == 1 || (cl_ulong)ret_info == 4) { @@ -243,16
> +243,16 @@ cl_get_kernel_arg_info(cl_kernel k, cl_uint arg_index,
> cl_kernel_arg_info param_
>      } else {
>        /* If no address qualifier is specified, the default address qualifier
>           which is CL_KERNEL_ARG_ADDRESS_PRIVATE is returned. */
> -      *(cl_kernel_arg_address_qualifier *)param_value =
> CL_KERNEL_ARG_ADDRESS_LOCAL;
> +      *(cl_kernel_arg_address_qualifier *)param_value =
> + CL_KERNEL_ARG_ADDRESS_PRIVATE;
>      }
>      return CL_SUCCESS;
> 
>    case CL_KERNEL_ARG_ACCESS_QUALIFIER:
> -    if (param_value_size < sizeof(cl_kernel_arg_access_qualifier))
> -      return CL_INVALID_VALUE;
>      if (param_value_size_ret)
>        *param_value_size_ret = sizeof(cl_kernel_arg_access_qualifier);
>      if (!param_value) return CL_SUCCESS;
> +    if (param_value_size < sizeof(cl_kernel_arg_access_qualifier))
> +      return CL_INVALID_VALUE;
>      if (!strcmp((char*)ret_info, "write_only")) {
>        *(cl_kernel_arg_address_qualifier *)param_value =
> CL_KERNEL_ARG_ACCESS_WRITE_ONLY;
>      } else if (!strcmp((char*)ret_info, "read_only")) { @@ -267,21 +267,21 @@
> cl_get_kernel_arg_info(cl_kernel k, cl_uint arg_index, cl_kernel_arg_info
> param_
>    case CL_KERNEL_ARG_TYPE_NAME:
>    case CL_KERNEL_ARG_NAME:
>      str_len = strlen(ret_info);
> -    if (param_value_size < str_len + 1)
> -      return CL_INVALID_VALUE;
>      if (param_value_size_ret)
>        *param_value_size_ret = str_len + 1;
>      if (!param_value) return CL_SUCCESS;
> +    if (param_value_size < str_len + 1)
> +      return CL_INVALID_VALUE;
>      memcpy(param_value, ret_info, str_len);
>      ((char *)param_value)[str_len] = 0;
>      return CL_SUCCESS;
> 
>    case CL_KERNEL_ARG_TYPE_QUALIFIER:
> -    if (param_value_size < sizeof(cl_kernel_arg_type_qualifier))
> -      return CL_INVALID_VALUE;
>      if (param_value_size_ret)
>        *param_value_size_ret = sizeof(cl_kernel_arg_type_qualifier);
>      if (!param_value) return CL_SUCCESS;
> +    if (param_value_size < sizeof(cl_kernel_arg_type_qualifier))
> +      return CL_INVALID_VALUE;
>      if (strstr((char*)ret_info, "const") &&
>           (arg_type == GBE_ARG_GLOBAL_PTR   ||
>            arg_type == GBE_ARG_CONSTANT_PTR ||
> --
> 2.1.4
> 
> _______________________________________________
> Beignet mailing list
> Beignet at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/beignet


More information about the Beignet mailing list