V4L/DVB (11674): ivtv: fix incorrect bit tests
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>
This commit is contained in:
Родитель
7564f67d5b
Коммит
ec105a42ac
|
@ -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);
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
Загрузка…
Ссылка в новой задаче