diff options
Diffstat (limited to 'kernel/irq/irqdomain.c')
| -rw-r--r-- | kernel/irq/irqdomain.c | 9 | 
1 files changed, 7 insertions, 2 deletions
diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c index 5a83dde8ca0..54a4d522323 100644 --- a/kernel/irq/irqdomain.c +++ b/kernel/irq/irqdomain.c @@ -143,7 +143,10 @@ static unsigned int irq_domain_legacy_revmap(struct irq_domain *domain,   * irq_domain_add_simple() - Allocate and register a simple irq_domain.   * @of_node: pointer to interrupt controller's device tree node.   * @size: total number of irqs in mapping - * @first_irq: first number of irq block assigned to the domain + * @first_irq: first number of irq block assigned to the domain, + *	pass zero to assign irqs on-the-fly. This will result in a + *	linear IRQ domain so it is important to use irq_create_mapping() + *	for each used IRQ, especially when SPARSE_IRQ is enabled.   * @ops: map/unmap domain callbacks   * @host_data: Controller private data pointer   * @@ -191,6 +194,7 @@ struct irq_domain *irq_domain_add_simple(struct device_node *of_node,  	/* A linear domain is the default */  	return irq_domain_add_linear(of_node, size, ops, host_data);  } +EXPORT_SYMBOL_GPL(irq_domain_add_simple);  /**   * irq_domain_add_legacy() - Allocate and register a legacy revmap irq_domain. @@ -397,11 +401,12 @@ static void irq_domain_disassociate_many(struct irq_domain *domain,  	while (count--) {  		int irq = irq_base + count;  		struct irq_data *irq_data = irq_get_irq_data(irq); -		irq_hw_number_t hwirq = irq_data->hwirq; +		irq_hw_number_t hwirq;  		if (WARN_ON(!irq_data || irq_data->domain != domain))  			continue; +		hwirq = irq_data->hwirq;  		irq_set_status_flags(irq, IRQ_NOREQUEST);  		/* remove chip and handler */  |