aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/media/video/ivtv/ivtv-fileops.c25
1 files changed, 13 insertions, 12 deletions
diff --git a/drivers/media/video/ivtv/ivtv-fileops.c b/drivers/media/video/ivtv/ivtv-fileops.c
index db813e071ce6..7ec5c99f9ad1 100644
--- a/drivers/media/video/ivtv/ivtv-fileops.c
+++ b/drivers/media/video/ivtv/ivtv-fileops.c
@@ -582,6 +582,19 @@ ssize_t ivtv_v4l2_write(struct file *filp, const char __user *user_buf, size_t c
582 ivtv_queue_init(&q); 582 ivtv_queue_init(&q);
583 set_bit(IVTV_F_S_APPL_IO, &s->s_flags); 583 set_bit(IVTV_F_S_APPL_IO, &s->s_flags);
584 584
585 /* Start decoder (returns 0 if already started) */
586 mutex_lock(&itv->serialize_lock);
587 rc = ivtv_start_decoding(id, itv->speed);
588 mutex_unlock(&itv->serialize_lock);
589 if (rc) {
590 IVTV_DEBUG_WARN("Failed start decode stream %s\n", s->name);
591
592 /* failure, clean up */
593 clear_bit(IVTV_F_S_STREAMING, &s->s_flags);
594 clear_bit(IVTV_F_S_APPL_IO, &s->s_flags);
595 return rc;
596 }
597
585retry: 598retry:
586 /* If possible, just DMA the entire frame - Check the data transfer size 599 /* If possible, just DMA the entire frame - Check the data transfer size
587 since we may get here before the stream has been fully set-up */ 600 since we may get here before the stream has been fully set-up */
@@ -664,18 +677,6 @@ retry:
664 ivtv_enqueue(s, buf, &s->q_full); 677 ivtv_enqueue(s, buf, &s->q_full);
665 } 678 }
666 679
667 /* Start decoder (returns 0 if already started) */
668 mutex_lock(&itv->serialize_lock);
669 rc = ivtv_start_decoding(id, itv->speed);
670 mutex_unlock(&itv->serialize_lock);
671 if (rc) {
672 IVTV_DEBUG_WARN("Failed start decode stream %s\n", s->name);
673
674 /* failure, clean up */
675 clear_bit(IVTV_F_S_STREAMING, &s->s_flags);
676 clear_bit(IVTV_F_S_APPL_IO, &s->s_flags);
677 return rc;
678 }
679 if (test_bit(IVTV_F_S_NEEDS_DATA, &s->s_flags)) { 680 if (test_bit(IVTV_F_S_NEEDS_DATA, &s->s_flags)) {
680 if (s->q_full.length >= itv->dma_data_req_size) { 681 if (s->q_full.length >= itv->dma_data_req_size) {
681 int got_sig; 682 int got_sig;