@@ -583,32 +583,25 @@ unsigned int v4l2_m2m_poll(struct file *file, struct v4l2_m2m_ctx *m2m_ctx,
583583 goto end ;
584584 }
585585
586- if (m2m_ctx -> m2m_dev -> m2m_ops -> unlock )
587- m2m_ctx -> m2m_dev -> m2m_ops -> unlock (m2m_ctx -> priv );
588- else if (m2m_ctx -> q_lock )
589- mutex_unlock (m2m_ctx -> q_lock );
590-
586+ spin_lock_irqsave (& src_q -> done_lock , flags );
591587 if (list_empty (& src_q -> done_list ))
592588 poll_wait (file , & src_q -> done_wq , wait );
589+ spin_unlock_irqrestore (& src_q -> done_lock , flags );
590+
591+ spin_lock_irqsave (& dst_q -> done_lock , flags );
593592 if (list_empty (& dst_q -> done_list )) {
594593 /*
595594 * If the last buffer was dequeued from the capture queue,
596595 * return immediately. DQBUF will return -EPIPE.
597596 */
598- if (dst_q -> last_buffer_dequeued )
597+ if (dst_q -> last_buffer_dequeued ) {
598+ spin_unlock_irqrestore (& dst_q -> done_lock , flags );
599599 return rc | POLLIN | POLLRDNORM ;
600+ }
600601
601602 poll_wait (file , & dst_q -> done_wq , wait );
602603 }
603-
604- if (m2m_ctx -> m2m_dev -> m2m_ops -> lock )
605- m2m_ctx -> m2m_dev -> m2m_ops -> lock (m2m_ctx -> priv );
606- else if (m2m_ctx -> q_lock ) {
607- if (mutex_lock_interruptible (m2m_ctx -> q_lock )) {
608- rc |= POLLERR ;
609- goto end ;
610- }
611- }
604+ spin_unlock_irqrestore (& dst_q -> done_lock , flags );
612605
613606 spin_lock_irqsave (& src_q -> done_lock , flags );
614607 if (!list_empty (& src_q -> done_list ))
0 commit comments