On 09/24/2013 11:43 AM, Maarten Lankhorst wrote:
Op 24-09-13 11:03, Thomas Hellstrom schreef:
On 09/24/2013 09:34 AM, Maarten Lankhorst wrote:
Op 24-09-13 09:22, Thomas Hellstrom schreef:
Actually, it's not the locking order bo:reserve -> mmap_sem that triggers the 
lockdep warning, right? but the fact that copy_from_user could recurse into the 
fault handler? Grabbing bo:reseves recursively? which should leave us free to 
choose locking order at this point.
Same thing.

When PROVE_LOCKING is enabled the might_fault calls in copy_to/from_user do a 
fake locking of mmap_sem, which means all locking errors, provided that the 
reservation lock is taken at least once with mmap_sem held (eg the ttm fault 
handler is called at least once, it can be done separately, it doesn't need to 
be done in the same syscall). So any bugs will be found. The only thing to 
worry about is that lockdep turns off after finding 1 error, so you have to 
make sure it doesn't bomb out before completing tests, which is sometimes a 
problem on early rc kernels. ;)
My point was that when we only have copy_[to|from]_user_inatomic inside any 
bo:reservations, the might_fault would never be called inside any reservations 
and we should, in principle, be free to choose locking order, provided of 
course it could be done cleanly in fault()?
I think it makes sense to keep mmap_sem the outer lock here, and not do scary 
things in fault. Especially if the mm locking is going to be changed in the 
future. But you're correct, if holding reservations only inatomic should be 
used.

~Maarten

Now that we after all were forced to enter the dark realm of copy-user slowpaths, I don't really have a strong opinion anymore, other than that we should try to avoid building too much code in that depends on either locking order, so that we could change it if _really_ needed.

/Thomas
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to