diff options
Diffstat (limited to 'drivers/isdn')
-rw-r--r-- | drivers/isdn/capi/capiutil.c | 6 | ||||
-rw-r--r-- | drivers/isdn/hysdn/Kconfig | 2 | ||||
-rw-r--r-- | drivers/isdn/hysdn/boardergo.c | 14 |
3 files changed, 9 insertions, 13 deletions
diff --git a/drivers/isdn/capi/capiutil.c b/drivers/isdn/capi/capiutil.c index ebef4ce1b00c..29419a8d31dc 100644 --- a/drivers/isdn/capi/capiutil.c +++ b/drivers/isdn/capi/capiutil.c | |||
@@ -948,17 +948,17 @@ int __init cdebug_init(void) | |||
948 | { | 948 | { |
949 | g_cmsg= kmalloc(sizeof(_cmsg), GFP_KERNEL); | 949 | g_cmsg= kmalloc(sizeof(_cmsg), GFP_KERNEL); |
950 | if (!g_cmsg) | 950 | if (!g_cmsg) |
951 | return ENOMEM; | 951 | return -ENOMEM; |
952 | g_debbuf = kmalloc(sizeof(_cdebbuf), GFP_KERNEL); | 952 | g_debbuf = kmalloc(sizeof(_cdebbuf), GFP_KERNEL); |
953 | if (!g_debbuf) { | 953 | if (!g_debbuf) { |
954 | kfree(g_cmsg); | 954 | kfree(g_cmsg); |
955 | return ENOMEM; | 955 | return -ENOMEM; |
956 | } | 956 | } |
957 | g_debbuf->buf = kmalloc(CDEBUG_GSIZE, GFP_KERNEL); | 957 | g_debbuf->buf = kmalloc(CDEBUG_GSIZE, GFP_KERNEL); |
958 | if (!g_debbuf->buf) { | 958 | if (!g_debbuf->buf) { |
959 | kfree(g_cmsg); | 959 | kfree(g_cmsg); |
960 | kfree(g_debbuf); | 960 | kfree(g_debbuf); |
961 | return ENOMEM;; | 961 | return -ENOMEM;; |
962 | } | 962 | } |
963 | g_debbuf->size = CDEBUG_GSIZE; | 963 | g_debbuf->size = CDEBUG_GSIZE; |
964 | g_debbuf->buf[0] = 0; | 964 | g_debbuf->buf[0] = 0; |
diff --git a/drivers/isdn/hysdn/Kconfig b/drivers/isdn/hysdn/Kconfig index c6d8a7042988..c9e4231968ef 100644 --- a/drivers/isdn/hysdn/Kconfig +++ b/drivers/isdn/hysdn/Kconfig | |||
@@ -3,7 +3,7 @@ | |||
3 | # | 3 | # |
4 | config HYSDN | 4 | config HYSDN |
5 | tristate "Hypercope HYSDN cards (Champ, Ergo, Metro) support (module only)" | 5 | tristate "Hypercope HYSDN cards (Champ, Ergo, Metro) support (module only)" |
6 | depends on m && PROC_FS && PCI && BROKEN_ON_SMP | 6 | depends on m && PROC_FS && PCI |
7 | help | 7 | help |
8 | Say Y here if you have one of Hypercope's active PCI ISDN cards | 8 | Say Y here if you have one of Hypercope's active PCI ISDN cards |
9 | Champ, Ergo and Metro. You will then get a module called hysdn. | 9 | Champ, Ergo and Metro. You will then get a module called hysdn. |
diff --git a/drivers/isdn/hysdn/boardergo.c b/drivers/isdn/hysdn/boardergo.c index 6cdbad3a9926..3eb096f0ae1b 100644 --- a/drivers/isdn/hysdn/boardergo.c +++ b/drivers/isdn/hysdn/boardergo.c | |||
@@ -64,10 +64,11 @@ ergo_interrupt(int intno, void *dev_id) | |||
64 | } /* ergo_interrupt */ | 64 | } /* ergo_interrupt */ |
65 | 65 | ||
66 | /******************************************************************************/ | 66 | /******************************************************************************/ |
67 | /* ergo_irq_bh is the function called by the immediate kernel task list after */ | 67 | /* ergo_irq_bh will be called as part of the kernel clearing its shared work */ |
68 | /* being activated with queue_task and no interrupts active. This task is the */ | 68 | /* queue sometime after a call to schedule_work has been made passing our */ |
69 | /* only one handling data transfer from or to the card after booting. The task */ | 69 | /* work_struct. This task is the only one handling data transfer from or to */ |
70 | /* may be queued from everywhere (interrupts included). */ | 70 | /* the card after booting. The task may be queued from everywhere */ |
71 | /* (interrupts included). */ | ||
71 | /******************************************************************************/ | 72 | /******************************************************************************/ |
72 | static void | 73 | static void |
73 | ergo_irq_bh(struct work_struct *ugli_api) | 74 | ergo_irq_bh(struct work_struct *ugli_api) |
@@ -90,7 +91,6 @@ ergo_irq_bh(struct work_struct *ugli_api) | |||
90 | card->hw_lock = 1; /* we now lock the hardware */ | 91 | card->hw_lock = 1; /* we now lock the hardware */ |
91 | 92 | ||
92 | do { | 93 | do { |
93 | sti(); /* reenable other ints */ | ||
94 | again = 0; /* assume loop not to be repeated */ | 94 | again = 0; /* assume loop not to be repeated */ |
95 | 95 | ||
96 | if (!dpr->ToHyFlag) { | 96 | if (!dpr->ToHyFlag) { |
@@ -110,7 +110,6 @@ ergo_irq_bh(struct work_struct *ugli_api) | |||
110 | again = 1; /* restart loop */ | 110 | again = 1; /* restart loop */ |
111 | } | 111 | } |
112 | } /* a message has arrived for us */ | 112 | } /* a message has arrived for us */ |
113 | cli(); /* no further ints */ | ||
114 | if (again) { | 113 | if (again) { |
115 | dpr->ToHyInt = 1; | 114 | dpr->ToHyInt = 1; |
116 | dpr->ToPcInt = 1; /* interrupt to E1 for all cards */ | 115 | dpr->ToPcInt = 1; /* interrupt to E1 for all cards */ |
@@ -242,7 +241,6 @@ ergo_writebootimg(struct HYSDN_CARD *card, unsigned char *buf, | |||
242 | byteout(card->iobase + PCI9050_USER_IO, PCI9050_E1_RUN); /* start E1 processor */ | 241 | byteout(card->iobase + PCI9050_USER_IO, PCI9050_E1_RUN); /* start E1 processor */ |
243 | /* the interrupts are still masked */ | 242 | /* the interrupts are still masked */ |
244 | 243 | ||
245 | sti(); | ||
246 | msleep_interruptible(20); /* Timeout 20ms */ | 244 | msleep_interruptible(20); /* Timeout 20ms */ |
247 | 245 | ||
248 | if (((tDpramBootSpooler *) card->dpram)->Len != DPRAM_SPOOLER_DATA_SIZE) { | 246 | if (((tDpramBootSpooler *) card->dpram)->Len != DPRAM_SPOOLER_DATA_SIZE) { |
@@ -276,7 +274,6 @@ ergo_writebootseq(struct HYSDN_CARD *card, unsigned char *buf, int len) | |||
276 | dst = sp->Data; /* point to data in spool structure */ | 274 | dst = sp->Data; /* point to data in spool structure */ |
277 | buflen = sp->Len; /* maximum len of spooled data */ | 275 | buflen = sp->Len; /* maximum len of spooled data */ |
278 | wr_mirror = sp->WrPtr; /* only once read */ | 276 | wr_mirror = sp->WrPtr; /* only once read */ |
279 | sti(); | ||
280 | 277 | ||
281 | /* try until all bytes written or error */ | 278 | /* try until all bytes written or error */ |
282 | i = 0x1000; /* timeout value */ | 279 | i = 0x1000; /* timeout value */ |
@@ -380,7 +377,6 @@ ergo_waitpofready(struct HYSDN_CARD *card) | |||
380 | #endif /* CONFIG_HYSDN_CAPI */ | 377 | #endif /* CONFIG_HYSDN_CAPI */ |
381 | return (0); /* success */ | 378 | return (0); /* success */ |
382 | } /* data has arrived */ | 379 | } /* data has arrived */ |
383 | sti(); | ||
384 | msleep_interruptible(50); /* Timeout 50ms */ | 380 | msleep_interruptible(50); /* Timeout 50ms */ |
385 | } /* wait until timeout */ | 381 | } /* wait until timeout */ |
386 | 382 | ||