Blaisorblade <[EMAIL PROTECTED]> wrote: > > On Wednesday 21 September 2005 22:47, Andrew Morton wrote: > > Blaisorblade <[EMAIL PROTECTED]> wrote: > > > On Wednesday 21 September 2005 21:49, Andrew Morton wrote: > > > > "Paolo 'Blaisorblade' Giarrusso" <[EMAIL PROTECTED]> wrote: > > > > > From: Paolo 'Blaisorblade' Giarrusso <[EMAIL PROTECTED]> > > > > > It has accidental side-effects, > > > > such as making copy_to_user() fail if inside spinlocks when > > > > CONFIG_PREEMPT=y. > > > > Sorry, but should it ever succeed inside spinlocks? I mean, should it > > > ever call down() inside spinlocks? (We never do down_trylock, and ever if > > > we did the x86 trick, that wouldn't make the whole thing safe at all - > > > they still take the spinlock and potentially sleep. And it's legal only > > > if no spinlock is held). > > > Not sure what you're asking here. > > > copy_to/from_user() will fail inside spinlock if CONFIG_PREMPT=y and if the > > copy happens to cause a fault. > > > Otherwise it will succeed inside spinlock, > > and it won't spew a sleeping-while-atomic warning, because that uses > > in_atomic() too. > > > It might deadlock if we schedule away and try to retake > > the same lock. > Exactly - the point is: is it legal to call copy_from_user() while holding a > spinlock (which is my original question)? Or should copy_from_user try to > satisfy the fault, instead of seeing in_atomic() or something similar and > fail?
No, it is not legal to call copy_*_user() while holding a spinlock. If CONFIG_PREEMPT=n, do_page_fault() has no way of knowing that the caller holds a spinlock. ------------------------------------------------------- SF.Net email is sponsored by: Tame your development challenges with Apache's Geronimo App Server. Download it for free - -and be entered to win a 42" plasma tv or your very own Sony(tm)PSP. Click here to play: http://sourceforge.net/geronimo.php _______________________________________________ User-mode-linux-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel
