diff options
Diffstat (limited to 'kernel/irq/irqdomain.c')
| -rw-r--r-- | kernel/irq/irqdomain.c | 20 | 
1 files changed, 17 insertions, 3 deletions
| diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c index 96f3a1d9c37..5a83dde8ca0 100644 --- a/kernel/irq/irqdomain.c +++ b/kernel/irq/irqdomain.c @@ -462,9 +462,23 @@ int irq_domain_associate_many(struct irq_domain *domain, unsigned int irq_base,  		if (domain->ops->map) {  			ret = domain->ops->map(domain, virq, hwirq);  			if (ret != 0) { -				pr_err("irq-%i==>hwirq-0x%lx mapping failed: %d\n", -				       virq, hwirq, ret); -				WARN_ON(1); +				/* +				 * If map() returns -EPERM, this interrupt is protected +				 * by the firmware or some other service and shall not +				 * be mapped. +				 * +				 * Since on some platforms we blindly try to map everything +				 * we end up with a log full of backtraces. +				 * +				 * So instead, we silently fail on -EPERM, it is the +				 * responsibility of the PIC driver to display a relevant +				 * message if needed. +				 */ +				if (ret != -EPERM) { +					pr_err("irq-%i==>hwirq-0x%lx mapping failed: %d\n", +					       virq, hwirq, ret); +					WARN_ON(1); +				}  				irq_data->domain = NULL;  				irq_data->hwirq = 0;  				goto err_unmap; | 
