@@ -784,12 +784,14 @@ end_of_frame:
cam->sensor.pix_format.pixelformat ==
V4L2_PIX_FMT_JPEG) && eof)) {
u32 b;
+ unsigned long flags;
b = (*f)->buf.bytesused;
(*f)->state = F_DONE;
(*f)->buf.sequence= ++cam->frame_count;
- spin_lock(&cam->queue_lock);
+ spin_lock_irqsave(&cam->queue_lock,
+ flags);
list_move_tail(&(*f)->frame,
&cam->outqueue);
if (!list_empty(&cam->inqueue))
@@ -799,7 +801,8 @@ end_of_frame:
frame );
else
(*f) = NULL;
- spin_unlock(&cam->queue_lock);
+ spin_unlock_irqrestore(&cam->queue_lock,
+ flags);
memcpy(cam->sysfs.frame_header,
cam->sof.header, soflen);
Complete() will be run with interrupt enabled, so change to spin_lock_irqsave(). Cc: Mauro Carvalho Chehab <mchehab@redhat.com> Cc: linux-media@vger.kernel.org Signed-off-by: Ming Lei <ming.lei@canonical.com> --- drivers/media/usb/sn9c102/sn9c102_core.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)