On Wed, May 20, 2020 at 10:13:07AM -0700, Tuan Phan wrote: > An IORT PMCG node can have no ID mapping if its overflow interrupt is > wire based therefore the code that parses the PMCG node can not assume > the node will always have a single mapping present at index 0. > > Fix iort_get_id_mapping_index() by checking for an overflow interrupt > and mapping count. > > Fixes: 24e516049360 ("ACPI/IORT: Add support for PMCG") > > Acked-by: Lorenzo Pieralisi <lorenzo.pieralisi@xxxxxxx> > Reviewed-by: Hanjun Guo <guoahanjun@xxxxxxxxxx> > Signed-off-by: Tuan Phan <tuanphan@xxxxxxxxxxxxxxxxxxxxxx> > --- > v1 -> v2: > - Use pmcg node to detect wired base overflow interrupt. > > v2 -> v3: > - Address Hanjun and Robin's comments. > > v3 -> v4: > - Update the title and description as mentioned by Lorenzo. > > v4 -> v5: > - Remove period in the title and commit references. > > drivers/acpi/arm64/iort.c | 5 +++++ Hi Will, is there a chance we can get this patch into v5.8 ? I understand we are very late in the cycle but I wanted to ask (it applies cleanly to for-next/acpi). Thanks ! Lorenzo > 1 file changed, 5 insertions(+) > > diff --git a/drivers/acpi/arm64/iort.c b/drivers/acpi/arm64/iort.c > index ed3d2d1..12bb70e 100644 > --- a/drivers/acpi/arm64/iort.c > +++ b/drivers/acpi/arm64/iort.c > @@ -414,6 +414,7 @@ static struct acpi_iort_node *iort_node_get_id(struct acpi_iort_node *node, > static int iort_get_id_mapping_index(struct acpi_iort_node *node) > { > struct acpi_iort_smmu_v3 *smmu; > + struct acpi_iort_pmcg *pmcg; > > switch (node->type) { > case ACPI_IORT_NODE_SMMU_V3: > @@ -441,6 +442,10 @@ static int iort_get_id_mapping_index(struct acpi_iort_node *node) > > return smmu->id_mapping_index; > case ACPI_IORT_NODE_PMCG: > + pmcg = (struct acpi_iort_pmcg *)node->node_data; > + if (pmcg->overflow_gsiv || node->mapping_count == 0) > + return -EINVAL; > + > return 0; > default: > return -EINVAL; > -- > 2.7.4 >