Messages in this thread | | | Date | Tue, 31 Dec 2013 11:42:04 -0500 | From | Sasha Levin <> | Subject | Re: [RFC 1/2] mm: additional page lock debugging |
| |
On 12/31/2013 11:26 AM, Peter Zijlstra wrote: > On Mon, Dec 30, 2013 at 10:22:02PM -0500, Sasha Levin wrote: > >> I really want to use lockdep here, but I'm not really sure how to handle locks which live >> for a rather long while instead of being locked and unlocked in the same function like >> most of the rest of the kernel. (Cc Ingo, PeterZ). > > Uh what? Lockdep doesn't care about which function locks and unlocks a > particular lock. Nor does it care how long its held for.
Sorry, I messed up trying to explain that.
There are several places in the code which lock a large amount of pages, something like:
for (i = 0; i < (1 << order); i++) lock_page(&pages[i]);
This triggers two problems:
- lockdep complains about deadlock since we try to lock another page while one is already locked. I can clear that by allowing page locks to nest within each other, but that seems wrong and we'll miss actual deadlock cases.
- We may leave back to userspace with pages still locked. This is valid behaviour but lockdep doesn't like that.
Thanks, Sasha
| |