locking spinlocks during copy_to_user, copy_from_user
Pablo Pessolani
ppessolani at hotmail.com
Fri Jan 25 08:00:25 EST 2013
Hi:
It is well know that is not recomended to keep a spinlock locked during operations that can be preempted. Some of these operations are copy_to_user, copy_from_user.
Below is the code of the write_lock() as a sample.
340 static inline void __write_lock(rwlock_t *lock)
341{
342 preempt_disable(); <<<<<< THE ISSUE IS HERE <<<<<<<<<<<<<<
343 rwlock_acquire(&lock->dep_map, 0, 0, _RET_IP_);
344 LOCK_CONTENDED(lock, _raw_write_trylock, _raw_write_lock);
345}
On write_unlock() the preemtion is enable.
My question is: Is there any know consequence if I enable preemption before copy_to_user/copy_from user (keeping the spinlock locked) and then disable preemption again after the copy?????
i.e.:
write_lock(&lock);
.......
preempt_enable();
copy_to_user(.......);
preempt_disable();
.......
write_unlock(&lock);
Thanks in advance.
PAP
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20130125/2127ed08/attachment.html
More information about the Kernelnewbies
mailing list