Commit d832672f authored by Hans Verkuil's avatar Hans Verkuil Committed by Mauro Carvalho Chehab

[media] ivtv: fix sparse warning

Fix this warning:

drivers/media/pci/ivtv/ivtv-irq.c:418:9: warning: context imbalance in 'ivtv_dma_stream_dec_prepare' - different lock contexts for basic block

sparse didn't quite understand the locking scheme, so rewrite it to keep
sparse happy.
Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Cc: Andy Walls <awalls@md.metrocast.net>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
parent 65adb86d
...@@ -357,7 +357,6 @@ void ivtv_dma_stream_dec_prepare(struct ivtv_stream *s, u32 offset, int lock) ...@@ -357,7 +357,6 @@ void ivtv_dma_stream_dec_prepare(struct ivtv_stream *s, u32 offset, int lock)
u32 uv_offset = offset + IVTV_YUV_BUFFER_UV_OFFSET; u32 uv_offset = offset + IVTV_YUV_BUFFER_UV_OFFSET;
int y_done = 0; int y_done = 0;
int bytes_written = 0; int bytes_written = 0;
unsigned long flags = 0;
int idx = 0; int idx = 0;
IVTV_DEBUG_HI_DMA("DEC PREPARE DMA %s: %08x %08x\n", s->name, s->q_predma.bytesused, offset); IVTV_DEBUG_HI_DMA("DEC PREPARE DMA %s: %08x %08x\n", s->name, s->q_predma.bytesused, offset);
...@@ -407,16 +406,21 @@ void ivtv_dma_stream_dec_prepare(struct ivtv_stream *s, u32 offset, int lock) ...@@ -407,16 +406,21 @@ void ivtv_dma_stream_dec_prepare(struct ivtv_stream *s, u32 offset, int lock)
/* Sync Hardware SG List of buffers */ /* Sync Hardware SG List of buffers */
ivtv_stream_sync_for_device(s); ivtv_stream_sync_for_device(s);
if (lock) if (lock) {
unsigned long flags = 0;
spin_lock_irqsave(&itv->dma_reg_lock, flags); spin_lock_irqsave(&itv->dma_reg_lock, flags);
if (!test_bit(IVTV_F_I_DMA, &itv->i_flags)) { if (!test_bit(IVTV_F_I_DMA, &itv->i_flags))
ivtv_dma_dec_start(s); ivtv_dma_dec_start(s);
} else
else { set_bit(IVTV_F_S_DMA_PENDING, &s->s_flags);
set_bit(IVTV_F_S_DMA_PENDING, &s->s_flags);
}
if (lock)
spin_unlock_irqrestore(&itv->dma_reg_lock, flags); spin_unlock_irqrestore(&itv->dma_reg_lock, flags);
} else {
if (!test_bit(IVTV_F_I_DMA, &itv->i_flags))
ivtv_dma_dec_start(s);
else
set_bit(IVTV_F_S_DMA_PENDING, &s->s_flags);
}
} }
static void ivtv_dma_enc_start_xfer(struct ivtv_stream *s) static void ivtv_dma_enc_start_xfer(struct ivtv_stream *s)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment