From dfb726bf21246d6c36ea2d0c084aebd7e435a135 Mon Sep 17 00:00:00 2001 From: Rimon Xu Date: Fri, 17 Nov 2023 16:50:39 +0800 Subject: [PATCH] video: rockchip: vtunnel: buffer ID should generate by instance When resetting an instance, the buffer generation ID will be changed, but when receiving images, the ID will be used to determine whether it is an expired buffer. Therefore, the ID generator should be placed in the instance instead of the device. Change-Id: I707403dd22dce784dee07654d7333a02f5f35f43 Signed-off-by: Rimon Xu --- drivers/video/rockchip/vtunnel/rkvtunnel.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/drivers/video/rockchip/vtunnel/rkvtunnel.c b/drivers/video/rockchip/vtunnel/rkvtunnel.c index a2ce451b7cda..2068e3f05357 100644 --- a/drivers/video/rockchip/vtunnel/rkvtunnel.c +++ b/drivers/video/rockchip/vtunnel/rkvtunnel.c @@ -72,7 +72,6 @@ struct rkvt_dev { char *dev_name; int inst_id_generator; atomic64_t cid_generator; - atomic64_t buf_id_generator; struct dentry *debug_root; }; @@ -123,6 +122,8 @@ struct rkvt_instance { DECLARE_KFIFO_PTR(fifo_to_producer, struct rkvt_buffer*); struct rkvt_buffer vt_buffers[RKVT_POOL_SIZE]; + + atomic64_t buf_id_generator; }; static unsigned int vt_dev_dbg; @@ -740,10 +741,10 @@ rkvt_reset_proc(struct rkvt_ctrl_data *data, struct rkvt_session *session) mutex_lock(&inst->lock); rkvt_inst_clear_consumer(inst); rkvt_inst_clear_producer(inst); - read_buf_id = atomic64_read(&vt_dev->buf_id_generator); + read_buf_id = atomic64_read(&inst->buf_id_generator); read_buf_id += 0x100; read_buf_id &= ~0xff; - atomic64_set(&vt_dev->buf_id_generator, read_buf_id); + atomic64_set(&inst->buf_id_generator, read_buf_id); mutex_unlock(&inst->lock); rkvt_inst_put(inst); @@ -950,7 +951,7 @@ rkvt_queue_buf(struct rkvt_buf_data *data, struct rkvt_session *session) // buffer id is empty, generate a new id if (base->buffer_id == 0) - base->buffer_id = atomic64_inc_return(&vt_dev->buf_id_generator); + base->buffer_id = atomic64_inc_return(&inst->buf_id_generator); buffer->base = *base; buffer->base.buf_status = RKVT_BUF_QUEUE; buffer->session_pro = session; @@ -1234,7 +1235,7 @@ rkvt_release_buf(struct rkvt_buf_data *data, struct rkvt_session *session) buffer->base.buf_status = RKVT_BUF_RELEASE; mutex_lock(&inst->lock); - read_buf_id = atomic64_read(&vt_dev->buf_id_generator); + read_buf_id = atomic64_read(&inst->buf_id_generator); /* if producer has disconnect */ if (!inst->producer) { rkvt_dbg(RKVT_DBG_BUFFERS, "VTRB [%d], buffer no producer\n", inst->id); @@ -1298,7 +1299,7 @@ rkvt_cancel_buf(struct rkvt_buf_data *data, struct rkvt_session *session) } // buffer id is empty, generate a new id if (buf_base->buffer_id == 0) - buf_base->buffer_id = atomic64_inc_return(&vt_dev->buf_id_generator); + buf_base->buffer_id = atomic64_inc_return(&inst->buf_id_generator); buffer->base = *buf_base; buffer->base.buf_status = RKVT_BUF_RELEASE; buffer->session_pro = session;