Commit 503f2de7 authored by Ming Lei's avatar Ming Lei Committed by Mauro Carvalho Chehab

[media] media: dvb-core: prepare for enabling irq in complete()

Complete() will be run with interrupt enabled, so change to
spin_lock_irqsave().
These functions may be called inside URB->complete(), so use
spin_lock_irqsave().
Signed-off-by: default avatarMing Lei <ming.lei@canonical.com>
Acked-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <m.chehab@samsung.com>
parent cbbe1c03
...@@ -476,7 +476,9 @@ static void dvb_dmx_swfilter_packet(struct dvb_demux *demux, const u8 *buf) ...@@ -476,7 +476,9 @@ static void dvb_dmx_swfilter_packet(struct dvb_demux *demux, const u8 *buf)
void dvb_dmx_swfilter_packets(struct dvb_demux *demux, const u8 *buf, void dvb_dmx_swfilter_packets(struct dvb_demux *demux, const u8 *buf,
size_t count) size_t count)
{ {
spin_lock(&demux->lock); unsigned long flags;
spin_lock_irqsave(&demux->lock, flags);
while (count--) { while (count--) {
if (buf[0] == 0x47) if (buf[0] == 0x47)
...@@ -484,7 +486,7 @@ void dvb_dmx_swfilter_packets(struct dvb_demux *demux, const u8 *buf, ...@@ -484,7 +486,7 @@ void dvb_dmx_swfilter_packets(struct dvb_demux *demux, const u8 *buf,
buf += 188; buf += 188;
} }
spin_unlock(&demux->lock); spin_unlock_irqrestore(&demux->lock, flags);
} }
EXPORT_SYMBOL(dvb_dmx_swfilter_packets); EXPORT_SYMBOL(dvb_dmx_swfilter_packets);
...@@ -519,8 +521,9 @@ static inline void _dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf, ...@@ -519,8 +521,9 @@ static inline void _dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf,
{ {
int p = 0, i, j; int p = 0, i, j;
const u8 *q; const u8 *q;
unsigned long flags;
spin_lock(&demux->lock); spin_lock_irqsave(&demux->lock, flags);
if (demux->tsbufp) { /* tsbuf[0] is now 0x47. */ if (demux->tsbufp) { /* tsbuf[0] is now 0x47. */
i = demux->tsbufp; i = demux->tsbufp;
...@@ -564,7 +567,7 @@ static inline void _dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf, ...@@ -564,7 +567,7 @@ static inline void _dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf,
} }
bailout: bailout:
spin_unlock(&demux->lock); spin_unlock_irqrestore(&demux->lock, flags);
} }
void dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf, size_t count) void dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf, size_t count)
...@@ -581,11 +584,13 @@ EXPORT_SYMBOL(dvb_dmx_swfilter_204); ...@@ -581,11 +584,13 @@ EXPORT_SYMBOL(dvb_dmx_swfilter_204);
void dvb_dmx_swfilter_raw(struct dvb_demux *demux, const u8 *buf, size_t count) void dvb_dmx_swfilter_raw(struct dvb_demux *demux, const u8 *buf, size_t count)
{ {
spin_lock(&demux->lock); unsigned long flags;
spin_lock_irqsave(&demux->lock, flags);
demux->feed->cb.ts(buf, count, NULL, 0, &demux->feed->feed.ts, DMX_OK); demux->feed->cb.ts(buf, count, NULL, 0, &demux->feed->feed.ts, DMX_OK);
spin_unlock(&demux->lock); spin_unlock_irqrestore(&demux->lock, flags);
} }
EXPORT_SYMBOL(dvb_dmx_swfilter_raw); EXPORT_SYMBOL(dvb_dmx_swfilter_raw);
......
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