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 <rimon.xu@rock-chips.com>
This commit is contained in:
Rimon Xu
2023-11-17 16:50:39 +08:00
parent 5eda8fae48
commit dfb726bf21

View File

@@ -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;