• Pierre Gondois's avatar
    cacheinfo: Remove of_node_put() for fw_token · 2613cc29
    Pierre Gondois authored
    fw_token is used for DT/ACPI systems to identify CPUs sharing caches.
    For DT based systems, fw_token is set to a pointer to a DT node.
    
    commit 3da72e18 ("cacheinfo: Decrement refcount in
    cache_setup_of_node()")
    doesn't increment the refcount of fw_token anymore in
    cache_setup_of_node(). fw_token is indeed used as a token and not
    as a (struct device_node*), so no reference to fw_token should be
    kept.
    
    However, [1] is triggered when hotplugging a CPU multiple times
    since cache_shared_cpu_map_remove() decrements the refcount to
    fw_token at each CPU unplugging, eventually reaching 0.
    
    Remove of_node_put() for fw_token in cache_shared_cpu_map_remove().
    
    [1]
    ------------[ cut here ]------------
    refcount_t: saturated; leaking memory.
    WARNING: CPU: 4 PID: 32 at lib/refcount.c:22 refcount_warn_saturate (lib/refcount.c:22 (discriminator 3))
    Modules linked in:
    CPU: 4 PID: 32 Comm: cpuhp/4 Tainted: G        W          6.1.0-rc1-14091-g9fdf2ca7b9c8 #76
    Hardware name: ARM LTD ARM Juno Development Platform/ARM Juno Development Platform, BIOS EDK II Oct 31 2022
    pstate: 600000c5 (nZCv daIF -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
    pc : refcount_warn_saturate (lib/refcount.c:22 (discriminator 3))
    lr : refcount_warn_saturate (lib/refcount.c:22 (discriminator 3))
    [...]
    Call trace:
    [...]
    of_node_release (drivers/of/dynamic.c:335)
    kobject_put (lib/kobject.c:677 lib/kobject.c:704 ./include/linux/kref.h:65 lib/kobject.c:721)
    of_node_put (drivers/of/dynamic.c:49)
    free_cache_attributes.part.0 (drivers/base/cacheinfo.c:712)
    cacheinfo_cpu_pre_down (drivers/base/cacheinfo.c:718)
    cpuhp_invoke_callback (kernel/cpu.c:247 (discriminator 4))
    cpuhp_thread_fun (kernel/cpu.c:785)
    smpboot_thread_fn (kernel/smpboot.c:164 (discriminator 3))
    kthread (kernel/kthread.c:376)
    ret_from_fork (arch/arm64/kernel/entry.S:861)
    ---[ end trace 0000000000000000 ]---
    
    Fixes: 3da72e18 ("cacheinfo: Decrement refcount in cache_setup_of_node()")
    Reported-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
    Reported-by: default avatarMarek Szyprowski <m.szyprowski@samsung.com>
    Tested-by: default avatarGeert Uytterhoeven <geert+renesas@glider.be>
    Tested-by: default avatarSudeep Holla <sudeep.holla@arm.com>
    Reviewed-by: default avatarSudeep Holla <sudeep.holla@arm.com>
    Signed-off-by: default avatarPierre Gondois <pierre.gondois@arm.com>
    Link: https://lore.kernel.org/r/20221116094958.2141072-1-pierre.gondois@arm.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    2613cc29
cacheinfo.c 18.2 KB