media: staging: rkisp1: cap: protect buf.curr and buf.next with buf.lock
authorDafna Hirschfeld <dafna.hirschfeld@collabora.com>
Tue, 14 Jul 2020 12:38:30 +0000 (14:38 +0200)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Sun, 19 Jul 2020 12:04:34 +0000 (14:04 +0200)
The spinlock buf.lock should protect access to the buffers.
This includes the buffers in buf.queue and also buf.curr and
buf.next. The function 'rkisp1_set_next_buf' access buf.next
therefore it should also be protected with the lock.

Signed-off-by: Dafna Hirschfeld <dafna.hirschfeld@collabora.com>
Acked-by: Helen Koike <helen.koike@collabora.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
drivers/staging/media/rkisp1/rkisp1-capture.c

index 572b094..fa3eaea 100644 (file)
@@ -617,10 +617,11 @@ static void rkisp1_set_next_buf(struct rkisp1_capture *cap)
 static void rkisp1_handle_buffer(struct rkisp1_capture *cap)
 {
        struct rkisp1_isp *isp = &cap->rkisp1->isp;
-       struct rkisp1_buffer *curr_buf = cap->buf.curr;
+       struct rkisp1_buffer *curr_buf;
        unsigned long flags;
 
        spin_lock_irqsave(&cap->buf.lock, flags);
+       curr_buf = cap->buf.curr;
 
        if (curr_buf) {
                curr_buf->vb.sequence = atomic_read(&isp->frame_sequence);
@@ -640,9 +641,9 @@ static void rkisp1_handle_buffer(struct rkisp1_capture *cap)
                                                 queue);
                list_del(&cap->buf.next->queue);
        }
-       spin_unlock_irqrestore(&cap->buf.lock, flags);
 
        rkisp1_set_next_buf(cap);
+       spin_unlock_irqrestore(&cap->buf.lock, flags);
 }
 
 void rkisp1_capture_isr(struct rkisp1_device *rkisp1)