Messages in this thread |  | | Date | Tue, 13 Dec 2022 10:23:21 +0100 | | Subject | Re: [PATCH 3/5] media: mediatek: vcodec: move lat_buf to the top of core list | | From | AngeloGioacchino Del Regno <> |
| |
Il 10/12/22 08:32, Yunfei Dong ha scritto: > Current instance will decode done when begin to wait lat buf full, > move the lat_buf of current instance to the top of core list to make > sure current instance's lat_buf will be used firstly. > > Fixes: 365e4ba01df4 ("media: mtk-vcodec: Add work queue for core hardware decode") > Signed-off-by: Yunfei Dong <yunfei.dong@mediatek.com> > --- > .../platform/mediatek/vcodec/vdec_msg_queue.c | 16 ++++++++++++++++ > .../platform/mediatek/vcodec/vdec_msg_queue.h | 2 ++ > 2 files changed, 18 insertions(+) > > diff --git a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c > index 2b88065d4d2a..6275536d5063 100644 > --- a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c > +++ b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c > @@ -182,9 +182,24 @@ void vdec_msg_queue_update_ube_wptr(struct vdec_msg_queue *msg_queue, uint64_t u > > bool vdec_msg_queue_wait_lat_buf_full(struct vdec_msg_queue *msg_queue) > { > + struct vdec_lat_buf *buf, *tmp; > + struct vdec_msg_queue_ctx *core_ctx; > long timeout_jiff; > int ret; > > + core_ctx = &msg_queue->ctx->dev->msg_queue_core_ctx; > + spin_lock(&core_ctx->ready_lock); > + list_for_each_entry_safe(buf, tmp, &core_ctx->ready_queue, core_list) { > + if (buf && buf->ctx == msg_queue->ctx) { > + spin_lock(&msg_queue->lat_ctx.ready_lock); > + list_move(&buf->core_list, &core_ctx->ready_queue); > + spin_unlock(&msg_queue->lat_ctx.ready_lock); > + queue_work(buf->ctx->dev->core_workqueue, > + &buf->ctx->msg_queue.core_work); > + } > + } > + spin_unlock(&core_ctx->ready_lock); > + > timeout_jiff = msecs_to_jiffies(1000 * (NUM_BUFFER_COUNT + 2)); > ret = wait_event_timeout(msg_queue->lat_ctx.ready_to_use, > msg_queue->lat_ctx.ready_num == NUM_BUFFER_COUNT, > @@ -268,6 +283,7 @@ int vdec_msg_queue_init(struct vdec_msg_queue *msg_queue, > vdec_msg_queue_init_ctx(&msg_queue->lat_ctx, MTK_VDEC_LAT0); > INIT_WORK(&msg_queue->core_work, vdec_msg_queue_core_work); > > + msg_queue->ctx = ctx;
I'd move that at the beginning of this function, even before calling vdec_msg_queue_init_ctx(), as this assignment is not at all expensive.
In any case,
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
|  |