forked from mirrors/linux
		
	platform: finally disallow IRQ0 in platform_get_irq() and its ilk
The commita85a6c86c2("driver core: platform: Clarify that IRQ 0 is invalid") only calls WARN() when IRQ0 is about to be returned, however using IRQ0 is considered invalid (according to Linus) outside the arch/ code where it's used by the i8253 drivers. Many driver subsystems treat 0 specially (e.g. as an indication of the polling mode by libata), so the users of platform_get_irq[_byname]() in them would have to filter out IRQ0 explicitly and this (quite obviously) doesn't scale... Let's finally get this straight and return -EINVAL instead of IRQ0! Fixes:a85a6c86c2("driver core: platform: Clarify that IRQ 0 is invalid") Acked-by: Marc Zyngier <maz@kernel.org> Signed-off-by: Sergey Shtylyov <s.shtylyov@omp.ru> Link: https://lore.kernel.org/r/025679e1-1f0a-ae4b-4369-01164f691511@omp.ru Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
		
							parent
							
								
									a72b6dff40
								
							
						
					
					
						commit
						ce753ad154
					
				
					 1 changed files with 4 additions and 2 deletions
				
			
		| 
						 | 
					@ -231,7 +231,8 @@ int platform_get_irq_optional(struct platform_device *dev, unsigned int num)
 | 
				
			||||||
out_not_found:
 | 
					out_not_found:
 | 
				
			||||||
	ret = -ENXIO;
 | 
						ret = -ENXIO;
 | 
				
			||||||
out:
 | 
					out:
 | 
				
			||||||
	WARN(ret == 0, "0 is an invalid IRQ number\n");
 | 
						if (WARN(!ret, "0 is an invalid IRQ number\n"))
 | 
				
			||||||
 | 
							return -EINVAL;
 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
EXPORT_SYMBOL_GPL(platform_get_irq_optional);
 | 
					EXPORT_SYMBOL_GPL(platform_get_irq_optional);
 | 
				
			||||||
| 
						 | 
					@ -446,7 +447,8 @@ static int __platform_get_irq_byname(struct platform_device *dev,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	r = platform_get_resource_byname(dev, IORESOURCE_IRQ, name);
 | 
						r = platform_get_resource_byname(dev, IORESOURCE_IRQ, name);
 | 
				
			||||||
	if (r) {
 | 
						if (r) {
 | 
				
			||||||
		WARN(r->start == 0, "0 is an invalid IRQ number\n");
 | 
							if (WARN(!r->start, "0 is an invalid IRQ number\n"))
 | 
				
			||||||
 | 
								return -EINVAL;
 | 
				
			||||||
		return r->start;
 | 
							return r->start;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue