Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=e8e49190f64896afe79f7136a67c2bdefbd3e322
Commit:     e8e49190f64896afe79f7136a67c2bdefbd3e322
Parent:     fb48e15645fb702cb2ec02c84f82ece2fbc1574d
Author:     Dave Jones <[EMAIL PROTECTED]>
AuthorDate: Wed Apr 11 18:22:34 2007 -0400
Committer:  Dave Jones <[EMAIL PROTECTED]>
CommitDate: Thu Apr 26 14:32:02 2007 -0400

    Fix preemption warnings in speedstep-centrino.c
    
    BUG: using smp_processor_id() in preemptible [00000001] code:
    kondemand/0/2473
    caller is centrino_target+0xfb/0x600
    [<401e3646>] debug_smp_processor_id+0x9e/0xb0
    [<40112afb>] centrino_target+0xfb/0x600
    [<40112a00>] centrino_target+0x0/0x600
    [<40305bd9>] __cpufreq_driver_target+0x5c/0x6b
    [<f897a537>] do_dbs_timer+0x1bc/0x208 [cpufreq_ondemand]
    [<40134a46>] run_workqueue+0x85/0x125
    [<40374f7f>] _spin_lock_irqsave+0x18/0x66
    [<f897a37b>] do_dbs_timer+0x0/0x208 [cpufreq_ondemand]
    [<401353fb>] worker_thread+0xf9/0x124
    [<401213b9>] default_wake_function+0x0/0xc
    [<40135302>] worker_thread+0x0/0x124
    [<40137b37>] kthread+0xb0/0xd9
    [<40137a87>] kthread+0x0/0xd9
    [<40104b2f>] kernel_thread_helper+0x7/0x10
    
    Signed-off-by: Dave Jones <[EMAIL PROTECTED]>
---
 arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c |   10 +++++++++-
 1 files changed, 9 insertions(+), 1 deletions(-)

diff --git a/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c 
b/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c
index f43b987..35489fd 100644
--- a/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c
+++ b/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c
@@ -720,6 +720,7 @@ static int centrino_target (struct cpufreq_policy *policy,
                        cpu_set(j, set_mask);
 
                set_cpus_allowed(current, set_mask);
+               preempt_disable();
                if (unlikely(!cpu_isset(smp_processor_id(), set_mask))) {
                        dprintk("couldn't limit to CPUs in this domain\n");
                        retval = -EAGAIN;
@@ -727,6 +728,7 @@ static int centrino_target (struct cpufreq_policy *policy,
                                /* We haven't started the transition yet. */
                                goto migrate_end;
                        }
+                       preempt_enable();
                        break;
                }
 
@@ -761,10 +763,13 @@ static int centrino_target (struct cpufreq_policy *policy,
                }
 
                wrmsr(MSR_IA32_PERF_CTL, oldmsr, h);
-               if (policy->shared_type == CPUFREQ_SHARED_TYPE_ANY)
+               if (policy->shared_type == CPUFREQ_SHARED_TYPE_ANY) {
+                       preempt_enable();
                        break;
+               }
 
                cpu_set(j, covered_cpus);
+               preempt_enable();
        }
 
        for_each_cpu_mask(k, online_policy_cpus) {
@@ -796,8 +801,11 @@ static int centrino_target (struct cpufreq_policy *policy,
                        cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE);
                }
        }
+       set_cpus_allowed(current, saved_mask);
+       return 0;
 
 migrate_end:
+       preempt_enable();
        set_cpus_allowed(current, saved_mask);
        return 0;
 }
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to