diff options
author | Holger Waechtler <devnull@localhost> | 2003-06-21 14:54:16 +0000 |
---|---|---|
committer | Holger Waechtler <devnull@localhost> | 2003-06-21 14:54:16 +0000 |
commit | 6cb7f752732bf161ea8a56f8531c21d37fd98fc0 (patch) | |
tree | 65109db0c67b73298436212e7fc0b92d3b1a99ed /linux/drivers/media | |
parent | e3fcc2f04b88285be9b9f480461348dee33cdd3c (diff) | |
download | mediapointer-dvb-s2-6cb7f752732bf161ea8a56f8531c21d37fd98fc0.tar.gz mediapointer-dvb-s2-6cb7f752732bf161ea8a56f8531c21d37fd98fc0.tar.bz2 |
- 2.5 API changes for bt878
- remove flush_workqueue(wq) from dvb_net.c -- don't we have to ensure that the handler has finished? all other drivers don't do this as well...?
Diffstat (limited to 'linux/drivers/media')
-rw-r--r-- | linux/drivers/media/dvb/bt8xx/bt878.c | 15 | ||||
-rw-r--r-- | linux/drivers/media/dvb/dvb-core/dvb_compat.h | 13 | ||||
-rw-r--r-- | linux/drivers/media/dvb/dvb-core/dvb_net.c | 1 |
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; |