Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 33bc4dea authored by Hans Verkuil's avatar Hans Verkuil Committed by Mauro Carvalho Chehab
Browse files

V4L/DVB (6043): ivtv: fix incorrect round-robin implementation

parent b1139e35
Loading
Loading
Loading
Loading
+4 −2
Original line number Original line Diff line number Diff line
@@ -859,8 +859,9 @@ irqreturn_t ivtv_irq_handler(int irq, void *dev_id)
	}
	}


	if ((combo & IVTV_IRQ_DMA) && !test_bit(IVTV_F_I_DMA, &itv->i_flags)) {
	if ((combo & IVTV_IRQ_DMA) && !test_bit(IVTV_F_I_DMA, &itv->i_flags)) {
		itv->irq_rr_idx++;
		for (i = 0; i < IVTV_MAX_STREAMS; i++) {
		for (i = 0; i < IVTV_MAX_STREAMS; i++) {
			int idx = (i + itv->irq_rr_idx++) % IVTV_MAX_STREAMS;
			int idx = (i + itv->irq_rr_idx) % IVTV_MAX_STREAMS;
			struct ivtv_stream *s = &itv->streams[idx];
			struct ivtv_stream *s = &itv->streams[idx];


			if (!test_and_clear_bit(IVTV_F_S_DMA_PENDING, &s->s_flags))
			if (!test_and_clear_bit(IVTV_F_S_DMA_PENDING, &s->s_flags))
@@ -877,8 +878,9 @@ irqreturn_t ivtv_irq_handler(int irq, void *dev_id)
	}
	}


	if ((combo & IVTV_IRQ_DMA) && !test_bit(IVTV_F_I_PIO, &itv->i_flags)) {
	if ((combo & IVTV_IRQ_DMA) && !test_bit(IVTV_F_I_PIO, &itv->i_flags)) {
		itv->irq_rr_idx++;
		for (i = 0; i < IVTV_MAX_STREAMS; i++) {
		for (i = 0; i < IVTV_MAX_STREAMS; i++) {
			int idx = (i + itv->irq_rr_idx++) % IVTV_MAX_STREAMS;
			int idx = (i + itv->irq_rr_idx) % IVTV_MAX_STREAMS;
			struct ivtv_stream *s = &itv->streams[idx];
			struct ivtv_stream *s = &itv->streams[idx];


			if (!test_and_clear_bit(IVTV_F_S_PIO_PENDING, &s->s_flags))
			if (!test_and_clear_bit(IVTV_F_S_PIO_PENDING, &s->s_flags))