mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-09 12:17:12 +09:00
media: rockchip: isp: lock for buf alloc and free
Change-Id: I94f01e3d8a24ec11a6b853416421e7f5d6323a8a Signed-off-by: Cai YiWei <cyw@rock-chips.com>
This commit is contained in:
@@ -166,6 +166,8 @@ int rkisp_alloc_buffer(struct rkisp_device *dev,
|
||||
void *mem_priv;
|
||||
int ret = 0;
|
||||
|
||||
mutex_lock(&dev->buf_lock);
|
||||
|
||||
if (!buf->size) {
|
||||
ret = -EINVAL;
|
||||
goto err;
|
||||
@@ -206,8 +208,10 @@ int rkisp_alloc_buffer(struct rkisp_device *dev,
|
||||
v4l2_dbg(1, rkisp_debug, &dev->v4l2_dev,
|
||||
"%s buf:0x%x~0x%x size:%d\n", __func__,
|
||||
(u32)buf->dma_addr, (u32)buf->dma_addr + buf->size, buf->size);
|
||||
mutex_unlock(&dev->buf_lock);
|
||||
return ret;
|
||||
err:
|
||||
mutex_unlock(&dev->buf_lock);
|
||||
dev_err(dev->dev, "%s failed ret:%d\n", __func__, ret);
|
||||
return ret;
|
||||
}
|
||||
@@ -217,6 +221,7 @@ void rkisp_free_buffer(struct rkisp_device *dev,
|
||||
{
|
||||
const struct vb2_mem_ops *g_ops = dev->hw_dev->mem_ops;
|
||||
|
||||
mutex_lock(&dev->buf_lock);
|
||||
if (buf && buf->mem_priv) {
|
||||
v4l2_dbg(1, rkisp_debug, &dev->v4l2_dev,
|
||||
"%s buf:0x%x~0x%x\n", __func__,
|
||||
@@ -232,6 +237,7 @@ void rkisp_free_buffer(struct rkisp_device *dev,
|
||||
buf->is_need_vaddr = false;
|
||||
buf->is_need_dmafd = false;
|
||||
}
|
||||
mutex_unlock(&dev->buf_lock);
|
||||
}
|
||||
|
||||
void rkisp_prepare_buffer(struct rkisp_device *dev,
|
||||
|
||||
@@ -231,6 +231,7 @@ struct rkisp_device {
|
||||
|
||||
struct rkisp_rx_buf_pool pv_pool[RKISP_RX_BUF_POOL_MAX];
|
||||
|
||||
struct mutex buf_lock;
|
||||
spinlock_t cmsk_lock;
|
||||
struct rkisp_cmsk_cfg cmsk_cfg;
|
||||
bool is_cmsk_upd;
|
||||
|
||||
@@ -3324,6 +3324,7 @@ int rkisp_register_isp_subdev(struct rkisp_device *isp_dev,
|
||||
struct v4l2_subdev *sd = &isp_sdev->sd;
|
||||
int ret;
|
||||
|
||||
mutex_init(&isp_dev->buf_lock);
|
||||
spin_lock_init(&isp_dev->cmsk_lock);
|
||||
spin_lock_init(&isp_dev->rdbk_lock);
|
||||
ret = kfifo_alloc(&isp_dev->rdbk_kfifo,
|
||||
|
||||
Reference in New Issue
Block a user