[Mesa-dev] [PATCH] winsys/amdgpu: avoid potential segfault in amdgpu_bo_map()

Marek Olšák maraeo at gmail.com
Thu Feb 2 19:41:53 UTC 2017


Cc stable?

Reviewed-by: Marek Olšák <marek.olsak at amd.com>

Marek

On Thu, Feb 2, 2017 at 6:40 PM, Samuel Pitoiset
<samuel.pitoiset at gmail.com> wrote:
> cs can be NULL when it comes from r600_buffer_map_sync_with_rings()
> to avoid doing the same checks. It was checked for write mappings
> but not for read mappings.
>
> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
> ---
>  src/gallium/winsys/amdgpu/drm/amdgpu_bo.c | 17 ++++++++++-------
>  1 file changed, 10 insertions(+), 7 deletions(-)
>
> diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c
> index 5ee27b8ede..5b9bd8c6dd 100644
> --- a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c
> +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c
> @@ -254,14 +254,17 @@ static void *amdgpu_bo_map(struct pb_buffer *buf,
>               * (neither one is changing it).
>               *
>               * Only check whether the buffer is being used for write. */
> -            if (cs && amdgpu_bo_is_referenced_by_cs_with_usage(cs, bo,
> -                                                               RADEON_USAGE_WRITE)) {
> -               cs->flush_cs(cs->flush_data, 0, NULL);
> -            } else {
> -               /* Try to avoid busy-waiting in amdgpu_bo_wait. */
> -               if (p_atomic_read(&bo->num_active_ioctls))
> -                  amdgpu_cs_sync_flush(rcs);
> +            if (cs) {
> +               if (amdgpu_bo_is_referenced_by_cs_with_usage(cs, bo,
> +                                                            RADEON_USAGE_WRITE)) {
> +                  cs->flush_cs(cs->flush_data, 0, NULL);
> +               } else {
> +                  /* Try to avoid busy-waiting in amdgpu_bo_wait. */
> +                  if (p_atomic_read(&bo->num_active_ioctls))
> +                     amdgpu_cs_sync_flush(rcs);
> +               }
>              }
> +
>              amdgpu_bo_wait((struct pb_buffer*)bo, PIPE_TIMEOUT_INFINITE,
>                             RADEON_USAGE_WRITE);
>           } else {
> --
> 2.11.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