Commit 080eb42f31a8a6dde1568f906692d9914cdfbfe8

Authored by Jeff Garzik
1 parent 246f93f5cc

isdn/sc: irq handler clean

* pass card number to irq handler

* use card number in irq handler to avoid looping through each adapter

Signed-off-by: Jeff Garzik <jgarzik@redhat.com>

Showing 2 changed files with 4 additions and 16 deletions Side-by-side Diff

drivers/isdn/sc/init.c
... ... @@ -334,7 +334,8 @@
334 334 */
335 335 sc_adapter[cinst]->interrupt = irq[b];
336 336 if (request_irq(sc_adapter[cinst]->interrupt, interrupt_handler,
337   - IRQF_DISABLED, interface->id, NULL))
  337 + IRQF_DISABLED, interface->id,
  338 + (void *)(unsigned long) cinst))
338 339 {
339 340 kfree(sc_adapter[cinst]->channel);
340 341 indicate_status(cinst, ISDN_STAT_UNLOAD, 0, NULL); /* Fix me */
drivers/isdn/sc/interrupt.c
... ... @@ -21,28 +21,15 @@
21 21 #include "card.h"
22 22 #include <linux/interrupt.h>
23 23  
24   -static int get_card_from_irq(int irq)
25   -{
26   - int i;
27   -
28   - for(i = 0 ; i < cinst ; i++) {
29   - if(sc_adapter[i]->interrupt == irq)
30   - return i;
31   - }
32   - return -1;
33   -}
34   -
35 24 /*
36 25 *
37 26 */
38   -irqreturn_t interrupt_handler(int interrupt, void *cardptr)
  27 +irqreturn_t interrupt_handler(int dummy, void *card_inst)
39 28 {
40 29  
41 30 RspMessage rcvmsg;
42 31 int channel;
43   - int card;
44   -
45   - card = get_card_from_irq(interrupt);
  32 + int card = (int)(unsigned long) card_inst;
46 33  
47 34 if(!IS_VALID_CARD(card)) {
48 35 pr_debug("Invalid param: %d is not a valid card id\n", card);