[POWERPC] Split virq setup logic out into irq_setup_virq()
A future patch will need the logic at the end of irq_create_mapping() which setups a virq and installs it in the irq_map. So split it out into a new function irq_setup_virq(). Signed-off-by: Michael Ellerman <michael@ellerman.id.au> Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:
		
							parent
							
								
									35923f12e4
								
							
						
					
					
						commit
						6fde40f3f1
					
				| @ -596,6 +596,25 @@ static void irq_radix_rdunlock(unsigned long flags) | ||||
| 	local_irq_restore(flags); | ||||
| } | ||||
| 
 | ||||
| static int irq_setup_virq(struct irq_host *host, unsigned int virq, | ||||
| 			    irq_hw_number_t hwirq) | ||||
| { | ||||
| 	/* Clear IRQ_NOREQUEST flag */ | ||||
| 	get_irq_desc(virq)->status &= ~IRQ_NOREQUEST; | ||||
| 
 | ||||
| 	/* map it */ | ||||
| 	smp_wmb(); | ||||
| 	irq_map[virq].hwirq = hwirq; | ||||
| 	smp_mb(); | ||||
| 
 | ||||
| 	if (host->ops->map(host, virq, hwirq)) { | ||||
| 		pr_debug("irq: -> mapping failed, freeing\n"); | ||||
| 		irq_free_virt(virq, 1); | ||||
| 		return -1; | ||||
| 	} | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| unsigned int irq_create_mapping(struct irq_host *host, | ||||
| 				irq_hw_number_t hwirq) | ||||
| @ -644,18 +663,9 @@ unsigned int irq_create_mapping(struct irq_host *host, | ||||
| 	} | ||||
| 	pr_debug("irq: -> obtained virq %d\n", virq); | ||||
| 
 | ||||
| 	/* Clear IRQ_NOREQUEST flag */ | ||||
| 	get_irq_desc(virq)->status &= ~IRQ_NOREQUEST; | ||||
| 
 | ||||
| 	/* map it */ | ||||
| 	smp_wmb(); | ||||
| 	irq_map[virq].hwirq = hwirq; | ||||
| 	smp_mb(); | ||||
| 	if (host->ops->map(host, virq, hwirq)) { | ||||
| 		pr_debug("irq: -> mapping failed, freeing\n"); | ||||
| 		irq_free_virt(virq, 1); | ||||
| 	if (irq_setup_virq(host, virq, hwirq)) | ||||
| 		return NO_IRQ; | ||||
| 	} | ||||
| 
 | ||||
| 	return virq; | ||||
| } | ||||
| EXPORT_SYMBOL_GPL(irq_create_mapping); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user