Commit 080eb42f31a8a6dde1568f906692d9914cdfbfe8
1 parent
246f93f5cc
Exists in
master
and in
39 other branches
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); |