]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
resource: fix false warning in __request_region()
authorAkinobu Mita <akinobu.mita@gmail.com>
Sat, 19 Jul 2025 11:26:04 +0000 (20:26 +0900)
committerAndrew Morton <akpm@linux-foundation.org>
Fri, 25 Jul 2025 00:57:59 +0000 (17:57 -0700)
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 warning 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.

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

Link: https://lkml.kernel.org/r/20250719112604.25500-1-akinobu.mita@gmail.com
Fixes: 7dab174e2e27 ("dax/hmem: Move hmem device registration to dax_hmem.ko")
Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
Reviewed-by: Dan Williams <dan.j.williams@intel.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
kernel/resource.c

index 8d3e6ed0bdc1f338b5ce5d0f2be2d80852b60537..f9bb5481501a37a92611baa115029fe06ddffcf9 100644 (file)
@@ -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) {