On Tue, Apr 02, 2013 at 08:29:12PM +0530, Viresh Kumar wrote: > On 2 April 2013 20:25, Nathan Zimmer <nzimmer@xxxxxxx> wrote: > > The lock is unneeded if we expect register and unregister driver to not be > > called from muliple threads at once. I didn't make that assumption. > > Hmm.. But doesn't rcu part take care of that too?? Two writers > updating stuff simultaneously? My concern is in the cpufreq_register_driver. Since we are only to set the pointer when it is null we have have to hold the lock over both operations. int cpufreq_register_driver(struct cpufreq_driver *driver_data) { ... spin_lock_irqsave(&cpufreq_driver_lock, flags); if (rcu_access_pointer(cpufreq_driver)) { spin_unlock_irqrestore(&cpufreq_driver_lock, flags); return -EBUSY; } rcu_assign_pointer(cpufreq_driver, driver_data); spin_unlock_irqrestore(&cpufreq_driver_lock, flags); synchronize_rcu(); ... } -- To unsubscribe from this list: send the line "unsubscribe cpufreq" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html