diff options
author | Oliver Endriss <devnull@localhost> | 2004-09-06 00:20:50 +0000 |
---|---|---|
committer | Oliver Endriss <devnull@localhost> | 2004-09-06 00:20:50 +0000 |
commit | 3725c349cb005cf4ba3100d8229caf4adebd8c49 (patch) | |
tree | 2fee036753ee48a7fc586fae3d135ac64aeb57e9 /linux/drivers | |
parent | 256e0bbe2767124767479a6b5334eac33a0bdd17 (diff) | |
download | mediapointer-dvb-s2-3725c349cb005cf4ba3100d8229caf4adebd8c49.tar.gz mediapointer-dvb-s2-3725c349cb005cf4ba3100d8229caf4adebd8c49.tar.bz2 |
Fixed system freeze with SMP/preemptive kernels. Using spin_lock instead of spin_lock_irq
caused a race condition between irq/tasklet and user space task.
Diffstat (limited to 'linux/drivers')
-rw-r--r-- | linux/drivers/media/dvb/dvb-core/dvb_demux.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/linux/drivers/media/dvb/dvb-core/dvb_demux.c b/linux/drivers/media/dvb/dvb-core/dvb_demux.c index 8b79bee75..cb8b74fe0 100644 --- a/linux/drivers/media/dvb/dvb-core/dvb_demux.c +++ b/linux/drivers/media/dvb/dvb-core/dvb_demux.c @@ -570,7 +570,7 @@ static int dvb_demux_feed_find(struct dvb_demux_feed *feed) static void dvb_demux_feed_add(struct dvb_demux_feed *feed) { - spin_lock(&feed->demux->lock); + spin_lock_irq(&feed->demux->lock); if (dvb_demux_feed_find(feed)) { printk(KERN_ERR "%s: feed already in list (type=%x state=%x pid=%x)\n", __FUNCTION__, feed->type, feed->state, feed->pid); @@ -579,12 +579,12 @@ static void dvb_demux_feed_add(struct dvb_demux_feed *feed) list_add(&feed->list_head, &feed->demux->feed_list); out: - spin_unlock(&feed->demux->lock); + spin_unlock_irq(&feed->demux->lock); } static void dvb_demux_feed_del(struct dvb_demux_feed *feed) { - spin_lock(&feed->demux->lock); + spin_lock_irq(&feed->demux->lock); if (!(dvb_demux_feed_find(feed))) { printk(KERN_ERR "%s: feed not in list (type=%x state=%x pid=%x)\n", __FUNCTION__, feed->type, feed->state, feed->pid); @@ -593,7 +593,7 @@ static void dvb_demux_feed_del(struct dvb_demux_feed *feed) list_del(&feed->list_head); out: - spin_unlock(&feed->demux->lock); + spin_unlock_irq(&feed->demux->lock); } static int dmx_ts_feed_set (struct dmx_ts_feed* ts_feed, u16 pid, int ts_type, |