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 <davej@redhat.com>
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;
/* We haven't started the transition yet. */
goto migrate_end;
}
+ preempt_enable();
break;
}
}
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) {
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;
}