[Beignet] [PATCH] utests: fix image_from_buffer bugs

Yang, Rong R rong.r.yang at intel.com
Thu Nov 5 23:00:01 PST 2015


Pushed.

> -----Original Message-----
> From: Pan, Xiuli
> Sent: Friday, November 6, 2015 9:43
> To: Luo, Xionghu; beignet at lists.freedesktop.org
> Cc: Yang, Rong R
> Subject: RE: [Beignet] [PATCH] utests: fix image_from_buffer bugs
> 
> Ping for pushed.
> 
> -----Original Message-----
> From: Luo, Xionghu
> Sent: Wednesday, October 28, 2015 9:42 AM
> To: Pan, Xiuli <xiuli.pan at intel.com>; beignet at lists.freedesktop.org
> Cc: Pan, Xiuli <xiuli.pan at intel.com>
> Subject: RE: [Beignet] [PATCH] utests: fix image_from_buffer bugs
> 
> This patch LGTM.
> Thanks.
> 
> Luo Xionghu
> Best Regards
> 
> -----Original Message-----
> From: Beignet [mailto:beignet-bounces at lists.freedesktop.org] On Behalf Of
> Pan Xiuli
> Sent: Tuesday, October 27, 2015 2:16 PM
> To: beignet at lists.freedesktop.org
> Cc: Pan, Xiuli
> Subject: [Beignet] [PATCH] utests: fix image_from_buffer bugs
> 
> Fixed 2 bugs:
> 1.This test case uses usrptr, so we should never free the orginal buffer space,
> otherwise undefined behavior would happen: adding or losing one header
> file causing data in front broken, NDRangeKernel fail etc.
> 2.The utest need to test when to free image from buffer and the buffer, but
> the utest helper function will released it again and causes libc made some
> warnings. We just make the global variable to NULL to avoid these questions.
> These will fix the utests image_from_buffer broken.
> 
> Signed-off-by: Pan Xiuli <xiuli.pan at intel.com>
> ---
>  utests/image_from_buffer.cpp | 17 +++++++++--------
>  1 file changed, 9 insertions(+), 8 deletions(-)
> 
> diff --git a/utests/image_from_buffer.cpp b/utests/image_from_buffer.cpp
> index 78d6797..b1171d1 100644
> --- a/utests/image_from_buffer.cpp
> +++ b/utests/image_from_buffer.cpp
> @@ -32,13 +32,13 @@ static void image_from_buffer(void)
> 
>    // Setup kernel and images
>    size_t buffer_sz = sizeof(uint32_t) * w * h;
> -  //buf_data[0] = (uint32_t*) malloc(buffer_sz);
> -  buf_data[0] = (uint32_t*)memalign(base_address_alignment, buffer_sz);
> +  uint32_t* src_data;
> +  src_data = (uint32_t*)memalign(base_address_alignment, buffer_sz);
>    for (uint32_t j = 0; j < h; ++j)
>      for (uint32_t i = 0; i < w; i++)
> -      ((uint32_t*)buf_data[0])[j * w + i] = j * w + i;
> +      src_data[j * w + i] = j * w + i;
> 
> -  cl_mem buff = clCreateBuffer(ctx, CL_MEM_READ_ONLY |
> CL_MEM_USE_HOST_PTR, buffer_sz, buf_data[0], &error);
> +  cl_mem buff = clCreateBuffer(ctx, CL_MEM_READ_ONLY |
> + CL_MEM_USE_HOST_PTR, buffer_sz, src_data, &error);
> 
>    OCL_ASSERT(error == CL_SUCCESS);
>    format.image_channel_order = CL_RGBA; @@ -49,7 +49,7 @@ static void
> image_from_buffer(void)
>    desc.image_row_pitch = w * sizeof(uint32_t);
> 
>    desc.buffer = 0;
> -  OCL_CREATE_IMAGE(buf[0], CL_MEM_COPY_HOST_PTR, &format, &desc,
> buf_data[0]);
> +  OCL_CREATE_IMAGE(buf[0], CL_MEM_COPY_HOST_PTR, &format, &desc,
> + src_data);
> 
>    desc.buffer = buff;
>    OCL_CREATE_IMAGE(buf[1], 0, &format, &desc, NULL); @@ -58,9 +58,6
> @@ static void image_from_buffer(void)
>    desc.image_row_pitch = 0;
>    OCL_CREATE_IMAGE(buf[2], CL_MEM_WRITE_ONLY, &format, &desc,
> NULL);
> 
> -  free(buf_data[0]);
> -  buf_data[0] = NULL;
> -
>    OCL_SET_ARG(0, sizeof(cl_mem), &buf[1]);
>    OCL_SET_ARG(1, sizeof(cl_mem), &buf[2]);
> 
> @@ -87,6 +84,8 @@ static void image_from_buffer(void)
>    OCL_UNMAP_BUFFER_GTT(1);
>    OCL_UNMAP_BUFFER_GTT(2);
> 
> +  free(src_data);
> +
>    //spec didn't tell the sequence of release buffer of image. so release either
> buffer or image first is ok here.
>    //we follow the rule of destroy the bo at the last release, then the access of
> buffer after release image is legal
>    //and vice verse.
> @@ -98,6 +97,8 @@ static void image_from_buffer(void)
>    clReleaseMemObject(buf[1]);
>  #endif
>    clReleaseMemObject(buf[2]);
> +  buf[1] = NULL;
> +  buf[2] = NULL;
>  }
> 
>  MAKE_UTEST_FROM_FUNCTION(image_from_buffer);
> --
> 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