On Wed, Dec 13, 2006 at 02:19:52PM -0800, H. Peter Anvin wrote: > > void rdmsr_on_cpu(unsigned int cpu, unsigned long msr, unsigned long *lo, unsigned long *hi) > > { > > cpumask_t oldmask; > > > > oldmask = current->cpus_allowed; > > set_cpus_allowed(current, cpumask_of_cpu(cpu)); > > > > rdmsr(msr, &lo, &hi); > > > > set_cpus_allowed(current, oldmask); > > } > > > > [The above doesn't work, by the way. This approach was discussed a long > time ago, and vetoed due to the potential for deadlock.] Can you explain this a little further? I'm fairly certain there are places in the kernel already doing this (or similar). In fact, I cut-n-pasted most of the above from similar code in the powernow-k8 driver. What exactly can we deadlock on? Dave -- http://www.codemonkey.org.uk