Re: [PATCH v1] ACPI: scan: Do not combine resources that overlap completely
Jarkko Sakkinen <[email protected]>
| Newsgroups | gmane.linux.acpi.devel,gmane.linux.kernel |
|---|---|
| Message-ID | <[email protected]> |
On Thu, Aug 20, 2026 at 12:50:46PM +0200, Rafael J. Wysocki wrote: > From: "Rafael J. Wysocki" <[email protected]> > > Commit f234fdaae1ca ("ACPI: scan: Avoid registering platform devices > with resource overlaps") attempted to avoid platform device registration > errors due to overlaps of resources of the same type returned by the > same _CRS object in the ACPI tables. It did that by combining two or > more overlapping resources into one, but it went too far and also > caused resources that overlap completely to be combined which broke > the arm-cmn driver that expects two MMIO resources to be present for > each device it binds to and it expects those two resources to overlap > completely. > > Address this issue by adding a check for completely overlapping > resources to acpi_platform_adjust_resources() and add a comment > explaining what is done there. > > Fixes: f234fdaae1ca ("ACPI: scan: Avoid registering platform devices with resource overlaps") > Reported-by: Nathan Chancellor <[email protected]> > Tested-by: Nathan Chancellor <[email protected]> > Closes: https://lore.kernel.org/linux-acpi/20260819003752.GA3063251@ax162/ > Signed-off-by: Rafael J. Wysocki <[email protected]> > --- > > @Julien: I would appreciate testing this on the machine that needed > commit f234fdaae1ca. > > --- > drivers/acpi/acpi_platform.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > --- a/drivers/acpi/acpi_platform.c > +++ b/drivers/acpi/acpi_platform.c > @@ -85,7 +85,12 @@ static unsigned int acpi_platform_adjust > for (i = 0; i < count; ) { > struct resource *res = &resources[i]; > > - if (resource_type(new_res) != resource_type(res) || > + /* > + * Look for overlaps of resources of the same type that would > + * cause resource insertion to fail down the road. > + */ > + if (__resource_contains_unbound(res, new_res) || > + resource_type(new_res) != resource_type(res) || > !resource_union(new_res, res, new_res)) { > i++; > continue; > > > Reviewed-by: Jarkko Sakkinen <[email protected]> BR, Jarkko