From 1d5099152b0ad66b66848189c070e2fca349beaf Mon Sep 17 00:00:00 2001 From: Dafna Hirschfeld Date: Tue, 22 Sep 2020 13:34:01 +0200 Subject: [PATCH] media: staging: rkisp1: use the right variants of spin_lock When locking, use either 'spin_lock' or 'spin_lock_irq' according to the context. There is nowhere need to use 'spin_lock_irqsave'. Outside of irq context, always use 'spin_lock_irq' to be on the safe side. Signed-off-by: Dafna Hirschfeld Signed-off-by: Hans Verkuil Signed-off-by: Mauro Carvalho Chehab --- drivers/staging/media/rkisp1/rkisp1-capture.c | 15 ++++++--------- drivers/staging/media/rkisp1/rkisp1-params.c | 20 ++++++++------------ 2 files changed, 14 insertions(+), 21 deletions(-) diff --git a/drivers/staging/media/rkisp1/rkisp1-capture.c b/drivers/staging/media/rkisp1/rkisp1-capture.c index 84a1732..4000f6c 100644 --- a/drivers/staging/media/rkisp1/rkisp1-capture.c +++ b/drivers/staging/media/rkisp1/rkisp1-capture.c @@ -668,9 +668,8 @@ static void rkisp1_handle_buffer(struct rkisp1_capture *cap) { struct rkisp1_isp *isp = &cap->rkisp1->isp; struct rkisp1_buffer *curr_buf; - unsigned long flags; - spin_lock_irqsave(&cap->buf.lock, flags); + spin_lock(&cap->buf.lock); curr_buf = cap->buf.curr; if (curr_buf) { @@ -683,7 +682,7 @@ static void rkisp1_handle_buffer(struct rkisp1_capture *cap) } rkisp1_set_next_buf(cap); - spin_unlock_irqrestore(&cap->buf.lock, flags); + spin_unlock(&cap->buf.lock); } void rkisp1_capture_isr(struct rkisp1_device *rkisp1) @@ -758,7 +757,6 @@ static void rkisp1_vb2_buf_queue(struct vb2_buffer *vb) container_of(vbuf, struct rkisp1_buffer, vb); struct rkisp1_capture *cap = vb->vb2_queue->drv_priv; const struct v4l2_pix_format_mplane *pixm = &cap->pix.fmt; - unsigned long flags; unsigned int i; memset(ispbuf->buff_addr, 0, sizeof(ispbuf->buff_addr)); @@ -783,9 +781,9 @@ static void rkisp1_vb2_buf_queue(struct vb2_buffer *vb) swap(ispbuf->buff_addr[RKISP1_PLANE_CR], ispbuf->buff_addr[RKISP1_PLANE_CB]); - spin_lock_irqsave(&cap->buf.lock, flags); + spin_lock_irq(&cap->buf.lock); list_add_tail(&ispbuf->queue, &cap->buf.queue); - spin_unlock_irqrestore(&cap->buf.lock, flags); + spin_unlock_irq(&cap->buf.lock); } static int rkisp1_vb2_buf_prepare(struct vb2_buffer *vb) @@ -811,10 +809,9 @@ static int rkisp1_vb2_buf_prepare(struct vb2_buffer *vb) static void rkisp1_return_all_buffers(struct rkisp1_capture *cap, enum vb2_buffer_state state) { - unsigned long flags; struct rkisp1_buffer *buf; - spin_lock_irqsave(&cap->buf.lock, flags); + spin_lock_irq(&cap->buf.lock); if (cap->buf.curr) { vb2_buffer_done(&cap->buf.curr->vb.vb2_buf, state); cap->buf.curr = NULL; @@ -829,7 +826,7 @@ static void rkisp1_return_all_buffers(struct rkisp1_capture *cap, list_del(&buf->queue); vb2_buffer_done(&buf->vb.vb2_buf, state); } - spin_unlock_irqrestore(&cap->buf.lock, flags); + spin_unlock_irq(&cap->buf.lock); } /* diff --git a/drivers/staging/media/rkisp1/rkisp1-params.c b/drivers/staging/media/rkisp1/rkisp1-params.c index f0258b4..986d293 100644 --- a/drivers/staging/media/rkisp1/rkisp1-params.c +++ b/drivers/staging/media/rkisp1/rkisp1-params.c @@ -1300,16 +1300,15 @@ static void rkisp1_params_config_parameter(struct rkisp1_params *params) else rkisp1_csm_config(params, false); - spin_lock(¶ms->config_lock); + spin_lock_irq(¶ms->config_lock); /* apply the first buffer if there is one already */ if (params->is_streaming) rkisp1_params_apply_params_cfg(params, 0); - spin_unlock(¶ms->config_lock); + spin_unlock_irq(¶ms->config_lock); } -/* Not called when the camera active, thus not isr protection. */ void rkisp1_params_configure(struct rkisp1_params *params, enum rkisp1_fmt_raw_pat_type bayer_pat, enum v4l2_quantization quantization) @@ -1442,12 +1441,11 @@ static void rkisp1_params_vb2_buf_queue(struct vb2_buffer *vb) container_of(vbuf, struct rkisp1_buffer, vb); struct vb2_queue *vq = vb->vb2_queue; struct rkisp1_params *params = vq->drv_priv; - unsigned long flags; params_buf->vaddr = vb2_plane_vaddr(vb, 0); - spin_lock_irqsave(¶ms->config_lock, flags); + spin_lock_irq(¶ms->config_lock); list_add_tail(¶ms_buf->queue, ¶ms->params); - spin_unlock_irqrestore(¶ms->config_lock, flags); + spin_unlock_irq(¶ms->config_lock); } static int rkisp1_params_vb2_buf_prepare(struct vb2_buffer *vb) @@ -1465,7 +1463,6 @@ static void rkisp1_params_vb2_stop_streaming(struct vb2_queue *vq) struct rkisp1_params *params = vq->drv_priv; struct rkisp1_buffer *buf; struct list_head tmp_list; - unsigned long flags; INIT_LIST_HEAD(&tmp_list); @@ -1474,10 +1471,10 @@ static void rkisp1_params_vb2_stop_streaming(struct vb2_queue *vq) * and then we can iterate it and call vb2_buffer_done * without holding the lock */ - spin_lock_irqsave(¶ms->config_lock, flags); + spin_lock_irq(¶ms->config_lock); params->is_streaming = false; list_cut_position(&tmp_list, ¶ms->params, params->params.prev); - spin_unlock_irqrestore(¶ms->config_lock, flags); + spin_unlock_irq(¶ms->config_lock); list_for_each_entry(buf, &tmp_list, queue) vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR); @@ -1487,11 +1484,10 @@ static int rkisp1_params_vb2_start_streaming(struct vb2_queue *queue, unsigned int count) { struct rkisp1_params *params = queue->drv_priv; - unsigned long flags; - spin_lock_irqsave(¶ms->config_lock, flags); + spin_lock_irq(¶ms->config_lock); params->is_streaming = true; - spin_unlock_irqrestore(¶ms->config_lock, flags); + spin_unlock_irq(¶ms->config_lock); return 0; } -- 2.7.4