Skip to content

Commit

Permalink
powerpc/mpic: Fix allocation of reverse-map for multi-ISU mpics
Browse files Browse the repository at this point in the history
When using a multi-ISU MPIC, we can interrupts up to
isu_size * MPIC_MAX_ISU, not just isu_size, so allocate
the right size reverse map.

Without this, the code will constantly fallback to
a linear search.

Signed-off-by: Benjamin Herrenschmidt <[email protected]>
  • Loading branch information
ozbenh committed Feb 27, 2012
1 parent f851013 commit fe83364
Showing 1 changed file with 6 additions and 2 deletions.
8 changes: 6 additions & 2 deletions arch/powerpc/sysdev/mpic.c
Original file line number Diff line number Diff line change
Expand Up @@ -1331,9 +1331,13 @@ struct mpic * __init mpic_alloc(struct device_node *node,
/*
* By default, the last source number comes from the MPIC, but the
* device-tree and board support code can override it on buggy hw.
* If we get passed an isu_size (multi-isu MPIC) then we use that
* as a default instead of the value read from the HW.
*/
last_irq = (greg_feature & MPIC_GREG_FEATURE_LAST_SRC_MASK)
>> MPIC_GREG_FEATURE_LAST_SRC_SHIFT;
>> MPIC_GREG_FEATURE_LAST_SRC_SHIFT;
if (isu_size)
last_irq = isu_size * MPIC_MAX_ISU - 1;
of_property_read_u32(mpic->node, "last-interrupt-source", &last_irq);
if (irq_count)
last_irq = irq_count - 1;
Expand All @@ -1352,7 +1356,7 @@ struct mpic * __init mpic_alloc(struct device_node *node,
mpic->isu_mask = (1 << mpic->isu_shift) - 1;

mpic->irqhost = irq_alloc_host(mpic->node, IRQ_HOST_MAP_LINEAR,
mpic->isu_size, &mpic_host_ops,
last_irq + 1, &mpic_host_ops,
intvec_top + 1);

/*
Expand Down

0 comments on commit fe83364

Please sign in to comment.