• Ashok Raj's avatar
    [PATCH] clean up lock_cpu_hotplug() in cpufreq · a9d9baa1
    Ashok Raj authored
    There are some callers in cpufreq hotplug notify path that the lowest
    function calls lock_cpu_hotplug().  The lock is already held during
    cpu_up() and cpu_down() calls when the notify calls are broadcast to
    registered clients.
    
    Ideally if possible, we could disable_preempt() at the highest caller and
    make sure we dont sleep in the path down in cpufreq->driver_target() calls
    but the calls are so intertwined and cumbersome to cleanup.
    
    Hence we consistently use lock_cpu_hotplug() and unlock_cpu_hotplug() in
    all places.
    
     - Removed export of cpucontrol semaphore and made it static.
     - removed explicit uses of up/down with lock_cpu_hotplug()
       so we can keep track of the the callers in same thread context and
       just keep refcounts without calling a down() that causes a deadlock.
     - Removed current_in_hotplug() uses
     - Removed PF_HOTPLUG_CPU in sched.h introduced for the current_in_hotplug()
       temporary workaround.
    
    Tested with insmod of cpufreq_stat.ko, and logical online/offline
    to make sure we dont have any hang situations.
    Signed-off-by: default avatarAshok Raj <ashok.raj@intel.com>
    Cc: Zwane Mwaikambo <zwane@linuxpower.ca>
    Cc: Shaohua Li <shaohua.li@intel.com>
    Cc: "Siddha, Suresh B" <suresh.b.siddha@intel.com>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    a9d9baa1
cpufreq.c 39.8 KB