aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block
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/block
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/block')
-rw-r--r--drivers/block/DAC960.c24
-rw-r--r--drivers/block/DAC960.h14
-rw-r--r--drivers/block/acsi.c4
-rw-r--r--drivers/block/acsi_slm.c4
-rw-r--r--drivers/block/amiflop.c4
-rw-r--r--drivers/block/ataflop.c4
-rw-r--r--drivers/block/cciss.c6
-rw-r--r--drivers/block/cpqarray.c4
-rw-r--r--drivers/block/floppy.c4
-rw-r--r--drivers/block/ps2esdi.c6
-rw-r--r--drivers/block/swim3.c8
-rw-r--r--drivers/block/swim_iop.c4
-rw-r--r--drivers/block/sx8.c2
-rw-r--r--drivers/block/ub.c6
-rw-r--r--drivers/block/umem.c2
-rw-r--r--drivers/block/xd.c3
-rw-r--r--drivers/block/xd.h3
17 files changed, 45 insertions, 57 deletions
diff --git a/drivers/block/DAC960.c b/drivers/block/DAC960.c
index b3f639fbf220..3e8ab84b9447 100644
--- a/drivers/block/DAC960.c
+++ b/drivers/block/DAC960.c
@@ -2698,8 +2698,7 @@ DAC960_DetectController(struct pci_dev *PCI_Device,
2698{ 2698{
2699 struct DAC960_privdata *privdata = 2699 struct DAC960_privdata *privdata =
2700 (struct DAC960_privdata *)entry->driver_data; 2700 (struct DAC960_privdata *)entry->driver_data;
2701 irqreturn_t (*InterruptHandler)(int, void *, struct pt_regs *) = 2701 irq_handler_t InterruptHandler = privdata->InterruptHandler;
2702 privdata->InterruptHandler;
2703 unsigned int MemoryWindowSize = privdata->MemoryWindowSize; 2702 unsigned int MemoryWindowSize = privdata->MemoryWindowSize;
2704 DAC960_Controller_T *Controller = NULL; 2703 DAC960_Controller_T *Controller = NULL;
2705 unsigned char DeviceFunction = PCI_Device->devfn; 2704 unsigned char DeviceFunction = PCI_Device->devfn;
@@ -5253,8 +5252,7 @@ static void DAC960_V2_ProcessCompletedCommand(DAC960_Command_T *Command)
5253*/ 5252*/
5254 5253
5255static irqreturn_t DAC960_GEM_InterruptHandler(int IRQ_Channel, 5254static irqreturn_t DAC960_GEM_InterruptHandler(int IRQ_Channel,
5256 void *DeviceIdentifier, 5255 void *DeviceIdentifier)
5257 struct pt_regs *InterruptRegisters)
5258{ 5256{
5259 DAC960_Controller_T *Controller = (DAC960_Controller_T *) DeviceIdentifier; 5257 DAC960_Controller_T *Controller = (DAC960_Controller_T *) DeviceIdentifier;
5260 void __iomem *ControllerBaseAddress = Controller->BaseAddress; 5258 void __iomem *ControllerBaseAddress = Controller->BaseAddress;
@@ -5295,8 +5293,7 @@ static irqreturn_t DAC960_GEM_InterruptHandler(int IRQ_Channel,
5295*/ 5293*/
5296 5294
5297static irqreturn_t DAC960_BA_InterruptHandler(int IRQ_Channel, 5295static irqreturn_t DAC960_BA_InterruptHandler(int IRQ_Channel,
5298 void *DeviceIdentifier, 5296 void *DeviceIdentifier)
5299 struct pt_regs *InterruptRegisters)
5300{ 5297{
5301 DAC960_Controller_T *Controller = (DAC960_Controller_T *) DeviceIdentifier; 5298 DAC960_Controller_T *Controller = (DAC960_Controller_T *) DeviceIdentifier;
5302 void __iomem *ControllerBaseAddress = Controller->BaseAddress; 5299 void __iomem *ControllerBaseAddress = Controller->BaseAddress;
@@ -5338,8 +5335,7 @@ static irqreturn_t DAC960_BA_InterruptHandler(int IRQ_Channel,
5338*/ 5335*/
5339 5336
5340static irqreturn_t DAC960_LP_InterruptHandler(int IRQ_Channel, 5337static irqreturn_t DAC960_LP_InterruptHandler(int IRQ_Channel,
5341 void *DeviceIdentifier, 5338 void *DeviceIdentifier)
5342 struct pt_regs *InterruptRegisters)
5343{ 5339{
5344 DAC960_Controller_T *Controller = (DAC960_Controller_T *) DeviceIdentifier; 5340 DAC960_Controller_T *Controller = (DAC960_Controller_T *) DeviceIdentifier;
5345 void __iomem *ControllerBaseAddress = Controller->BaseAddress; 5341 void __iomem *ControllerBaseAddress = Controller->BaseAddress;
@@ -5381,8 +5377,7 @@ static irqreturn_t DAC960_LP_InterruptHandler(int IRQ_Channel,
5381*/ 5377*/
5382 5378
5383static irqreturn_t DAC960_LA_InterruptHandler(int IRQ_Channel, 5379static irqreturn_t DAC960_LA_InterruptHandler(int IRQ_Channel,
5384 void *DeviceIdentifier, 5380 void *DeviceIdentifier)
5385 struct pt_regs *InterruptRegisters)
5386{ 5381{
5387 DAC960_Controller_T *Controller = (DAC960_Controller_T *) DeviceIdentifier; 5382 DAC960_Controller_T *Controller = (DAC960_Controller_T *) DeviceIdentifier;
5388 void __iomem *ControllerBaseAddress = Controller->BaseAddress; 5383 void __iomem *ControllerBaseAddress = Controller->BaseAddress;
@@ -5420,8 +5415,7 @@ static irqreturn_t DAC960_LA_InterruptHandler(int IRQ_Channel,
5420*/ 5415*/
5421 5416
5422static irqreturn_t DAC960_PG_InterruptHandler(int IRQ_Channel, 5417static irqreturn_t DAC960_PG_InterruptHandler(int IRQ_Channel,
5423 void *DeviceIdentifier, 5418 void *DeviceIdentifier)
5424 struct pt_regs *InterruptRegisters)
5425{ 5419{
5426 DAC960_Controller_T *Controller = (DAC960_Controller_T *) DeviceIdentifier; 5420 DAC960_Controller_T *Controller = (DAC960_Controller_T *) DeviceIdentifier;
5427 void __iomem *ControllerBaseAddress = Controller->BaseAddress; 5421 void __iomem *ControllerBaseAddress = Controller->BaseAddress;
@@ -5459,8 +5453,7 @@ static irqreturn_t DAC960_PG_InterruptHandler(int IRQ_Channel,
5459*/ 5453*/
5460 5454
5461static irqreturn_t DAC960_PD_InterruptHandler(int IRQ_Channel, 5455static irqreturn_t DAC960_PD_InterruptHandler(int IRQ_Channel,
5462 void *DeviceIdentifier, 5456 void *DeviceIdentifier)
5463 struct pt_regs *InterruptRegisters)
5464{ 5457{
5465 DAC960_Controller_T *Controller = (DAC960_Controller_T *) DeviceIdentifier; 5458 DAC960_Controller_T *Controller = (DAC960_Controller_T *) DeviceIdentifier;
5466 void __iomem *ControllerBaseAddress = Controller->BaseAddress; 5459 void __iomem *ControllerBaseAddress = Controller->BaseAddress;
@@ -5498,8 +5491,7 @@ static irqreturn_t DAC960_PD_InterruptHandler(int IRQ_Channel,
5498*/ 5491*/
5499 5492
5500static irqreturn_t DAC960_P_InterruptHandler(int IRQ_Channel, 5493static irqreturn_t DAC960_P_InterruptHandler(int IRQ_Channel,
5501 void *DeviceIdentifier, 5494 void *DeviceIdentifier)
5502 struct pt_regs *InterruptRegisters)
5503{ 5495{
5504 DAC960_Controller_T *Controller = (DAC960_Controller_T *) DeviceIdentifier; 5496 DAC960_Controller_T *Controller = (DAC960_Controller_T *) DeviceIdentifier;
5505 void __iomem *ControllerBaseAddress = Controller->BaseAddress; 5497 void __iomem *ControllerBaseAddress = Controller->BaseAddress;
diff --git a/drivers/block/DAC960.h b/drivers/block/DAC960.h
index f9217c34bc2b..cec539e601fe 100644
--- a/drivers/block/DAC960.h
+++ b/drivers/block/DAC960.h
@@ -2175,7 +2175,7 @@ static char
2175struct DAC960_privdata { 2175struct DAC960_privdata {
2176 DAC960_HardwareType_T HardwareType; 2176 DAC960_HardwareType_T HardwareType;
2177 DAC960_FirmwareType_T FirmwareType; 2177 DAC960_FirmwareType_T FirmwareType;
2178 irqreturn_t (*InterruptHandler)(int, void *, struct pt_regs *); 2178 irq_handler_t InterruptHandler;
2179 unsigned int MemoryWindowSize; 2179 unsigned int MemoryWindowSize;
2180}; 2180};
2181 2181
@@ -4412,12 +4412,12 @@ static void DAC960_FinalizeController(DAC960_Controller_T *);
4412static void DAC960_V1_QueueReadWriteCommand(DAC960_Command_T *); 4412static void DAC960_V1_QueueReadWriteCommand(DAC960_Command_T *);
4413static void DAC960_V2_QueueReadWriteCommand(DAC960_Command_T *); 4413static void DAC960_V2_QueueReadWriteCommand(DAC960_Command_T *);
4414static void DAC960_RequestFunction(struct request_queue *); 4414static void DAC960_RequestFunction(struct request_queue *);
4415static irqreturn_t DAC960_BA_InterruptHandler(int, void *, struct pt_regs *); 4415static irqreturn_t DAC960_BA_InterruptHandler(int, void *);
4416static irqreturn_t DAC960_LP_InterruptHandler(int, void *, struct pt_regs *); 4416static irqreturn_t DAC960_LP_InterruptHandler(int, void *);
4417static irqreturn_t DAC960_LA_InterruptHandler(int, void *, struct pt_regs *); 4417static irqreturn_t DAC960_LA_InterruptHandler(int, void *);
4418static irqreturn_t DAC960_PG_InterruptHandler(int, void *, struct pt_regs *); 4418static irqreturn_t DAC960_PG_InterruptHandler(int, void *);
4419static irqreturn_t DAC960_PD_InterruptHandler(int, void *, struct pt_regs *); 4419static irqreturn_t DAC960_PD_InterruptHandler(int, void *);
4420static irqreturn_t DAC960_P_InterruptHandler(int, void *, struct pt_regs *); 4420static irqreturn_t DAC960_P_InterruptHandler(int, void *);
4421static void DAC960_V1_QueueMonitoringCommand(DAC960_Command_T *); 4421static void DAC960_V1_QueueMonitoringCommand(DAC960_Command_T *);
4422static void DAC960_V2_QueueMonitoringCommand(DAC960_Command_T *); 4422static void DAC960_V2_QueueMonitoringCommand(DAC960_Command_T *);
4423static void DAC960_MonitoringTimerFunction(unsigned long); 4423static void DAC960_MonitoringTimerFunction(unsigned long);
diff --git a/drivers/block/acsi.c b/drivers/block/acsi.c
index 0b80fbb8dbfd..706cdc6a69ec 100644
--- a/drivers/block/acsi.c
+++ b/drivers/block/acsi.c
@@ -346,7 +346,7 @@ static int acsicmd_dma( const char *cmd, char *buffer, int blocks, int
346 rwflag, int enable); 346 rwflag, int enable);
347static int acsi_reqsense( char *buffer, int targ, int lun); 347static int acsi_reqsense( char *buffer, int targ, int lun);
348static void acsi_print_error(const unsigned char *errblk, struct acsi_info_struct *aip); 348static void acsi_print_error(const unsigned char *errblk, struct acsi_info_struct *aip);
349static irqreturn_t acsi_interrupt (int irq, void *data, struct pt_regs *fp); 349static irqreturn_t acsi_interrupt (int irq, void *data);
350static void unexpected_acsi_interrupt( void ); 350static void unexpected_acsi_interrupt( void );
351static void bad_rw_intr( void ); 351static void bad_rw_intr( void );
352static void read_intr( void ); 352static void read_intr( void );
@@ -726,7 +726,7 @@ static void acsi_print_error(const unsigned char *errblk, struct acsi_info_struc
726 * 726 *
727 *******************************************************************/ 727 *******************************************************************/
728 728
729static irqreturn_t acsi_interrupt(int irq, void *data, struct pt_regs *fp ) 729static irqreturn_t acsi_interrupt(int irq, void *data )
730 730
731{ void (*acsi_irq_handler)(void) = do_acsi; 731{ void (*acsi_irq_handler)(void) = do_acsi;
732 732
diff --git a/drivers/block/acsi_slm.c b/drivers/block/acsi_slm.c
index 4030a8fd1187..8e41c87b026e 100644
--- a/drivers/block/acsi_slm.c
+++ b/drivers/block/acsi_slm.c
@@ -246,7 +246,7 @@ static int slm_getstats( char *buffer, int device );
246static ssize_t slm_read( struct file* file, char *buf, size_t count, loff_t 246static ssize_t slm_read( struct file* file, char *buf, size_t count, loff_t
247 *ppos ); 247 *ppos );
248static void start_print( int device ); 248static void start_print( int device );
249static irqreturn_t slm_interrupt(int irc, void *data, struct pt_regs *fp); 249static irqreturn_t slm_interrupt(int irc, void *data);
250static void slm_test_ready( unsigned long dummy ); 250static void slm_test_ready( unsigned long dummy );
251static void set_dma_addr( unsigned long paddr ); 251static void set_dma_addr( unsigned long paddr );
252static unsigned long get_dma_addr( void ); 252static unsigned long get_dma_addr( void );
@@ -452,7 +452,7 @@ static void start_print( int device )
452 452
453/* Only called when an error happened or at the end of a page */ 453/* Only called when an error happened or at the end of a page */
454 454
455static irqreturn_t slm_interrupt(int irc, void *data, struct pt_regs *fp) 455static irqreturn_t slm_interrupt(int irc, void *data)
456 456
457{ unsigned long addr; 457{ unsigned long addr;
458 int stat; 458 int stat;
diff --git a/drivers/block/amiflop.c b/drivers/block/amiflop.c
index 2641597c6549..5d254b714509 100644
--- a/drivers/block/amiflop.c
+++ b/drivers/block/amiflop.c
@@ -209,7 +209,7 @@ static int fd_device[4] = { 0, 0, 0, 0 };
209 209
210/* Milliseconds timer */ 210/* Milliseconds timer */
211 211
212static irqreturn_t ms_isr(int irq, void *dummy, struct pt_regs *fp) 212static irqreturn_t ms_isr(int irq, void *dummy)
213{ 213{
214 ms_busy = -1; 214 ms_busy = -1;
215 wake_up(&ms_wait); 215 wake_up(&ms_wait);
@@ -560,7 +560,7 @@ static unsigned long fd_get_drive_id(int drive)
560 return (id); 560 return (id);
561} 561}
562 562
563static irqreturn_t fd_block_done(int irq, void *dummy, struct pt_regs *fp) 563static irqreturn_t fd_block_done(int irq, void *dummy)
564{ 564{
565 if (block_flag) 565 if (block_flag)
566 custom.dsklen = 0x4000; 566 custom.dsklen = 0x4000;
diff --git a/drivers/block/ataflop.c b/drivers/block/ataflop.c
index c39650920bdf..14d6b9492750 100644
--- a/drivers/block/ataflop.c
+++ b/drivers/block/ataflop.c
@@ -342,7 +342,7 @@ static void fd_select_drive( int drive );
342static void fd_deselect( void ); 342static void fd_deselect( void );
343static void fd_motor_off_timer( unsigned long dummy ); 343static void fd_motor_off_timer( unsigned long dummy );
344static void check_change( unsigned long dummy ); 344static void check_change( unsigned long dummy );
345static irqreturn_t floppy_irq (int irq, void *dummy, struct pt_regs *fp); 345static irqreturn_t floppy_irq (int irq, void *dummy);
346static void fd_error( void ); 346static void fd_error( void );
347static int do_format(int drive, int type, struct atari_format_descr *desc); 347static int do_format(int drive, int type, struct atari_format_descr *desc);
348static void do_fd_action( int drive ); 348static void do_fd_action( int drive );
@@ -573,7 +573,7 @@ static inline void copy_buffer(void *from, void *to)
573 573
574static void (*FloppyIRQHandler)( int status ) = NULL; 574static void (*FloppyIRQHandler)( int status ) = NULL;
575 575
576static irqreturn_t floppy_irq (int irq, void *dummy, struct pt_regs *fp) 576static irqreturn_t floppy_irq (int irq, void *dummy)
577{ 577{
578 unsigned char status; 578 unsigned char status;
579 void (*handler)( int ); 579 void (*handler)( int );
diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c
index 36b88f6c5f82..dcccaf2782f3 100644
--- a/drivers/block/cciss.c
+++ b/drivers/block/cciss.c
@@ -130,7 +130,7 @@ static struct board_type products[] = {
130static ctlr_info_t *hba[MAX_CTLR]; 130static ctlr_info_t *hba[MAX_CTLR];
131 131
132static void do_cciss_request(request_queue_t *q); 132static void do_cciss_request(request_queue_t *q);
133static irqreturn_t do_cciss_intr(int irq, void *dev_id, struct pt_regs *regs); 133static irqreturn_t do_cciss_intr(int irq, void *dev_id);
134static int cciss_open(struct inode *inode, struct file *filep); 134static int cciss_open(struct inode *inode, struct file *filep);
135static int cciss_release(struct inode *inode, struct file *filep); 135static int cciss_release(struct inode *inode, struct file *filep);
136static int cciss_ioctl(struct inode *inode, struct file *filep, 136static int cciss_ioctl(struct inode *inode, struct file *filep,
@@ -2300,7 +2300,7 @@ static int sendcmd(__u8 cmd, int ctlr, void *buff, size_t size, unsigned int use
2300#ifdef CONFIG_CISS_SCSI_TAPE 2300#ifdef CONFIG_CISS_SCSI_TAPE
2301 /* if we saved some commands for later, process them now. */ 2301 /* if we saved some commands for later, process them now. */
2302 if (info_p->scsi_rejects.ncompletions > 0) 2302 if (info_p->scsi_rejects.ncompletions > 0)
2303 do_cciss_intr(0, info_p, NULL); 2303 do_cciss_intr(0, info_p);
2304#endif 2304#endif
2305 cmd_free(info_p, c, 1); 2305 cmd_free(info_p, c, 1);
2306 return status; 2306 return status;
@@ -2652,7 +2652,7 @@ static inline long interrupt_not_for_us(ctlr_info_t *h)
2652#endif 2652#endif
2653} 2653}
2654 2654
2655static irqreturn_t do_cciss_intr(int irq, void *dev_id, struct pt_regs *regs) 2655static irqreturn_t do_cciss_intr(int irq, void *dev_id)
2656{ 2656{
2657 ctlr_info_t *h = dev_id; 2657 ctlr_info_t *h = dev_id;
2658 CommandList_struct *c; 2658 CommandList_struct *c;
diff --git a/drivers/block/cpqarray.c b/drivers/block/cpqarray.c
index ada68e65b5ff..570d2f049323 100644
--- a/drivers/block/cpqarray.c
+++ b/drivers/block/cpqarray.c
@@ -169,7 +169,7 @@ static inline cmdlist_t *removeQ(cmdlist_t **Qptr, cmdlist_t *c);
169static inline void complete_buffers(struct bio *bio, int ok); 169static inline void complete_buffers(struct bio *bio, int ok);
170static inline void complete_command(cmdlist_t *cmd, int timeout); 170static inline void complete_command(cmdlist_t *cmd, int timeout);
171 171
172static irqreturn_t do_ida_intr(int irq, void *dev_id, struct pt_regs * regs); 172static irqreturn_t do_ida_intr(int irq, void *dev_id);
173static void ida_timer(unsigned long tdata); 173static void ida_timer(unsigned long tdata);
174static int ida_revalidate(struct gendisk *disk); 174static int ida_revalidate(struct gendisk *disk);
175static int revalidate_allvol(ctlr_info_t *host); 175static int revalidate_allvol(ctlr_info_t *host);
@@ -1042,7 +1042,7 @@ static inline void complete_command(cmdlist_t *cmd, int timeout)
1042 * Find the command on the completion queue, remove it, tell the OS and 1042 * Find the command on the completion queue, remove it, tell the OS and
1043 * try to queue up more IO 1043 * try to queue up more IO
1044 */ 1044 */
1045static irqreturn_t do_ida_intr(int irq, void *dev_id, struct pt_regs *regs) 1045static irqreturn_t do_ida_intr(int irq, void *dev_id)
1046{ 1046{
1047 ctlr_info_t *h = dev_id; 1047 ctlr_info_t *h = dev_id;
1048 cmdlist_t *c; 1048 cmdlist_t *c;
diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c
index 629c5769d994..9e6d3a87cbe3 100644
--- a/drivers/block/floppy.c
+++ b/drivers/block/floppy.c
@@ -221,7 +221,7 @@ static DEFINE_SPINLOCK(floppy_lock);
221static struct completion device_release; 221static struct completion device_release;
222 222
223static unsigned short virtual_dma_port = 0x3f0; 223static unsigned short virtual_dma_port = 0x3f0;
224irqreturn_t floppy_interrupt(int irq, void *dev_id, struct pt_regs *regs); 224irqreturn_t floppy_interrupt(int irq, void *dev_id);
225static int set_dor(int fdc, char mask, char data); 225static int set_dor(int fdc, char mask, char data);
226 226
227#define K_64 0x10000 /* 64KB */ 227#define K_64 0x10000 /* 64KB */
@@ -1726,7 +1726,7 @@ static void print_result(char *message, int inr)
1726} 1726}
1727 1727
1728/* interrupt handler. Note that this can be called externally on the Sparc */ 1728/* interrupt handler. Note that this can be called externally on the Sparc */
1729irqreturn_t floppy_interrupt(int irq, void *dev_id, struct pt_regs *regs) 1729irqreturn_t floppy_interrupt(int irq, void *dev_id)
1730{ 1730{
1731 void (*handler) (void) = do_floppy; 1731 void (*handler) (void) = do_floppy;
1732 int do_print; 1732 int do_print;
diff --git a/drivers/block/ps2esdi.c b/drivers/block/ps2esdi.c
index 5537974fb242..688a4fb0dc99 100644
--- a/drivers/block/ps2esdi.c
+++ b/drivers/block/ps2esdi.c
@@ -75,8 +75,7 @@ static int ps2esdi_out_cmd_blk(u_short * cmd_blk);
75 75
76static void ps2esdi_prep_dma(char *buffer, u_short length, u_char dma_xmode); 76static void ps2esdi_prep_dma(char *buffer, u_short length, u_char dma_xmode);
77 77
78static irqreturn_t ps2esdi_interrupt_handler(int irq, void *dev_id, 78static irqreturn_t ps2esdi_interrupt_handler(int irq, void *dev_id);
79 struct pt_regs *regs);
80static void (*current_int_handler) (u_int) = NULL; 79static void (*current_int_handler) (u_int) = NULL;
81static void ps2esdi_normal_interrupt_handler(u_int); 80static void ps2esdi_normal_interrupt_handler(u_int);
82static void ps2esdi_initial_reset_int_handler(u_int); 81static void ps2esdi_initial_reset_int_handler(u_int);
@@ -687,8 +686,7 @@ static void ps2esdi_prep_dma(char *buffer, u_short length, u_char dma_xmode)
687 686
688 687
689 688
690static irqreturn_t ps2esdi_interrupt_handler(int irq, void *dev_id, 689static irqreturn_t ps2esdi_interrupt_handler(int irq, void *dev_id)
691 struct pt_regs *regs)
692{ 690{
693 u_int int_ret_code; 691 u_int int_ret_code;
694 692
diff --git a/drivers/block/swim3.c b/drivers/block/swim3.c
index fdc8f892eb86..1a65979f1f0f 100644
--- a/drivers/block/swim3.c
+++ b/drivers/block/swim3.c
@@ -238,8 +238,8 @@ static void scan_timeout(unsigned long data);
238static void seek_timeout(unsigned long data); 238static void seek_timeout(unsigned long data);
239static void settle_timeout(unsigned long data); 239static void settle_timeout(unsigned long data);
240static void xfer_timeout(unsigned long data); 240static void xfer_timeout(unsigned long data);
241static irqreturn_t swim3_interrupt(int irq, void *dev_id, struct pt_regs *regs); 241static irqreturn_t swim3_interrupt(int irq, void *dev_id);
242/*static void fd_dma_interrupt(int irq, void *dev_id, struct pt_regs *regs);*/ 242/*static void fd_dma_interrupt(int irq, void *dev_id);*/
243static int grab_drive(struct floppy_state *fs, enum swim_state state, 243static int grab_drive(struct floppy_state *fs, enum swim_state state,
244 int interruptible); 244 int interruptible);
245static void release_drive(struct floppy_state *fs); 245static void release_drive(struct floppy_state *fs);
@@ -624,7 +624,7 @@ static void xfer_timeout(unsigned long data)
624 start_request(fs); 624 start_request(fs);
625} 625}
626 626
627static irqreturn_t swim3_interrupt(int irq, void *dev_id, struct pt_regs *regs) 627static irqreturn_t swim3_interrupt(int irq, void *dev_id)
628{ 628{
629 struct floppy_state *fs = (struct floppy_state *) dev_id; 629 struct floppy_state *fs = (struct floppy_state *) dev_id;
630 struct swim3 __iomem *sw = fs->swim3; 630 struct swim3 __iomem *sw = fs->swim3;
@@ -777,7 +777,7 @@ static irqreturn_t swim3_interrupt(int irq, void *dev_id, struct pt_regs *regs)
777} 777}
778 778
779/* 779/*
780static void fd_dma_interrupt(int irq, void *dev_id, struct pt_regs *regs) 780static void fd_dma_interrupt(int irq, void *dev_id)
781{ 781{
782} 782}
783*/ 783*/
diff --git a/drivers/block/swim_iop.c b/drivers/block/swim_iop.c
index dfda796eba56..ed7b06cf3e68 100644
--- a/drivers/block/swim_iop.c
+++ b/drivers/block/swim_iop.c
@@ -94,7 +94,7 @@ static char *drive_names[7] = {
94int swimiop_init(void); 94int swimiop_init(void);
95static void swimiop_init_request(struct swim_iop_req *); 95static void swimiop_init_request(struct swim_iop_req *);
96static int swimiop_send_request(struct swim_iop_req *); 96static int swimiop_send_request(struct swim_iop_req *);
97static void swimiop_receive(struct iop_msg *, struct pt_regs *); 97static void swimiop_receive(struct iop_msg *);
98static void swimiop_status_update(int, struct swim_drvstatus *); 98static void swimiop_status_update(int, struct swim_drvstatus *);
99static int swimiop_eject(struct floppy_state *fs); 99static int swimiop_eject(struct floppy_state *fs);
100 100
@@ -257,7 +257,7 @@ static int swimiop_send_request(struct swim_iop_req *req)
257 * 2. An unsolicited message was received from the IOP. 257 * 2. An unsolicited message was received from the IOP.
258 */ 258 */
259 259
260void swimiop_receive(struct iop_msg *msg, struct pt_regs *regs) 260void swimiop_receive(struct iop_msg *msg)
261{ 261{
262 struct swim_iop_req *req; 262 struct swim_iop_req *req;
263 struct swimmsg_status *sm; 263 struct swimmsg_status *sm;
diff --git a/drivers/block/sx8.c b/drivers/block/sx8.c
index c6beee18a07c..47d6975268ff 100644
--- a/drivers/block/sx8.c
+++ b/drivers/block/sx8.c
@@ -1200,7 +1200,7 @@ static inline void carm_handle_responses(struct carm_host *host)
1200 host->resp_idx += work; 1200 host->resp_idx += work;
1201} 1201}
1202 1202
1203static irqreturn_t carm_interrupt(int irq, void *__host, struct pt_regs *regs) 1203static irqreturn_t carm_interrupt(int irq, void *__host)
1204{ 1204{
1205 struct carm_host *host = __host; 1205 struct carm_host *host = __host;
1206 void __iomem *mmio; 1206 void __iomem *mmio;
diff --git a/drivers/block/ub.c b/drivers/block/ub.c
index 45a8f402b07b..0d5c73f07265 100644
--- a/drivers/block/ub.c
+++ b/drivers/block/ub.c
@@ -362,7 +362,7 @@ static void ub_end_rq(struct request *rq, unsigned int status);
362static int ub_rw_cmd_retry(struct ub_dev *sc, struct ub_lun *lun, 362static int ub_rw_cmd_retry(struct ub_dev *sc, struct ub_lun *lun,
363 struct ub_request *urq, struct ub_scsi_cmd *cmd); 363 struct ub_request *urq, struct ub_scsi_cmd *cmd);
364static int ub_submit_scsi(struct ub_dev *sc, struct ub_scsi_cmd *cmd); 364static int ub_submit_scsi(struct ub_dev *sc, struct ub_scsi_cmd *cmd);
365static void ub_urb_complete(struct urb *urb, struct pt_regs *pt); 365static void ub_urb_complete(struct urb *urb);
366static void ub_scsi_action(unsigned long _dev); 366static void ub_scsi_action(unsigned long _dev);
367static void ub_scsi_dispatch(struct ub_dev *sc); 367static void ub_scsi_dispatch(struct ub_dev *sc);
368static void ub_scsi_urb_compl(struct ub_dev *sc, struct ub_scsi_cmd *cmd); 368static void ub_scsi_urb_compl(struct ub_dev *sc, struct ub_scsi_cmd *cmd);
@@ -959,7 +959,7 @@ static void ub_urb_timeout(unsigned long arg)
959 * the sc->lock taken) and from an interrupt (while we do NOT have 959 * the sc->lock taken) and from an interrupt (while we do NOT have
960 * the sc->lock taken). Therefore, bounce this off to a tasklet. 960 * the sc->lock taken). Therefore, bounce this off to a tasklet.
961 */ 961 */
962static void ub_urb_complete(struct urb *urb, struct pt_regs *pt) 962static void ub_urb_complete(struct urb *urb)
963{ 963{
964 struct ub_dev *sc = urb->context; 964 struct ub_dev *sc = urb->context;
965 965
@@ -1923,7 +1923,7 @@ err_alloc:
1923 1923
1924/* 1924/*
1925 */ 1925 */
1926static void ub_probe_urb_complete(struct urb *urb, struct pt_regs *pt) 1926static void ub_probe_urb_complete(struct urb *urb)
1927{ 1927{
1928 struct completion *cop = urb->context; 1928 struct completion *cop = urb->context;
1929 complete(cop); 1929 complete(cop);
diff --git a/drivers/block/umem.c b/drivers/block/umem.c
index cbb9d0f21acc..30f16bd83650 100644
--- a/drivers/block/umem.c
+++ b/drivers/block/umem.c
@@ -571,7 +571,7 @@ static int mm_make_request(request_queue_t *q, struct bio *bio)
571-- mm_interrupt 571-- mm_interrupt
572----------------------------------------------------------------------------------- 572-----------------------------------------------------------------------------------
573*/ 573*/
574static irqreturn_t mm_interrupt(int irq, void *__card, struct pt_regs *regs) 574static irqreturn_t mm_interrupt(int irq, void *__card)
575{ 575{
576 struct cardinfo *card = (struct cardinfo *) __card; 576 struct cardinfo *card = (struct cardinfo *) __card;
577 unsigned int dma_status; 577 unsigned int dma_status;
diff --git a/drivers/block/xd.c b/drivers/block/xd.c
index ebf3025721d1..10cc38783bdf 100644
--- a/drivers/block/xd.c
+++ b/drivers/block/xd.c
@@ -462,8 +462,7 @@ static void xd_recalibrate (u_char drive)
462} 462}
463 463
464/* xd_interrupt_handler: interrupt service routine */ 464/* xd_interrupt_handler: interrupt service routine */
465static irqreturn_t xd_interrupt_handler(int irq, void *dev_id, 465static irqreturn_t xd_interrupt_handler(int irq, void *dev_id)
466 struct pt_regs *regs)
467{ 466{
468 if (inb(XD_STATUS) & STAT_INTERRUPT) { /* check if it was our device */ 467 if (inb(XD_STATUS) & STAT_INTERRUPT) { /* check if it was our device */
469#ifdef DEBUG_OTHER 468#ifdef DEBUG_OTHER
diff --git a/drivers/block/xd.h b/drivers/block/xd.h
index 71ac2e3dffc8..82e090fea957 100644
--- a/drivers/block/xd.h
+++ b/drivers/block/xd.h
@@ -109,8 +109,7 @@ static int xd_ioctl (struct inode *inode,struct file *file,unsigned int cmd,unsi
109static int xd_readwrite (u_char operation,XD_INFO *disk,char *buffer,u_int block,u_int count); 109static int xd_readwrite (u_char operation,XD_INFO *disk,char *buffer,u_int block,u_int count);
110static void xd_recalibrate (u_char drive); 110static void xd_recalibrate (u_char drive);
111 111
112static irqreturn_t xd_interrupt_handler(int irq, void *dev_id, 112static irqreturn_t xd_interrupt_handler(int irq, void *dev_id);
113 struct pt_regs *regs);
114static u_char xd_setup_dma (u_char opcode,u_char *buffer,u_int count); 113static u_char xd_setup_dma (u_char opcode,u_char *buffer,u_int count);
115static u_char *xd_build (u_char *cmdblk,u_char command,u_char drive,u_char head,u_short cylinder,u_char sector,u_char count,u_char control); 114static u_char *xd_build (u_char *cmdblk,u_char command,u_char drive,u_char head,u_short cylinder,u_char sector,u_char count,u_char control);
116static void xd_watchdog (unsigned long unused); 115static void xd_watchdog (unsigned long unused);