• viresh kumar's avatar
    cpufreq: remove sysfs link when a cpu != policy->cpu, is removed · 6964d91d
    viresh kumar authored
    Commit 42f921a6 (cpufreq: remove sysfs files for CPUs which failed to
    come back after resume) tried to do this but missed this piece of code
    to fix.
    
    Currently we are getting this on suspend/resume:
    
    ------------[ cut here ]------------
    WARNING: CPU: 0 PID: 877 at fs/sysfs/dir.c:52 sysfs_warn_dup+0x68/0x84()
    sysfs: cannot create duplicate filename '/devices/system/cpu/cpu1/cpufreq'
    Modules linked in: brcmfmac brcmutil
    CPU: 0 PID: 877 Comm: test-rtc-resume Not tainted 3.14.0-rc2-00259-g9398a10c #12
    [<c0015bac>] (unwind_backtrace) from [<c0011850>] (show_stack+0x10/0x14)
    [<c0011850>] (show_stack) from [<c056e018>] (dump_stack+0x80/0xcc)
    [<c056e018>] (dump_stack) from [<c0025e44>] (warn_slowpath_common+0x64/0x88)
    [<c0025e44>] (warn_slowpath_common) from [<c0025efc>] (warn_slowpath_fmt+0x30/0x40)
    [<c0025efc>] (warn_slowpath_fmt) from [<c012776c>] (sysfs_warn_dup+0x68/0x84)
    [<c012776c>] (sysfs_warn_dup) from [<c0127a54>] (sysfs_do_create_link_sd+0xb0/0xb8)
    [<c0127a54>] (sysfs_do_create_link_sd) from [<c038ef64>] (__cpufreq_add_dev.isra.27+0x2a8/0x814)
    [<c038ef64>] (__cpufreq_add_dev.isra.27) from [<c038f548>] (cpufreq_cpu_callback+0x70/0x8c)
    [<c038f548>] (cpufreq_cpu_callback) from [<c0043864>] (notifier_call_chain+0x44/0x84)
    [<c0043864>] (notifier_call_chain) from [<c0025f60>] (__cpu_notify+0x28/0x44)
    [<c0025f60>] (__cpu_notify) from [<c00261e8>] (_cpu_up+0xf0/0x140)
    [<c00261e8>] (_cpu_up) from [<c0569eb8>] (enable_nonboot_cpus+0x68/0xb0)
    [<c0569eb8>] (enable_nonboot_cpus) from [<c006339c>] (suspend_devices_and_enter+0x198/0x2dc)
    [<c006339c>] (suspend_devices_and_enter) from [<c0063654>] (pm_suspend+0x174/0x1e8)
    [<c0063654>] (pm_suspend) from [<c00624e0>] (state_store+0x6c/0xbc)
    [<c00624e0>] (state_store) from [<c01fc200>] (kobj_attr_store+0x14/0x20)
    [<c01fc200>] (kobj_attr_store) from [<c0126e50>] (sysfs_kf_write+0x44/0x48)
    [<c0126e50>] (sysfs_kf_write) from [<c012a274>] (kernfs_fop_write+0xb4/0x14c)
    [<c012a274>] (kernfs_fop_write) from [<c00d4818>] (vfs_write+0xa8/0x180)
    [<c00d4818>] (vfs_write) from [<c00d4bb8>] (SyS_write+0x3c/0x70)
    [<c00d4bb8>] (SyS_write) from [<c000e620>] (ret_fast_syscall+0x0/0x30)
    ---[ end trace 76969904b614c18f ]---
    
    Fix this by removing sysfs link for cpufreq directory when cpu removed
    isn't policy->cpu.
    
    Revamps: 42f921a6 (cpufreq: remove sysfs files for CPUs which failed to come back after resume)
    Reported-and-tested-by: default avatarStephen Warren <swarren@nvidia.com>
    Signed-off-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    6964d91d
cpufreq.c 60.8 KB