[Mesa-dev] [PATCH] radv/winsys: Fail early on overgrown cs.

Bas Nieuwenhuizen bas at basnieuwenhuizen.nl
Sun Oct 16 11:07:18 UTC 2016


Pushed, thanks.

- Bas

On Thu, Oct 13, 2016 at 10:54 PM, Gustaw Smolarczyk
<wielkiegie at gmail.com> wrote:
> When !use_ib_bos, we can't easily chain ibs one to another. If the
> required cs size grows over 1Mi - 8 dwords just fail the cs so that we
> won't assert-fail in radv_amdgpu_winsys_cs_submit later on.
> ---
> Please, push the patch after it has been reviewed.
>
>  src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c | 18 ++++++++++++++----
>  1 file changed, 14 insertions(+), 4 deletions(-)
>
> diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
> index 41dfcd3..b8558fa 100644
> --- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
> +++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
> @@ -187,12 +187,22 @@ static void radv_amdgpu_cs_grow(struct radeon_winsys_cs *_cs, size_t min_size)
>         }
>
>         if (!cs->ws->use_ib_bos) {
> -               uint64_t ib_size = MAX2((cs->base.cdw + min_size) * 4 + 16,
> -                                       cs->base.max_dw * 4 * 2);
> -               uint32_t *new_buf = realloc(cs->base.buf, ib_size);
> +               const uint64_t limit_dws = 0xffff8;
> +               uint64_t ib_dws = MAX2(cs->base.cdw + min_size,
> +                                      MIN2(cs->base.max_dw * 2, limit_dws));
> +
> +               /* The total ib size cannot exceed limit_dws dwords. */
> +               if (ib_dws > limit_dws)
> +               {
> +                       cs->failed = true;
> +                       cs->base.cdw = 0;
> +                       return;
> +               }
> +
> +               uint32_t *new_buf = realloc(cs->base.buf, ib_dws * 4);
>                 if (new_buf) {
>                         cs->base.buf = new_buf;
> -                       cs->base.max_dw = ib_size / 4;
> +                       cs->base.max_dw = ib_dws;
>                 } else {
>                         cs->failed = true;
>                         cs->base.cdw = 0;
> --
> 2.10.0
>
> _______________________________________________
> 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