From 217cf656e249f698d390a7d8eaf255eb1a6c0230 Mon Sep 17 00:00:00 2001 From: Tom Rini Date: Sat, 27 Dec 2025 16:37:11 -0600 Subject: dm: core: Default to using DEVRES outside of xPL The devm alloc functions that we have may follow the Linux kernel model where allocations are (almost always) automatically free()'d. However, quite often we don't enable, in full U-Boot, the tracking and free()'ing functionality. This in turn leads to memory leaks because the driver author expects that since the functions have the same name as in the Linux Kernel they have the same behavior. In turn we then get functionally correct commits such as commit 00e1fed93c8c ("firmware: ti_sci: Fix memory leaks in devm_ti_sci_get_of_resource") that manually add these calls. Rather than manually tracking allocations and implementing free()s, rework things so that we follow expectations by enabling the DEVRES functionality (outside of xPL phases). This turns DEVRES from a prompted symbol to a symbol that must be select'd, and we now remove our non-managed alloc/free functions from outside of xPL builds. Reviewed-by: Michael Trimarchi Signed-off-by: Tom Rini --- include/dm/devres.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'include') diff --git a/include/dm/devres.h b/include/dm/devres.h index 27761deb6d1..406d18686f4 100644 --- a/include/dm/devres.h +++ b/include/dm/devres.h @@ -207,7 +207,8 @@ void devm_kfree(struct udevice *dev, void *ptr); /* Get basic stats on allocations */ void devres_get_stats(const struct udevice *dev, struct devres_stats *stats); -#else /* ! DEVRES */ +#elif IS_ENABLED(CONFIG_DEVRES) && defined(CONFIG_XPL_BUILD) +/* Allow these to be dummy functions in xPL builds. */ static inline void *devres_alloc(dr_release_t release, size_t size, gfp_t gfp) { -- cgit v1.2.3