V4L/DVB (11674): ivtv: fix incorrect bit tests
authorHans Verkuil <hverkuil@xs4all.nl>
Sat, 2 May 2009 14:10:23 +0000 (11:10 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Sat, 9 May 2009 21:53:10 +0000 (18:53 -0300)
Found the coccinelle tool.

Thanks-to: Julia Lawall <julia@diku.dk>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/ivtv/ivtv-ioctl.c
drivers/media/video/ivtv/ivtv-irq.c
drivers/media/video/ivtv/ivtv-yuv.c
drivers/media/video/ivtv/ivtvfb.c

index 4a2d464..c342a9f 100644 (file)
@@ -180,7 +180,7 @@ int ivtv_set_speed(struct ivtv *itv, int speed)
 
                /* Wait for any DMA to finish */
                prepare_to_wait(&itv->dma_waitq, &wait, TASK_INTERRUPTIBLE);
-               while (itv->i_flags & IVTV_F_I_DMA) {
+               while (test_bit(IVTV_F_I_DMA, &itv->i_flags)) {
                        got_sig = signal_pending(current);
                        if (got_sig)
                                break;
@@ -1710,7 +1710,8 @@ static int ivtv_decoder_ioctls(struct file *filp, unsigned int cmd, void *arg)
                           we are waiting unlock first and later lock again. */
                        mutex_unlock(&itv->serialize_lock);
                        prepare_to_wait(&itv->event_waitq, &wait, TASK_INTERRUPTIBLE);
-                       if ((itv->i_flags & (IVTV_F_I_EV_DEC_STOPPED|IVTV_F_I_EV_VSYNC)) == 0)
+                       if (!test_bit(IVTV_F_I_EV_DEC_STOPPED, &itv->i_flags) &&
+                           !test_bit(IVTV_F_I_EV_VSYNC, &itv->i_flags))
                                schedule();
                        finish_wait(&itv->event_waitq, &wait);
                        mutex_lock(&itv->serialize_lock);
index 01c14d2..cd9db0b 100644 (file)
@@ -196,7 +196,7 @@ static int stream_enc_dma_append(struct ivtv_stream *s, u32 data[CX2341X_MBOX_MA
                                bytes_needed, s->name);
                return -1;
        }
-       if (rc && !s->buffers_stolen && (s->s_flags & IVTV_F_S_APPL_IO)) {
+       if (rc && !s->buffers_stolen && test_bit(IVTV_F_S_APPL_IO, &s->s_flags)) {
                IVTV_WARN("All %s stream buffers are full. Dropping data.\n", s->name);
                IVTV_WARN("Cause: the application is not reading fast enough.\n");
        }
index 7912ed6..c087537 100644 (file)
@@ -1063,7 +1063,8 @@ static int ivtv_yuv_udma_frame(struct ivtv *itv, struct ivtv_dma_frame *args)
        prepare_to_wait(&itv->dma_waitq, &wait, TASK_INTERRUPTIBLE);
        /* if no UDMA is pending and no UDMA is in progress, then the DMA
           is finished */
-       while (itv->i_flags & (IVTV_F_I_UDMA_PENDING | IVTV_F_I_UDMA)) {
+       while (test_bit(IVTV_F_I_UDMA_PENDING, &itv->i_flags) ||
+              test_bit(IVTV_F_I_UDMA, &itv->i_flags)) {
                /* don't interrupt if the DMA is in progress but break off
                   a still pending DMA. */
                got_sig = signal_pending(current);
index 66e6eb5..fa6bb85 100644 (file)
@@ -298,7 +298,8 @@ static int ivtvfb_prep_dec_dma_to_device(struct ivtv *itv,
        prepare_to_wait(&itv->dma_waitq, &wait, TASK_INTERRUPTIBLE);
        /* if no UDMA is pending and no UDMA is in progress, then the DMA
           is finished */
-       while (itv->i_flags & (IVTV_F_I_UDMA_PENDING | IVTV_F_I_UDMA)) {
+       while (test_bit(IVTV_F_I_UDMA_PENDING, &itv->i_flags) ||
+              test_bit(IVTV_F_I_UDMA, &itv->i_flags)) {
                /* don't interrupt if the DMA is in progress but break off
                   a still pending DMA. */
                got_sig = signal_pending(current);