irqdomain: Allow quiet failure mode
Some interrupt controllers refuse to map interrupts marked as "protected" by firwmare. Since we try to map everyting in the device-tree on some platforms, we end up with a lot of nasty WARN's in the boot log for what is a normal situation on those machines. This defines a specific return code (-EPERM) from the host map() callback which cause irqdomain to fail silently. MPIC is updated to return this when hitting a protected source printing only a single line message for diagnostic purposes. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
@@ -1001,8 +1001,12 @@ static int mpic_host_map(struct irq_domain *h, unsigned int virq,
|
||||
|
||||
if (hw == mpic->spurious_vec)
|
||||
return -EINVAL;
|
||||
if (mpic->protected && test_bit(hw, mpic->protected))
|
||||
return -EINVAL;
|
||||
if (mpic->protected && test_bit(hw, mpic->protected)) {
|
||||
pr_warning("mpic: Mapping of source 0x%x failed, "
|
||||
"source protected by firmware !\n",\
|
||||
(unsigned int)hw);
|
||||
return -EPERM;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
else if (hw >= mpic->ipi_vecs[0]) {
|
||||
@@ -1029,8 +1033,12 @@ static int mpic_host_map(struct irq_domain *h, unsigned int virq,
|
||||
if (mpic_map_error_int(mpic, virq, hw))
|
||||
return 0;
|
||||
|
||||
if (hw >= mpic->num_sources)
|
||||
if (hw >= mpic->num_sources) {
|
||||
pr_warning("mpic: Mapping of source 0x%x failed, "
|
||||
"source out of range !\n",\
|
||||
(unsigned int)hw);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
mpic_msi_reserve_hwirq(mpic, hw);
|
||||
|
||||
|
Reference in New Issue
Block a user