[Mesa-dev] [PATCH] winsys/amdgpu: allow non page-aligned size bo creation from pointer

Marek Olšák maraeo at gmail.com
Tue Feb 6 17:52:24 UTC 2018


Pushed, thanks!

Marek

On Sun, Feb 4, 2018 at 8:24 PM, Michal Navratil <f.josef at email.cz> wrote:
> Fix INVALID_OPERATION caused by BufferData with target
> EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD when the buffer size is
> not page aligned.
> ---
>  src/gallium/winsys/amdgpu/drm/amdgpu_bo.c | 11 +++++++----
>  1 file changed, 7 insertions(+), 4 deletions(-)
>
> diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c
> index 5d565ff..ba48cad 100644
> --- a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c
> +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c
> @@ -1388,19 +1388,22 @@ static struct pb_buffer *amdgpu_bo_from_ptr(struct radeon_winsys *rws,
>      struct amdgpu_winsys_bo *bo;
>      uint64_t va;
>      amdgpu_va_handle va_handle;
> +    /* Avoid failure when the size is not page aligned */
> +    uint64_t aligned_size = align64(size, ws->info.gart_page_size);
>
>      bo = CALLOC_STRUCT(amdgpu_winsys_bo);
>      if (!bo)
>          return NULL;
>
> -    if (amdgpu_create_bo_from_user_mem(ws->dev, pointer, size, &buf_handle))
> +    if (amdgpu_create_bo_from_user_mem(ws->dev, pointer,
> +                                       aligned_size, &buf_handle))
>          goto error;
>
>      if (amdgpu_va_range_alloc(ws->dev, amdgpu_gpu_va_range_general,
> -                              size, 1 << 12, 0, &va, &va_handle, 0))
> +                              aligned_size, 1 << 12, 0, &va, &va_handle, 0))
>          goto error_va_alloc;
>
> -    if (amdgpu_bo_va_op(buf_handle, 0, size, va, 0, AMDGPU_VA_OP_MAP))
> +    if (amdgpu_bo_va_op(buf_handle, 0, aligned_size, va, 0, AMDGPU_VA_OP_MAP))
>          goto error_va_map;
>
>      /* Initialize it. */
> @@ -1416,7 +1419,7 @@ static struct pb_buffer *amdgpu_bo_from_ptr(struct radeon_winsys *rws,
>      bo->initial_domain = RADEON_DOMAIN_GTT;
>      bo->unique_id = __sync_fetch_and_add(&ws->next_bo_unique_id, 1);
>
> -    ws->allocated_gtt += align64(bo->base.size, ws->info.gart_page_size);
> +    ws->allocated_gtt += aligned_size;
>
>      amdgpu_add_buffer_to_global_list(bo);
>
> --
> 2.7.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list