[Mesa-dev] [PATCH] radv/gfx9: allocate events from uncached VA space

Bas Nieuwenhuizen bas at basnieuwenhuizen.nl
Thu Sep 7 07:58:46 UTC 2017


Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>

And nominate for stable?

On Thu, Sep 7, 2017, at 05:44, Dave Airlie wrote:
> From: Dave Airlie <airlied at redhat.com>
> 
> This copies what amdgpu-pro does, and allocates the memory
> for an event with an uncached mtype.
> 
> This fixes hangs with:
> dEQP-VK.api.command_buffers.record_simul_use_primary
> 
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
>  src/amd/vulkan/radv_device.c                  | 2 +-
>  src/amd/vulkan/radv_radeon_winsys.h           | 3 ++-
>  src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c | 9 ++++++++-
>  3 files changed, 11 insertions(+), 3 deletions(-)
> 
> diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
> index 0b25469..12f6fe6 100644
> --- a/src/amd/vulkan/radv_device.c
> +++ b/src/amd/vulkan/radv_device.c
> @@ -2793,7 +2793,7 @@ VkResult radv_CreateEvent(
>  
>  	event->bo = device->ws->buffer_create(device->ws, 8, 8,
>  					      RADEON_DOMAIN_GTT,
> -                                             RADEON_FLAG_CPU_ACCESS);
> +                                             RADEON_FLAG_VA_UNCACHED |
> RADEON_FLAG_CPU_ACCESS);
>  	if (!event->bo) {
>  		vk_free2(&device->alloc, pAllocator, event);
>  		return VK_ERROR_OUT_OF_DEVICE_MEMORY;
> diff --git a/src/amd/vulkan/radv_radeon_winsys.h
> b/src/amd/vulkan/radv_radeon_winsys.h
> index 8e2ba74..a9c1f54 100644
> --- a/src/amd/vulkan/radv_radeon_winsys.h
> +++ b/src/amd/vulkan/radv_radeon_winsys.h
> @@ -51,7 +51,8 @@ enum radeon_bo_flag { /* bitfield */
>  	RADEON_FLAG_GTT_WC =        (1 << 0),
>  	RADEON_FLAG_CPU_ACCESS =    (1 << 1),
>  	RADEON_FLAG_NO_CPU_ACCESS = (1 << 2),
> -       RADEON_FLAG_VIRTUAL =       (1 << 3)
> +       RADEON_FLAG_VIRTUAL =       (1 << 3),
> +       RADEON_FLAG_VA_UNCACHED =   (1 << 4),
>  };
>  
>  enum radeon_bo_usage { /* bitfield */
> diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c
> b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c
> index 75444d5..0af5a39 100644
> --- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c
> +++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c
> @@ -323,7 +323,14 @@ radv_amdgpu_winsys_bo_create(struct radeon_winsys
> *_ws,
>  		goto error_bo_alloc;
>  	}
>  
> -       r = amdgpu_bo_va_op(buf_handle, 0, size, va, 0,
> AMDGPU_VA_OP_MAP);
> +       uint32_t raw_flags = AMDGPU_VM_PAGE_READABLE |
> AMDGPU_VM_PAGE_WRITEABLE |
> +               AMDGPU_VM_PAGE_EXECUTABLE;
> +       if (flags & RADEON_FLAG_VA_UNCACHED)
> +               raw_flags |= AMDGPU_VM_MTYPE_UC;
> +
> +       size = ALIGN(size, getpagesize());
> +
> +       r = amdgpu_bo_va_op_raw(ws->dev, buf_handle, 0, size, va,
> raw_flags, AMDGPU_VA_OP_MAP);
>  	if (r)
>  		goto error_va_map;
>  
> -- 
> 2.9.3
> 
> _______________________________________________
> 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