Re: pcmcia oops on 2.6.17-rc[12]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, 23 Apr 2006 15:02:06 -0700 Andrew Morton wrote:

> From: Andrew Morton <[email protected]>
> 
> - 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 <[email protected]>
> ---
> 
>  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 [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux