diff options
| author | Andrew Morton <akpm@osdl.org> | 2006-04-27 21:39:18 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-04-28 11:33:46 -0400 |
| commit | 13e87ec68641fd54f3fa04eef3419d034ed2115a (patch) | |
| tree | 6779da58d91af198401cc3c1f6f4c81b8d5a7bb6 | |
| parent | 47bb789973fed504e4711ec34e63b84e6cbfb4e8 (diff) | |
[PATCH] request_irq(): remove warnings from irq probing
- Add new SA_PROBEIRQ which suppresses the new sharing-mismatch warning.
Some drivers like to use request_irq() to find an unused interrupt slot.
- Use it in i82365.c
- Kill unused SA_PROBE.
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
| -rw-r--r-- | drivers/pcmcia/i82365.c | 7 | ||||
| -rw-r--r-- | include/asm-xtensa/signal.h | 2 | ||||
| -rw-r--r-- | include/linux/signal.h | 4 | ||||
| -rw-r--r-- | kernel/irq/manage.c | 6 |
4 files changed, 12 insertions, 7 deletions
diff --git a/drivers/pcmcia/i82365.c b/drivers/pcmcia/i82365.c index bd0308e89815..a2f05f485156 100644 --- a/drivers/pcmcia/i82365.c +++ b/drivers/pcmcia/i82365.c | |||
| @@ -509,7 +509,8 @@ static irqreturn_t i365_count_irq(int irq, void *dev, struct pt_regs *regs) | |||
| 509 | static u_int __init test_irq(u_short sock, int irq) | 509 | static u_int __init test_irq(u_short sock, int irq) |
| 510 | { | 510 | { |
| 511 | debug(2, " testing ISA irq %d\n", irq); | 511 | debug(2, " testing ISA irq %d\n", irq); |
| 512 | if (request_irq(irq, i365_count_irq, 0, "scan", i365_count_irq) != 0) | 512 | if (request_irq(irq, i365_count_irq, SA_PROBEIRQ, "scan", |
| 513 | i365_count_irq) != 0) | ||
| 513 | return 1; | 514 | return 1; |
| 514 | irq_hits = 0; irq_sock = sock; | 515 | irq_hits = 0; irq_sock = sock; |
| 515 | msleep(10); | 516 | msleep(10); |
| @@ -561,7 +562,7 @@ static u_int __init isa_scan(u_short sock, u_int mask0) | |||
| 561 | } else { | 562 | } else { |
| 562 | /* Fallback: just find interrupts that aren't in use */ | 563 | /* Fallback: just find interrupts that aren't in use */ |
| 563 | for (i = 0; i < 16; i++) | 564 | for (i = 0; i < 16; i++) |
| 564 | if ((mask0 & (1 << i)) && (_check_irq(i, 0) == 0)) | 565 | if ((mask0 & (1 << i)) && (_check_irq(i, SA_PROBEIRQ) == 0)) |
| 565 | mask1 |= (1 << i); | 566 | mask1 |= (1 << i); |
| 566 | printk("default"); | 567 | printk("default"); |
| 567 | /* If scan failed, default to polled status */ | 568 | /* If scan failed, default to polled status */ |
| @@ -725,7 +726,7 @@ static void __init add_pcic(int ns, int type) | |||
| 725 | u_int cs_mask = mask & ((cs_irq) ? (1<<cs_irq) : ~(1<<12)); | 726 | u_int cs_mask = mask & ((cs_irq) ? (1<<cs_irq) : ~(1<<12)); |
| 726 | for (cs_irq = 15; cs_irq > 0; cs_irq--) | 727 | for (cs_irq = 15; cs_irq > 0; cs_irq--) |
| 727 | if ((cs_mask & (1 << cs_irq)) && | 728 | if ((cs_mask & (1 << cs_irq)) && |
| 728 | (_check_irq(cs_irq, 0) == 0)) | 729 | (_check_irq(cs_irq, SA_PROBEIRQ) == 0)) |
| 729 | break; | 730 | break; |
| 730 | if (cs_irq) { | 731 | if (cs_irq) { |
| 731 | grab_irq = 1; | 732 | grab_irq = 1; |
diff --git a/include/asm-xtensa/signal.h b/include/asm-xtensa/signal.h index 5d6fc9cdf58d..a99c9aec64ec 100644 --- a/include/asm-xtensa/signal.h +++ b/include/asm-xtensa/signal.h | |||
| @@ -118,9 +118,9 @@ typedef struct { | |||
| 118 | * SA_INTERRUPT is also used by the irq handling routines. | 118 | * SA_INTERRUPT is also used by the irq handling routines. |
| 119 | * SA_SHIRQ is for shared interrupt support on PCI and EISA. | 119 | * SA_SHIRQ is for shared interrupt support on PCI and EISA. |
| 120 | */ | 120 | */ |
| 121 | #define SA_PROBE SA_ONESHOT | ||
| 122 | #define SA_SAMPLE_RANDOM SA_RESTART | 121 | #define SA_SAMPLE_RANDOM SA_RESTART |
| 123 | #define SA_SHIRQ 0x04000000 | 122 | #define SA_SHIRQ 0x04000000 |
| 123 | #define SA_PROBEIRQ 0x08000000 | ||
| 124 | #endif | 124 | #endif |
| 125 | 125 | ||
| 126 | #define SIG_BLOCK 0 /* for blocking signals */ | 126 | #define SIG_BLOCK 0 /* for blocking signals */ |
diff --git a/include/linux/signal.h b/include/linux/signal.h index 162a8fd10b29..70739f51a09f 100644 --- a/include/linux/signal.h +++ b/include/linux/signal.h | |||
| @@ -14,10 +14,12 @@ | |||
| 14 | * | 14 | * |
| 15 | * SA_INTERRUPT is also used by the irq handling routines. | 15 | * SA_INTERRUPT is also used by the irq handling routines. |
| 16 | * SA_SHIRQ is for shared interrupt support on PCI and EISA. | 16 | * SA_SHIRQ is for shared interrupt support on PCI and EISA. |
| 17 | * SA_PROBEIRQ is set by callers when they expect sharing mismatches to occur | ||
| 17 | */ | 18 | */ |
| 18 | #define SA_PROBE SA_ONESHOT | ||
| 19 | #define SA_SAMPLE_RANDOM SA_RESTART | 19 | #define SA_SAMPLE_RANDOM SA_RESTART |
| 20 | #define SA_SHIRQ 0x04000000 | 20 | #define SA_SHIRQ 0x04000000 |
| 21 | #define SA_PROBEIRQ 0x08000000 | ||
| 22 | |||
| 21 | /* | 23 | /* |
| 22 | * As above, these correspond to the IORESOURCE_IRQ_* defines in | 24 | * As above, these correspond to the IORESOURCE_IRQ_* defines in |
| 23 | * linux/ioport.h to select the interrupt line behaviour. When | 25 | * linux/ioport.h to select the interrupt line behaviour. When |
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c index ac766ad573e8..1279e3499534 100644 --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c | |||
| @@ -246,8 +246,10 @@ int setup_irq(unsigned int irq, struct irqaction * new) | |||
| 246 | 246 | ||
| 247 | mismatch: | 247 | mismatch: |
| 248 | spin_unlock_irqrestore(&desc->lock, flags); | 248 | spin_unlock_irqrestore(&desc->lock, flags); |
| 249 | printk(KERN_ERR "%s: irq handler mismatch\n", __FUNCTION__); | 249 | if (!(new->flags & SA_PROBEIRQ)) { |
| 250 | dump_stack(); | 250 | printk(KERN_ERR "%s: irq handler mismatch\n", __FUNCTION__); |
| 251 | dump_stack(); | ||
| 252 | } | ||
| 251 | return -EBUSY; | 253 | return -EBUSY; |
| 252 | } | 254 | } |
| 253 | 255 | ||
