On Wednesday, August 19, 2026 1:06:50 PM CEST Rafael J. Wysocki (Intel) wrote:
> On Wed, Aug 19, 2026 at 12:18 PM Rafael J. Wysocki (Intel)
> <[email protected]> wrote:
> >
> > Hi Nathan,
> >
> > On Wed, Aug 19, 2026 at 2:37 AM Nathan Chancellor <[email protected]> wrote:
> > >
> > > Hi Rafael,
> > >
> > > On Fri, Aug 07, 2026 at 12:22:37PM +0200, Rafael J. Wysocki wrote:
> > > > From: "Rafael J. Wysocki" <[email protected]>
> > > >
> > > > If acpi_dev_get_resources() returns overlapping I/O or memory resources,
> > > > the subsequent registration of a platform device will fail with -EBUSY
> > > > due to a resource conflict.  This is reported to happen on Acer Aspire
> > > > ES1-572 [1].
> > > >
> > > > Avoid that by adjusting resources returned by acpi_dev_get_resources()
> > > > to eliminate partial overlaps between them.
> > > >
> > > > This has not been regarded as necessary before because putting
> > > > overlapping resources into the _CRS of one device is really pointless,
> > > > but now that the issue has been reported to actually happen in the
> > > > field, it needs to be done.
> > > >
> > > > Fixes: ab06eb920401 ("ACPI: scan: Register platform devices for fixed 
> > > > event buttons")
> > > > Reported-by: Julien <[email protected]>
> > > > Closes: 
> > > > https://lore.kernel.org/linux-integrity/cajogg3z6ljpdsdpnbxajgy8_wqxfhybrxe4eiurzf3kpu5a...@mail.gmail.com/
> > > >  [1]
> > > > Cc: All applicable <[email protected]>
> > > > Signed-off-by: Rafael J. Wysocki <[email protected]>
> > >
> > > I bisected the following kernel message that I see on one of my aarch64
> > > test machines to this change in -next as commit f234fdaae1ca ("ACPI:
> > > scan: Avoid registering platform devices with resource overlaps"):
> > >
> > >   arm-cmn ARMHC600:00: probe with driver arm-cmn failed with error -22
> > >
> > > Is this expected? If not, what information would be helpful for debugging 
> > > this?
> >
> > No, it is not.
> >
> > First, please send a boot log from the failing machine.
> >
> > Second, I think we may need the acpidump output from it.
> 
> So looking at the driver code, it expects to get two resources and it
> is confused when it gets just one, so most likely arm_cmn_get_root()
> fails.
> 
> I guess what happens is that originally one of the resources is within
> the other one completely (or the creation of the platform device would
> fail), which is kind of valid, so resource_overlaps() returns true for
> them, and they get merged.  This means that
> acpi_platform_adjust_resources() needs to look for partial overlaps
> only.
> 
> I'll send a patch to adjust it later today.

And below is one to try.

---
 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.
+                */
+               if (__resource_contains_unbound(new_res, res) ||
+                   resource_type(new_res) != resource_type(res) ||
                    !resource_union(new_res, res, new_res)) {
                        i++;
                        continue;




Reply via email to