summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>2020-09-02 12:07:00 +0200
committerEric Engestrom <eric@engestrom.ch>2020-09-16 19:23:28 +0200
commit6a766857a447a2271480b0f5d857f7e10da022e4 (patch)
treee58b694b3a9a6173258b5aa2283916b26aa41f56
parent2dc3d4c6485a95288ceec59fffd93a17509d1388 (diff)
radeon/vcn: set dec->bs_ptr = NULL on unmap
To avoid using a dangling pointer. Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/1308 Cc: mesa-stable Reviewed-by: Boyuan Zhang <boyuan.zhang@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6556> (cherry picked from commit 7d853966df4f6d0ded845a6ba2b2af7c46404157)
-rw-r--r--.pick_status.json2
-rw-r--r--src/gallium/drivers/radeon/radeon_vcn_dec.c5
-rw-r--r--src/gallium/drivers/radeon/radeon_vcn_dec_jpeg.c1
3 files changed, 7 insertions, 1 deletions
diff --git a/.pick_status.json b/.pick_status.json
index a840c59493c..64da919b6fa 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -220,7 +220,7 @@
"description": "radeon/vcn: set dec->bs_ptr = NULL on unmap",
"nominated": true,
"nomination_type": 0,
- "resolution": 0,
+ "resolution": 1,
"master_sha": null,
"because_sha": null
},
diff --git a/src/gallium/drivers/radeon/radeon_vcn_dec.c b/src/gallium/drivers/radeon/radeon_vcn_dec.c
index 025307121fe..f7379a1ba83 100644
--- a/src/gallium/drivers/radeon/radeon_vcn_dec.c
+++ b/src/gallium/drivers/radeon/radeon_vcn_dec.c
@@ -940,6 +940,7 @@ static struct pb_buffer *rvcn_dec_message_decode(struct radeon_decoder *dec,
PIPE_TRANSFER_WRITE | RADEON_TRANSFER_TEMPORARY);
fill_probs_table(ptr);
dec->ws->buffer_unmap(dec->ctx.res->buf);
+ dec->bs_ptr = NULL;
}
break;
}
@@ -1053,6 +1054,7 @@ static void send_msg_buf(struct radeon_decoder *dec)
/* unmap the buffer */
dec->ws->buffer_unmap(buf->res->buf);
+ dec->bs_ptr = NULL;
dec->msg = NULL;
dec->fb = NULL;
dec->it = NULL;
@@ -1343,6 +1345,7 @@ static void radeon_dec_decode_bitstream(struct pipe_video_codec *decoder,
if (new_size > buf->res->buf->size) {
dec->ws->buffer_unmap(buf->res->buf);
+ dec->bs_ptr = NULL;
if (!si_vid_resize_buffer(dec->screen, dec->cs, buf, new_size)) {
RVID_ERR("Can't resize bitstream buffer!");
return;
@@ -1376,6 +1379,7 @@ void send_cmd_dec(struct radeon_decoder *dec, struct pipe_video_buffer *target,
memset(dec->bs_ptr, 0, align(dec->bs_size, 128) - dec->bs_size);
dec->ws->buffer_unmap(bs_buf->res->buf);
+ dec->bs_ptr = NULL;
map_msg_fb_it_probs_buf(dec);
dt = rvcn_dec_message_decode(dec, target, picture);
@@ -1535,6 +1539,7 @@ struct pipe_video_codec *radeon_create_decoder(struct pipe_context *context,
ptr += FB_BUFFER_OFFSET + FB_BUFFER_SIZE;
fill_probs_table(ptr);
dec->ws->buffer_unmap(buf->res->buf);
+ dec->bs_ptr = NULL;
}
}
diff --git a/src/gallium/drivers/radeon/radeon_vcn_dec_jpeg.c b/src/gallium/drivers/radeon/radeon_vcn_dec_jpeg.c
index e153436f1d7..538493b476d 100644
--- a/src/gallium/drivers/radeon/radeon_vcn_dec_jpeg.c
+++ b/src/gallium/drivers/radeon/radeon_vcn_dec_jpeg.c
@@ -288,6 +288,7 @@ void send_cmd_jpeg(struct radeon_decoder *dec, struct pipe_video_buffer *target,
memset(dec->bs_ptr, 0, align(dec->bs_size, 128) - dec->bs_size);
dec->ws->buffer_unmap(bs_buf->res->buf);
+ dec->bs_ptr = NULL;
dt = radeon_jpeg_get_decode_param(dec, target, picture);