At some systems, function aligned_alloc is not supported. From Linux Programmer's Manual: The function aligned_alloc() was added to glibc in version 2.16. The function posix_memalign() is available since glibc 2.1.91.
V2: add check for return value of posix_memalign Signed-off-by: Guo Yejun <[email protected]> --- src/cl_device_id.c | 18 +++++++++++------- utests/runtime_use_host_ptr_buffer.cpp | 5 ++++- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/cl_device_id.c b/src/cl_device_id.c index e3b0c64..2031592 100644 --- a/src/cl_device_id.c +++ b/src/cl_device_id.c @@ -407,14 +407,18 @@ brw_gt3_break: cl_buffer_mgr bufmgr = cl_driver_get_bufmgr(dummy); const size_t sz = 4096; - char* host_ptr = (char*)aligned_alloc(4096, sz); - cl_buffer bo = cl_buffer_alloc_userptr(bufmgr, "CL memory object", host_ptr, sz, 0); - if (bo == NULL) - ret->host_unified_memory = CL_FALSE; + void* host_ptr = NULL; + int err = posix_memalign(&host_ptr, 4096, sz); + if (err == 0) { + cl_buffer bo = cl_buffer_alloc_userptr(bufmgr, "CL memory object", host_ptr, sz, 0); + if (bo == NULL) + ret->host_unified_memory = CL_FALSE; + else + cl_buffer_unreference(bo); + free(host_ptr); + } else - cl_buffer_unreference(bo); - - free(host_ptr); + ret->host_unified_memory = CL_FALSE; cl_driver_delete(dummy); #endif diff --git a/utests/runtime_use_host_ptr_buffer.cpp b/utests/runtime_use_host_ptr_buffer.cpp index ca06f4b..4603f90 100644 --- a/utests/runtime_use_host_ptr_buffer.cpp +++ b/utests/runtime_use_host_ptr_buffer.cpp @@ -6,7 +6,10 @@ static void runtime_use_host_ptr_buffer(void) // Setup kernel and buffers OCL_CREATE_KERNEL("runtime_use_host_ptr_buffer"); - buf_data[0] = (uint32_t*) aligned_alloc(4096, sizeof(uint32_t) * n); + + int ret = posix_memalign(&buf_data[0], 4096, sizeof(uint32_t) * n); + OCL_ASSERT(ret == 0); + for (uint32_t i = 0; i < n; ++i) ((uint32_t*)buf_data[0])[i] = i; OCL_CREATE_BUFFER(buf[0], CL_MEM_USE_HOST_PTR, n * sizeof(uint32_t), buf_data[0]); -- 2.1.0 _______________________________________________ Beignet mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/beignet
