[PATCH RFC 05/15] arm_mpam: Fix device_node refcount in DT resource parsing

From: Yin Li

Date: Tue Aug 11 2026 - 09:37:32 EST


When a cache-parented or memory-controller-parented MSC is probed via
device tree, the parent node was assigned directly to a
__free(device_node) variable without incrementing its reference count.
Both the parent and the cache/memory variable are declared with
__free(device_node), which causes the compiler to automatically insert
an of_node_put() call for each variable when they go out of scope.
Since both variables point to the same node but the reference count was
only incremented once by of_get_parent(), the node ends up being
released twice, causing a refcount underflow.

Use of_node_get() to take an explicit reference so each __free variable
holds its own reference.

Signed-off-by: Yin Li <yin.li@xxxxxxxxxxxxxxxx>
---
drivers/resctrl/mpam_devices.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/resctrl/mpam_devices.c b/drivers/resctrl/mpam_devices.c
index 975ddab771b4..559fa09128b4 100644
--- a/drivers/resctrl/mpam_devices.c
+++ b/drivers/resctrl/mpam_devices.c
@@ -280,7 +280,7 @@ static int mpam_dt_parse_resource(struct mpam_msc *msc, struct device_node *np,
type = MPAM_CLASS_CACHE;

} else if (of_device_is_compatible(parent, "cache")) {
- cache = parent;
+ cache = of_node_get(parent);
type = MPAM_CLASS_CACHE;
} else if (of_device_is_compatible(np, "arm,mpam-memory")) {
memory = of_parse_phandle(np, "arm,mpam-device", 0);
@@ -290,7 +290,7 @@ static int mpam_dt_parse_resource(struct mpam_msc *msc, struct device_node *np,
}
type = MPAM_CLASS_MEMORY;
} else if (of_device_is_compatible(np, "arm,mpam-memory-controller-msc")) {
- memory = parent;
+ memory = of_node_get(parent);
type = MPAM_CLASS_MEMORY;
} else {
/*

--
2.34.1