On 26.08.2024 14:14, Rafael J. Wysocki wrote: > 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. Confirmed. Thanks for fixing it and sorry for the noise. > 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! > Best regards -- Marek Szyprowski, PhD Samsung R&D Institute Poland