Re: [PATCH v1] ACPI: scan: Do not combine resources that overlap completely
From: Jarkko Sakkinen
Date: Thu Aug 20 2026 - 21:24:13 EST
On Thu, Aug 20, 2026 at 12:50:46PM +0200, Rafael J. Wysocki wrote:
> From: "Rafael J. Wysocki" <rafael.j.wysocki@xxxxxxxxx>
>
> 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 <nathan@xxxxxxxxxx>
> Tested-by: Nathan Chancellor <nathan@xxxxxxxxxx>
> Closes: https://lore.kernel.org/linux-acpi/20260819003752.GA3063251@ax162/
> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx>
> ---
>
> @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 <jarkko@xxxxxxxxxx>
BR, Jarkko