On Mon, Aug 26, 2024 at 1:32 PM Marek Szyprowski <m.szyprowski@xxxxxxxxxxx> wrote: > > On 19.08.2024 18:30, Rafael J. Wysocki wrote: > > From: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx> > > > > Make the thermal_of driver use the .should_bind() thermal zone callback > > to provide the thermal core with the information on whether or not to > > bind the given cooling device to the given trip point in the given > > thermal zone. If it returns 'true', the thermal core will bind the > > cooling device to the trip and the corresponding unbinding will be > > taken care of automatically by the core on the removal of the involved > > thermal zone or cooling device. > > > > This replaces the .bind() and .unbind() thermal zone callbacks which > > assumed the same trip points ordering in the driver and in the thermal > > core (that may not be true any more in the future). The .bind() > > callback would walk the given thermal zone's cooling maps to find all > > of the valid trip point combinations with the given cooling device and > > it would call thermal_zone_bind_cooling_device() for all of them using > > trip point indices reflecting the ordering of the trips in the DT. > > > > The .should_bind() callback still walks the thermal zone's cooling maps, > > but it can use the trip object passed to it by the thermal core to find > > the trip in question in the first place and then it uses the > > corresponding 'cooling-device' entries to look up the given cooling > > device. To be able to match the trip object provided by the thermal > > core to a specific device node, the driver sets the 'priv' field of each > > trip to the corresponding device node pointer during initialization. > > > > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx> > > This patch landed recently in linux-next as commit 6d71d55c3b12 > ("thermal/of: Use the .should_bind() thermal zone callback") It has been fixed since and it is commit 94c6110b0b13c6416146 now. Bottom line is that it was calling of_node_put() too many times due to a coding mistake. > In my tests I found that it breaks booting some on my test boars: Exynos-based > (OdroidXU4 with ARM32 bit kernel from multi_v7_defconfig) and Amlogic > Meson based boards (OdroidC4, VIM3 with ARM64 defconfig+some debug > options). Reverting $subject on top of next-20240823 together with > c1ee6e1f68f5 ("thermal: core: Clean up trip bind/unbind functions") and > 526954900465 ("thermal: core: Drop unused bind/unbind functions and > callbacks") due to compile dependencies fixes the issue. Thanks for the report!