aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/irda
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/net/irda
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/net/irda')
-rw-r--r--drivers/net/irda/ali-ircc.c3
-rw-r--r--drivers/net/irda/au1k_ir.c4
-rw-r--r--drivers/net/irda/donauboe.c4
-rw-r--r--drivers/net/irda/irda-usb.c12
-rw-r--r--drivers/net/irda/irport.c8
-rw-r--r--drivers/net/irda/irport.h2
-rw-r--r--drivers/net/irda/mcs7780.c4
-rw-r--r--drivers/net/irda/mcs7780.h4
-rw-r--r--drivers/net/irda/nsc-ircc.c3
-rw-r--r--drivers/net/irda/pxaficp_ir.c8
-rw-r--r--drivers/net/irda/sa1100_ir.c2
-rw-r--r--drivers/net/irda/smsc-ircc2.c6
-rw-r--r--drivers/net/irda/stir4200.c2
-rw-r--r--drivers/net/irda/via-ircc.c8
-rw-r--r--drivers/net/irda/vlsi_ir.c3
-rw-r--r--drivers/net/irda/w83977af_ir.c3
16 files changed, 34 insertions, 42 deletions
diff --git a/drivers/net/irda/ali-ircc.c b/drivers/net/irda/ali-ircc.c
index 68d4c418cb98..971e2dee1e6b 100644
--- a/drivers/net/irda/ali-ircc.c
+++ b/drivers/net/irda/ali-ircc.c
@@ -660,8 +660,7 @@ static int ali_ircc_read_dongle_id (int i, chipio_t *info)
660 * An interrupt from the chip has arrived. Time to do some work 660 * An interrupt from the chip has arrived. Time to do some work
661 * 661 *
662 */ 662 */
663static irqreturn_t ali_ircc_interrupt(int irq, void *dev_id, 663static irqreturn_t ali_ircc_interrupt(int irq, void *dev_id)
664 struct pt_regs *regs)
665{ 664{
666 struct net_device *dev = (struct net_device *) dev_id; 665 struct net_device *dev = (struct net_device *) dev_id;
667 struct ali_ircc_cb *self; 666 struct ali_ircc_cb *self;
diff --git a/drivers/net/irda/au1k_ir.c b/drivers/net/irda/au1k_ir.c
index 7b2b4135bb23..37914dc5b90e 100644
--- a/drivers/net/irda/au1k_ir.c
+++ b/drivers/net/irda/au1k_ir.c
@@ -51,7 +51,7 @@ static int au1k_irda_start(struct net_device *);
51static int au1k_irda_stop(struct net_device *dev); 51static int au1k_irda_stop(struct net_device *dev);
52static int au1k_irda_hard_xmit(struct sk_buff *, struct net_device *); 52static int au1k_irda_hard_xmit(struct sk_buff *, struct net_device *);
53static int au1k_irda_rx(struct net_device *); 53static int au1k_irda_rx(struct net_device *);
54static void au1k_irda_interrupt(int, void *, struct pt_regs *); 54static void au1k_irda_interrupt(int, void *);
55static void au1k_tx_timeout(struct net_device *); 55static void au1k_tx_timeout(struct net_device *);
56static struct net_device_stats *au1k_irda_stats(struct net_device *); 56static struct net_device_stats *au1k_irda_stats(struct net_device *);
57static int au1k_irda_ioctl(struct net_device *, struct ifreq *, int); 57static int au1k_irda_ioctl(struct net_device *, struct ifreq *, int);
@@ -627,7 +627,7 @@ static int au1k_irda_rx(struct net_device *dev)
627} 627}
628 628
629 629
630void au1k_irda_interrupt(int irq, void *dev_id, struct pt_regs *regs) 630void au1k_irda_interrupt(int irq, void *dev_id)
631{ 631{
632 struct net_device *dev = (struct net_device *) dev_id; 632 struct net_device *dev = (struct net_device *) dev_id;
633 633
diff --git a/drivers/net/irda/donauboe.c b/drivers/net/irda/donauboe.c
index 33c07d5275da..7a9128181e68 100644
--- a/drivers/net/irda/donauboe.c
+++ b/drivers/net/irda/donauboe.c
@@ -709,7 +709,7 @@ stuff_byte (__u8 byte, __u8 * buf)
709} 709}
710 710
711static irqreturn_t 711static irqreturn_t
712toshoboe_probeinterrupt (int irq, void *dev_id, struct pt_regs *regs) 712toshoboe_probeinterrupt (int irq, void *dev_id)
713{ 713{
714 struct toshoboe_cb *self = (struct toshoboe_cb *) dev_id; 714 struct toshoboe_cb *self = (struct toshoboe_cb *) dev_id;
715 __u8 irqstat; 715 __u8 irqstat;
@@ -1161,7 +1161,7 @@ dumpbufs(skb->data,skb->len,'>');
1161 1161
1162/*interrupt handler */ 1162/*interrupt handler */
1163static irqreturn_t 1163static irqreturn_t
1164toshoboe_interrupt (int irq, void *dev_id, struct pt_regs *regs) 1164toshoboe_interrupt (int irq, void *dev_id)
1165{ 1165{
1166 struct toshoboe_cb *self = (struct toshoboe_cb *) dev_id; 1166 struct toshoboe_cb *self = (struct toshoboe_cb *) dev_id;
1167 __u8 irqstat; 1167 __u8 irqstat;
diff --git a/drivers/net/irda/irda-usb.c b/drivers/net/irda/irda-usb.c
index 383cef1f5999..14bda765c2fa 100644
--- a/drivers/net/irda/irda-usb.c
+++ b/drivers/net/irda/irda-usb.c
@@ -114,9 +114,9 @@ static void irda_usb_change_speed_xbofs(struct irda_usb_cb *self);
114static int irda_usb_hard_xmit(struct sk_buff *skb, struct net_device *dev); 114static int irda_usb_hard_xmit(struct sk_buff *skb, struct net_device *dev);
115static int irda_usb_open(struct irda_usb_cb *self); 115static int irda_usb_open(struct irda_usb_cb *self);
116static void irda_usb_close(struct irda_usb_cb *self); 116static void irda_usb_close(struct irda_usb_cb *self);
117static void speed_bulk_callback(struct urb *urb, struct pt_regs *regs); 117static void speed_bulk_callback(struct urb *urb);
118static void write_bulk_callback(struct urb *urb, struct pt_regs *regs); 118static void write_bulk_callback(struct urb *urb);
119static void irda_usb_receive(struct urb *urb, struct pt_regs *regs); 119static void irda_usb_receive(struct urb *urb);
120static void irda_usb_rx_defer_expired(unsigned long data); 120static void irda_usb_rx_defer_expired(unsigned long data);
121static int irda_usb_net_open(struct net_device *dev); 121static int irda_usb_net_open(struct net_device *dev);
122static int irda_usb_net_close(struct net_device *dev); 122static int irda_usb_net_close(struct net_device *dev);
@@ -343,7 +343,7 @@ static void irda_usb_change_speed_xbofs(struct irda_usb_cb *self)
343 * Speed URB callback 343 * Speed URB callback
344 * Now, we can only get called for the speed URB. 344 * Now, we can only get called for the speed URB.
345 */ 345 */
346static void speed_bulk_callback(struct urb *urb, struct pt_regs *regs) 346static void speed_bulk_callback(struct urb *urb)
347{ 347{
348 struct irda_usb_cb *self = urb->context; 348 struct irda_usb_cb *self = urb->context;
349 349
@@ -562,7 +562,7 @@ drop:
562/* 562/*
563 * Note : this function will be called only for tx_urb... 563 * Note : this function will be called only for tx_urb...
564 */ 564 */
565static void write_bulk_callback(struct urb *urb, struct pt_regs *regs) 565static void write_bulk_callback(struct urb *urb)
566{ 566{
567 unsigned long flags; 567 unsigned long flags;
568 struct sk_buff *skb = urb->context; 568 struct sk_buff *skb = urb->context;
@@ -809,7 +809,7 @@ static void irda_usb_submit(struct irda_usb_cb *self, struct sk_buff *skb, struc
809 * Called by the USB subsystem when a frame has been received 809 * Called by the USB subsystem when a frame has been received
810 * 810 *
811 */ 811 */
812static void irda_usb_receive(struct urb *urb, struct pt_regs *regs) 812static void irda_usb_receive(struct urb *urb)
813{ 813{
814 struct sk_buff *skb = (struct sk_buff *) urb->context; 814 struct sk_buff *skb = (struct sk_buff *) urb->context;
815 struct irda_usb_cb *self; 815 struct irda_usb_cb *self;
diff --git a/drivers/net/irda/irport.c b/drivers/net/irda/irport.c
index ba4f3eb988b3..6ea78ececca7 100644
--- a/drivers/net/irda/irport.c
+++ b/drivers/net/irda/irport.c
@@ -87,8 +87,7 @@ static struct net_device_stats *irport_net_get_stats(struct net_device *dev);
87static int irport_change_speed_complete(struct irda_task *task); 87static int irport_change_speed_complete(struct irda_task *task);
88static void irport_timeout(struct net_device *dev); 88static void irport_timeout(struct net_device *dev);
89 89
90static irqreturn_t irport_interrupt(int irq, void *dev_id, 90static irqreturn_t irport_interrupt(int irq, void *dev_id);
91 struct pt_regs *regs);
92static int irport_hard_xmit(struct sk_buff *skb, struct net_device *dev); 91static int irport_hard_xmit(struct sk_buff *skb, struct net_device *dev);
93static void irport_change_speed(void *priv, __u32 speed); 92static void irport_change_speed(void *priv, __u32 speed);
94static int irport_net_open(struct net_device *dev); 93static int irport_net_open(struct net_device *dev);
@@ -761,12 +760,11 @@ static inline void irport_receive(struct irport_cb *self)
761} 760}
762 761
763/* 762/*
764 * Function irport_interrupt (irq, dev_id, regs) 763 * Function irport_interrupt (irq, dev_id)
765 * 764 *
766 * Interrupt handler 765 * Interrupt handler
767 */ 766 */
768static irqreturn_t irport_interrupt(int irq, void *dev_id, 767static irqreturn_t irport_interrupt(int irq, void *dev_id)
769 struct pt_regs *regs)
770{ 768{
771 struct net_device *dev = (struct net_device *) dev_id; 769 struct net_device *dev = (struct net_device *) dev_id;
772 struct irport_cb *self; 770 struct irport_cb *self;
diff --git a/drivers/net/irda/irport.h b/drivers/net/irda/irport.h
index fc89c8c3dd7f..4393168347e3 100644
--- a/drivers/net/irda/irport.h
+++ b/drivers/net/irda/irport.h
@@ -74,7 +74,7 @@ struct irport_cb {
74 /* For piggyback drivers */ 74 /* For piggyback drivers */
75 void *priv; 75 void *priv;
76 void (*change_speed)(void *priv, __u32 speed); 76 void (*change_speed)(void *priv, __u32 speed);
77 int (*interrupt)(int irq, void *dev_id, struct pt_regs *regs); 77 int (*interrupt)(int irq, void *dev_id);
78}; 78};
79 79
80#endif /* IRPORT_H */ 80#endif /* IRPORT_H */
diff --git a/drivers/net/irda/mcs7780.c b/drivers/net/irda/mcs7780.c
index 415ba8dc94ce..b32c52ed19d7 100644
--- a/drivers/net/irda/mcs7780.c
+++ b/drivers/net/irda/mcs7780.c
@@ -764,7 +764,7 @@ static struct net_device_stats *mcs_net_get_stats(struct net_device *netdev)
764} 764}
765 765
766/* Receive callback function. */ 766/* Receive callback function. */
767static void mcs_receive_irq(struct urb *urb, struct pt_regs *regs) 767static void mcs_receive_irq(struct urb *urb)
768{ 768{
769 __u8 *bytes; 769 __u8 *bytes;
770 struct mcs_cb *mcs = urb->context; 770 struct mcs_cb *mcs = urb->context;
@@ -813,7 +813,7 @@ static void mcs_receive_irq(struct urb *urb, struct pt_regs *regs)
813} 813}
814 814
815/* Transmit callback funtion. */ 815/* Transmit callback funtion. */
816static void mcs_send_irq(struct urb *urb, struct pt_regs *regs) 816static void mcs_send_irq(struct urb *urb)
817{ 817{
818 struct mcs_cb *mcs = urb->context; 818 struct mcs_cb *mcs = urb->context;
819 struct net_device *ndev = mcs->netdev; 819 struct net_device *ndev = mcs->netdev;
diff --git a/drivers/net/irda/mcs7780.h b/drivers/net/irda/mcs7780.h
index 1a723d725c2a..b18148cee638 100644
--- a/drivers/net/irda/mcs7780.h
+++ b/drivers/net/irda/mcs7780.h
@@ -156,8 +156,8 @@ static int mcs_net_close(struct net_device *netdev);
156static int mcs_net_open(struct net_device *netdev); 156static int mcs_net_open(struct net_device *netdev);
157static struct net_device_stats *mcs_net_get_stats(struct net_device *netdev); 157static struct net_device_stats *mcs_net_get_stats(struct net_device *netdev);
158 158
159static void mcs_receive_irq(struct urb *urb, struct pt_regs *regs); 159static void mcs_receive_irq(struct urb *urb);
160static void mcs_send_irq(struct urb *urb, struct pt_regs *regs); 160static void mcs_send_irq(struct urb *urb);
161static int mcs_hard_xmit(struct sk_buff *skb, struct net_device *netdev); 161static int mcs_hard_xmit(struct sk_buff *skb, struct net_device *netdev);
162 162
163static int mcs_probe(struct usb_interface *intf, 163static int mcs_probe(struct usb_interface *intf,
diff --git a/drivers/net/irda/nsc-ircc.c b/drivers/net/irda/nsc-ircc.c
index 7185a4ee3c1e..ea12e999814a 100644
--- a/drivers/net/irda/nsc-ircc.c
+++ b/drivers/net/irda/nsc-ircc.c
@@ -2066,8 +2066,7 @@ static void nsc_ircc_fir_interrupt(struct nsc_ircc_cb *self, int iobase,
2066 * An interrupt from the chip has arrived. Time to do some work 2066 * An interrupt from the chip has arrived. Time to do some work
2067 * 2067 *
2068 */ 2068 */
2069static irqreturn_t nsc_ircc_interrupt(int irq, void *dev_id, 2069static irqreturn_t nsc_ircc_interrupt(int irq, void *dev_id)
2070 struct pt_regs *regs)
2071{ 2070{
2072 struct net_device *dev = (struct net_device *) dev_id; 2071 struct net_device *dev = (struct net_device *) dev_id;
2073 struct nsc_ircc_cb *self; 2072 struct nsc_ircc_cb *self;
diff --git a/drivers/net/irda/pxaficp_ir.c b/drivers/net/irda/pxaficp_ir.c
index afb19e8d95c8..f9a1c88a4283 100644
--- a/drivers/net/irda/pxaficp_ir.c
+++ b/drivers/net/irda/pxaficp_ir.c
@@ -199,7 +199,7 @@ static int pxa_irda_set_speed(struct pxa_irda *si, int speed)
199} 199}
200 200
201/* SIR interrupt service routine. */ 201/* SIR interrupt service routine. */
202static irqreturn_t pxa_irda_sir_irq(int irq, void *dev_id, struct pt_regs *regs) 202static irqreturn_t pxa_irda_sir_irq(int irq, void *dev_id)
203{ 203{
204 struct net_device *dev = dev_id; 204 struct net_device *dev = dev_id;
205 struct pxa_irda *si = netdev_priv(dev); 205 struct pxa_irda *si = netdev_priv(dev);
@@ -281,7 +281,7 @@ static irqreturn_t pxa_irda_sir_irq(int irq, void *dev_id, struct pt_regs *regs)
281} 281}
282 282
283/* FIR Receive DMA interrupt handler */ 283/* FIR Receive DMA interrupt handler */
284static void pxa_irda_fir_dma_rx_irq(int channel, void *data, struct pt_regs *regs) 284static void pxa_irda_fir_dma_rx_irq(int channel, void *data)
285{ 285{
286 int dcsr = DCSR(channel); 286 int dcsr = DCSR(channel);
287 287
@@ -291,7 +291,7 @@ static void pxa_irda_fir_dma_rx_irq(int channel, void *data, struct pt_regs *reg
291} 291}
292 292
293/* FIR Transmit DMA interrupt handler */ 293/* FIR Transmit DMA interrupt handler */
294static void pxa_irda_fir_dma_tx_irq(int channel, void *data, struct pt_regs *regs) 294static void pxa_irda_fir_dma_tx_irq(int channel, void *data)
295{ 295{
296 struct net_device *dev = data; 296 struct net_device *dev = data;
297 struct pxa_irda *si = netdev_priv(dev); 297 struct pxa_irda *si = netdev_priv(dev);
@@ -388,7 +388,7 @@ static void pxa_irda_fir_irq_eif(struct pxa_irda *si, struct net_device *dev)
388} 388}
389 389
390/* FIR interrupt handler */ 390/* FIR interrupt handler */
391static irqreturn_t pxa_irda_fir_irq(int irq, void *dev_id, struct pt_regs *regs) 391static irqreturn_t pxa_irda_fir_irq(int irq, void *dev_id)
392{ 392{
393 struct net_device *dev = dev_id; 393 struct net_device *dev = dev_id;
394 struct pxa_irda *si = netdev_priv(dev); 394 struct pxa_irda *si = netdev_priv(dev);
diff --git a/drivers/net/irda/sa1100_ir.c b/drivers/net/irda/sa1100_ir.c
index 8d5a288d7976..937372d00398 100644
--- a/drivers/net/irda/sa1100_ir.c
+++ b/drivers/net/irda/sa1100_ir.c
@@ -579,7 +579,7 @@ static void sa1100_irda_fir_irq(struct net_device *dev)
579 sa1100_irda_rx_dma_start(si); 579 sa1100_irda_rx_dma_start(si);
580} 580}
581 581
582static irqreturn_t sa1100_irda_irq(int irq, void *dev_id, struct pt_regs *regs) 582static irqreturn_t sa1100_irda_irq(int irq, void *dev_id)
583{ 583{
584 struct net_device *dev = dev_id; 584 struct net_device *dev = dev_id;
585 if (IS_FIR(((struct sa1100_irda *)dev->priv))) 585 if (IS_FIR(((struct sa1100_irda *)dev->priv)))
diff --git a/drivers/net/irda/smsc-ircc2.c b/drivers/net/irda/smsc-ircc2.c
index 22358ff68c4c..31c623381ea8 100644
--- a/drivers/net/irda/smsc-ircc2.c
+++ b/drivers/net/irda/smsc-ircc2.c
@@ -196,7 +196,7 @@ static void smsc_ircc_dma_xmit(struct smsc_ircc_cb *self, int bofs);
196static void smsc_ircc_dma_xmit_complete(struct smsc_ircc_cb *self); 196static void smsc_ircc_dma_xmit_complete(struct smsc_ircc_cb *self);
197static void smsc_ircc_change_speed(struct smsc_ircc_cb *self, u32 speed); 197static void smsc_ircc_change_speed(struct smsc_ircc_cb *self, u32 speed);
198static void smsc_ircc_set_sir_speed(struct smsc_ircc_cb *self, u32 speed); 198static void smsc_ircc_set_sir_speed(struct smsc_ircc_cb *self, u32 speed);
199static irqreturn_t smsc_ircc_interrupt(int irq, void *dev_id, struct pt_regs *regs); 199static irqreturn_t smsc_ircc_interrupt(int irq, void *dev_id);
200static irqreturn_t smsc_ircc_interrupt_sir(struct net_device *dev); 200static irqreturn_t smsc_ircc_interrupt_sir(struct net_device *dev);
201static void smsc_ircc_sir_start(struct smsc_ircc_cb *self); 201static void smsc_ircc_sir_start(struct smsc_ircc_cb *self);
202#if SMSC_IRCC2_C_SIR_STOP 202#if SMSC_IRCC2_C_SIR_STOP
@@ -1455,7 +1455,7 @@ static void smsc_ircc_sir_receive(struct smsc_ircc_cb *self)
1455 * An interrupt from the chip has arrived. Time to do some work 1455 * An interrupt from the chip has arrived. Time to do some work
1456 * 1456 *
1457 */ 1457 */
1458static irqreturn_t smsc_ircc_interrupt(int irq, void *dev_id, struct pt_regs *regs) 1458static irqreturn_t smsc_ircc_interrupt(int irq, void *dev_id)
1459{ 1459{
1460 struct net_device *dev = (struct net_device *) dev_id; 1460 struct net_device *dev = (struct net_device *) dev_id;
1461 struct smsc_ircc_cb *self; 1461 struct smsc_ircc_cb *self;
@@ -1520,7 +1520,7 @@ static irqreturn_t smsc_ircc_interrupt(int irq, void *dev_id, struct pt_regs *re
1520} 1520}
1521 1521
1522/* 1522/*
1523 * Function irport_interrupt_sir (irq, dev_id, regs) 1523 * Function irport_interrupt_sir (irq, dev_id)
1524 * 1524 *
1525 * Interrupt handler for SIR modes 1525 * Interrupt handler for SIR modes
1526 */ 1526 */
diff --git a/drivers/net/irda/stir4200.c b/drivers/net/irda/stir4200.c
index 12103c93f7ef..be8a66e702b0 100644
--- a/drivers/net/irda/stir4200.c
+++ b/drivers/net/irda/stir4200.c
@@ -804,7 +804,7 @@ static int stir_transmit_thread(void *arg)
804 * Wakes up every ms (usb round trip) with wrapped 804 * Wakes up every ms (usb round trip) with wrapped
805 * data. 805 * data.
806 */ 806 */
807static void stir_rcv_irq(struct urb *urb, struct pt_regs *regs) 807static void stir_rcv_irq(struct urb *urb)
808{ 808{
809 struct stir_cb *stir = urb->context; 809 struct stir_cb *stir = urb->context;
810 int err; 810 int err;
diff --git a/drivers/net/irda/via-ircc.c b/drivers/net/irda/via-ircc.c
index d916e1257c47..c3ed9b3067e5 100644
--- a/drivers/net/irda/via-ircc.c
+++ b/drivers/net/irda/via-ircc.c
@@ -93,8 +93,7 @@ static int via_ircc_hard_xmit_fir(struct sk_buff *skb,
93 struct net_device *dev); 93 struct net_device *dev);
94static void via_hw_init(struct via_ircc_cb *self); 94static void via_hw_init(struct via_ircc_cb *self);
95static void via_ircc_change_speed(struct via_ircc_cb *self, __u32 baud); 95static void via_ircc_change_speed(struct via_ircc_cb *self, __u32 baud);
96static irqreturn_t via_ircc_interrupt(int irq, void *dev_id, 96static irqreturn_t via_ircc_interrupt(int irq, void *dev_id);
97 struct pt_regs *regs);
98static int via_ircc_is_receiving(struct via_ircc_cb *self); 97static int via_ircc_is_receiving(struct via_ircc_cb *self);
99static int via_ircc_read_dongle_id(int iobase); 98static int via_ircc_read_dongle_id(int iobase);
100 99
@@ -1345,13 +1344,12 @@ static int RxTimerHandler(struct via_ircc_cb *self, int iobase)
1345 1344
1346 1345
1347/* 1346/*
1348 * Function via_ircc_interrupt (irq, dev_id, regs) 1347 * Function via_ircc_interrupt (irq, dev_id)
1349 * 1348 *
1350 * An interrupt from the chip has arrived. Time to do some work 1349 * An interrupt from the chip has arrived. Time to do some work
1351 * 1350 *
1352 */ 1351 */
1353static irqreturn_t via_ircc_interrupt(int irq, void *dev_id, 1352static irqreturn_t via_ircc_interrupt(int irq, void *dev_id)
1354 struct pt_regs *regs)
1355{ 1353{
1356 struct net_device *dev = (struct net_device *) dev_id; 1354 struct net_device *dev = (struct net_device *) dev_id;
1357 struct via_ircc_cb *self; 1355 struct via_ircc_cb *self;
diff --git a/drivers/net/irda/vlsi_ir.c b/drivers/net/irda/vlsi_ir.c
index 92d646cc9edc..18c68193bf14 100644
--- a/drivers/net/irda/vlsi_ir.c
+++ b/drivers/net/irda/vlsi_ir.c
@@ -1455,8 +1455,7 @@ static int vlsi_ioctl(struct net_device *ndev, struct ifreq *rq, int cmd)
1455 1455
1456/********************************************************/ 1456/********************************************************/
1457 1457
1458static irqreturn_t vlsi_interrupt(int irq, void *dev_instance, 1458static irqreturn_t vlsi_interrupt(int irq, void *dev_instance)
1459 struct pt_regs *regs)
1460{ 1459{
1461 struct net_device *ndev = dev_instance; 1460 struct net_device *ndev = dev_instance;
1462 vlsi_irda_dev_t *idev = ndev->priv; 1461 vlsi_irda_dev_t *idev = ndev->priv;
diff --git a/drivers/net/irda/w83977af_ir.c b/drivers/net/irda/w83977af_ir.c
index 7de1afdeec3d..b4fb92a7baa8 100644
--- a/drivers/net/irda/w83977af_ir.c
+++ b/drivers/net/irda/w83977af_ir.c
@@ -1111,8 +1111,7 @@ static __u8 w83977af_fir_interrupt(struct w83977af_ir *self, int isr)
1111 * An interrupt from the chip has arrived. Time to do some work 1111 * An interrupt from the chip has arrived. Time to do some work
1112 * 1112 *
1113 */ 1113 */
1114static irqreturn_t w83977af_interrupt(int irq, void *dev_id, 1114static irqreturn_t w83977af_interrupt(int irq, void *dev_id)
1115 struct pt_regs *regs)
1116{ 1115{
1117 struct net_device *dev = (struct net_device *) dev_id; 1116 struct net_device *dev = (struct net_device *) dev_id;
1118 struct w83977af_ir *self; 1117 struct w83977af_ir *self;