genirq: Uninline and sanity check generic_handle_irq()
generic_handle_irq() is missing a NULL pointer check for the result of irq_to_desc. This was a not a big problem, but we want to expose it to drivers, so we better have sanity checks in place. Add a return value as well, which indicates that the irq number was valid and the handler was invoked. Based on the pure code move from Jonathan Cameron. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: Jonathan Cameron <jic23@cam.ac.uk>
This commit is contained in:
		
					parent
					
						
							
								fe05143484
							
						
					
				
			
			
				commit
				
					
						fe12bc2c99
					
				
			
		
					 2 changed files with 16 additions and 4 deletions
				
			
		|  | @ -111,10 +111,7 @@ static inline void generic_handle_irq_desc(unsigned int irq, struct irq_desc *de | ||||||
| 	desc->handle_irq(irq, desc); | 	desc->handle_irq(irq, desc); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static inline void generic_handle_irq(unsigned int irq) | int generic_handle_irq(unsigned int irq); | ||||||
| { |  | ||||||
| 	generic_handle_irq_desc(irq, irq_to_desc(irq)); |  | ||||||
| } |  | ||||||
| 
 | 
 | ||||||
| /* Test to see if a driver has successfully requested an irq */ | /* Test to see if a driver has successfully requested an irq */ | ||||||
| static inline int irq_has_action(unsigned int irq) | static inline int irq_has_action(unsigned int irq) | ||||||
|  |  | ||||||
|  | @ -290,6 +290,21 @@ static int irq_expand_nr_irqs(unsigned int nr) | ||||||
| 
 | 
 | ||||||
| #endif /* !CONFIG_SPARSE_IRQ */ | #endif /* !CONFIG_SPARSE_IRQ */ | ||||||
| 
 | 
 | ||||||
|  | /**
 | ||||||
|  |  * generic_handle_irq - Invoke the handler for a particular irq | ||||||
|  |  * @irq:	The irq number to handle | ||||||
|  |  * | ||||||
|  |  */ | ||||||
|  | int generic_handle_irq(unsigned int irq) | ||||||
|  | { | ||||||
|  | 	struct irq_desc *desc = irq_to_desc(irq); | ||||||
|  | 
 | ||||||
|  | 	if (!desc) | ||||||
|  | 		return -EINVAL; | ||||||
|  | 	generic_handle_irq_desc(irq, desc); | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| /* Dynamic interrupt handling */ | /* Dynamic interrupt handling */ | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Thomas Gleixner
				Thomas Gleixner