[PATCH] resource: fix false warning in __request_region()

Akinobu Mita posted 1 patch 2 months, 2 weeks ago
kernel/resource.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
[PATCH] resource: fix false warning in __request_region()
Posted by Akinobu Mita 2 months, 2 weeks ago
A warning is raised when __request_region() detects a conflict with a
resource whose resource.desc is IORES_DESC_DEVICE_PRIVATE_MEMORY.

But this warning is only valid for iomem_resources.
The hmem device resource uses resource.desc as the numa node id, which can
cause spurious warnings.

This change fixes this by restricting the warning to only iomem_resource.
This also adds a missing new line to the warning message.

Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
---
 kernel/resource.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/kernel/resource.c b/kernel/resource.c
index 8d3e6ed0bdc1..f9bb5481501a 100644
--- a/kernel/resource.c
+++ b/kernel/resource.c
@@ -1279,8 +1279,9 @@ static int __request_region_locked(struct resource *res, struct resource *parent
 		 * become unavailable to other users.  Conflicts are
 		 * not expected.  Warn to aid debugging if encountered.
 		 */
-		if (conflict->desc == IORES_DESC_DEVICE_PRIVATE_MEMORY) {
-			pr_warn("Unaddressable device %s %pR conflicts with %pR",
+		if (parent == &iomem_resource &&
+		    conflict->desc == IORES_DESC_DEVICE_PRIVATE_MEMORY) {
+			pr_warn("Unaddressable device %s %pR conflicts with %pR\n",
 				conflict->name, conflict, res);
 		}
 		if (conflict != parent) {
-- 
2.34.1
Re: [PATCH] resource: fix false warning in __request_region()
Posted by Andrew Morton 2 months, 2 weeks ago
On Sat, 19 Jul 2025 20:26:04 +0900 Akinobu Mita <akinobu.mita@gmail.com> wrote:

> A warning is raised when __request_region() detects a conflict with a
> resource whose resource.desc is IORES_DESC_DEVICE_PRIVATE_MEMORY.
> 
> But this warning is only valid for iomem_resources.
> The hmem device resource uses resource.desc as the numa node id, which can
> cause spurious warnings.
> 
> This change fixes this by restricting the warning to only iomem_resource.
> This also adds a missing new line to the warning message.

What are the circumstance which cause this warning?  Are real world
users hitting this?  If so, should we backport this fix into earlier
kernels?
Re: [PATCH] resource: fix false warning in __request_region()
Posted by Akinobu Mita 2 months, 2 weeks ago
2025年7月20日(日) 8:31 Andrew Morton <akpm@linux-foundation.org>:
>
> On Sat, 19 Jul 2025 20:26:04 +0900 Akinobu Mita <akinobu.mita@gmail.com> wrote:
>
> > A warning is raised when __request_region() detects a conflict with a
> > resource whose resource.desc is IORES_DESC_DEVICE_PRIVATE_MEMORY.
> >
> > But this warning is only valid for iomem_resources.
> > The hmem device resource uses resource.desc as the numa node id, which can
> > cause spurious warnings.
> >
> > This change fixes this by restricting the warning to only iomem_resource.
> > This also adds a missing new line to the warning message.
>
> What are the circumstance which cause this warning?  Are real world
> users hitting this?  If so, should we backport this fix into earlier
> kernels?

This warning actually appeared on a machine with multiple cxl memory expanders.
One of the NUMA node id is 6, which is the same as the value of
IORES_DESC_DEVICE_PRIVATE_MEMORY.

In this environment it was just a spurious warning, but when I saw the warning
I suspected a real problem so it's better to fix it.

Fixes: b926b7f3baec ("mm/resource: Move HMM pr_debug() deeper into
resource code")
Re: [PATCH] resource: fix false warning in __request_region()
Posted by dan.j.williams@intel.com 2 months, 2 weeks ago
Akinobu Mita wrote:
> 2025年7月20日(日) 8:31 Andrew Morton <akpm@linux-foundation.org>:
> >
> > On Sat, 19 Jul 2025 20:26:04 +0900 Akinobu Mita <akinobu.mita@gmail.com> wrote:
> >
> > > A warning is raised when __request_region() detects a conflict with a
> > > resource whose resource.desc is IORES_DESC_DEVICE_PRIVATE_MEMORY.
> > >
> > > But this warning is only valid for iomem_resources.
> > > The hmem device resource uses resource.desc as the numa node id, which can
> > > cause spurious warnings.
> > >
> > > This change fixes this by restricting the warning to only iomem_resource.
> > > This also adds a missing new line to the warning message.
> >
> > What are the circumstance which cause this warning?  Are real world
> > users hitting this?  If so, should we backport this fix into earlier
> > kernels?
> 
> This warning actually appeared on a machine with multiple cxl memory expanders.
> One of the NUMA node id is 6, which is the same as the value of
> IORES_DESC_DEVICE_PRIVATE_MEMORY.
> 
> In this environment it was just a spurious warning, but when I saw the warning
> I suspected a real problem so it's better to fix it.
> 
> Fixes: b926b7f3baec ("mm/resource: Move HMM pr_debug() deeper into
> resource code")

This should be:

Fixes: 7dab174e2e27 ("dax/hmem: Move hmem device registration to dax_hmem.ko")

...as that is the change that violates the assumptions of
__request_region().

You can add:

Reviewed-by: Dan Williams <dan.j.williams@intel.com>