aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/isdn/hisax
diff options
context:
space:
mode:
authorDavid Howells <dhowells@redhat.com>2006-10-05 09:55:46 -0400
committerDavid Howells <dhowells@warthog.cambridge.redhat.com>2006-10-05 10:10:12 -0400
commit7d12e780e003f93433d49ce78cfedf4b4c52adc5 (patch)
tree6748550400445c11a306b132009f3001e3525df8 /drivers/isdn/hisax
parentda482792a6d1a3fbaaa25fae867b343fb4db3246 (diff)
IRQ: Maintain regs pointer globally rather than passing to IRQ handlers
Maintain a per-CPU global "struct pt_regs *" variable which can be used instead of passing regs around manually through all ~1800 interrupt handlers in the Linux kernel. The regs pointer is used in few places, but it potentially costs both stack space and code to pass it around. On the FRV arch, removing the regs parameter from all the genirq function results in a 20% speed up of the IRQ exit path (ie: from leaving timer_interrupt() to leaving do_IRQ()). Where appropriate, an arch may override the generic storage facility and do something different with the variable. On FRV, for instance, the address is maintained in GR28 at all times inside the kernel as part of general exception handling. Having looked over the code, it appears that the parameter may be handed down through up to twenty or so layers of functions. Consider a USB character device attached to a USB hub, attached to a USB controller that posts its interrupts through a cascaded auxiliary interrupt controller. A character device driver may want to pass regs to the sysrq handler through the input layer which adds another few layers of parameter passing. I've build this code with allyesconfig for x86_64 and i386. I've runtested the main part of the code on FRV and i386, though I can't test most of the drivers. I've also done partial conversion for powerpc and MIPS - these at least compile with minimal configurations. This will affect all archs. Mostly the changes should be relatively easy. Take do_IRQ(), store the regs pointer at the beginning, saving the old one: struct pt_regs *old_regs = set_irq_regs(regs); And put the old one back at the end: set_irq_regs(old_regs); Don't pass regs through to generic_handle_irq() or __do_IRQ(). In timer_interrupt(), this sort of change will be necessary: - update_process_times(user_mode(regs)); - profile_tick(CPU_PROFILING, regs); + update_process_times(user_mode(get_irq_regs())); + profile_tick(CPU_PROFILING); I'd like to move update_process_times()'s use of get_irq_regs() into itself, except that i386, alone of the archs, uses something other than user_mode(). Some notes on the interrupt handling in the drivers: (*) input_dev() is now gone entirely. The regs pointer is no longer stored in the input_dev struct. (*) finish_unlinks() in drivers/usb/host/ohci-q.c needs checking. It does something different depending on whether it's been supplied with a regs pointer or not. (*) Various IRQ handler function pointers have been moved to type irq_handler_t. Signed-Off-By: David Howells <dhowells@redhat.com> (cherry picked from 1b16e7ac850969f38b375e511e3fa2f474a33867 commit)
Diffstat (limited to 'drivers/isdn/hisax')
-rw-r--r--drivers/isdn/hisax/amd7930_fn.c2
-rw-r--r--drivers/isdn/hisax/asuscom.c4
-rw-r--r--drivers/isdn/hisax/avm_a1.c2
-rw-r--r--drivers/isdn/hisax/avm_a1p.c2
-rw-r--r--drivers/isdn/hisax/avm_pci.c2
-rw-r--r--drivers/isdn/hisax/bkm_a4t.c2
-rw-r--r--drivers/isdn/hisax/bkm_a8.c2
-rw-r--r--drivers/isdn/hisax/diva.c8
-rw-r--r--drivers/isdn/hisax/elsa.c4
-rw-r--r--drivers/isdn/hisax/enternow_pci.c2
-rw-r--r--drivers/isdn/hisax/gazel.c4
-rw-r--r--drivers/isdn/hisax/hfc4s8s_l1.c2
-rw-r--r--drivers/isdn/hisax/hfc_pci.c2
-rw-r--r--drivers/isdn/hisax/hfc_sx.c2
-rw-r--r--drivers/isdn/hisax/hfc_usb.c8
-rw-r--r--drivers/isdn/hisax/hfcscard.c2
-rw-r--r--drivers/isdn/hisax/hisax.h2
-rw-r--r--drivers/isdn/hisax/hisax_fcpcipnp.c4
-rw-r--r--drivers/isdn/hisax/icc.c2
-rw-r--r--drivers/isdn/hisax/isac.c2
-rw-r--r--drivers/isdn/hisax/isurf.c2
-rw-r--r--drivers/isdn/hisax/ix1_micro.c2
-rw-r--r--drivers/isdn/hisax/mic.c2
-rw-r--r--drivers/isdn/hisax/netjet.h2
-rw-r--r--drivers/isdn/hisax/niccy.c3
-rw-r--r--drivers/isdn/hisax/nj_s.c2
-rw-r--r--drivers/isdn/hisax/nj_u.c2
-rw-r--r--drivers/isdn/hisax/s0box.c2
-rw-r--r--drivers/isdn/hisax/saphir.c2
-rw-r--r--drivers/isdn/hisax/sedlbauer.c6
-rw-r--r--drivers/isdn/hisax/sportster.c2
-rw-r--r--drivers/isdn/hisax/st5481_b.c2
-rw-r--r--drivers/isdn/hisax/st5481_d.c2
-rw-r--r--drivers/isdn/hisax/st5481_usb.c6
-rw-r--r--drivers/isdn/hisax/teleint.c2
-rw-r--r--drivers/isdn/hisax/teles0.c2
-rw-r--r--drivers/isdn/hisax/teles3.c2
-rw-r--r--drivers/isdn/hisax/telespci.c2
-rw-r--r--drivers/isdn/hisax/w6692.c4
39 files changed, 54 insertions, 55 deletions
diff --git a/drivers/isdn/hisax/amd7930_fn.c b/drivers/isdn/hisax/amd7930_fn.c
index 8ae08c41c853..bec59010bc66 100644
--- a/drivers/isdn/hisax/amd7930_fn.c
+++ b/drivers/isdn/hisax/amd7930_fn.c
@@ -733,7 +733,7 @@ dbusy_timer_handler(struct IsdnCardState *cs)
733 wByteAMD(cs, 0x21, 0x82); 733 wByteAMD(cs, 0x21, 0x82);
734 wByteAMD(cs, 0x21, 0x02); 734 wByteAMD(cs, 0x21, 0x02);
735 spin_unlock_irqrestore(&cs->lock, flags); 735 spin_unlock_irqrestore(&cs->lock, flags);
736 cs->irq_func(cs->irq, cs, NULL); 736 cs->irq_func(cs->irq, cs);
737 737
738 if (cs->debug & L1_DEB_ISAC) 738 if (cs->debug & L1_DEB_ISAC)
739 debugl1(cs, "Amd7930: dbusy_timer_handler: Transmitter reset"); 739 debugl1(cs, "Amd7930: dbusy_timer_handler: Transmitter reset");
diff --git a/drivers/isdn/hisax/asuscom.c b/drivers/isdn/hisax/asuscom.c
index 93ff941c48f1..61e69e9c4aa9 100644
--- a/drivers/isdn/hisax/asuscom.c
+++ b/drivers/isdn/hisax/asuscom.c
@@ -156,7 +156,7 @@ WriteHSCX(struct IsdnCardState *cs, int hscx, u_char offset, u_char value)
156#include "hscx_irq.c" 156#include "hscx_irq.c"
157 157
158static irqreturn_t 158static irqreturn_t
159asuscom_interrupt(int intno, void *dev_id, struct pt_regs *regs) 159asuscom_interrupt(int intno, void *dev_id)
160{ 160{
161 struct IsdnCardState *cs = dev_id; 161 struct IsdnCardState *cs = dev_id;
162 u_char val; 162 u_char val;
@@ -194,7 +194,7 @@ asuscom_interrupt(int intno, void *dev_id, struct pt_regs *regs)
194} 194}
195 195
196static irqreturn_t 196static irqreturn_t
197asuscom_interrupt_ipac(int intno, void *dev_id, struct pt_regs *regs) 197asuscom_interrupt_ipac(int intno, void *dev_id)
198{ 198{
199 struct IsdnCardState *cs = dev_id; 199 struct IsdnCardState *cs = dev_id;
200 u_char ista, val, icnt = 5; 200 u_char ista, val, icnt = 5;
diff --git a/drivers/isdn/hisax/avm_a1.c b/drivers/isdn/hisax/avm_a1.c
index 729e906bdc61..d9028e9b9b8f 100644
--- a/drivers/isdn/hisax/avm_a1.c
+++ b/drivers/isdn/hisax/avm_a1.c
@@ -101,7 +101,7 @@ WriteHSCX(struct IsdnCardState *cs, int hscx, u_char offset, u_char value)
101#include "hscx_irq.c" 101#include "hscx_irq.c"
102 102
103static irqreturn_t 103static irqreturn_t
104avm_a1_interrupt(int intno, void *dev_id, struct pt_regs *regs) 104avm_a1_interrupt(int intno, void *dev_id)
105{ 105{
106 struct IsdnCardState *cs = dev_id; 106 struct IsdnCardState *cs = dev_id;
107 u_char val, sval; 107 u_char val, sval;
diff --git a/drivers/isdn/hisax/avm_a1p.c b/drivers/isdn/hisax/avm_a1p.c
index 574e252dfa43..c87fa3f9b298 100644
--- a/drivers/isdn/hisax/avm_a1p.c
+++ b/drivers/isdn/hisax/avm_a1p.c
@@ -140,7 +140,7 @@ WriteHSCXfifo(struct IsdnCardState *cs, int hscx, u_char * data, int size)
140#include "hscx_irq.c" 140#include "hscx_irq.c"
141 141
142static irqreturn_t 142static irqreturn_t
143avm_a1p_interrupt(int intno, void *dev_id, struct pt_regs *regs) 143avm_a1p_interrupt(int intno, void *dev_id)
144{ 144{
145 struct IsdnCardState *cs = dev_id; 145 struct IsdnCardState *cs = dev_id;
146 u_char val, sval; 146 u_char val, sval;
diff --git a/drivers/isdn/hisax/avm_pci.c b/drivers/isdn/hisax/avm_pci.c
index 369afd3a3a4b..b04a178e5021 100644
--- a/drivers/isdn/hisax/avm_pci.c
+++ b/drivers/isdn/hisax/avm_pci.c
@@ -651,7 +651,7 @@ inithdlc(struct IsdnCardState *cs)
651} 651}
652 652
653static irqreturn_t 653static irqreturn_t
654avm_pcipnp_interrupt(int intno, void *dev_id, struct pt_regs *regs) 654avm_pcipnp_interrupt(int intno, void *dev_id)
655{ 655{
656 struct IsdnCardState *cs = dev_id; 656 struct IsdnCardState *cs = dev_id;
657 u_long flags; 657 u_long flags;
diff --git a/drivers/isdn/hisax/bkm_a4t.c b/drivers/isdn/hisax/bkm_a4t.c
index 87a630128a6c..871310d56a6e 100644
--- a/drivers/isdn/hisax/bkm_a4t.c
+++ b/drivers/isdn/hisax/bkm_a4t.c
@@ -125,7 +125,7 @@ WriteJADE(struct IsdnCardState *cs, int jade, u_char offset, u_char value)
125#include "jade_irq.c" 125#include "jade_irq.c"
126 126
127static irqreturn_t 127static irqreturn_t
128bkm_interrupt(int intno, void *dev_id, struct pt_regs *regs) 128bkm_interrupt(int intno, void *dev_id)
129{ 129{
130 struct IsdnCardState *cs = dev_id; 130 struct IsdnCardState *cs = dev_id;
131 u_char val = 0; 131 u_char val = 0;
diff --git a/drivers/isdn/hisax/bkm_a8.c b/drivers/isdn/hisax/bkm_a8.c
index dae090a9a489..340310645346 100644
--- a/drivers/isdn/hisax/bkm_a8.c
+++ b/drivers/isdn/hisax/bkm_a8.c
@@ -140,7 +140,7 @@ set_ipac_active(struct IsdnCardState *cs, u_int active)
140#include "hscx_irq.c" 140#include "hscx_irq.c"
141 141
142static irqreturn_t 142static irqreturn_t
143bkm_interrupt_ipac(int intno, void *dev_id, struct pt_regs *regs) 143bkm_interrupt_ipac(int intno, void *dev_id)
144{ 144{
145 struct IsdnCardState *cs = dev_id; 145 struct IsdnCardState *cs = dev_id;
146 u_char ista, val, icnt = 5; 146 u_char ista, val, icnt = 5;
diff --git a/drivers/isdn/hisax/diva.c b/drivers/isdn/hisax/diva.c
index e294fa3918f3..7e95f04f13da 100644
--- a/drivers/isdn/hisax/diva.c
+++ b/drivers/isdn/hisax/diva.c
@@ -289,7 +289,7 @@ MemWriteHSCX_IPACX(struct IsdnCardState *cs, int hscx, u_char offset, u_char val
289#include "hscx_irq.c" 289#include "hscx_irq.c"
290 290
291static irqreturn_t 291static irqreturn_t
292diva_interrupt(int intno, void *dev_id, struct pt_regs *regs) 292diva_interrupt(int intno, void *dev_id)
293{ 293{
294 struct IsdnCardState *cs = dev_id; 294 struct IsdnCardState *cs = dev_id;
295 u_char val, sval; 295 u_char val, sval;
@@ -319,7 +319,7 @@ diva_interrupt(int intno, void *dev_id, struct pt_regs *regs)
319} 319}
320 320
321static irqreturn_t 321static irqreturn_t
322diva_irq_ipac_isa(int intno, void *dev_id, struct pt_regs *regs) 322diva_irq_ipac_isa(int intno, void *dev_id)
323{ 323{
324 struct IsdnCardState *cs = dev_id; 324 struct IsdnCardState *cs = dev_id;
325 u_char ista,val; 325 u_char ista,val;
@@ -630,7 +630,7 @@ Memhscx_int_main(struct IsdnCardState *cs, u_char val)
630} 630}
631 631
632static irqreturn_t 632static irqreturn_t
633diva_irq_ipac_pci(int intno, void *dev_id, struct pt_regs *regs) 633diva_irq_ipac_pci(int intno, void *dev_id)
634{ 634{
635 struct IsdnCardState *cs = dev_id; 635 struct IsdnCardState *cs = dev_id;
636 u_char ista,val; 636 u_char ista,val;
@@ -685,7 +685,7 @@ Start_IPACPCI:
685} 685}
686 686
687static irqreturn_t 687static irqreturn_t
688diva_irq_ipacx_pci(int intno, void *dev_id, struct pt_regs *regs) 688diva_irq_ipacx_pci(int intno, void *dev_id)
689{ 689{
690 struct IsdnCardState *cs = dev_id; 690 struct IsdnCardState *cs = dev_id;
691 u_char val; 691 u_char val;
diff --git a/drivers/isdn/hisax/elsa.c b/drivers/isdn/hisax/elsa.c
index 3b3e318f6076..fab3e4ea0595 100644
--- a/drivers/isdn/hisax/elsa.c
+++ b/drivers/isdn/hisax/elsa.c
@@ -282,7 +282,7 @@ TimerRun(struct IsdnCardState *cs)
282#include "hscx_irq.c" 282#include "hscx_irq.c"
283 283
284static irqreturn_t 284static irqreturn_t
285elsa_interrupt(int intno, void *dev_id, struct pt_regs *regs) 285elsa_interrupt(int intno, void *dev_id)
286{ 286{
287 struct IsdnCardState *cs = dev_id; 287 struct IsdnCardState *cs = dev_id;
288 u_long flags; 288 u_long flags;
@@ -361,7 +361,7 @@ elsa_interrupt(int intno, void *dev_id, struct pt_regs *regs)
361} 361}
362 362
363static irqreturn_t 363static irqreturn_t
364elsa_interrupt_ipac(int intno, void *dev_id, struct pt_regs *regs) 364elsa_interrupt_ipac(int intno, void *dev_id)
365{ 365{
366 struct IsdnCardState *cs = dev_id; 366 struct IsdnCardState *cs = dev_id;
367 u_long flags; 367 u_long flags;
diff --git a/drivers/isdn/hisax/enternow_pci.c b/drivers/isdn/hisax/enternow_pci.c
index 76c7d29d1b2f..b45de9d408d1 100644
--- a/drivers/isdn/hisax/enternow_pci.c
+++ b/drivers/isdn/hisax/enternow_pci.c
@@ -240,7 +240,7 @@ enpci_card_msg(struct IsdnCardState *cs, int mt, void *arg)
240} 240}
241 241
242static irqreturn_t 242static irqreturn_t
243enpci_interrupt(int intno, void *dev_id, struct pt_regs *regs) 243enpci_interrupt(int intno, void *dev_id)
244{ 244{
245 struct IsdnCardState *cs = dev_id; 245 struct IsdnCardState *cs = dev_id;
246 unsigned char s0val, s1val, ir; 246 unsigned char s0val, s1val, ir;
diff --git a/drivers/isdn/hisax/gazel.c b/drivers/isdn/hisax/gazel.c
index fe2937267777..3efa719b6d29 100644
--- a/drivers/isdn/hisax/gazel.c
+++ b/drivers/isdn/hisax/gazel.c
@@ -243,7 +243,7 @@ WriteHSCX(struct IsdnCardState *cs, int hscx, u_char offset, u_char value)
243#include "hscx_irq.c" 243#include "hscx_irq.c"
244 244
245static irqreturn_t 245static irqreturn_t
246gazel_interrupt(int intno, void *dev_id, struct pt_regs *regs) 246gazel_interrupt(int intno, void *dev_id)
247{ 247{
248#define MAXCOUNT 5 248#define MAXCOUNT 5
249 struct IsdnCardState *cs = dev_id; 249 struct IsdnCardState *cs = dev_id;
@@ -274,7 +274,7 @@ gazel_interrupt(int intno, void *dev_id, struct pt_regs *regs)
274 274
275 275
276static irqreturn_t 276static irqreturn_t
277gazel_interrupt_ipac(int intno, void *dev_id, struct pt_regs *regs) 277gazel_interrupt_ipac(int intno, void *dev_id)
278{ 278{
279 struct IsdnCardState *cs = dev_id; 279 struct IsdnCardState *cs = dev_id;
280 u_char ista, val; 280 u_char ista, val;
diff --git a/drivers/isdn/hisax/hfc4s8s_l1.c b/drivers/isdn/hisax/hfc4s8s_l1.c
index 0ca5e66d2f5a..d852c9d998b2 100644
--- a/drivers/isdn/hisax/hfc4s8s_l1.c
+++ b/drivers/isdn/hisax/hfc4s8s_l1.c
@@ -1268,7 +1268,7 @@ hfc4s8s_bh(hfc4s8s_hw * hw)
1268/* interrupt handler */ 1268/* interrupt handler */
1269/*********************/ 1269/*********************/
1270static irqreturn_t 1270static irqreturn_t
1271hfc4s8s_interrupt(int intno, void *dev_id, struct pt_regs *regs) 1271hfc4s8s_interrupt(int intno, void *dev_id)
1272{ 1272{
1273 hfc4s8s_hw *hw = dev_id; 1273 hfc4s8s_hw *hw = dev_id;
1274 u_char b, ovr; 1274 u_char b, ovr;
diff --git a/drivers/isdn/hisax/hfc_pci.c b/drivers/isdn/hisax/hfc_pci.c
index 1df60ca9481f..93f60b563515 100644
--- a/drivers/isdn/hisax/hfc_pci.c
+++ b/drivers/isdn/hisax/hfc_pci.c
@@ -931,7 +931,7 @@ receive_emsg(struct IsdnCardState *cs)
931/* Interrupt handler */ 931/* Interrupt handler */
932/*********************/ 932/*********************/
933static irqreturn_t 933static irqreturn_t
934hfcpci_interrupt(int intno, void *dev_id, struct pt_regs *regs) 934hfcpci_interrupt(int intno, void *dev_id)
935{ 935{
936 u_long flags; 936 u_long flags;
937 struct IsdnCardState *cs = dev_id; 937 struct IsdnCardState *cs = dev_id;
diff --git a/drivers/isdn/hisax/hfc_sx.c b/drivers/isdn/hisax/hfc_sx.c
index b7e8e23be337..954d1536db1f 100644
--- a/drivers/isdn/hisax/hfc_sx.c
+++ b/drivers/isdn/hisax/hfc_sx.c
@@ -691,7 +691,7 @@ receive_emsg(struct IsdnCardState *cs)
691/* Interrupt handler */ 691/* Interrupt handler */
692/*********************/ 692/*********************/
693static irqreturn_t 693static irqreturn_t
694hfcsx_interrupt(int intno, void *dev_id, struct pt_regs *regs) 694hfcsx_interrupt(int intno, void *dev_id)
695{ 695{
696 struct IsdnCardState *cs = dev_id; 696 struct IsdnCardState *cs = dev_id;
697 u_char exval; 697 u_char exval;
diff --git a/drivers/isdn/hisax/hfc_usb.c b/drivers/isdn/hisax/hfc_usb.c
index 6b88ecb5047d..7105b043add8 100644
--- a/drivers/isdn/hisax/hfc_usb.c
+++ b/drivers/isdn/hisax/hfc_usb.c
@@ -276,7 +276,7 @@ control_action_handler(hfcusb_data * hfc, int reg, int val, int action)
276/* control completion routine handling background control cmds */ 276/* control completion routine handling background control cmds */
277/***************************************************************/ 277/***************************************************************/
278static void 278static void
279ctrl_complete(struct urb *urb, struct pt_regs *regs) 279ctrl_complete(struct urb *urb)
280{ 280{
281 hfcusb_data *hfc = (hfcusb_data *) urb->context; 281 hfcusb_data *hfc = (hfcusb_data *) urb->context;
282 ctrl_buft *buf; 282 ctrl_buft *buf;
@@ -603,7 +603,7 @@ static int iso_packets[8] =
603/* transmit completion routine for all ISO tx fifos */ 603/* transmit completion routine for all ISO tx fifos */
604/*****************************************************/ 604/*****************************************************/
605static void 605static void
606tx_iso_complete(struct urb *urb, struct pt_regs *regs) 606tx_iso_complete(struct urb *urb)
607{ 607{
608 iso_urb_struct *context_iso_urb = (iso_urb_struct *) urb->context; 608 iso_urb_struct *context_iso_urb = (iso_urb_struct *) urb->context;
609 usb_fifo *fifo = context_iso_urb->owner_fifo; 609 usb_fifo *fifo = context_iso_urb->owner_fifo;
@@ -726,7 +726,7 @@ tx_iso_complete(struct urb *urb, struct pt_regs *regs)
726/* receive completion routine for all ISO tx fifos */ 726/* receive completion routine for all ISO tx fifos */
727/*****************************************************/ 727/*****************************************************/
728static void 728static void
729rx_iso_complete(struct urb *urb, struct pt_regs *regs) 729rx_iso_complete(struct urb *urb)
730{ 730{
731 iso_urb_struct *context_iso_urb = (iso_urb_struct *) urb->context; 731 iso_urb_struct *context_iso_urb = (iso_urb_struct *) urb->context;
732 usb_fifo *fifo = context_iso_urb->owner_fifo; 732 usb_fifo *fifo = context_iso_urb->owner_fifo;
@@ -919,7 +919,7 @@ collect_rx_frame(usb_fifo * fifo, __u8 * data, int len, int finish)
919/* receive completion routine for all rx fifos */ 919/* receive completion routine for all rx fifos */
920/***********************************************/ 920/***********************************************/
921static void 921static void
922rx_complete(struct urb *urb, struct pt_regs *regs) 922rx_complete(struct urb *urb)
923{ 923{
924 int len; 924 int len;
925 int status; 925 int status;
diff --git a/drivers/isdn/hisax/hfcscard.c b/drivers/isdn/hisax/hfcscard.c
index 4e7f472877e9..57670dc5034d 100644
--- a/drivers/isdn/hisax/hfcscard.c
+++ b/drivers/isdn/hisax/hfcscard.c
@@ -21,7 +21,7 @@ extern const char *CardType[];
21static const char *hfcs_revision = "$Revision: 1.10.2.4 $"; 21static const char *hfcs_revision = "$Revision: 1.10.2.4 $";
22 22
23static irqreturn_t 23static irqreturn_t
24hfcs_interrupt(int intno, void *dev_id, struct pt_regs *regs) 24hfcs_interrupt(int intno, void *dev_id)
25{ 25{
26 struct IsdnCardState *cs = dev_id; 26 struct IsdnCardState *cs = dev_id;
27 u_char val, stat; 27 u_char val, stat;
diff --git a/drivers/isdn/hisax/hisax.h b/drivers/isdn/hisax/hisax.h
index 2f9d5118ceaf..159c5896061e 100644
--- a/drivers/isdn/hisax/hisax.h
+++ b/drivers/isdn/hisax/hisax.h
@@ -941,7 +941,7 @@ struct IsdnCardState {
941 int (*cardmsg) (struct IsdnCardState *, int, void *); 941 int (*cardmsg) (struct IsdnCardState *, int, void *);
942 void (*setstack_d) (struct PStack *, struct IsdnCardState *); 942 void (*setstack_d) (struct PStack *, struct IsdnCardState *);
943 void (*DC_Close) (struct IsdnCardState *); 943 void (*DC_Close) (struct IsdnCardState *);
944 int (*irq_func) (int, void *, struct pt_regs *); 944 int (*irq_func) (int, void *);
945 int (*auxcmd) (struct IsdnCardState *, isdn_ctrl *); 945 int (*auxcmd) (struct IsdnCardState *, isdn_ctrl *);
946 struct Channel channel[2+MAX_WAITING_CALLS]; 946 struct Channel channel[2+MAX_WAITING_CALLS];
947 struct BCState bcs[2+MAX_WAITING_CALLS]; 947 struct BCState bcs[2+MAX_WAITING_CALLS];
diff --git a/drivers/isdn/hisax/hisax_fcpcipnp.c b/drivers/isdn/hisax/hisax_fcpcipnp.c
index 881a4165cfb4..f6db55a752c4 100644
--- a/drivers/isdn/hisax/hisax_fcpcipnp.c
+++ b/drivers/isdn/hisax/hisax_fcpcipnp.c
@@ -651,7 +651,7 @@ static void fritz_b_l2l1(struct hisax_if *ifc, int pr, void *arg)
651// ---------------------------------------------------------------------- 651// ----------------------------------------------------------------------
652 652
653static irqreturn_t 653static irqreturn_t
654fcpci2_irq(int intno, void *dev, struct pt_regs *regs) 654fcpci2_irq(int intno, void *dev)
655{ 655{
656 struct fritz_adapter *adapter = dev; 656 struct fritz_adapter *adapter = dev;
657 unsigned char val; 657 unsigned char val;
@@ -671,7 +671,7 @@ fcpci2_irq(int intno, void *dev, struct pt_regs *regs)
671} 671}
672 672
673static irqreturn_t 673static irqreturn_t
674fcpci_irq(int intno, void *dev, struct pt_regs *regs) 674fcpci_irq(int intno, void *dev)
675{ 675{
676 struct fritz_adapter *adapter = dev; 676 struct fritz_adapter *adapter = dev;
677 unsigned char sval; 677 unsigned char sval;
diff --git a/drivers/isdn/hisax/icc.c b/drivers/isdn/hisax/icc.c
index 2cf7b665609e..da706925d54d 100644
--- a/drivers/isdn/hisax/icc.c
+++ b/drivers/isdn/hisax/icc.c
@@ -608,7 +608,7 @@ dbusy_timer_handler(struct IsdnCardState *cs)
608 debugl1(cs, "D-Channel Busy no skb"); 608 debugl1(cs, "D-Channel Busy no skb");
609 } 609 }
610 cs->writeisac(cs, ICC_CMDR, 0x01); /* Transmitter reset */ 610 cs->writeisac(cs, ICC_CMDR, 0x01); /* Transmitter reset */
611 cs->irq_func(cs->irq, cs, NULL); 611 cs->irq_func(cs->irq, cs);
612 } 612 }
613 } 613 }
614} 614}
diff --git a/drivers/isdn/hisax/isac.c b/drivers/isdn/hisax/isac.c
index 565b7892c267..282f349408bc 100644
--- a/drivers/isdn/hisax/isac.c
+++ b/drivers/isdn/hisax/isac.c
@@ -609,7 +609,7 @@ dbusy_timer_handler(struct IsdnCardState *cs)
609 debugl1(cs, "D-Channel Busy no skb"); 609 debugl1(cs, "D-Channel Busy no skb");
610 } 610 }
611 cs->writeisac(cs, ISAC_CMDR, 0x01); /* Transmitter reset */ 611 cs->writeisac(cs, ISAC_CMDR, 0x01); /* Transmitter reset */
612 cs->irq_func(cs->irq, cs, NULL); 612 cs->irq_func(cs->irq, cs);
613 } 613 }
614 } 614 }
615} 615}
diff --git a/drivers/isdn/hisax/isurf.c b/drivers/isdn/hisax/isurf.c
index 715a1a8cd694..55de06953540 100644
--- a/drivers/isdn/hisax/isurf.c
+++ b/drivers/isdn/hisax/isurf.c
@@ -83,7 +83,7 @@ WriteISAR(struct IsdnCardState *cs, int mode, u_char offset, u_char value)
83} 83}
84 84
85static irqreturn_t 85static irqreturn_t
86isurf_interrupt(int intno, void *dev_id, struct pt_regs *regs) 86isurf_interrupt(int intno, void *dev_id)
87{ 87{
88 struct IsdnCardState *cs = dev_id; 88 struct IsdnCardState *cs = dev_id;
89 u_char val; 89 u_char val;
diff --git a/drivers/isdn/hisax/ix1_micro.c b/drivers/isdn/hisax/ix1_micro.c
index 39717506c678..252d79de5e5e 100644
--- a/drivers/isdn/hisax/ix1_micro.c
+++ b/drivers/isdn/hisax/ix1_micro.c
@@ -125,7 +125,7 @@ WriteHSCX(struct IsdnCardState *cs, int hscx, u_char offset, u_char value)
125#include "hscx_irq.c" 125#include "hscx_irq.c"
126 126
127static irqreturn_t 127static irqreturn_t
128ix1micro_interrupt(int intno, void *dev_id, struct pt_regs *regs) 128ix1micro_interrupt(int intno, void *dev_id)
129{ 129{
130 struct IsdnCardState *cs = dev_id; 130 struct IsdnCardState *cs = dev_id;
131 u_char val; 131 u_char val;
diff --git a/drivers/isdn/hisax/mic.c b/drivers/isdn/hisax/mic.c
index 8c82519593a8..a81d175d9f64 100644
--- a/drivers/isdn/hisax/mic.c
+++ b/drivers/isdn/hisax/mic.c
@@ -120,7 +120,7 @@ WriteHSCX(struct IsdnCardState *cs, int hscx, u_char offset, u_char value)
120#include "hscx_irq.c" 120#include "hscx_irq.c"
121 121
122static irqreturn_t 122static irqreturn_t
123mic_interrupt(int intno, void *dev_id, struct pt_regs *regs) 123mic_interrupt(int intno, void *dev_id)
124{ 124{
125 struct IsdnCardState *cs = dev_id; 125 struct IsdnCardState *cs = dev_id;
126 u_char val; 126 u_char val;
diff --git a/drivers/isdn/hisax/netjet.h b/drivers/isdn/hisax/netjet.h
index 1080508f3c6a..4d89d3ea4173 100644
--- a/drivers/isdn/hisax/netjet.h
+++ b/drivers/isdn/hisax/netjet.h
@@ -66,7 +66,7 @@ void read_tiger(struct IsdnCardState *cs);
66void write_tiger(struct IsdnCardState *cs); 66void write_tiger(struct IsdnCardState *cs);
67 67
68void netjet_fill_dma(struct BCState *bcs); 68void netjet_fill_dma(struct BCState *bcs);
69void netjet_interrupt(int intno, void *dev_id, struct pt_regs *regs); 69void netjet_interrupt(int intno, void *dev_id);
70void inittiger(struct IsdnCardState *cs); 70void inittiger(struct IsdnCardState *cs);
71void release_io_netjet(struct IsdnCardState *cs); 71void release_io_netjet(struct IsdnCardState *cs);
72 72
diff --git a/drivers/isdn/hisax/niccy.c b/drivers/isdn/hisax/niccy.c
index 0945336c28da..e5918c6fe73d 100644
--- a/drivers/isdn/hisax/niccy.c
+++ b/drivers/isdn/hisax/niccy.c
@@ -122,8 +122,7 @@ static void WriteHSCX(struct IsdnCardState *cs, int hscx, u_char offset,
122 122
123#include "hscx_irq.c" 123#include "hscx_irq.c"
124 124
125static irqreturn_t niccy_interrupt(int intno, void *dev_id, 125static irqreturn_t niccy_interrupt(int intno, void *dev_id)
126 struct pt_regs *regs)
127{ 126{
128 struct IsdnCardState *cs = dev_id; 127 struct IsdnCardState *cs = dev_id;
129 u_char val; 128 u_char val;
diff --git a/drivers/isdn/hisax/nj_s.c b/drivers/isdn/hisax/nj_s.c
index 80025fd890f4..c09ffb135330 100644
--- a/drivers/isdn/hisax/nj_s.c
+++ b/drivers/isdn/hisax/nj_s.c
@@ -26,7 +26,7 @@ static void dummywr(struct IsdnCardState *cs, int chan, u_char off, u_char value
26} 26}
27 27
28static irqreturn_t 28static irqreturn_t
29netjet_s_interrupt(int intno, void *dev_id, struct pt_regs *regs) 29netjet_s_interrupt(int intno, void *dev_id)
30{ 30{
31 struct IsdnCardState *cs = dev_id; 31 struct IsdnCardState *cs = dev_id;
32 u_char val, s1val, s0val; 32 u_char val, s1val, s0val;
diff --git a/drivers/isdn/hisax/nj_u.c b/drivers/isdn/hisax/nj_u.c
index 37497162d539..8202cf34ecae 100644
--- a/drivers/isdn/hisax/nj_u.c
+++ b/drivers/isdn/hisax/nj_u.c
@@ -26,7 +26,7 @@ static void dummywr(struct IsdnCardState *cs, int chan, u_char off, u_char value
26} 26}
27 27
28static irqreturn_t 28static irqreturn_t
29netjet_u_interrupt(int intno, void *dev_id, struct pt_regs *regs) 29netjet_u_interrupt(int intno, void *dev_id)
30{ 30{
31 struct IsdnCardState *cs = dev_id; 31 struct IsdnCardState *cs = dev_id;
32 u_char val, sval; 32 u_char val, sval;
diff --git a/drivers/isdn/hisax/s0box.c b/drivers/isdn/hisax/s0box.c
index e76042d323ea..150ef68b4ae2 100644
--- a/drivers/isdn/hisax/s0box.c
+++ b/drivers/isdn/hisax/s0box.c
@@ -141,7 +141,7 @@ WriteHSCX(struct IsdnCardState *cs, int hscx, u_char offset, u_char value)
141#include "hscx_irq.c" 141#include "hscx_irq.c"
142 142
143static irqreturn_t 143static irqreturn_t
144s0box_interrupt(int intno, void *dev_id, struct pt_regs *regs) 144s0box_interrupt(int intno, void *dev_id)
145{ 145{
146#define MAXCOUNT 5 146#define MAXCOUNT 5
147 struct IsdnCardState *cs = dev_id; 147 struct IsdnCardState *cs = dev_id;
diff --git a/drivers/isdn/hisax/saphir.c b/drivers/isdn/hisax/saphir.c
index d943d365890b..c99b16690fb3 100644
--- a/drivers/isdn/hisax/saphir.c
+++ b/drivers/isdn/hisax/saphir.c
@@ -117,7 +117,7 @@ WriteHSCX(struct IsdnCardState *cs, int hscx, u_char offset, u_char value)
117#include "hscx_irq.c" 117#include "hscx_irq.c"
118 118
119static irqreturn_t 119static irqreturn_t
120saphir_interrupt(int intno, void *dev_id, struct pt_regs *regs) 120saphir_interrupt(int intno, void *dev_id)
121{ 121{
122 struct IsdnCardState *cs = dev_id; 122 struct IsdnCardState *cs = dev_id;
123 u_char val; 123 u_char val;
diff --git a/drivers/isdn/hisax/sedlbauer.c b/drivers/isdn/hisax/sedlbauer.c
index 8d8e8a299892..9522141f4351 100644
--- a/drivers/isdn/hisax/sedlbauer.c
+++ b/drivers/isdn/hisax/sedlbauer.c
@@ -260,7 +260,7 @@ WriteISAR(struct IsdnCardState *cs, int mode, u_char offset, u_char value)
260#include "hscx_irq.c" 260#include "hscx_irq.c"
261 261
262static irqreturn_t 262static irqreturn_t
263sedlbauer_interrupt(int intno, void *dev_id, struct pt_regs *regs) 263sedlbauer_interrupt(int intno, void *dev_id)
264{ 264{
265 struct IsdnCardState *cs = dev_id; 265 struct IsdnCardState *cs = dev_id;
266 u_char val; 266 u_char val;
@@ -306,7 +306,7 @@ sedlbauer_interrupt(int intno, void *dev_id, struct pt_regs *regs)
306} 306}
307 307
308static irqreturn_t 308static irqreturn_t
309sedlbauer_interrupt_ipac(int intno, void *dev_id, struct pt_regs *regs) 309sedlbauer_interrupt_ipac(int intno, void *dev_id)
310{ 310{
311 struct IsdnCardState *cs = dev_id; 311 struct IsdnCardState *cs = dev_id;
312 u_char ista, val, icnt = 5; 312 u_char ista, val, icnt = 5;
@@ -353,7 +353,7 @@ Start_IPAC:
353} 353}
354 354
355static irqreturn_t 355static irqreturn_t
356sedlbauer_interrupt_isar(int intno, void *dev_id, struct pt_regs *regs) 356sedlbauer_interrupt_isar(int intno, void *dev_id)
357{ 357{
358 struct IsdnCardState *cs = dev_id; 358 struct IsdnCardState *cs = dev_id;
359 u_char val; 359 u_char val;
diff --git a/drivers/isdn/hisax/sportster.c b/drivers/isdn/hisax/sportster.c
index a49b694eb730..02209500b3b7 100644
--- a/drivers/isdn/hisax/sportster.c
+++ b/drivers/isdn/hisax/sportster.c
@@ -99,7 +99,7 @@ WriteHSCX(struct IsdnCardState *cs, int hscx, u_char offset, u_char value)
99#include "hscx_irq.c" 99#include "hscx_irq.c"
100 100
101static irqreturn_t 101static irqreturn_t
102sportster_interrupt(int intno, void *dev_id, struct pt_regs *regs) 102sportster_interrupt(int intno, void *dev_id)
103{ 103{
104 struct IsdnCardState *cs = dev_id; 104 struct IsdnCardState *cs = dev_id;
105 u_char val; 105 u_char val;
diff --git a/drivers/isdn/hisax/st5481_b.c b/drivers/isdn/hisax/st5481_b.c
index aca2a3954b14..75d0f248e4ee 100644
--- a/drivers/isdn/hisax/st5481_b.c
+++ b/drivers/isdn/hisax/st5481_b.c
@@ -161,7 +161,7 @@ static void led_blink(struct st5481_adapter *adapter)
161 st5481_usb_device_ctrl_msg(adapter, GPIO_OUT, leds, NULL, NULL); 161 st5481_usb_device_ctrl_msg(adapter, GPIO_OUT, leds, NULL, NULL);
162} 162}
163 163
164static void usb_b_out_complete(struct urb *urb, struct pt_regs *regs) 164static void usb_b_out_complete(struct urb *urb)
165{ 165{
166 struct st5481_bcs *bcs = urb->context; 166 struct st5481_bcs *bcs = urb->context;
167 struct st5481_b_out *b_out = &bcs->b_out; 167 struct st5481_b_out *b_out = &bcs->b_out;
diff --git a/drivers/isdn/hisax/st5481_d.c b/drivers/isdn/hisax/st5481_d.c
index 98adec440590..1d8c2618366c 100644
--- a/drivers/isdn/hisax/st5481_d.c
+++ b/drivers/isdn/hisax/st5481_d.c
@@ -370,7 +370,7 @@ static void fifo_reseted(void *context)
370 FsmEvent(&adapter->d_out.fsm, EV_DOUT_RESETED, NULL); 370 FsmEvent(&adapter->d_out.fsm, EV_DOUT_RESETED, NULL);
371} 371}
372 372
373static void usb_d_out_complete(struct urb *urb, struct pt_regs *regs) 373static void usb_d_out_complete(struct urb *urb)
374{ 374{
375 struct st5481_adapter *adapter = urb->context; 375 struct st5481_adapter *adapter = urb->context;
376 struct st5481_d_out *d_out = &adapter->d_out; 376 struct st5481_d_out *d_out = &adapter->d_out;
diff --git a/drivers/isdn/hisax/st5481_usb.c b/drivers/isdn/hisax/st5481_usb.c
index b096b64b0253..ff1595122048 100644
--- a/drivers/isdn/hisax/st5481_usb.c
+++ b/drivers/isdn/hisax/st5481_usb.c
@@ -125,7 +125,7 @@ void st5481_ph_command(struct st5481_adapter *adapter, unsigned int command)
125 * Call the user provided completion routine and try 125 * Call the user provided completion routine and try
126 * to send the next request. 126 * to send the next request.
127 */ 127 */
128static void usb_ctrl_complete(struct urb *urb, struct pt_regs *regs) 128static void usb_ctrl_complete(struct urb *urb)
129{ 129{
130 struct st5481_adapter *adapter = urb->context; 130 struct st5481_adapter *adapter = urb->context;
131 struct st5481_ctrl *ctrl = &adapter->ctrl; 131 struct st5481_ctrl *ctrl = &adapter->ctrl;
@@ -179,7 +179,7 @@ static void usb_ctrl_complete(struct urb *urb, struct pt_regs *regs)
179 * Decode the register values and schedule a private event. 179 * Decode the register values and schedule a private event.
180 * Called at interrupt. 180 * Called at interrupt.
181 */ 181 */
182static void usb_int_complete(struct urb *urb, struct pt_regs *regs) 182static void usb_int_complete(struct urb *urb)
183{ 183{
184 u8 *data = urb->transfer_buffer; 184 u8 *data = urb->transfer_buffer;
185 u8 irqbyte; 185 u8 irqbyte;
@@ -483,7 +483,7 @@ void st5481_release_isocpipes(struct urb* urb[2])
483 * called 50 times per second with 20 ISOC descriptors. 483 * called 50 times per second with 20 ISOC descriptors.
484 * Called at interrupt. 484 * Called at interrupt.
485 */ 485 */
486static void usb_in_complete(struct urb *urb, struct pt_regs *regs) 486static void usb_in_complete(struct urb *urb)
487{ 487{
488 struct st5481_in *in = urb->context; 488 struct st5481_in *in = urb->context;
489 unsigned char *ptr; 489 unsigned char *ptr;
diff --git a/drivers/isdn/hisax/teleint.c b/drivers/isdn/hisax/teleint.c
index e94dc6f5bd62..0909662b7458 100644
--- a/drivers/isdn/hisax/teleint.c
+++ b/drivers/isdn/hisax/teleint.c
@@ -157,7 +157,7 @@ WriteHFC(struct IsdnCardState *cs, int data, u_char reg, u_char value)
157} 157}
158 158
159static irqreturn_t 159static irqreturn_t
160TeleInt_interrupt(int intno, void *dev_id, struct pt_regs *regs) 160TeleInt_interrupt(int intno, void *dev_id)
161{ 161{
162 struct IsdnCardState *cs = dev_id; 162 struct IsdnCardState *cs = dev_id;
163 u_char val; 163 u_char val;
diff --git a/drivers/isdn/hisax/teles0.c b/drivers/isdn/hisax/teles0.c
index f94af0930a17..48581335f43c 100644
--- a/drivers/isdn/hisax/teles0.c
+++ b/drivers/isdn/hisax/teles0.c
@@ -144,7 +144,7 @@ WriteHSCX(struct IsdnCardState *cs, int hscx, u_char offset, u_char value)
144#include "hscx_irq.c" 144#include "hscx_irq.c"
145 145
146static irqreturn_t 146static irqreturn_t
147teles0_interrupt(int intno, void *dev_id, struct pt_regs *regs) 147teles0_interrupt(int intno, void *dev_id)
148{ 148{
149 struct IsdnCardState *cs = dev_id; 149 struct IsdnCardState *cs = dev_id;
150 u_char val; 150 u_char val;
diff --git a/drivers/isdn/hisax/teles3.c b/drivers/isdn/hisax/teles3.c
index 5cb712437da4..6a5e379e0774 100644
--- a/drivers/isdn/hisax/teles3.c
+++ b/drivers/isdn/hisax/teles3.c
@@ -101,7 +101,7 @@ WriteHSCX(struct IsdnCardState *cs, int hscx, u_char offset, u_char value)
101#include "hscx_irq.c" 101#include "hscx_irq.c"
102 102
103static irqreturn_t 103static irqreturn_t
104teles3_interrupt(int intno, void *dev_id, struct pt_regs *regs) 104teles3_interrupt(int intno, void *dev_id)
105{ 105{
106#define MAXCOUNT 5 106#define MAXCOUNT 5
107 struct IsdnCardState *cs = dev_id; 107 struct IsdnCardState *cs = dev_id;
diff --git a/drivers/isdn/hisax/telespci.c b/drivers/isdn/hisax/telespci.c
index dca446865f24..d09f6d033f15 100644
--- a/drivers/isdn/hisax/telespci.c
+++ b/drivers/isdn/hisax/telespci.c
@@ -226,7 +226,7 @@ WriteHSCX(struct IsdnCardState *cs, int hscx, u_char offset, u_char value)
226#include "hscx_irq.c" 226#include "hscx_irq.c"
227 227
228static irqreturn_t 228static irqreturn_t
229telespci_interrupt(int intno, void *dev_id, struct pt_regs *regs) 229telespci_interrupt(int intno, void *dev_id)
230{ 230{
231 struct IsdnCardState *cs = dev_id; 231 struct IsdnCardState *cs = dev_id;
232 u_char hval, ival; 232 u_char hval, ival;
diff --git a/drivers/isdn/hisax/w6692.c b/drivers/isdn/hisax/w6692.c
index 0595293b8659..1655341797a9 100644
--- a/drivers/isdn/hisax/w6692.c
+++ b/drivers/isdn/hisax/w6692.c
@@ -400,7 +400,7 @@ W6692B_interrupt(struct IsdnCardState *cs, u_char bchan)
400} 400}
401 401
402static irqreturn_t 402static irqreturn_t
403W6692_interrupt(int intno, void *dev_id, struct pt_regs *regs) 403W6692_interrupt(int intno, void *dev_id)
404{ 404{
405 struct IsdnCardState *cs = dev_id; 405 struct IsdnCardState *cs = dev_id;
406 u_char val, exval, v1; 406 u_char val, exval, v1;
@@ -715,7 +715,7 @@ dbusy_timer_handler(struct IsdnCardState *cs)
715 } 715 }
716 cs->writeW6692(cs, W_D_CMDR, W_D_CMDR_XRST); /* Transmitter reset */ 716 cs->writeW6692(cs, W_D_CMDR, W_D_CMDR_XRST); /* Transmitter reset */
717 spin_unlock_irqrestore(&cs->lock, flags); 717 spin_unlock_irqrestore(&cs->lock, flags);
718 cs->irq_func(cs->irq, cs, NULL); 718 cs->irq_func(cs->irq, cs);
719 return; 719 return;
720 } 720 }
721 } 721 }