irq_domain: remove NO_IRQ from irq domain code
zero always means no irq when using irq domains. Get rid of the NO_IRQ references. Signed-off-by: Grant Likely <grant.likely@secretlab.ca> Cc: Rob Herring <rob.herring@calxeda.com> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Milton Miller <miltonm@bga.com> Tested-by: Olof Johansson <olof@lixom.net>
This commit is contained in:
parent
cc79ca691c
commit
03848373ea
|
@ -108,7 +108,7 @@ struct irq_domain *irq_alloc_host(struct device_node *of_node,
|
||||||
case IRQ_DOMAIN_MAP_LINEAR:
|
case IRQ_DOMAIN_MAP_LINEAR:
|
||||||
rmap = (unsigned int *)(host + 1);
|
rmap = (unsigned int *)(host + 1);
|
||||||
for (i = 0; i < revmap_arg; i++)
|
for (i = 0; i < revmap_arg; i++)
|
||||||
rmap[i] = NO_IRQ;
|
rmap[i] = 0;
|
||||||
host->revmap_data.linear.size = revmap_arg;
|
host->revmap_data.linear.size = revmap_arg;
|
||||||
host->revmap_data.linear.revmap = rmap;
|
host->revmap_data.linear.revmap = rmap;
|
||||||
break;
|
break;
|
||||||
|
@ -218,9 +218,9 @@ unsigned int irq_create_direct_mapping(struct irq_domain *host)
|
||||||
WARN_ON(host->revmap_type != IRQ_DOMAIN_MAP_NOMAP);
|
WARN_ON(host->revmap_type != IRQ_DOMAIN_MAP_NOMAP);
|
||||||
|
|
||||||
virq = irq_alloc_desc_from(1, 0);
|
virq = irq_alloc_desc_from(1, 0);
|
||||||
if (virq == NO_IRQ) {
|
if (!virq) {
|
||||||
pr_debug("irq: create_direct virq allocation failed\n");
|
pr_debug("irq: create_direct virq allocation failed\n");
|
||||||
return NO_IRQ;
|
return 0;
|
||||||
}
|
}
|
||||||
if (virq >= irq_virq_count) {
|
if (virq >= irq_virq_count) {
|
||||||
pr_err("ERROR: no free irqs available below %i maximum\n",
|
pr_err("ERROR: no free irqs available below %i maximum\n",
|
||||||
|
@ -233,7 +233,7 @@ unsigned int irq_create_direct_mapping(struct irq_domain *host)
|
||||||
|
|
||||||
if (irq_setup_virq(host, virq, virq)) {
|
if (irq_setup_virq(host, virq, virq)) {
|
||||||
irq_free_desc(virq);
|
irq_free_desc(virq);
|
||||||
return NO_IRQ;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return virq;
|
return virq;
|
||||||
|
@ -263,13 +263,13 @@ unsigned int irq_create_mapping(struct irq_domain *host,
|
||||||
printk(KERN_WARNING "irq_create_mapping called for"
|
printk(KERN_WARNING "irq_create_mapping called for"
|
||||||
" NULL host, hwirq=%lx\n", hwirq);
|
" NULL host, hwirq=%lx\n", hwirq);
|
||||||
WARN_ON(1);
|
WARN_ON(1);
|
||||||
return NO_IRQ;
|
return 0;
|
||||||
}
|
}
|
||||||
pr_debug("irq: -> using host @%p\n", host);
|
pr_debug("irq: -> using host @%p\n", host);
|
||||||
|
|
||||||
/* Check if mapping already exists */
|
/* Check if mapping already exists */
|
||||||
virq = irq_find_mapping(host, hwirq);
|
virq = irq_find_mapping(host, hwirq);
|
||||||
if (virq != NO_IRQ) {
|
if (virq) {
|
||||||
pr_debug("irq: -> existing mapping on virq %d\n", virq);
|
pr_debug("irq: -> existing mapping on virq %d\n", virq);
|
||||||
return virq;
|
return virq;
|
||||||
}
|
}
|
||||||
|
@ -279,7 +279,7 @@ unsigned int irq_create_mapping(struct irq_domain *host,
|
||||||
/* Handle legacy */
|
/* Handle legacy */
|
||||||
virq = (unsigned int)hwirq;
|
virq = (unsigned int)hwirq;
|
||||||
if (virq == 0 || virq >= NUM_ISA_INTERRUPTS)
|
if (virq == 0 || virq >= NUM_ISA_INTERRUPTS)
|
||||||
return NO_IRQ;
|
return 0;
|
||||||
return virq;
|
return virq;
|
||||||
} else {
|
} else {
|
||||||
/* Allocate a virtual interrupt number */
|
/* Allocate a virtual interrupt number */
|
||||||
|
@ -289,16 +289,16 @@ unsigned int irq_create_mapping(struct irq_domain *host,
|
||||||
virq = irq_alloc_desc_from(hint, 0);
|
virq = irq_alloc_desc_from(hint, 0);
|
||||||
if (!virq)
|
if (!virq)
|
||||||
virq = irq_alloc_desc_from(1, 0);
|
virq = irq_alloc_desc_from(1, 0);
|
||||||
if (virq == NO_IRQ) {
|
if (!virq) {
|
||||||
pr_debug("irq: -> virq allocation failed\n");
|
pr_debug("irq: -> virq allocation failed\n");
|
||||||
return NO_IRQ;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (irq_setup_virq(host, virq, hwirq)) {
|
if (irq_setup_virq(host, virq, hwirq)) {
|
||||||
if (host->revmap_type != IRQ_DOMAIN_MAP_LEGACY)
|
if (host->revmap_type != IRQ_DOMAIN_MAP_LEGACY)
|
||||||
irq_free_desc(virq);
|
irq_free_desc(virq);
|
||||||
return NO_IRQ;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
pr_debug("irq: irq %lu on host %s mapped to virtual irq %u\n",
|
pr_debug("irq: irq %lu on host %s mapped to virtual irq %u\n",
|
||||||
|
@ -323,7 +323,7 @@ unsigned int irq_create_of_mapping(struct device_node *controller,
|
||||||
if (host == NULL) {
|
if (host == NULL) {
|
||||||
printk(KERN_WARNING "irq: no irq host found for %s !\n",
|
printk(KERN_WARNING "irq: no irq host found for %s !\n",
|
||||||
controller->full_name);
|
controller->full_name);
|
||||||
return NO_IRQ;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If host has no translation, then we assume interrupt line */
|
/* If host has no translation, then we assume interrupt line */
|
||||||
|
@ -332,12 +332,12 @@ unsigned int irq_create_of_mapping(struct device_node *controller,
|
||||||
else {
|
else {
|
||||||
if (host->ops->xlate(host, controller, intspec, intsize,
|
if (host->ops->xlate(host, controller, intspec, intsize,
|
||||||
&hwirq, &type))
|
&hwirq, &type))
|
||||||
return NO_IRQ;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Create mapping */
|
/* Create mapping */
|
||||||
virq = irq_create_mapping(host, hwirq);
|
virq = irq_create_mapping(host, hwirq);
|
||||||
if (virq == NO_IRQ)
|
if (!virq)
|
||||||
return virq;
|
return virq;
|
||||||
|
|
||||||
/* Set type if specified and different than the current one */
|
/* Set type if specified and different than the current one */
|
||||||
|
@ -358,7 +358,7 @@ void irq_dispose_mapping(unsigned int virq)
|
||||||
struct irq_domain *host;
|
struct irq_domain *host;
|
||||||
irq_hw_number_t hwirq;
|
irq_hw_number_t hwirq;
|
||||||
|
|
||||||
if (virq == NO_IRQ || !irq_data)
|
if (!virq || !irq_data)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
host = irq_data->domain;
|
host = irq_data->domain;
|
||||||
|
@ -387,7 +387,7 @@ void irq_dispose_mapping(unsigned int virq)
|
||||||
switch(host->revmap_type) {
|
switch(host->revmap_type) {
|
||||||
case IRQ_DOMAIN_MAP_LINEAR:
|
case IRQ_DOMAIN_MAP_LINEAR:
|
||||||
if (hwirq < host->revmap_data.linear.size)
|
if (hwirq < host->revmap_data.linear.size)
|
||||||
host->revmap_data.linear.revmap[hwirq] = NO_IRQ;
|
host->revmap_data.linear.revmap[hwirq] = 0;
|
||||||
break;
|
break;
|
||||||
case IRQ_DOMAIN_MAP_TREE:
|
case IRQ_DOMAIN_MAP_TREE:
|
||||||
mutex_lock(&revmap_trees_mutex);
|
mutex_lock(&revmap_trees_mutex);
|
||||||
|
@ -422,7 +422,7 @@ unsigned int irq_find_mapping(struct irq_domain *host,
|
||||||
if (host == NULL)
|
if (host == NULL)
|
||||||
host = irq_default_host;
|
host = irq_default_host;
|
||||||
if (host == NULL)
|
if (host == NULL)
|
||||||
return NO_IRQ;
|
return 0;
|
||||||
|
|
||||||
/* legacy -> bail early */
|
/* legacy -> bail early */
|
||||||
if (host->revmap_type == IRQ_DOMAIN_MAP_LEGACY)
|
if (host->revmap_type == IRQ_DOMAIN_MAP_LEGACY)
|
||||||
|
@ -440,7 +440,7 @@ unsigned int irq_find_mapping(struct irq_domain *host,
|
||||||
if (i >= irq_virq_count)
|
if (i >= irq_virq_count)
|
||||||
i = 1;
|
i = 1;
|
||||||
} while(i != hint);
|
} while(i != hint);
|
||||||
return NO_IRQ;
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(irq_find_mapping);
|
EXPORT_SYMBOL_GPL(irq_find_mapping);
|
||||||
|
|
||||||
|
@ -493,7 +493,7 @@ void irq_radix_revmap_insert(struct irq_domain *host, unsigned int virq,
|
||||||
if (WARN_ON(host->revmap_type != IRQ_DOMAIN_MAP_TREE))
|
if (WARN_ON(host->revmap_type != IRQ_DOMAIN_MAP_TREE))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (virq != NO_IRQ) {
|
if (virq) {
|
||||||
mutex_lock(&revmap_trees_mutex);
|
mutex_lock(&revmap_trees_mutex);
|
||||||
radix_tree_insert(&host->revmap_data.tree, hwirq, irq_data);
|
radix_tree_insert(&host->revmap_data.tree, hwirq, irq_data);
|
||||||
mutex_unlock(&revmap_trees_mutex);
|
mutex_unlock(&revmap_trees_mutex);
|
||||||
|
@ -527,7 +527,7 @@ unsigned int irq_linear_revmap(struct irq_domain *host,
|
||||||
return irq_find_mapping(host, hwirq);
|
return irq_find_mapping(host, hwirq);
|
||||||
|
|
||||||
/* Fill up revmap with slow path if no mapping found */
|
/* Fill up revmap with slow path if no mapping found */
|
||||||
if (unlikely(revmap[hwirq] == NO_IRQ))
|
if (unlikely(!revmap[hwirq]))
|
||||||
revmap[hwirq] = irq_find_mapping(host, hwirq);
|
revmap[hwirq] = irq_find_mapping(host, hwirq);
|
||||||
|
|
||||||
return revmap[hwirq];
|
return revmap[hwirq];
|
||||||
|
|
Loading…
Reference in New Issue