it appears the problem wasnt even the hotplug lock, but the fact that
work_on_cpu() uses the generic schedule_work() method, which goes into a
queue with all other keventsd worklets.
and keventd is used by other aspects of cpufreq as well -> creating
workqueue-driven lock inversion scenarios - see Dieter's lockdep dump
earlier in this thread. ( I'm amazed lockdep sees through that dependency
:-)
Ingo
--