lkml.org 
[lkml]   [2008]   [Feb]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patches in this message
    /
    From
    Subject[REGRESSION] kobject handling in cpufreq
    Date
    Hi greg,

    I encountered a regression in linux-2.6.git which prevented the system from shutting down. I found that it
    was 'waiting_for_completion' on kobj_unregister.The same thing happened when I tried to take CPUs offline.

    git-bisect pointed me to this commit :

    commit c10997f6575f476ff38442fa18fd4a0d80345f9d
    Author: Greg Kroah-Hartman <gregkh@suse.de>
    Date: Thu Dec 20 08:13:05 2007 -0800

    Kobject: convert drivers/* from kobject_unregister() to kobject_put()

    In the file drivers/cpufreq/cpufreq.c, you have not replaced one occurrence of kobject_unregister with kobject_put.
    Apparently its because of the kobject_put in the subsequent line.

    @@ -1030,8 +1030,6 @@ static int __cpufreq_remove_dev (struct sys_device * sys_dev)

    unlock_policy_rwsem_write(cpu);

    - kobject_unregister(&data->kobj);
    -
    kobject_put(&data->kobj);

    /* we need to make sure that the underlying kobj is actually
    Now, this can be fixed by adding another kobject_put. But having two kobject_puts in consequent lines tells us that there
    should be two references to the kobject at that point. So, I believe that it is safe to remove the kobject_get
    corresponding to the existing kobject_put to fix this.

    Signed-off-by: Balaji Rao <balajirrao@gmail.com>

    diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
    index 64926aa..2158786 100644
    --- a/drivers/cpufreq/cpufreq.c
    +++ b/drivers/cpufreq/cpufreq.c
    @@ -1004,17 +1004,6 @@ static int __cpufreq_remove_dev (struct sys_device * sys_dev)
    unlock_policy_rwsem_write(cpu);
    return 0;
    }
    -#endif
    -
    -
    - if (!kobject_get(&data->kobj)) {
    - spin_unlock_irqrestore(&cpufreq_driver_lock, flags);
    - cpufreq_debug_enable_ratelimit();
    - unlock_policy_rwsem_write(cpu);
    - return -EFAULT;
    - }
    -
    -#ifdef CONFIG_SMP

    #ifdef CONFIG_HOTPLUG_CPU
    cpufreq_cpu_governor[cpu] = data->governor;
    --
    regards,
    balaji rao

    \
     
     \ /
      Last update: 2008-02-08 20:29    [W:0.054 / U:90.896 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site