diff options
author | David Howells <dhowells@redhat.com> | 2006-10-05 09:55:46 -0400 |
---|---|---|
committer | David Howells <dhowells@warthog.cambridge.redhat.com> | 2006-10-05 10:10:12 -0400 |
commit | 7d12e780e003f93433d49ce78cfedf4b4c52adc5 (patch) | |
tree | 6748550400445c11a306b132009f3001e3525df8 /sound/oss | |
parent | da482792a6d1a3fbaaa25fae867b343fb4db3246 (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 'sound/oss')
31 files changed, 50 insertions, 51 deletions
diff --git a/sound/oss/ad1816.c b/sound/oss/ad1816.c index 29057836c644..caabf31193f7 100644 --- a/sound/oss/ad1816.c +++ b/sound/oss/ad1816.c | |||
@@ -521,7 +521,7 @@ static struct audio_driver ad1816_audio_driver = | |||
521 | /* Interrupt handler */ | 521 | /* Interrupt handler */ |
522 | 522 | ||
523 | 523 | ||
524 | static irqreturn_t ad1816_interrupt (int irq, void *dev_id, struct pt_regs *dummy) | 524 | static irqreturn_t ad1816_interrupt (int irq, void *dev_id) |
525 | { | 525 | { |
526 | unsigned char status; | 526 | unsigned char status; |
527 | ad1816_info *devc = (ad1816_info *)dev_id; | 527 | ad1816_info *devc = (ad1816_info *)dev_id; |
diff --git a/sound/oss/ad1848.c b/sound/oss/ad1848.c index 257b7536fb18..0ffa9970bf0f 100644 --- a/sound/oss/ad1848.c +++ b/sound/oss/ad1848.c | |||
@@ -195,7 +195,7 @@ static void ad1848_halt(int dev); | |||
195 | static void ad1848_halt_input(int dev); | 195 | static void ad1848_halt_input(int dev); |
196 | static void ad1848_halt_output(int dev); | 196 | static void ad1848_halt_output(int dev); |
197 | static void ad1848_trigger(int dev, int bits); | 197 | static void ad1848_trigger(int dev, int bits); |
198 | static irqreturn_t adintr(int irq, void *dev_id, struct pt_regs *dummy); | 198 | static irqreturn_t adintr(int irq, void *dev_id); |
199 | 199 | ||
200 | #ifndef EXCLUDE_TIMERS | 200 | #ifndef EXCLUDE_TIMERS |
201 | static int ad1848_tmr_install(int dev); | 201 | static int ad1848_tmr_install(int dev); |
@@ -2196,7 +2196,7 @@ void ad1848_unload(int io_base, int irq, int dma_playback, int dma_capture, int | |||
2196 | printk(KERN_ERR "ad1848: Can't find device to be unloaded. Base=%x\n", io_base); | 2196 | printk(KERN_ERR "ad1848: Can't find device to be unloaded. Base=%x\n", io_base); |
2197 | } | 2197 | } |
2198 | 2198 | ||
2199 | static irqreturn_t adintr(int irq, void *dev_id, struct pt_regs *dummy) | 2199 | static irqreturn_t adintr(int irq, void *dev_id) |
2200 | { | 2200 | { |
2201 | unsigned char status; | 2201 | unsigned char status; |
2202 | ad1848_info *devc; | 2202 | ad1848_info *devc; |
diff --git a/sound/oss/ad1889.c b/sound/oss/ad1889.c index f56f870b4840..09263d72a519 100644 --- a/sound/oss/ad1889.c +++ b/sound/oss/ad1889.c | |||
@@ -929,7 +929,7 @@ static struct pci_device_id ad1889_id_tbl[] = { | |||
929 | }; | 929 | }; |
930 | MODULE_DEVICE_TABLE(pci, ad1889_id_tbl); | 930 | MODULE_DEVICE_TABLE(pci, ad1889_id_tbl); |
931 | 931 | ||
932 | static irqreturn_t ad1889_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 932 | static irqreturn_t ad1889_interrupt(int irq, void *dev_id) |
933 | { | 933 | { |
934 | u32 stat; | 934 | u32 stat; |
935 | ad1889_dev_t *dev = (ad1889_dev_t *)dev_id; | 935 | ad1889_dev_t *dev = (ad1889_dev_t *)dev_id; |
diff --git a/sound/oss/btaudio.c b/sound/oss/btaudio.c index 324a81fd3a3b..6ad384114239 100644 --- a/sound/oss/btaudio.c +++ b/sound/oss/btaudio.c | |||
@@ -824,7 +824,7 @@ static char *irq_name[] = { "", "", "", "OFLOW", "", "", "", "", "", "", "", | |||
824 | "RISCI", "FBUS", "FTRGT", "FDSR", "PPERR", | 824 | "RISCI", "FBUS", "FTRGT", "FDSR", "PPERR", |
825 | "RIPERR", "PABORT", "OCERR", "SCERR" }; | 825 | "RIPERR", "PABORT", "OCERR", "SCERR" }; |
826 | 826 | ||
827 | static irqreturn_t btaudio_irq(int irq, void *dev_id, struct pt_regs * regs) | 827 | static irqreturn_t btaudio_irq(int irq, void *dev_id) |
828 | { | 828 | { |
829 | int count = 0; | 829 | int count = 0; |
830 | u32 stat,astat; | 830 | u32 stat,astat; |
diff --git a/sound/oss/cs46xx.c b/sound/oss/cs46xx.c index 43193581f836..6e3c41f530e6 100644 --- a/sound/oss/cs46xx.c +++ b/sound/oss/cs46xx.c | |||
@@ -1613,7 +1613,7 @@ static void cs_handle_midi(struct cs_card *card) | |||
1613 | wake_up(&card->midi.owait); | 1613 | wake_up(&card->midi.owait); |
1614 | } | 1614 | } |
1615 | 1615 | ||
1616 | static irqreturn_t cs_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 1616 | static irqreturn_t cs_interrupt(int irq, void *dev_id) |
1617 | { | 1617 | { |
1618 | struct cs_card *card = (struct cs_card *)dev_id; | 1618 | struct cs_card *card = (struct cs_card *)dev_id; |
1619 | /* Single channel card */ | 1619 | /* Single channel card */ |
diff --git a/sound/oss/dmasound/dmasound_atari.c b/sound/oss/dmasound/dmasound_atari.c index dc31373069a5..285239d64b82 100644 --- a/sound/oss/dmasound/dmasound_atari.c +++ b/sound/oss/dmasound/dmasound_atari.c | |||
@@ -133,7 +133,7 @@ static int FalconSetFormat(int format); | |||
133 | static int FalconSetVolume(int volume); | 133 | static int FalconSetVolume(int volume); |
134 | static void AtaPlayNextFrame(int index); | 134 | static void AtaPlayNextFrame(int index); |
135 | static void AtaPlay(void); | 135 | static void AtaPlay(void); |
136 | static irqreturn_t AtaInterrupt(int irq, void *dummy, struct pt_regs *fp); | 136 | static irqreturn_t AtaInterrupt(int irq, void *dummy); |
137 | 137 | ||
138 | /*** Mid level stuff *********************************************************/ | 138 | /*** Mid level stuff *********************************************************/ |
139 | 139 | ||
@@ -1257,7 +1257,7 @@ static void AtaPlay(void) | |||
1257 | } | 1257 | } |
1258 | 1258 | ||
1259 | 1259 | ||
1260 | static irqreturn_t AtaInterrupt(int irq, void *dummy, struct pt_regs *fp) | 1260 | static irqreturn_t AtaInterrupt(int irq, void *dummy) |
1261 | { | 1261 | { |
1262 | #if 0 | 1262 | #if 0 |
1263 | /* ++TeSche: if you should want to test this... */ | 1263 | /* ++TeSche: if you should want to test this... */ |
diff --git a/sound/oss/dmasound/dmasound_awacs.c b/sound/oss/dmasound/dmasound_awacs.c index 9ae659f82430..3bd19c36fcd9 100644 --- a/sound/oss/dmasound/dmasound_awacs.c +++ b/sound/oss/dmasound/dmasound_awacs.c | |||
@@ -281,9 +281,9 @@ static int PMacSetFormat(int format); | |||
281 | static int PMacSetVolume(int volume); | 281 | static int PMacSetVolume(int volume); |
282 | static void PMacPlay(void); | 282 | static void PMacPlay(void); |
283 | static void PMacRecord(void); | 283 | static void PMacRecord(void); |
284 | static irqreturn_t pmac_awacs_tx_intr(int irq, void *devid, struct pt_regs *regs); | 284 | static irqreturn_t pmac_awacs_tx_intr(int irq, void *devid); |
285 | static irqreturn_t pmac_awacs_rx_intr(int irq, void *devid, struct pt_regs *regs); | 285 | static irqreturn_t pmac_awacs_rx_intr(int irq, void *devid); |
286 | static irqreturn_t pmac_awacs_intr(int irq, void *devid, struct pt_regs *regs); | 286 | static irqreturn_t pmac_awacs_intr(int irq, void *devid); |
287 | static void awacs_write(int val); | 287 | static void awacs_write(int val); |
288 | static int awacs_get_volume(int reg, int lshift); | 288 | static int awacs_get_volume(int reg, int lshift); |
289 | static int awacs_volume_setter(int volume, int n, int mute, int lshift); | 289 | static int awacs_volume_setter(int volume, int n, int mute, int lshift); |
@@ -398,7 +398,7 @@ read_audio_gpio(int gpio_addr) | |||
398 | * Headphone interrupt via GPIO (Tumbler, Snapper, DACA) | 398 | * Headphone interrupt via GPIO (Tumbler, Snapper, DACA) |
399 | */ | 399 | */ |
400 | static irqreturn_t | 400 | static irqreturn_t |
401 | headphone_intr(int irq, void *devid, struct pt_regs *regs) | 401 | headphone_intr(int irq, void *devid) |
402 | { | 402 | { |
403 | unsigned long flags; | 403 | unsigned long flags; |
404 | 404 | ||
@@ -1037,7 +1037,7 @@ static void PMacRecord(void) | |||
1037 | */ | 1037 | */ |
1038 | 1038 | ||
1039 | static irqreturn_t | 1039 | static irqreturn_t |
1040 | pmac_awacs_tx_intr(int irq, void *devid, struct pt_regs *regs) | 1040 | pmac_awacs_tx_intr(int irq, void *devid) |
1041 | { | 1041 | { |
1042 | int i = write_sq.front; | 1042 | int i = write_sq.front; |
1043 | int stat; | 1043 | int stat; |
@@ -1129,7 +1129,7 @@ printk("dmasound_pmac: tx-irq: xfer died - patching it up...\n") ; | |||
1129 | 1129 | ||
1130 | 1130 | ||
1131 | static irqreturn_t | 1131 | static irqreturn_t |
1132 | pmac_awacs_rx_intr(int irq, void *devid, struct pt_regs *regs) | 1132 | pmac_awacs_rx_intr(int irq, void *devid) |
1133 | { | 1133 | { |
1134 | int stat ; | 1134 | int stat ; |
1135 | /* For some reason on my PowerBook G3, I get one interrupt | 1135 | /* For some reason on my PowerBook G3, I get one interrupt |
@@ -1212,7 +1212,7 @@ printk("dmasound_pmac: rx-irq: DIED - attempting resurection\n"); | |||
1212 | 1212 | ||
1213 | 1213 | ||
1214 | static irqreturn_t | 1214 | static irqreturn_t |
1215 | pmac_awacs_intr(int irq, void *devid, struct pt_regs *regs) | 1215 | pmac_awacs_intr(int irq, void *devid) |
1216 | { | 1216 | { |
1217 | int ctrl; | 1217 | int ctrl; |
1218 | int status; | 1218 | int status; |
diff --git a/sound/oss/dmasound/dmasound_paula.c b/sound/oss/dmasound/dmasound_paula.c index 68e1d8f6c359..90fc058e1159 100644 --- a/sound/oss/dmasound/dmasound_paula.c +++ b/sound/oss/dmasound/dmasound_paula.c | |||
@@ -82,7 +82,7 @@ static int AmiSetVolume(int volume); | |||
82 | static int AmiSetTreble(int treble); | 82 | static int AmiSetTreble(int treble); |
83 | static void AmiPlayNextFrame(int index); | 83 | static void AmiPlayNextFrame(int index); |
84 | static void AmiPlay(void); | 84 | static void AmiPlay(void); |
85 | static irqreturn_t AmiInterrupt(int irq, void *dummy, struct pt_regs *fp); | 85 | static irqreturn_t AmiInterrupt(int irq, void *dummy); |
86 | 86 | ||
87 | #ifdef CONFIG_HEARTBEAT | 87 | #ifdef CONFIG_HEARTBEAT |
88 | 88 | ||
@@ -556,7 +556,7 @@ static void AmiPlay(void) | |||
556 | } | 556 | } |
557 | 557 | ||
558 | 558 | ||
559 | static irqreturn_t AmiInterrupt(int irq, void *dummy, struct pt_regs *fp) | 559 | static irqreturn_t AmiInterrupt(int irq, void *dummy) |
560 | { | 560 | { |
561 | int minframes = 1; | 561 | int minframes = 1; |
562 | 562 | ||
diff --git a/sound/oss/dmasound/dmasound_q40.c b/sound/oss/dmasound/dmasound_q40.c index e2081f32b0c4..b3379dd7ca5e 100644 --- a/sound/oss/dmasound/dmasound_q40.c +++ b/sound/oss/dmasound/dmasound_q40.c | |||
@@ -48,8 +48,8 @@ static int Q40SetFormat(int format); | |||
48 | static int Q40SetVolume(int volume); | 48 | static int Q40SetVolume(int volume); |
49 | static void Q40PlayNextFrame(int index); | 49 | static void Q40PlayNextFrame(int index); |
50 | static void Q40Play(void); | 50 | static void Q40Play(void); |
51 | static irqreturn_t Q40StereoInterrupt(int irq, void *dummy, struct pt_regs *fp); | 51 | static irqreturn_t Q40StereoInterrupt(int irq, void *dummy); |
52 | static irqreturn_t Q40MonoInterrupt(int irq, void *dummy, struct pt_regs *fp); | 52 | static irqreturn_t Q40MonoInterrupt(int irq, void *dummy); |
53 | static void Q40Interrupt(void); | 53 | static void Q40Interrupt(void); |
54 | 54 | ||
55 | 55 | ||
@@ -451,7 +451,7 @@ static void Q40Play(void) | |||
451 | spin_unlock_irqrestore(&dmasound.lock, flags); | 451 | spin_unlock_irqrestore(&dmasound.lock, flags); |
452 | } | 452 | } |
453 | 453 | ||
454 | static irqreturn_t Q40StereoInterrupt(int irq, void *dummy, struct pt_regs *fp) | 454 | static irqreturn_t Q40StereoInterrupt(int irq, void *dummy) |
455 | { | 455 | { |
456 | spin_lock(&dmasound.lock); | 456 | spin_lock(&dmasound.lock); |
457 | if (q40_sc>1){ | 457 | if (q40_sc>1){ |
@@ -463,7 +463,7 @@ static irqreturn_t Q40StereoInterrupt(int irq, void *dummy, struct pt_regs *fp) | |||
463 | spin_unlock(&dmasound.lock); | 463 | spin_unlock(&dmasound.lock); |
464 | return IRQ_HANDLED; | 464 | return IRQ_HANDLED; |
465 | } | 465 | } |
466 | static irqreturn_t Q40MonoInterrupt(int irq, void *dummy, struct pt_regs *fp) | 466 | static irqreturn_t Q40MonoInterrupt(int irq, void *dummy) |
467 | { | 467 | { |
468 | spin_lock(&dmasound.lock); | 468 | spin_lock(&dmasound.lock); |
469 | if (q40_sc>0){ | 469 | if (q40_sc>0){ |
diff --git a/sound/oss/emu10k1/irqmgr.c b/sound/oss/emu10k1/irqmgr.c index d19b464ba01b..fb2ce638f01c 100644 --- a/sound/oss/emu10k1/irqmgr.c +++ b/sound/oss/emu10k1/irqmgr.c | |||
@@ -37,7 +37,7 @@ | |||
37 | 37 | ||
38 | /* Interrupt handler */ | 38 | /* Interrupt handler */ |
39 | 39 | ||
40 | irqreturn_t emu10k1_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 40 | irqreturn_t emu10k1_interrupt(int irq, void *dev_id) |
41 | { | 41 | { |
42 | struct emu10k1_card *card = (struct emu10k1_card *) dev_id; | 42 | struct emu10k1_card *card = (struct emu10k1_card *) dev_id; |
43 | u32 irqstatus, irqstatus_tmp; | 43 | u32 irqstatus, irqstatus_tmp; |
diff --git a/sound/oss/emu10k1/main.c b/sound/oss/emu10k1/main.c index c4ce94d6e10c..6c59df7b0001 100644 --- a/sound/oss/emu10k1/main.c +++ b/sound/oss/emu10k1/main.c | |||
@@ -167,7 +167,7 @@ extern struct file_operations emu10k1_midi_fops; | |||
167 | static struct midi_operations emu10k1_midi_operations; | 167 | static struct midi_operations emu10k1_midi_operations; |
168 | #endif | 168 | #endif |
169 | 169 | ||
170 | extern irqreturn_t emu10k1_interrupt(int, void *, struct pt_regs *s); | 170 | extern irqreturn_t emu10k1_interrupt(int, void *); |
171 | 171 | ||
172 | static int __devinit emu10k1_audio_init(struct emu10k1_card *card) | 172 | static int __devinit emu10k1_audio_init(struct emu10k1_card *card) |
173 | { | 173 | { |
diff --git a/sound/oss/es1371.c b/sound/oss/es1371.c index a2ffe723dad5..2562f4769b90 100644 --- a/sound/oss/es1371.c +++ b/sound/oss/es1371.c | |||
@@ -1100,7 +1100,7 @@ static void es1371_handle_midi(struct es1371_state *s) | |||
1100 | outb((s->midi.ocnt > 0) ? UCTRL_RXINTEN | UCTRL_ENA_TXINT : UCTRL_RXINTEN, s->io+ES1371_REG_UART_CONTROL); | 1100 | outb((s->midi.ocnt > 0) ? UCTRL_RXINTEN | UCTRL_ENA_TXINT : UCTRL_RXINTEN, s->io+ES1371_REG_UART_CONTROL); |
1101 | } | 1101 | } |
1102 | 1102 | ||
1103 | static irqreturn_t es1371_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 1103 | static irqreturn_t es1371_interrupt(int irq, void *dev_id) |
1104 | { | 1104 | { |
1105 | struct es1371_state *s = (struct es1371_state *)dev_id; | 1105 | struct es1371_state *s = (struct es1371_state *)dev_id; |
1106 | unsigned int intsrc, sctl; | 1106 | unsigned int intsrc, sctl; |
diff --git a/sound/oss/hal2.c b/sound/oss/hal2.c index 80ab402dae9a..7807abac0625 100644 --- a/sound/oss/hal2.c +++ b/sound/oss/hal2.c | |||
@@ -370,7 +370,7 @@ static void hal2_adc_interrupt(struct hal2_codec *adc) | |||
370 | wake_up(&adc->dma_wait); | 370 | wake_up(&adc->dma_wait); |
371 | } | 371 | } |
372 | 372 | ||
373 | static irqreturn_t hal2_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 373 | static irqreturn_t hal2_interrupt(int irq, void *dev_id) |
374 | { | 374 | { |
375 | struct hal2_card *hal2 = (struct hal2_card*)dev_id; | 375 | struct hal2_card *hal2 = (struct hal2_card*)dev_id; |
376 | irqreturn_t ret = IRQ_NONE; | 376 | irqreturn_t ret = IRQ_NONE; |
diff --git a/sound/oss/i810_audio.c b/sound/oss/i810_audio.c index ddcddc2347f7..a48af879b466 100644 --- a/sound/oss/i810_audio.c +++ b/sound/oss/i810_audio.c | |||
@@ -1523,7 +1523,7 @@ static void i810_channel_interrupt(struct i810_card *card) | |||
1523 | #endif | 1523 | #endif |
1524 | } | 1524 | } |
1525 | 1525 | ||
1526 | static irqreturn_t i810_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 1526 | static irqreturn_t i810_interrupt(int irq, void *dev_id) |
1527 | { | 1527 | { |
1528 | struct i810_card *card = (struct i810_card *)dev_id; | 1528 | struct i810_card *card = (struct i810_card *)dev_id; |
1529 | u32 status; | 1529 | u32 status; |
diff --git a/sound/oss/mpu401.c b/sound/oss/mpu401.c index 162d07cc489f..58d4a5d05a27 100644 --- a/sound/oss/mpu401.c +++ b/sound/oss/mpu401.c | |||
@@ -432,7 +432,7 @@ static void mpu401_input_loop(struct mpu_config *devc) | |||
432 | devc->m_busy = 0; | 432 | devc->m_busy = 0; |
433 | } | 433 | } |
434 | 434 | ||
435 | static irqreturn_t mpuintr(int irq, void *dev_id, struct pt_regs *dummy) | 435 | static irqreturn_t mpuintr(int irq, void *dev_id) |
436 | { | 436 | { |
437 | struct mpu_config *devc; | 437 | struct mpu_config *devc; |
438 | int dev = (int) dev_id; | 438 | int dev = (int) dev_id; |
diff --git a/sound/oss/mpu401.h b/sound/oss/mpu401.h index 84c0e9522ef7..0ad1e9ee74f7 100644 --- a/sound/oss/mpu401.h +++ b/sound/oss/mpu401.h | |||
@@ -3,10 +3,9 @@ | |||
3 | int probe_uart401 (struct address_info *hw_config, struct module *owner); | 3 | int probe_uart401 (struct address_info *hw_config, struct module *owner); |
4 | void unload_uart401 (struct address_info *hw_config); | 4 | void unload_uart401 (struct address_info *hw_config); |
5 | 5 | ||
6 | irqreturn_t uart401intr (int irq, void *dev_id, struct pt_regs * dummy); | 6 | irqreturn_t uart401intr (int irq, void *dev_id); |
7 | 7 | ||
8 | /* From mpu401.c */ | 8 | /* From mpu401.c */ |
9 | int probe_mpu401(struct address_info *hw_config, struct resource *ports); | 9 | int probe_mpu401(struct address_info *hw_config, struct resource *ports); |
10 | int attach_mpu401(struct address_info * hw_config, struct module *owner); | 10 | int attach_mpu401(struct address_info * hw_config, struct module *owner); |
11 | void unload_mpu401(struct address_info *hw_info); | 11 | void unload_mpu401(struct address_info *hw_info); |
12 | |||
diff --git a/sound/oss/msnd_pinnacle.c b/sound/oss/msnd_pinnacle.c index 6d7763dae895..d5146790f5e3 100644 --- a/sound/oss/msnd_pinnacle.c +++ b/sound/oss/msnd_pinnacle.c | |||
@@ -1087,7 +1087,7 @@ static __inline__ void eval_dsp_msg(register WORD wMessage) | |||
1087 | } | 1087 | } |
1088 | } | 1088 | } |
1089 | 1089 | ||
1090 | static irqreturn_t intr(int irq, void *dev_id, struct pt_regs *regs) | 1090 | static irqreturn_t intr(int irq, void *dev_id) |
1091 | { | 1091 | { |
1092 | /* Send ack to DSP */ | 1092 | /* Send ack to DSP */ |
1093 | msnd_inb(dev.io + HP_RXL); | 1093 | msnd_inb(dev.io + HP_RXL); |
diff --git a/sound/oss/nec_vrc5477.c b/sound/oss/nec_vrc5477.c index 6f7f2f0423e4..da9728e17727 100644 --- a/sound/oss/nec_vrc5477.c +++ b/sound/oss/nec_vrc5477.c | |||
@@ -848,7 +848,7 @@ static inline void vrc5477_ac97_dac_interrupt(struct vrc5477_ac97_state *s) | |||
848 | wake_up_interruptible(&dac->wait); | 848 | wake_up_interruptible(&dac->wait); |
849 | } | 849 | } |
850 | 850 | ||
851 | static irqreturn_t vrc5477_ac97_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 851 | static irqreturn_t vrc5477_ac97_interrupt(int irq, void *dev_id) |
852 | { | 852 | { |
853 | struct vrc5477_ac97_state *s = (struct vrc5477_ac97_state *)dev_id; | 853 | struct vrc5477_ac97_state *s = (struct vrc5477_ac97_state *)dev_id; |
854 | u32 irqStatus; | 854 | u32 irqStatus; |
diff --git a/sound/oss/nm256.h b/sound/oss/nm256.h index 21e07b5081f2..1dade9033995 100644 --- a/sound/oss/nm256.h +++ b/sound/oss/nm256.h | |||
@@ -115,7 +115,7 @@ struct nm256_info | |||
115 | int has_irq; | 115 | int has_irq; |
116 | 116 | ||
117 | /* The card interrupt service routine. */ | 117 | /* The card interrupt service routine. */ |
118 | irqreturn_t (*introutine) (int, void *, struct pt_regs *); | 118 | irq_handler_t introutine; |
119 | 119 | ||
120 | /* Current audio config, cached. */ | 120 | /* Current audio config, cached. */ |
121 | struct sinfo { | 121 | struct sinfo { |
diff --git a/sound/oss/nm256_audio.c b/sound/oss/nm256_audio.c index 7760dddf2b32..44cd15505001 100644 --- a/sound/oss/nm256_audio.c +++ b/sound/oss/nm256_audio.c | |||
@@ -45,8 +45,8 @@ static struct audio_driver nm256_audio_driver; | |||
45 | 45 | ||
46 | static int nm256_grabInterrupt (struct nm256_info *card); | 46 | static int nm256_grabInterrupt (struct nm256_info *card); |
47 | static int nm256_releaseInterrupt (struct nm256_info *card); | 47 | static int nm256_releaseInterrupt (struct nm256_info *card); |
48 | static irqreturn_t nm256_interrupt (int irq, void *dev_id, struct pt_regs *dummy); | 48 | static irqreturn_t nm256_interrupt (int irq, void *dev_id); |
49 | static irqreturn_t nm256_interrupt_zx (int irq, void *dev_id, struct pt_regs *dummy); | 49 | static irqreturn_t nm256_interrupt_zx (int irq, void *dev_id); |
50 | 50 | ||
51 | /* These belong in linux/pci.h. */ | 51 | /* These belong in linux/pci.h. */ |
52 | #define PCI_DEVICE_ID_NEOMAGIC_NM256AV_AUDIO 0x8005 | 52 | #define PCI_DEVICE_ID_NEOMAGIC_NM256AV_AUDIO 0x8005 |
@@ -526,7 +526,7 @@ nm256_initHw (struct nm256_info *card) | |||
526 | */ | 526 | */ |
527 | 527 | ||
528 | static irqreturn_t | 528 | static irqreturn_t |
529 | nm256_interrupt (int irq, void *dev_id, struct pt_regs *dummy) | 529 | nm256_interrupt (int irq, void *dev_id) |
530 | { | 530 | { |
531 | struct nm256_info *card = (struct nm256_info *)dev_id; | 531 | struct nm256_info *card = (struct nm256_info *)dev_id; |
532 | u16 status; | 532 | u16 status; |
@@ -629,7 +629,7 @@ nm256_interrupt (int irq, void *dev_id, struct pt_regs *dummy) | |||
629 | */ | 629 | */ |
630 | 630 | ||
631 | static irqreturn_t | 631 | static irqreturn_t |
632 | nm256_interrupt_zx (int irq, void *dev_id, struct pt_regs *dummy) | 632 | nm256_interrupt_zx (int irq, void *dev_id) |
633 | { | 633 | { |
634 | struct nm256_info *card = (struct nm256_info *)dev_id; | 634 | struct nm256_info *card = (struct nm256_info *)dev_id; |
635 | u32 status; | 635 | u32 status; |
diff --git a/sound/oss/pas2_card.c b/sound/oss/pas2_card.c index 4ebb9638746e..25f3a22c52ee 100644 --- a/sound/oss/pas2_card.c +++ b/sound/oss/pas2_card.c | |||
@@ -88,7 +88,7 @@ void pas_write(unsigned char data, int ioaddr) | |||
88 | 88 | ||
89 | /******************* Begin of the Interrupt Handler ********************/ | 89 | /******************* Begin of the Interrupt Handler ********************/ |
90 | 90 | ||
91 | static irqreturn_t pasintr(int irq, void *dev_id, struct pt_regs *dummy) | 91 | static irqreturn_t pasintr(int irq, void *dev_id) |
92 | { | 92 | { |
93 | int status; | 93 | int status; |
94 | 94 | ||
diff --git a/sound/oss/sb_common.c b/sound/oss/sb_common.c index bbe5b7596d0e..440537c72604 100644 --- a/sound/oss/sb_common.c +++ b/sound/oss/sb_common.c | |||
@@ -132,7 +132,7 @@ static void sb_intr (sb_devc *devc) | |||
132 | 132 | ||
133 | if (src & 4) /* MPU401 interrupt */ | 133 | if (src & 4) /* MPU401 interrupt */ |
134 | if(devc->midi_irq_cookie) | 134 | if(devc->midi_irq_cookie) |
135 | uart401intr(devc->irq, devc->midi_irq_cookie, NULL); | 135 | uart401intr(devc->irq, devc->midi_irq_cookie); |
136 | 136 | ||
137 | if (!(src & 3)) | 137 | if (!(src & 3)) |
138 | return; /* Not a DSP interrupt */ | 138 | return; /* Not a DSP interrupt */ |
@@ -200,7 +200,7 @@ static void pci_intr(sb_devc *devc) | |||
200 | sb_intr(devc); | 200 | sb_intr(devc); |
201 | } | 201 | } |
202 | 202 | ||
203 | static irqreturn_t sbintr(int irq, void *dev_id, struct pt_regs *dummy) | 203 | static irqreturn_t sbintr(int irq, void *dev_id) |
204 | { | 204 | { |
205 | sb_devc *devc = dev_id; | 205 | sb_devc *devc = dev_id; |
206 | 206 | ||
diff --git a/sound/oss/sh_dac_audio.c b/sound/oss/sh_dac_audio.c index 83ff8a71f716..3b3b4da8cfd3 100644 --- a/sound/oss/sh_dac_audio.c +++ b/sound/oss/sh_dac_audio.c | |||
@@ -263,7 +263,7 @@ struct file_operations dac_audio_fops = { | |||
263 | .release = dac_audio_release, | 263 | .release = dac_audio_release, |
264 | }; | 264 | }; |
265 | 265 | ||
266 | static irqreturn_t timer1_interrupt(int irq, void *dev, struct pt_regs *regs) | 266 | static irqreturn_t timer1_interrupt(int irq, void *dev) |
267 | { | 267 | { |
268 | unsigned long timer_status; | 268 | unsigned long timer_status; |
269 | 269 | ||
diff --git a/sound/oss/swarm_cs4297a.c b/sound/oss/swarm_cs4297a.c index 3edf8d4ac998..471c274c5000 100644 --- a/sound/oss/swarm_cs4297a.c +++ b/sound/oss/swarm_cs4297a.c | |||
@@ -2505,7 +2505,7 @@ static /*const */ struct file_operations cs4297a_audio_fops = { | |||
2505 | .release = cs4297a_release, | 2505 | .release = cs4297a_release, |
2506 | }; | 2506 | }; |
2507 | 2507 | ||
2508 | static void cs4297a_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 2508 | static void cs4297a_interrupt(int irq, void *dev_id) |
2509 | { | 2509 | { |
2510 | struct cs4297a_state *s = (struct cs4297a_state *) dev_id; | 2510 | struct cs4297a_state *s = (struct cs4297a_state *) dev_id; |
2511 | u32 status; | 2511 | u32 status; |
diff --git a/sound/oss/trident.c b/sound/oss/trident.c index 147c816a1f22..7a363a178afd 100644 --- a/sound/oss/trident.c +++ b/sound/oss/trident.c | |||
@@ -1811,7 +1811,7 @@ cyber_address_interrupt(struct trident_card *card) | |||
1811 | } | 1811 | } |
1812 | 1812 | ||
1813 | static irqreturn_t | 1813 | static irqreturn_t |
1814 | trident_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 1814 | trident_interrupt(int irq, void *dev_id) |
1815 | { | 1815 | { |
1816 | struct trident_card *card = (struct trident_card *) dev_id; | 1816 | struct trident_card *card = (struct trident_card *) dev_id; |
1817 | u32 event; | 1817 | u32 event; |
diff --git a/sound/oss/uart401.c b/sound/oss/uart401.c index 8e18b6e25818..a446b826d5fc 100644 --- a/sound/oss/uart401.c +++ b/sound/oss/uart401.c | |||
@@ -96,7 +96,7 @@ static void uart401_input_loop(uart401_devc * devc) | |||
96 | printk(KERN_WARNING "Too much work in interrupt on uart401 (0x%X). UART jabbering ??\n", devc->base); | 96 | printk(KERN_WARNING "Too much work in interrupt on uart401 (0x%X). UART jabbering ??\n", devc->base); |
97 | } | 97 | } |
98 | 98 | ||
99 | irqreturn_t uart401intr(int irq, void *dev_id, struct pt_regs *dummy) | 99 | irqreturn_t uart401intr(int irq, void *dev_id) |
100 | { | 100 | { |
101 | uart401_devc *devc = dev_id; | 101 | uart401_devc *devc = dev_id; |
102 | 102 | ||
diff --git a/sound/oss/uart6850.c b/sound/oss/uart6850.c index 501d3e654a67..f3f914aa92ee 100644 --- a/sound/oss/uart6850.c +++ b/sound/oss/uart6850.c | |||
@@ -104,7 +104,7 @@ static void uart6850_input_loop(void) | |||
104 | } | 104 | } |
105 | } | 105 | } |
106 | 106 | ||
107 | static irqreturn_t m6850intr(int irq, void *dev_id, struct pt_regs *dummy) | 107 | static irqreturn_t m6850intr(int irq, void *dev_id) |
108 | { | 108 | { |
109 | if (input_avail()) | 109 | if (input_avail()) |
110 | uart6850_input_loop(); | 110 | uart6850_input_loop(); |
diff --git a/sound/oss/via82cxxx_audio.c b/sound/oss/via82cxxx_audio.c index 2fec42fc3482..17837d4b5ed3 100644 --- a/sound/oss/via82cxxx_audio.c +++ b/sound/oss/via82cxxx_audio.c | |||
@@ -1912,7 +1912,7 @@ static void via_intr_channel (struct via_info *card, struct via_channel *chan) | |||
1912 | } | 1912 | } |
1913 | 1913 | ||
1914 | 1914 | ||
1915 | static irqreturn_t via_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 1915 | static irqreturn_t via_interrupt(int irq, void *dev_id) |
1916 | { | 1916 | { |
1917 | struct via_info *card = dev_id; | 1917 | struct via_info *card = dev_id; |
1918 | u32 status32; | 1918 | u32 status32; |
@@ -1927,7 +1927,7 @@ static irqreturn_t via_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
1927 | { | 1927 | { |
1928 | #ifdef CONFIG_MIDI_VIA82CXXX | 1928 | #ifdef CONFIG_MIDI_VIA82CXXX |
1929 | if (card->midi_devc) | 1929 | if (card->midi_devc) |
1930 | uart401intr(irq, card->midi_devc, regs); | 1930 | uart401intr(irq, card->midi_devc); |
1931 | #endif | 1931 | #endif |
1932 | return IRQ_HANDLED; | 1932 | return IRQ_HANDLED; |
1933 | } | 1933 | } |
@@ -1950,7 +1950,7 @@ static irqreturn_t via_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
1950 | return IRQ_HANDLED; | 1950 | return IRQ_HANDLED; |
1951 | } | 1951 | } |
1952 | 1952 | ||
1953 | static irqreturn_t via_new_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 1953 | static irqreturn_t via_new_interrupt(int irq, void *dev_id) |
1954 | { | 1954 | { |
1955 | struct via_info *card = dev_id; | 1955 | struct via_info *card = dev_id; |
1956 | u32 status32; | 1956 | u32 status32; |
diff --git a/sound/oss/vidc.h b/sound/oss/vidc.h index d5b8064dc565..0d1424751ecd 100644 --- a/sound/oss/vidc.h +++ b/sound/oss/vidc.h | |||
@@ -33,7 +33,7 @@ extern unsigned long vidc_fill_2x16_s(unsigned long ibuf, unsigned long iend, | |||
33 | * DMA Interrupt handler | 33 | * DMA Interrupt handler |
34 | */ | 34 | */ |
35 | 35 | ||
36 | extern irqreturn_t vidc_sound_dma_irq(int irqnr, void *ref, struct pt_regs *regs); | 36 | extern irqreturn_t vidc_sound_dma_irq(int irqnr, void *ref); |
37 | 37 | ||
38 | /* | 38 | /* |
39 | * Filler routine pointer | 39 | * Filler routine pointer |
diff --git a/sound/oss/vwsnd.c b/sound/oss/vwsnd.c index 5f140c7586b3..0cd4d6ec9862 100644 --- a/sound/oss/vwsnd.c +++ b/sound/oss/vwsnd.c | |||
@@ -2233,12 +2233,12 @@ static void vwsnd_audio_write_intr(vwsnd_dev_t *devc, unsigned int status) | |||
2233 | pcm_output(devc, underflown, 0); | 2233 | pcm_output(devc, underflown, 0); |
2234 | } | 2234 | } |
2235 | 2235 | ||
2236 | static irqreturn_t vwsnd_audio_intr(int irq, void *dev_id, struct pt_regs *regs) | 2236 | static irqreturn_t vwsnd_audio_intr(int irq, void *dev_id) |
2237 | { | 2237 | { |
2238 | vwsnd_dev_t *devc = (vwsnd_dev_t *) dev_id; | 2238 | vwsnd_dev_t *devc = (vwsnd_dev_t *) dev_id; |
2239 | unsigned int status; | 2239 | unsigned int status; |
2240 | 2240 | ||
2241 | DBGEV("(irq=%d, dev_id=0x%p, regs=0x%p)\n", irq, dev_id, regs); | 2241 | DBGEV("(irq=%d, dev_id=0x%p)\n", irq, dev_id); |
2242 | 2242 | ||
2243 | status = li_get_clear_intr_status(&devc->lith); | 2243 | status = li_get_clear_intr_status(&devc->lith); |
2244 | vwsnd_audio_read_intr(devc, status); | 2244 | vwsnd_audio_read_intr(devc, status); |
diff --git a/sound/oss/waveartist.c b/sound/oss/waveartist.c index 59a2f28eb5a5..c5bf363d32c2 100644 --- a/sound/oss/waveartist.c +++ b/sound/oss/waveartist.c | |||
@@ -833,7 +833,7 @@ static struct audio_driver waveartist_audio_driver = { | |||
833 | 833 | ||
834 | 834 | ||
835 | static irqreturn_t | 835 | static irqreturn_t |
836 | waveartist_intr(int irq, void *dev_id, struct pt_regs *regs) | 836 | waveartist_intr(int irq, void *dev_id) |
837 | { | 837 | { |
838 | wavnc_info *devc = (wavnc_info *)dev_id; | 838 | wavnc_info *devc = (wavnc_info *)dev_id; |
839 | int irqstatus, status; | 839 | int irqstatus, status; |