summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--linux/drivers/media/dvb/bt8xx/bt878.c15
-rw-r--r--linux/drivers/media/dvb/dvb-core/dvb_compat.h13
-rw-r--r--linux/drivers/media/dvb/dvb-core/dvb_net.c1
3 files changed, 10 insertions, 19 deletions
diff --git a/linux/drivers/media/dvb/bt8xx/bt878.c b/linux/drivers/media/dvb/bt8xx/bt878.c
index 27f01bb73..f876332e0 100644
--- a/linux/drivers/media/dvb/bt8xx/bt878.c
+++ b/linux/drivers/media/dvb/bt8xx/bt878.c
@@ -36,13 +36,13 @@
#include <asm/pgtable.h>
#include <asm/page.h>
#include <linux/types.h>
-#include <linux/wrapper.h>
#include <linux/interrupt.h>
#include <linux/kmod.h>
#include <linux/vmalloc.h>
#include <linux/init.h>
#include "bt878.h"
+#include "dvb_functions.h"
/**************************************/
/* Miscellaneous utility definitions */
@@ -273,7 +273,8 @@ EXPORT_SYMBOL(bt878_stop);
/* Interrupt service routine */
/*****************************/
-static void bt878_irq(int irq, void *dev_id, struct pt_regs * regs)
+static
+irqreturn_t bt878_irq(int irq, void *dev_id, struct pt_regs * regs)
{
u32 stat,astat,mask;
int count;
@@ -285,7 +286,8 @@ static void bt878_irq(int irq, void *dev_id, struct pt_regs * regs)
while(1) {
stat=btread(BT878_AINT_STAT);
mask=btread(BT878_AINT_MASK);
- if(!(astat=(stat&mask))) return; /* this interrupt is not for me */
+ if(!(astat=(stat&mask)))
+ return IRQ_NONE; /* this interrupt is not for me */
/* dprintk("bt878(%d) debug: irq count %d, stat 0x%8.8x, mask 0x%8.8x\n",bt->nr,count,stat,mask); */
btwrite(astat,BT878_AINT_STAT); /* try to clear interupt condition */
@@ -324,8 +326,9 @@ static void bt878_irq(int irq, void *dev_id, struct pt_regs * regs)
bt->finished_block = (stat & BT878_ARISCS) >> 28;
spin_unlock(&bt->s_lock);
wake_up_interruptible(&bt->readq);
- if(bt->tasklet) tasklet_schedule(bt->tasklet);
- return;
+ if(bt->tasklet)
+ tasklet_schedule(bt->tasklet);
+ break;
}
count++;
if(count>20) {
@@ -335,6 +338,8 @@ static void bt878_irq(int irq, void *dev_id, struct pt_regs * regs)
break;
}
}
+
+ return IRQ_HANDLED;
}
/***********************/
diff --git a/linux/drivers/media/dvb/dvb-core/dvb_compat.h b/linux/drivers/media/dvb/dvb-core/dvb_compat.h
index b867f09ff..ae64b6632 100644
--- a/linux/drivers/media/dvb/dvb-core/dvb_compat.h
+++ b/linux/drivers/media/dvb/dvb-core/dvb_compat.h
@@ -98,19 +98,6 @@ extern struct page * vmalloc_to_page(void *addr);
#define work_struct tq_struct
#define INIT_WORK(wq,routine,data) INIT_TQUEUE(wq,routine,data)
#define schedule_work(wq) schedule_task(wq)
-static inline
-void flush_workqueue(struct tq_struct *wq)
-{
- unsigned long flags;
- /**
- * we take the simple approach and just remove wq from the list of
- * scheduled tasks -- should work for us
- */
- spin_lock_irqsave(&tqueue_lock, flags);
- if (test_bit(0, &wq->sync))
- list_del(&wq->list);
- spin_unlock_irqrestore(&tqueue_lock, flags);
-}
#else
#include <linux/workqueue.h>
#endif
diff --git a/linux/drivers/media/dvb/dvb-core/dvb_net.c b/linux/drivers/media/dvb/dvb-core/dvb_net.c
index cc07299f8..fc919f4aa 100644
--- a/linux/drivers/media/dvb/dvb-core/dvb_net.c
+++ b/linux/drivers/media/dvb/dvb-core/dvb_net.c
@@ -494,7 +494,6 @@ int dvb_net_remove_if(struct dvb_net *dvbnet, int num)
return -EINVAL;
dvb_net_stop(&dvbnet->device[num]);
- flush_workqueue(&priv->wq);
kfree(priv);
unregister_netdev(&dvbnet->device[num]);
dvbnet->state[num]=0;