lkml.org 
[lkml]   [2006]   [Apr]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: pcmcia oops on 2.6.17-rc[12]
On Sun, 23 Apr 2006 15:02:06 -0700 Andrew Morton wrote:

> From: Andrew Morton <akpm@osdl.org>
>
> - 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>
> ---
>
> drivers/pcmcia/i82365.c | 7 ++++---
> include/asm-xtensa/signal.h | 2 +-
> include/linux/signal.h | 4 +++-
> kernel/irq/manage.c | 6 ++++--
> 4 files changed, 12 insertions(+), 7 deletions(-)
>
> diff -puN include/linux/signal.h~request_irq-remove-warnings-from-irq-probing include/linux/signal.h
> --- devel/include/linux/signal.h~request_irq-remove-warnings-from-irq-probing 2006-04-23 14:55:13.000000000 -0700
> +++ devel-akpm/include/linux/signal.h 2006-04-23 14:56:19.000000000 -0700
> @@ -14,10 +14,12 @@
> *
> * SA_INTERRUPT is also used by the irq handling routines.
> * SA_SHIRQ is for shared interrupt support on PCI and EISA.
> + * SA_PROBEIRQ is set by callers when they expect sharing mismatches to occur
> */
> -#define SA_PROBE SA_ONESHOT
> #define SA_SAMPLE_RANDOM SA_RESTART
> #define SA_SHIRQ 0x04000000
> +#define SA_PROBEIRQ 0x08000000

Is SA_PROBE_IRQ something different or a typo (below)?

> +
> /*
> * As above, these correspond to the IORESOURCE_IRQ_* defines in
> * linux/ioport.h to select the interrupt line behaviour. When
> diff -puN kernel/irq/manage.c~request_irq-remove-warnings-from-irq-probing kernel/irq/manage.c
> --- devel/kernel/irq/manage.c~request_irq-remove-warnings-from-irq-probing 2006-04-23 14:55:13.000000000 -0700
> +++ devel-akpm/kernel/irq/manage.c 2006-04-23 14:57:01.000000000 -0700
> @@ -246,8 +246,10 @@ int setup_irq(unsigned int irq, struct i
>
> mismatch:
> spin_unlock_irqrestore(&desc->lock, flags);
> - printk(KERN_ERR "%s: irq handler mismatch\n", __FUNCTION__);
> - dump_stack();
> + if (!(new->flags & SA_PROBE_IRQ)) {
> + printk(KERN_ERR "%s: irq handler mismatch\n", __FUNCTION__);
> + dump_stack();
> + }
> return -EBUSY;
> }
>
> diff -puN drivers/pcmcia/i82365.c~request_irq-remove-warnings-from-irq-probing drivers/pcmcia/i82365.c
> --- devel/drivers/pcmcia/i82365.c~request_irq-remove-warnings-from-irq-probing 2006-04-23 14:55:13.000000000 -0700
> +++ devel-akpm/drivers/pcmcia/i82365.c 2006-04-23 14:58:14.000000000 -0700
> @@ -509,7 +509,8 @@ static irqreturn_t i365_count_irq(int ir
> static u_int __init test_irq(u_short sock, int irq)
> {
> debug(2, " testing ISA irq %d\n", irq);
> - if (request_irq(irq, i365_count_irq, 0, "scan", i365_count_irq) != 0)
> + if (request_irq(irq, i365_count_irq, SA_PROBEIRQ, "scan",
> + i365_count_irq) != 0)
> return 1;
> irq_hits = 0; irq_sock = sock;
> msleep(10);
> @@ -561,7 +562,7 @@ static u_int __init isa_scan(u_short soc
> } else {
> /* Fallback: just find interrupts that aren't in use */
> for (i = 0; i < 16; i++)
> - if ((mask0 & (1 << i)) && (_check_irq(i, 0) == 0))
> + if ((mask0 & (1 << i)) && (_check_irq(i, SA_PROBEIRQ) == 0))
> mask1 |= (1 << i);
> printk("default");
> /* If scan failed, default to polled status */
> @@ -725,7 +726,7 @@ static void __init add_pcic(int ns, int
> u_int cs_mask = mask & ((cs_irq) ? (1<<cs_irq) : ~(1<<12));
> for (cs_irq = 15; cs_irq > 0; cs_irq--)
> if ((cs_mask & (1 << cs_irq)) &&
> - (_check_irq(cs_irq, 0) == 0))
> + (_check_irq(cs_irq, SA_PROBEIRQ) == 0))
> break;
> if (cs_irq) {
> grab_irq = 1;
> diff -puN include/asm-xtensa/signal.h~request_irq-remove-warnings-from-irq-probing include/asm-xtensa/signal.h
> --- devel/include/asm-xtensa/signal.h~request_irq-remove-warnings-from-irq-probing 2006-04-23 14:59:43.000000000 -0700
> +++ devel-akpm/include/asm-xtensa/signal.h 2006-04-23 15:00:07.000000000 -0700
> @@ -118,9 +118,9 @@ typedef struct {
> * SA_INTERRUPT is also used by the irq handling routines.
> * SA_SHIRQ is for shared interrupt support on PCI and EISA.
> */
> -#define SA_PROBE SA_ONESHOT
> #define SA_SAMPLE_RANDOM SA_RESTART
> #define SA_SHIRQ 0x04000000
> +#define SA_PROBEIRQ 0x08000000
> #endif
>
> #define SIG_BLOCK 0 /* for blocking signals */


---
~Randy
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
\
 
 \ /
  Last update: 2006-04-24 00:15    [W:0.418 / U:0.248 seconds]
©2003-2011 Jasper Spaans. Advertise on this site