mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-07 14:24:18 +08:00
[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: Hans Verkuil <hans.verkuil@cisco.com> Cc: Andy Walls <awalls@md.metrocast.net> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
This commit is contained in:
parent
65adb86d61
commit
d832672f20
@ -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)
|
|||||||
|
|
||||||
/* 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);
|
||||||
|
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);
|
set_bit(IVTV_F_S_DMA_PENDING, &s->s_flags);
|
||||||
}
|
}
|
||||||
if (lock)
|
|
||||||
spin_unlock_irqrestore(&itv->dma_reg_lock, flags);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ivtv_dma_enc_start_xfer(struct ivtv_stream *s)
|
static void ivtv_dma_enc_start_xfer(struct ivtv_stream *s)
|
||||||
|
Loading…
Reference in New Issue
Block a user