From 7d12e780e003f93433d49ce78cfedf4b4c52adc5 Mon Sep 17 00:00:00 2001 From: David Howells Date: Thu, 5 Oct 2006 14:55:46 +0100 Subject: 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 (cherry picked from 1b16e7ac850969f38b375e511e3fa2f474a33867 commit) --- sound/pci/ad1889.c | 4 +--- sound/pci/ali5451/ali5451.c | 4 +--- sound/pci/als300.c | 6 ++---- sound/pci/als4000.c | 4 ++-- sound/pci/atiixp.c | 2 +- sound/pci/atiixp_modem.c | 2 +- sound/pci/au88x0/au88x0.h | 3 +-- sound/pci/au88x0/au88x0_core.c | 4 ++-- sound/pci/azt3328.c | 4 ++-- sound/pci/bt87x.c | 2 +- sound/pci/ca0106/ca0106_main.c | 3 +-- sound/pci/cmipci.c | 4 ++-- sound/pci/cs4281.c | 4 ++-- sound/pci/cs46xx/cs46xx_lib.c | 2 +- sound/pci/cs5535audio/cs5535audio.c | 3 +-- sound/pci/echoaudio/echoaudio.c | 3 +-- sound/pci/emu10k1/emu10k1x.c | 3 +-- sound/pci/emu10k1/irq.c | 2 +- sound/pci/ens1370.c | 4 ++-- sound/pci/es1938.c | 6 +++--- sound/pci/es1968.c | 6 +++--- sound/pci/fm801.c | 4 ++-- sound/pci/hda/hda_intel.c | 2 +- sound/pci/ice1712/ice1712.c | 6 +++--- sound/pci/ice1712/ice1724.c | 4 ++-- sound/pci/intel8x0.c | 2 +- sound/pci/intel8x0m.c | 2 +- sound/pci/korg1212/korg1212.c | 2 +- sound/pci/maestro3.c | 3 +-- sound/pci/mixart/mixart_core.c | 2 +- sound/pci/mixart/mixart_core.h | 2 +- sound/pci/nm256/nm256.c | 6 +++--- sound/pci/pcxhr/pcxhr_core.c | 2 +- sound/pci/pcxhr/pcxhr_core.h | 2 +- sound/pci/riptide/riptide.c | 5 ++--- sound/pci/rme32.c | 3 +-- sound/pci/rme96.c | 3 +-- sound/pci/rme9652/hdsp.c | 2 +- sound/pci/rme9652/hdspm.c | 3 +-- sound/pci/rme9652/rme9652.c | 2 +- sound/pci/sonicvibes.c | 4 ++-- sound/pci/trident/trident_main.c | 7 +++---- sound/pci/via82xx.c | 6 +++--- sound/pci/via82xx_modem.c | 2 +- sound/pci/ymfpci/ymfpci_main.c | 4 ++-- 45 files changed, 69 insertions(+), 86 deletions(-) (limited to 'sound/pci') diff --git a/sound/pci/ad1889.c b/sound/pci/ad1889.c index 0786d0edaca..cbf8331c3d3 100644 --- a/sound/pci/ad1889.c +++ b/sound/pci/ad1889.c @@ -596,9 +596,7 @@ static struct snd_pcm_ops snd_ad1889_capture_ops = { }; static irqreturn_t -snd_ad1889_interrupt(int irq, - void *dev_id, - struct pt_regs *regs) +snd_ad1889_interrupt(int irq, void *dev_id) { unsigned long st; struct snd_ad1889 *chip = dev_id; diff --git a/sound/pci/ali5451/ali5451.c b/sound/pci/ali5451/ali5451.c index 74668398eac..13a8cefa774 100644 --- a/sound/pci/ali5451/ali5451.c +++ b/sound/pci/ali5451/ali5451.c @@ -1047,9 +1047,7 @@ static void snd_ali_interrupt(struct snd_ali * codec) } -static irqreturn_t snd_ali_card_interrupt(int irq, - void *dev_id, - struct pt_regs *regs) +static irqreturn_t snd_ali_card_interrupt(int irq, void *dev_id) { struct snd_ali *codec = dev_id; diff --git a/sound/pci/als300.c b/sound/pci/als300.c index 96cfb8ae505..9b16c299f0a 100644 --- a/sound/pci/als300.c +++ b/sound/pci/als300.c @@ -204,8 +204,7 @@ static int snd_als300_dev_free(struct snd_device *device) return snd_als300_free(chip); } -static irqreturn_t snd_als300_interrupt(int irq, void *dev_id, - struct pt_regs *regs) +static irqreturn_t snd_als300_interrupt(int irq, void *dev_id) { u8 status; struct snd_als300 *chip = dev_id; @@ -236,8 +235,7 @@ static irqreturn_t snd_als300_interrupt(int irq, void *dev_id, return IRQ_HANDLED; } -static irqreturn_t snd_als300plus_interrupt(int irq, void *dev_id, - struct pt_regs *regs) +static irqreturn_t snd_als300plus_interrupt(int irq, void *dev_id) { u8 general, mpu, dram; struct snd_als300 *chip = dev_id; diff --git a/sound/pci/als4000.c b/sound/pci/als4000.c index 9e596f750cb..15fc3929b5f 100644 --- a/sound/pci/als4000.c +++ b/sound/pci/als4000.c @@ -385,7 +385,7 @@ static snd_pcm_uframes_t snd_als4000_playback_pointer(struct snd_pcm_substream * * SB IRQ status. * And do we *really* need the lock here for *reading* SB_DSP4_IRQSTATUS?? * */ -static irqreturn_t snd_als4000_interrupt(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t snd_als4000_interrupt(int irq, void *dev_id) { struct snd_sb *chip = dev_id; unsigned gcr_status; @@ -399,7 +399,7 @@ static irqreturn_t snd_als4000_interrupt(int irq, void *dev_id, struct pt_regs * if ((gcr_status & 0x40) && (chip->capture_substream)) /* capturing */ snd_pcm_period_elapsed(chip->capture_substream); if ((gcr_status & 0x10) && (chip->rmidi)) /* MPU401 interrupt */ - snd_mpu401_uart_interrupt(irq, chip->rmidi->private_data, regs); + snd_mpu401_uart_interrupt(irq, chip->rmidi->private_data); /* release the gcr */ outb(gcr_status, chip->alt_port + 0xe); diff --git a/sound/pci/atiixp.c b/sound/pci/atiixp.c index 347e25ff073..3e8fc5a0006 100644 --- a/sound/pci/atiixp.c +++ b/sound/pci/atiixp.c @@ -1300,7 +1300,7 @@ static int __devinit snd_atiixp_pcm_new(struct atiixp *chip) /* * interrupt handler */ -static irqreturn_t snd_atiixp_interrupt(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t snd_atiixp_interrupt(int irq, void *dev_id) { struct atiixp *chip = dev_id; unsigned int status; diff --git a/sound/pci/atiixp_modem.c b/sound/pci/atiixp_modem.c index a89d67c4598..c5dda1bf3d4 100644 --- a/sound/pci/atiixp_modem.c +++ b/sound/pci/atiixp_modem.c @@ -1017,7 +1017,7 @@ static int __devinit snd_atiixp_pcm_new(struct atiixp_modem *chip) /* * interrupt handler */ -static irqreturn_t snd_atiixp_interrupt(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t snd_atiixp_interrupt(int irq, void *dev_id) { struct atiixp_modem *chip = dev_id; unsigned int status; diff --git a/sound/pci/au88x0/au88x0.h b/sound/pci/au88x0/au88x0.h index b1cfc3c79d0..5ccf0b1ec67 100644 --- a/sound/pci/au88x0/au88x0.h +++ b/sound/pci/au88x0/au88x0.h @@ -236,8 +236,7 @@ static void vortex_spdif_init(vortex_t * vortex, int spdif_sr, int spdif_mode); static int vortex_core_init(vortex_t * card); static int vortex_core_shutdown(vortex_t * card); static void vortex_enable_int(vortex_t * card); -static irqreturn_t vortex_interrupt(int irq, void *dev_id, - struct pt_regs *regs); +static irqreturn_t vortex_interrupt(int irq, void *dev_id); static int vortex_alsafmt_aspfmt(int alsafmt); /* Connection stuff. */ diff --git a/sound/pci/au88x0/au88x0_core.c b/sound/pci/au88x0/au88x0_core.c index 5299cce583d..4a336eaae9d 100644 --- a/sound/pci/au88x0/au88x0_core.c +++ b/sound/pci/au88x0/au88x0_core.c @@ -2385,7 +2385,7 @@ static void vortex_disable_int(vortex_t * card) hwread(card->mmio, VORTEX_CTRL) & ~CTRL_IRQ_ENABLE); } -static irqreturn_t vortex_interrupt(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t vortex_interrupt(int irq, void *dev_id) { vortex_t *vortex = dev_id; int i, handled; @@ -2462,7 +2462,7 @@ static irqreturn_t vortex_interrupt(int irq, void *dev_id, struct pt_regs *regs) } if (source & IRQ_MIDI) { snd_mpu401_uart_interrupt(vortex->irq, - vortex->rmidi->private_data, regs); + vortex->rmidi->private_data); handled = 1; } diff --git a/sound/pci/azt3328.c b/sound/pci/azt3328.c index bac8e9cfd92..692f203d65d 100644 --- a/sound/pci/azt3328.c +++ b/sound/pci/azt3328.c @@ -1191,7 +1191,7 @@ snd_azf3328_capture_pointer(struct snd_pcm_substream *substream) } static irqreturn_t -snd_azf3328_interrupt(int irq, void *dev_id, struct pt_regs *regs) +snd_azf3328_interrupt(int irq, void *dev_id) { struct snd_azf3328 *chip = dev_id; u8 status, which; @@ -1256,7 +1256,7 @@ snd_azf3328_interrupt(int irq, void *dev_id, struct pt_regs *regs) /* MPU401 has less critical IRQ requirements * than timer and playback/recording, right? */ if (status & IRQ_MPU401) { - snd_mpu401_uart_interrupt(irq, chip->rmidi->private_data, regs); + snd_mpu401_uart_interrupt(irq, chip->rmidi->private_data); /* hmm, do we have to ack the IRQ here somehow? * If so, then I don't know how... */ diff --git a/sound/pci/bt87x.c b/sound/pci/bt87x.c index 97a280a246c..d33a37086df 100644 --- a/sound/pci/bt87x.c +++ b/sound/pci/bt87x.c @@ -269,7 +269,7 @@ static void snd_bt87x_pci_error(struct snd_bt87x *chip, unsigned int status) } } -static irqreturn_t snd_bt87x_interrupt(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t snd_bt87x_interrupt(int irq, void *dev_id) { struct snd_bt87x *chip = dev_id; unsigned int status, irq_status; diff --git a/sound/pci/ca0106/ca0106_main.c b/sound/pci/ca0106/ca0106_main.c index 12bbbb6afd2..6fa4a302f7d 100644 --- a/sound/pci/ca0106/ca0106_main.c +++ b/sound/pci/ca0106/ca0106_main.c @@ -1058,8 +1058,7 @@ static int snd_ca0106_dev_free(struct snd_device *device) return snd_ca0106_free(chip); } -static irqreturn_t snd_ca0106_interrupt(int irq, void *dev_id, - struct pt_regs *regs) +static irqreturn_t snd_ca0106_interrupt(int irq, void *dev_id) { unsigned int status; diff --git a/sound/pci/cmipci.c b/sound/pci/cmipci.c index 876b64464b6..1f7e7108306 100644 --- a/sound/pci/cmipci.c +++ b/sound/pci/cmipci.c @@ -1294,7 +1294,7 @@ static int snd_cmipci_capture_spdif_hw_free(struct snd_pcm_substream *subs) /* * interrupt handler */ -static irqreturn_t snd_cmipci_interrupt(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t snd_cmipci_interrupt(int irq, void *dev_id) { struct cmipci *cm = dev_id; unsigned int status, mask = 0; @@ -1315,7 +1315,7 @@ static irqreturn_t snd_cmipci_interrupt(int irq, void *dev_id, struct pt_regs *r spin_unlock(&cm->reg_lock); if (cm->rmidi && (status & CM_UARTINT)) - snd_mpu401_uart_interrupt(irq, cm->rmidi->private_data, regs); + snd_mpu401_uart_interrupt(irq, cm->rmidi->private_data); if (cm->pcm) { if ((status & CM_CHINT0) && cm->channel[0].running) diff --git a/sound/pci/cs4281.c b/sound/pci/cs4281.c index 1990430a21c..d54924e60bb 100644 --- a/sound/pci/cs4281.c +++ b/sound/pci/cs4281.c @@ -493,7 +493,7 @@ struct cs4281 { }; -static irqreturn_t snd_cs4281_interrupt(int irq, void *dev_id, struct pt_regs *regs); +static irqreturn_t snd_cs4281_interrupt(int irq, void *dev_id); static struct pci_device_id snd_cs4281_ids[] = { { 0x1013, 0x6005, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, }, /* CS4281 */ @@ -1814,7 +1814,7 @@ static int __devinit snd_cs4281_midi(struct cs4281 * chip, int device, * Interrupt handler */ -static irqreturn_t snd_cs4281_interrupt(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t snd_cs4281_interrupt(int irq, void *dev_id) { struct cs4281 *chip = dev_id; unsigned int status, dma, val; diff --git a/sound/pci/cs46xx/cs46xx_lib.c b/sound/pci/cs46xx/cs46xx_lib.c index 4851847180d..16d4ebf2a33 100644 --- a/sound/pci/cs46xx/cs46xx_lib.c +++ b/sound/pci/cs46xx/cs46xx_lib.c @@ -1149,7 +1149,7 @@ static int snd_cs46xx_capture_prepare(struct snd_pcm_substream *substream) return 0; } -static irqreturn_t snd_cs46xx_interrupt(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t snd_cs46xx_interrupt(int irq, void *dev_id) { struct snd_cs46xx *chip = dev_id; u32 status1; diff --git a/sound/pci/cs5535audio/cs5535audio.c b/sound/pci/cs5535audio/cs5535audio.c index 64c7826e8b8..2441238f200 100644 --- a/sound/pci/cs5535audio/cs5535audio.c +++ b/sound/pci/cs5535audio/cs5535audio.c @@ -203,8 +203,7 @@ static void process_bm1_irq(struct cs5535audio *cs5535au) } } -static irqreturn_t snd_cs5535audio_interrupt(int irq, void *dev_id, - struct pt_regs *regs) +static irqreturn_t snd_cs5535audio_interrupt(int irq, void *dev_id) { u16 acc_irq_stat; u8 bm_stat; diff --git a/sound/pci/echoaudio/echoaudio.c b/sound/pci/echoaudio/echoaudio.c index c3dafa29054..e5e88fe54de 100644 --- a/sound/pci/echoaudio/echoaudio.c +++ b/sound/pci/echoaudio/echoaudio.c @@ -1818,8 +1818,7 @@ static struct snd_kcontrol_new snd_echo_channels_info __devinitdata = { IRQ Handler ******************************************************************************/ -static irqreturn_t snd_echo_interrupt(int irq, void *dev_id, - struct pt_regs *regs) +static irqreturn_t snd_echo_interrupt(int irq, void *dev_id) { struct echoaudio *chip = dev_id; struct snd_pcm_substream *substream; diff --git a/sound/pci/emu10k1/emu10k1x.c b/sound/pci/emu10k1/emu10k1x.c index da1610a571b..c46905a1117 100644 --- a/sound/pci/emu10k1/emu10k1x.c +++ b/sound/pci/emu10k1/emu10k1x.c @@ -780,8 +780,7 @@ static int snd_emu10k1x_dev_free(struct snd_device *device) return snd_emu10k1x_free(chip); } -static irqreturn_t snd_emu10k1x_interrupt(int irq, void *dev_id, - struct pt_regs *regs) +static irqreturn_t snd_emu10k1x_interrupt(int irq, void *dev_id) { unsigned int status; diff --git a/sound/pci/emu10k1/irq.c b/sound/pci/emu10k1/irq.c index 1076af4c366..4f18f7e8bcf 100644 --- a/sound/pci/emu10k1/irq.c +++ b/sound/pci/emu10k1/irq.c @@ -30,7 +30,7 @@ #include #include -irqreturn_t snd_emu10k1_interrupt(int irq, void *dev_id, struct pt_regs *regs) +irqreturn_t snd_emu10k1_interrupt(int irq, void *dev_id) { struct snd_emu10k1 *emu = dev_id; unsigned int status, status2, orig_status, orig_status2; diff --git a/sound/pci/ens1370.c b/sound/pci/ens1370.c index a8a601fc781..8cb4fb2412d 100644 --- a/sound/pci/ens1370.c +++ b/sound/pci/ens1370.c @@ -444,7 +444,7 @@ struct ensoniq { #endif }; -static irqreturn_t snd_audiopci_interrupt(int irq, void *dev_id, struct pt_regs *regs); +static irqreturn_t snd_audiopci_interrupt(int irq, void *dev_id); static struct pci_device_id snd_audiopci_ids[] = { #ifdef CHIP1370 @@ -2404,7 +2404,7 @@ static int __devinit snd_ensoniq_midi(struct ensoniq * ensoniq, int device, * Interrupt handler */ -static irqreturn_t snd_audiopci_interrupt(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t snd_audiopci_interrupt(int irq, void *dev_id) { struct ensoniq *ensoniq = dev_id; unsigned int status, sctrl; diff --git a/sound/pci/es1938.c b/sound/pci/es1938.c index 3ce5a4e7e31..2da988f78ba 100644 --- a/sound/pci/es1938.c +++ b/sound/pci/es1938.c @@ -241,7 +241,7 @@ struct es1938 { #endif }; -static irqreturn_t snd_es1938_interrupt(int irq, void *dev_id, struct pt_regs *regs); +static irqreturn_t snd_es1938_interrupt(int irq, void *dev_id); static struct pci_device_id snd_es1938_ids[] = { { 0x125d, 0x1969, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, }, /* Solo-1 */ @@ -1642,7 +1642,7 @@ static int __devinit snd_es1938_create(struct snd_card *card, /* -------------------------------------------------------------------- * Interrupt handler * -------------------------------------------------------------------- */ -static irqreturn_t snd_es1938_interrupt(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t snd_es1938_interrupt(int irq, void *dev_id) { struct es1938 *chip = dev_id; unsigned char status, audiostatus; @@ -1714,7 +1714,7 @@ static irqreturn_t snd_es1938_interrupt(int irq, void *dev_id, struct pt_regs *r // snd_es1938_mixer_bits(chip, ESSSB_IREG_MPU401CONTROL, 0x40, 0); /* ack? */ if (chip->rmidi) { handled = 1; - snd_mpu401_uart_interrupt(irq, chip->rmidi->private_data, regs); + snd_mpu401_uart_interrupt(irq, chip->rmidi->private_data); } } return IRQ_RETVAL(handled); diff --git a/sound/pci/es1968.c b/sound/pci/es1968.c index f3c40385c87..b9d723c7e1d 100644 --- a/sound/pci/es1968.c +++ b/sound/pci/es1968.c @@ -590,7 +590,7 @@ struct es1968 { #endif }; -static irqreturn_t snd_es1968_interrupt(int irq, void *dev_id, struct pt_regs *regs); +static irqreturn_t snd_es1968_interrupt(int irq, void *dev_id); static struct pci_device_id snd_es1968_ids[] = { /* Maestro 1 */ @@ -1962,7 +1962,7 @@ static void es1968_update_hw_volume(unsigned long private_data) /* * interrupt handler */ -static irqreturn_t snd_es1968_interrupt(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t snd_es1968_interrupt(int irq, void *dev_id) { struct es1968 *chip = dev_id; u32 event; @@ -1979,7 +1979,7 @@ static irqreturn_t snd_es1968_interrupt(int irq, void *dev_id, struct pt_regs *r outb(0xFF, chip->io_port + 0x1A); if ((event & ESM_MPU401_IRQ) && chip->rmidi) { - snd_mpu401_uart_interrupt(irq, chip->rmidi->private_data, regs); + snd_mpu401_uart_interrupt(irq, chip->rmidi->private_data); } if (event & ESM_SOUND_IRQ) { diff --git a/sound/pci/fm801.c b/sound/pci/fm801.c index bdfda1997d5..3ec7d7ee04d 100644 --- a/sound/pci/fm801.c +++ b/sound/pci/fm801.c @@ -520,7 +520,7 @@ static snd_pcm_uframes_t snd_fm801_capture_pointer(struct snd_pcm_substream *sub return bytes_to_frames(substream->runtime, ptr); } -static irqreturn_t snd_fm801_interrupt(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t snd_fm801_interrupt(int irq, void *dev_id) { struct fm801 *chip = dev_id; unsigned short status; @@ -561,7 +561,7 @@ static irqreturn_t snd_fm801_interrupt(int irq, void *dev_id, struct pt_regs *re snd_pcm_period_elapsed(chip->capture_substream); } if (chip->rmidi && (status & FM801_IRQ_MPU)) - snd_mpu401_uart_interrupt(irq, chip->rmidi->private_data, regs); + snd_mpu401_uart_interrupt(irq, chip->rmidi->private_data); if (status & FM801_IRQ_VOLUME) ;/* TODO */ diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index e9d4cb4d07e..a76a778d0a1 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c @@ -811,7 +811,7 @@ static void azx_init_chip(struct azx *chip) /* * interrupt handler */ -static irqreturn_t azx_interrupt(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t azx_interrupt(int irq, void *dev_id) { struct azx *chip = dev_id; struct azx_dev *azx_dev; diff --git a/sound/pci/ice1712/ice1712.c b/sound/pci/ice1712/ice1712.c index dc69392eafa..8a576b78bee 100644 --- a/sound/pci/ice1712/ice1712.c +++ b/sound/pci/ice1712/ice1712.c @@ -420,7 +420,7 @@ static void snd_ice1712_set_input_clock_source(struct snd_ice1712 *ice, int spdi * Interrupt handler */ -static irqreturn_t snd_ice1712_interrupt(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t snd_ice1712_interrupt(int irq, void *dev_id) { struct snd_ice1712 *ice = dev_id; unsigned char status; @@ -433,7 +433,7 @@ static irqreturn_t snd_ice1712_interrupt(int irq, void *dev_id, struct pt_regs * handled = 1; if (status & ICE1712_IRQ_MPU1) { if (ice->rmidi[0]) - snd_mpu401_uart_interrupt(irq, ice->rmidi[0]->private_data, regs); + snd_mpu401_uart_interrupt(irq, ice->rmidi[0]->private_data); outb(ICE1712_IRQ_MPU1, ICEREG(ice, IRQSTAT)); status &= ~ICE1712_IRQ_MPU1; } @@ -441,7 +441,7 @@ static irqreturn_t snd_ice1712_interrupt(int irq, void *dev_id, struct pt_regs * outb(ICE1712_IRQ_TIMER, ICEREG(ice, IRQSTAT)); if (status & ICE1712_IRQ_MPU2) { if (ice->rmidi[1]) - snd_mpu401_uart_interrupt(irq, ice->rmidi[1]->private_data, regs); + snd_mpu401_uart_interrupt(irq, ice->rmidi[1]->private_data); outb(ICE1712_IRQ_MPU2, ICEREG(ice, IRQSTAT)); status &= ~ICE1712_IRQ_MPU2; } diff --git a/sound/pci/ice1712/ice1724.c b/sound/pci/ice1712/ice1724.c index 71d6aedc074..e9cbfdf3705 100644 --- a/sound/pci/ice1712/ice1724.c +++ b/sound/pci/ice1712/ice1724.c @@ -218,7 +218,7 @@ static unsigned int snd_vt1724_get_gpio_data(struct snd_ice1712 *ice) * Interrupt handler */ -static irqreturn_t snd_vt1724_interrupt(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t snd_vt1724_interrupt(int irq, void *dev_id) { struct snd_ice1712 *ice = dev_id; unsigned char status; @@ -236,7 +236,7 @@ static irqreturn_t snd_vt1724_interrupt(int irq, void *dev_id, struct pt_regs *r */ if ((status & VT1724_IRQ_MPU_RX)||(status & VT1724_IRQ_MPU_TX)) { if (ice->rmidi[0]) - snd_mpu401_uart_interrupt(irq, ice->rmidi[0]->private_data, regs); + snd_mpu401_uart_interrupt(irq, ice->rmidi[0]->private_data); outb(status & (VT1724_IRQ_MPU_RX|VT1724_IRQ_MPU_TX), ICEREG1724(ice, IRQSTAT)); status &= ~(VT1724_IRQ_MPU_RX|VT1724_IRQ_MPU_TX); } diff --git a/sound/pci/intel8x0.c b/sound/pci/intel8x0.c index 72dbaedcbdf..f4319b8d464 100644 --- a/sound/pci/intel8x0.c +++ b/sound/pci/intel8x0.c @@ -801,7 +801,7 @@ static inline void snd_intel8x0_update(struct intel8x0 *chip, struct ichdev *ich status & (ICH_FIFOE | ICH_BCIS | ICH_LVBCI)); } -static irqreturn_t snd_intel8x0_interrupt(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t snd_intel8x0_interrupt(int irq, void *dev_id) { struct intel8x0 *chip = dev_id; struct ichdev *ichdev; diff --git a/sound/pci/intel8x0m.c b/sound/pci/intel8x0m.c index 268e2f7241e..6703f5cb556 100644 --- a/sound/pci/intel8x0m.c +++ b/sound/pci/intel8x0m.c @@ -511,7 +511,7 @@ static inline void snd_intel8x0_update(struct intel8x0m *chip, struct ichdev *ic iputbyte(chip, port + ichdev->roff_sr, ICH_FIFOE | ICH_BCIS | ICH_LVBCI); } -static irqreturn_t snd_intel8x0_interrupt(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t snd_intel8x0_interrupt(int irq, void *dev_id) { struct intel8x0m *chip = dev_id; struct ichdev *ichdev; diff --git a/sound/pci/korg1212/korg1212.c b/sound/pci/korg1212/korg1212.c index cfea51f4478..398aa10a06e 100644 --- a/sound/pci/korg1212/korg1212.c +++ b/sound/pci/korg1212/korg1212.c @@ -1119,7 +1119,7 @@ static void snd_korg1212_OnDSPDownloadComplete(struct snd_korg1212 *korg1212) snd_korg1212_setCardState(korg1212, K1212_STATE_DSP_COMPLETE); } -static irqreturn_t snd_korg1212_interrupt(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t snd_korg1212_interrupt(int irq, void *dev_id) { u32 doorbellValue; struct snd_korg1212 *korg1212 = dev_id; diff --git a/sound/pci/maestro3.c b/sound/pci/maestro3.c index 45214b3b81b..05605f474a7 100644 --- a/sound/pci/maestro3.c +++ b/sound/pci/maestro3.c @@ -1685,8 +1685,7 @@ static void snd_m3_update_hw_volume(unsigned long private_data) spin_unlock_irqrestore(&chip->ac97_lock, flags); } -static irqreturn_t -snd_m3_interrupt(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t snd_m3_interrupt(int irq, void *dev_id) { struct snd_m3 *chip = dev_id; u8 status; diff --git a/sound/pci/mixart/mixart_core.c b/sound/pci/mixart/mixart_core.c index 406ac3a9d42..d54457317b1 100644 --- a/sound/pci/mixart/mixart_core.c +++ b/sound/pci/mixart/mixart_core.c @@ -408,7 +408,7 @@ void snd_mixart_msg_tasklet(unsigned long arg) } -irqreturn_t snd_mixart_interrupt(int irq, void *dev_id, struct pt_regs *regs) +irqreturn_t snd_mixart_interrupt(int irq, void *dev_id) { struct mixart_mgr *mgr = dev_id; int err; diff --git a/sound/pci/mixart/mixart_core.h b/sound/pci/mixart/mixart_core.h index 1fe2bcfcc57..c919b734756 100644 --- a/sound/pci/mixart/mixart_core.h +++ b/sound/pci/mixart/mixart_core.h @@ -563,7 +563,7 @@ int snd_mixart_send_msg(struct mixart_mgr *mgr, struct mixart_msg *request, int int snd_mixart_send_msg_wait_notif(struct mixart_mgr *mgr, struct mixart_msg *request, u32 notif_event); int snd_mixart_send_msg_nonblock(struct mixart_mgr *mgr, struct mixart_msg *request); -irqreturn_t snd_mixart_interrupt(int irq, void *dev_id, struct pt_regs *regs); +irqreturn_t snd_mixart_interrupt(int irq, void *dev_id); void snd_mixart_msg_tasklet(unsigned long arg); void snd_mixart_reset_board(struct mixart_mgr *mgr); diff --git a/sound/pci/nm256/nm256.c b/sound/pci/nm256/nm256.c index 101eee0aa01..b1bbdb9e3b7 100644 --- a/sound/pci/nm256/nm256.c +++ b/sound/pci/nm256/nm256.c @@ -236,7 +236,7 @@ struct nm256 { int irq; int irq_acks; - irqreturn_t (*interrupt)(int, void *, struct pt_regs *); + irq_handler_t interrupt; int badintrcount; /* counter to check bogus interrupts */ struct mutex irq_mutex; @@ -1004,7 +1004,7 @@ snd_nm256_intr_check(struct nm256 *chip) */ static irqreturn_t -snd_nm256_interrupt(int irq, void *dev_id, struct pt_regs *dummy) +snd_nm256_interrupt(int irq, void *dev_id) { struct nm256 *chip = dev_id; u16 status; @@ -1069,7 +1069,7 @@ snd_nm256_interrupt(int irq, void *dev_id, struct pt_regs *dummy) */ static irqreturn_t -snd_nm256_interrupt_zx(int irq, void *dev_id, struct pt_regs *dummy) +snd_nm256_interrupt_zx(int irq, void *dev_id) { struct nm256 *chip = dev_id; u32 status; diff --git a/sound/pci/pcxhr/pcxhr_core.c b/sound/pci/pcxhr/pcxhr_core.c index c40f5906268..0ff8dc36fde 100644 --- a/sound/pci/pcxhr/pcxhr_core.c +++ b/sound/pci/pcxhr/pcxhr_core.c @@ -1131,7 +1131,7 @@ static void pcxhr_update_timer_pos(struct pcxhr_mgr *mgr, } -irqreturn_t pcxhr_interrupt(int irq, void *dev_id, struct pt_regs *regs) +irqreturn_t pcxhr_interrupt(int irq, void *dev_id) { struct pcxhr_mgr *mgr = dev_id; unsigned int reg; diff --git a/sound/pci/pcxhr/pcxhr_core.h b/sound/pci/pcxhr/pcxhr_core.h index e7415d6d182..d9a4ab60987 100644 --- a/sound/pci/pcxhr/pcxhr_core.h +++ b/sound/pci/pcxhr/pcxhr_core.h @@ -194,7 +194,7 @@ int pcxhr_write_io_num_reg_cont(struct pcxhr_mgr *mgr, unsigned int mask, /* interrupt handling */ -irqreturn_t pcxhr_interrupt(int irq, void *dev_id, struct pt_regs *regs); +irqreturn_t pcxhr_interrupt(int irq, void *dev_id); void pcxhr_msg_tasklet(unsigned long arg); #endif /* __SOUND_PCXHR_CORE_H */ diff --git a/sound/pci/riptide/riptide.c b/sound/pci/riptide/riptide.c index fe210c85344..ec4899147e1 100644 --- a/sound/pci/riptide/riptide.c +++ b/sound/pci/riptide/riptide.c @@ -1736,7 +1736,7 @@ snd_riptide_pcm(struct snd_riptide *chip, int device, struct snd_pcm **rpcm) } static irqreturn_t -snd_riptide_interrupt(int irq, void *dev_id, struct pt_regs *regs) +snd_riptide_interrupt(int irq, void *dev_id) { struct snd_riptide *chip = dev_id; struct cmdif *cif = chip->cif; @@ -1751,8 +1751,7 @@ snd_riptide_interrupt(int irq, void *dev_id, struct pt_regs *regs) if (chip->rmidi && IS_MPUIRQ(cif->hwport)) { chip->handled_irqs++; snd_mpu401_uart_interrupt(irq, - chip->rmidi->private_data, - regs); + chip->rmidi->private_data); } SET_AIACK(cif->hwport); } diff --git a/sound/pci/rme32.c b/sound/pci/rme32.c index 2a71499242f..dc8d1302e22 100644 --- a/sound/pci/rme32.c +++ b/sound/pci/rme32.c @@ -818,8 +818,7 @@ static void snd_rme32_pcm_stop(struct rme32 * rme32, int to_pause) writel(0, rme32->iobase + RME32_IO_RESET_POS); } -static irqreturn_t -snd_rme32_interrupt(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t snd_rme32_interrupt(int irq, void *dev_id) { struct rme32 *rme32 = (struct rme32 *) dev_id; diff --git a/sound/pci/rme96.c b/sound/pci/rme96.c index f8de7c99701..106110a89a4 100644 --- a/sound/pci/rme96.c +++ b/sound/pci/rme96.c @@ -1117,8 +1117,7 @@ snd_rme96_capture_stop(struct rme96 *rme96) static irqreturn_t snd_rme96_interrupt(int irq, - void *dev_id, - struct pt_regs *regs) + void *dev_id) { struct rme96 *rme96 = (struct rme96 *)dev_id; diff --git a/sound/pci/rme9652/hdsp.c b/sound/pci/rme9652/hdsp.c index d3e07de433b..694aa057ed4 100644 --- a/sound/pci/rme9652/hdsp.c +++ b/sound/pci/rme9652/hdsp.c @@ -3603,7 +3603,7 @@ static void hdsp_midi_tasklet(unsigned long arg) snd_hdsp_midi_input_read (&hdsp->midi[1]); } -static irqreturn_t snd_hdsp_interrupt(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t snd_hdsp_interrupt(int irq, void *dev_id) { struct hdsp *hdsp = (struct hdsp *) dev_id; unsigned int status; diff --git a/sound/pci/rme9652/hdspm.c b/sound/pci/rme9652/hdspm.c index 7d03ae066d5..7055d893855 100644 --- a/sound/pci/rme9652/hdspm.c +++ b/sound/pci/rme9652/hdspm.c @@ -2556,8 +2556,7 @@ static int snd_hdspm_set_defaults(struct hdspm * hdspm) interupt ------------------------------------------------------------*/ -static irqreturn_t snd_hdspm_interrupt(int irq, void *dev_id, - struct pt_regs *regs) +static irqreturn_t snd_hdspm_interrupt(int irq, void *dev_id) { struct hdspm *hdspm = (struct hdspm *) dev_id; unsigned int status; diff --git a/sound/pci/rme9652/rme9652.c b/sound/pci/rme9652/rme9652.c index fc15f61ad5d..cf0427b4bfd 100644 --- a/sound/pci/rme9652/rme9652.c +++ b/sound/pci/rme9652/rme9652.c @@ -1882,7 +1882,7 @@ static void snd_rme9652_set_defaults(struct snd_rme9652 *rme9652) rme9652_set_rate(rme9652, 48000); } -static irqreturn_t snd_rme9652_interrupt(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t snd_rme9652_interrupt(int irq, void *dev_id) { struct snd_rme9652 *rme9652 = (struct snd_rme9652 *) dev_id; diff --git a/sound/pci/sonicvibes.c b/sound/pci/sonicvibes.c index e5d4def1aa6..f9b8afabda9 100644 --- a/sound/pci/sonicvibes.c +++ b/sound/pci/sonicvibes.c @@ -580,7 +580,7 @@ static int snd_sonicvibes_trigger(struct sonicvibes * sonic, int what, int cmd) return result; } -static irqreturn_t snd_sonicvibes_interrupt(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t snd_sonicvibes_interrupt(int irq, void *dev_id) { struct sonicvibes *sonic = dev_id; unsigned char status; @@ -601,7 +601,7 @@ static irqreturn_t snd_sonicvibes_interrupt(int irq, void *dev_id, struct pt_reg } if (sonic->rmidi) { if (status & SV_MIDI_IRQ) - snd_mpu401_uart_interrupt(irq, sonic->rmidi->private_data, regs); + snd_mpu401_uart_interrupt(irq, sonic->rmidi->private_data); } if (status & SV_UD_IRQ) { unsigned char udreg; diff --git a/sound/pci/trident/trident_main.c b/sound/pci/trident/trident_main.c index ebbe12d78d8..0d478871808 100644 --- a/sound/pci/trident/trident_main.c +++ b/sound/pci/trident/trident_main.c @@ -52,8 +52,7 @@ static int snd_trident_pcm_mixer_build(struct snd_trident *trident, static int snd_trident_pcm_mixer_free(struct snd_trident *trident, struct snd_trident_voice * voice, struct snd_pcm_substream *substream); -static irqreturn_t snd_trident_interrupt(int irq, void *dev_id, - struct pt_regs *regs); +static irqreturn_t snd_trident_interrupt(int irq, void *dev_id); static int snd_trident_sis_reset(struct snd_trident *trident); static void snd_trident_clear_voices(struct snd_trident * trident, @@ -3737,7 +3736,7 @@ static int snd_trident_free(struct snd_trident *trident) ---------------------------------------------------------------------------*/ -static irqreturn_t snd_trident_interrupt(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t snd_trident_interrupt(int irq, void *dev_id) { struct snd_trident *trident = dev_id; unsigned int audio_int, chn_int, stimer, channel, mask, tmp; @@ -3825,7 +3824,7 @@ static irqreturn_t snd_trident_interrupt(int irq, void *dev_id, struct pt_regs * } if (audio_int & MPU401_IRQ) { if (trident->rmidi) { - snd_mpu401_uart_interrupt(irq, trident->rmidi->private_data, regs); + snd_mpu401_uart_interrupt(irq, trident->rmidi->private_data); } else { inb(TRID_REG(trident, T4D_MPUR0)); } diff --git a/sound/pci/via82xx.c b/sound/pci/via82xx.c index 6db3d4cc4d8..e6990e0bbf2 100644 --- a/sound/pci/via82xx.c +++ b/sound/pci/via82xx.c @@ -613,7 +613,7 @@ static void snd_via82xx_channel_reset(struct via82xx *chip, struct viadev *viade * Interrupt handler * Used for 686 and 8233A */ -static irqreturn_t snd_via686_interrupt(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t snd_via686_interrupt(int irq, void *dev_id) { struct via82xx *chip = dev_id; unsigned int status; @@ -623,7 +623,7 @@ static irqreturn_t snd_via686_interrupt(int irq, void *dev_id, struct pt_regs *r if (! (status & chip->intr_mask)) { if (chip->rmidi) /* check mpu401 interrupt */ - return snd_mpu401_uart_interrupt(irq, chip->rmidi->private_data, regs); + return snd_mpu401_uart_interrupt(irq, chip->rmidi->private_data); return IRQ_NONE; } @@ -659,7 +659,7 @@ static irqreturn_t snd_via686_interrupt(int irq, void *dev_id, struct pt_regs *r /* * Interrupt handler */ -static irqreturn_t snd_via8233_interrupt(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t snd_via8233_interrupt(int irq, void *dev_id) { struct via82xx *chip = dev_id; unsigned int status; diff --git a/sound/pci/via82xx_modem.c b/sound/pci/via82xx_modem.c index 016f9dac253..5ab1cf3d434 100644 --- a/sound/pci/via82xx_modem.c +++ b/sound/pci/via82xx_modem.c @@ -475,7 +475,7 @@ static void snd_via82xx_channel_reset(struct via82xx_modem *chip, struct viadev * Interrupt handler */ -static irqreturn_t snd_via82xx_interrupt(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t snd_via82xx_interrupt(int irq, void *dev_id) { struct via82xx_modem *chip = dev_id; unsigned int status; diff --git a/sound/pci/ymfpci/ymfpci_main.c b/sound/pci/ymfpci/ymfpci_main.c index 24f6fc52f89..ebc6da89edf 100644 --- a/sound/pci/ymfpci/ymfpci_main.c +++ b/sound/pci/ymfpci/ymfpci_main.c @@ -753,7 +753,7 @@ static void snd_ymfpci_irq_wait(struct snd_ymfpci *chip) } } -static irqreturn_t snd_ymfpci_interrupt(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t snd_ymfpci_interrupt(int irq, void *dev_id) { struct snd_ymfpci *chip = dev_id; u32 status, nvoice, mode; @@ -799,7 +799,7 @@ static irqreturn_t snd_ymfpci_interrupt(int irq, void *dev_id, struct pt_regs *r snd_ymfpci_writew(chip, YDSXGR_INTFLAG, status); if (chip->rawmidi) - snd_mpu401_uart_interrupt(irq, chip->rawmidi->private_data, regs); + snd_mpu401_uart_interrupt(irq, chip->rawmidi->private_data); return IRQ_HANDLED; } -- cgit v1.2.3-18-g5258