> On May 14, 2020, at 2:29 AM, Lorenzo Pieralisi <lorenzo.pieralisi@xxxxxxx> wrote: > > Please update the subject: > > Subject: "ACPI/IORT: Fix PMCG node single ID mapping handling" > > On Wed, May 13, 2020 at 05:12:02PM -0700, Tuan Phan wrote: >> PMCG node can have zero ID mapping if its overflow interrupt >> is wire based. The code to parse PMCG node can not assume it will >> have a single ID mapping. > > "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." Thanks for the correction. Will update it. > >> Fixes: 24e516049360 ("ACPI/IORT: Add support for PMCG") >> 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. >> >> drivers/acpi/arm64/iort.c | 5 +++++ >> 1 file changed, 5 insertions(+) > > Acked-by: Lorenzo Pieralisi <lorenzo.pieralisi@xxxxxxx> > >> 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 >>