[PATCH] ACPI/IORT: fix IORT Reserved Memory Range node mapping error

guanghuifeng at linux.alibaba.com guanghuifeng at linux.alibaba.com
Mon Jul 17 02:03:45 PDT 2023



On 2023/7/17 16:48, Marc Zyngier <maz at misterjones.org> wrote:
> On 2023-07-17 09:38, Guanghui Feng wrote:
> > In the ARM IORT specifications DEN 0049E.d, the recommended ID mapping 
> > format:
> > Field        Note Description
> > --------------------------------
> > Input base    The lowest value in the input range
> > Number of IDs    The number of IDs in the range "minus" one
> >
> > When there is only one id mapping in the Reserved Memory Range
> > (RMR) node, the node filed: "Number of IDs" is zero and
> > iort_node_get_rmr_info will not analyse id mapping. This is
> > not in compliance with the regulations.
> >
> > Signed-off-by: Guanghui Feng <guanghuifeng at linux.alibaba.com>
> > ---
> >  drivers/acpi/arm64/iort.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/acpi/arm64/iort.c b/drivers/acpi/arm64/iort.c
> > index 3631230..8427cc3 100644
> > --- a/drivers/acpi/arm64/iort.c
> > +++ b/drivers/acpi/arm64/iort.c
> > @@ -1007,7 +1007,7 @@ static void iort_node_get_rmr_info(struct
> > acpi_iort_node *node,
> >      for (i = 0; i < node->mapping_count; i++, map++) {
> >          struct acpi_iort_node *parent;
> >
> > -        if (!map->id_count)
> > +        if (!(map->id_count + 1))
> >              continue;
> 
> struct acpi_iort_id_mapping {
> [...]
>      u32 id_count;        /* Number of IDs */
> [...]
> };
> 
> So the only way for id_count+1 to be 0 is when id_count==~0,
> making the check even more buggy than it currently is.
> 
>          M.
> 
This is true. Maybe we should use (id_count == 0xffffffff) or (id_count == u32(-1))
to check the mapping count. How about this?



More information about the linux-arm-kernel mailing list