src_q = v4l2_m2m_get_src_vq(m2m_ctx);
        dst_q = v4l2_m2m_get_dst_vq(m2m_ctx);
 
-       poll_wait(file, &src_q->done_wq, wait);
-       poll_wait(file, &dst_q->done_wq, wait);
-
        /*
         * There has to be at least one buffer queued on each queued_list, which
         * means either in driver already or waiting for driver to claim it
                       struct poll_table_struct *wait)
 {
        struct video_device *vfd = video_devdata(file);
+       struct vb2_queue *src_q = v4l2_m2m_get_src_vq(m2m_ctx);
+       struct vb2_queue *dst_q = v4l2_m2m_get_dst_vq(m2m_ctx);
        __poll_t req_events = poll_requested_events(wait);
        __poll_t rc = 0;
 
+       /*
+        * poll_wait() MUST be called on the first invocation on all the
+        * potential queues of interest, even if we are not interested in their
+        * events during this first call. Failure to do so will result in
+        * queue's events to be ignored because the poll_table won't be capable
+        * of adding new wait queues thereafter.
+        */
+       poll_wait(file, &src_q->done_wq, wait);
+       poll_wait(file, &dst_q->done_wq, wait);
+
        if (req_events & (EPOLLOUT | EPOLLWRNORM | EPOLLIN | EPOLLRDNORM))
                rc = v4l2_m2m_poll_for_data(file, m2m_ctx, wait);