From: Blaisorblade <bla...@ya...> - 2005-09-21 20:24:22
|
On Wednesday 21 September 2005 21:49, Andrew Morton wrote: > "Paolo 'Blaisorblade' Giarrusso" <bla...@ya...> wrote: > > From: Paolo 'Blaisorblade' Giarrusso <bla...@ya...> > The in_atomic() test in x86's do_page_fault() is in fact a message passed > into it from filemap.c's kmap_atomic(). Ok, this can be ok, but: > 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). Even if spinlocks don't always trigger in_atomic() - which means that we'd need to have a better fix for this. (Btw, I took the above reasoning from something said, as an aside, on LWN.net kernel page, about the FUTEX deadlock on mm->mmap_sem of ~ 2.6.8 - yes, it wasn't the full truth, but not totally dumb). > So I think this change is only needed if UML implements kmap_atomic, as in > arch/i386/mm/highmem.c, which it surely does not do? NACK, see above. -- Inform me of my mistakes, so I can keep imitating Homer Simpson's "Doh!". Paolo Giarrusso, aka Blaisorblade (Skype ID "PaoloGiarrusso", ICQ 215621894) http://www.user-mode-linux.org/~blaisorblade ___________________________________ Yahoo! Mail: gratis 1GB per i messaggi e allegati da 10MB http://mail.yahoo.it |