forked from mirrors/linux
		
	genirq: Remove IRQF_DISABLED from core code
Remove all code which is related to IRQF_DISABLED from the core kernel code. IRQF_DISABLED still exists as a flag, but becomes a NOOP and will be removed after a grace period. That way we can easily revert to the previous behaviour by just restoring the core code. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Alan Cox <alan@lxorguk.ukuu.org.uk> Cc: Andi Kleen <andi@firstfloor.org> Cc: David Miller <davem@davemloft.net> Cc: Greg Kroah-Hartman <gregkh@suse.de> Cc: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Linus Torvalds <torvalds@osdl.org> LKML-Reference: <20100326000405.991244690@linutronix.de>
This commit is contained in:
		
							parent
							
								
									e58aa3d2d0
								
							
						
					
					
						commit
						6932bf37be
					
				
					 3 changed files with 9 additions and 31 deletions
				
			
		|  | @ -589,3 +589,10 @@ Why:	Useful in 2003, implementation is a hack. | ||||||
| 	Generally invoked by accident today. | 	Generally invoked by accident today. | ||||||
| 	Seen as doing more harm than good. | 	Seen as doing more harm than good. | ||||||
| Who:	Len Brown <len.brown@intel.com> | Who:	Len Brown <len.brown@intel.com> | ||||||
|  | 
 | ||||||
|  | ---------------------------- | ||||||
|  | 
 | ||||||
|  | What:	IRQF_DISABLED | ||||||
|  | When:	2.6.36 | ||||||
|  | Why:	The flag is a NOOP as we run interrupt handlers with interrupts disabled | ||||||
|  | Who:	Thomas Gleixner <tglx@linutronix.de> | ||||||
|  |  | ||||||
|  | @ -39,7 +39,8 @@ | ||||||
|  * These flags used only by the kernel as part of the |  * These flags used only by the kernel as part of the | ||||||
|  * irq handling routines. |  * irq handling routines. | ||||||
|  * |  * | ||||||
|  * IRQF_DISABLED - keep irqs disabled when calling the action handler |  * IRQF_DISABLED - keep irqs disabled when calling the action handler. | ||||||
|  |  *                 DEPRECATED. This flag is a NOOP and scheduled to be removed | ||||||
|  * IRQF_SAMPLE_RANDOM - irq is used to feed the random generator |  * IRQF_SAMPLE_RANDOM - irq is used to feed the random generator | ||||||
|  * IRQF_SHARED - allow sharing the irq among several devices |  * IRQF_SHARED - allow sharing the irq among several devices | ||||||
|  * IRQF_PROBE_SHARED - set by callers when they expect sharing mismatches to occur |  * IRQF_PROBE_SHARED - set by callers when they expect sharing mismatches to occur | ||||||
|  |  | ||||||
|  | @ -757,16 +757,6 @@ __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new) | ||||||
| 		if (new->flags & IRQF_ONESHOT) | 		if (new->flags & IRQF_ONESHOT) | ||||||
| 			desc->status |= IRQ_ONESHOT; | 			desc->status |= IRQ_ONESHOT; | ||||||
| 
 | 
 | ||||||
| 		/*
 |  | ||||||
| 		 * Force MSI interrupts to run with interrupts |  | ||||||
| 		 * disabled. The multi vector cards can cause stack |  | ||||||
| 		 * overflows due to nested interrupts when enough of |  | ||||||
| 		 * them are directed to a core and fire at the same |  | ||||||
| 		 * time. |  | ||||||
| 		 */ |  | ||||||
| 		if (desc->msi_desc) |  | ||||||
| 			new->flags |= IRQF_DISABLED; |  | ||||||
| 
 |  | ||||||
| 		if (!(desc->status & IRQ_NOAUTOEN)) { | 		if (!(desc->status & IRQ_NOAUTOEN)) { | ||||||
| 			desc->depth = 0; | 			desc->depth = 0; | ||||||
| 			desc->status &= ~IRQ_DISABLED; | 			desc->status &= ~IRQ_DISABLED; | ||||||
|  | @ -1027,7 +1017,6 @@ EXPORT_SYMBOL(free_irq); | ||||||
|  *	Flags: |  *	Flags: | ||||||
|  * |  * | ||||||
|  *	IRQF_SHARED		Interrupt is shared |  *	IRQF_SHARED		Interrupt is shared | ||||||
|  *	IRQF_DISABLED	Disable local interrupts while processing |  | ||||||
|  *	IRQF_SAMPLE_RANDOM	The interrupt can be used for entropy |  *	IRQF_SAMPLE_RANDOM	The interrupt can be used for entropy | ||||||
|  *	IRQF_TRIGGER_*		Specify active edge(s) or level |  *	IRQF_TRIGGER_*		Specify active edge(s) or level | ||||||
|  * |  * | ||||||
|  | @ -1040,25 +1029,6 @@ int request_threaded_irq(unsigned int irq, irq_handler_t handler, | ||||||
| 	struct irq_desc *desc; | 	struct irq_desc *desc; | ||||||
| 	int retval; | 	int retval; | ||||||
| 
 | 
 | ||||||
| 	/*
 |  | ||||||
| 	 * handle_IRQ_event() always ignores IRQF_DISABLED except for |  | ||||||
| 	 * the _first_ irqaction (sigh).  That can cause oopsing, but |  | ||||||
| 	 * the behavior is classified as "will not fix" so we need to |  | ||||||
| 	 * start nudging drivers away from using that idiom. |  | ||||||
| 	 */ |  | ||||||
| 	if ((irqflags & (IRQF_SHARED|IRQF_DISABLED)) == |  | ||||||
| 					(IRQF_SHARED|IRQF_DISABLED)) { |  | ||||||
| 		pr_warning( |  | ||||||
| 		  "IRQ %d/%s: IRQF_DISABLED is not guaranteed on shared IRQs\n", |  | ||||||
| 			irq, devname); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| #ifdef CONFIG_LOCKDEP |  | ||||||
| 	/*
 |  | ||||||
| 	 * Lockdep wants atomic interrupt handlers: |  | ||||||
| 	 */ |  | ||||||
| 	irqflags |= IRQF_DISABLED; |  | ||||||
| #endif |  | ||||||
| 	/*
 | 	/*
 | ||||||
| 	 * Sanity-check: shared interrupts must pass in a real dev-ID, | 	 * Sanity-check: shared interrupts must pass in a real dev-ID, | ||||||
| 	 * otherwise we'll have trouble later trying to figure out | 	 * otherwise we'll have trouble later trying to figure out | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Thomas Gleixner
						Thomas Gleixner