Re: [lockdep] b09be676e0 BUG: unable to handle kernel NULL pointer dereference at 000001f2

From: Linus Torvalds
Date: Tue Oct 10 2017 - 14:38:40 EST


On Tue, Oct 10, 2017 at 11:14 AM, Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote:
>
> Ah, but that's not at all what cross-release is about. Nobody really
> does wonky ownership transfer of mutexes like that (although there might
> be someone doing something with semaphores, I didn't check). Its to
> allow detecting this deadlock:
>
> mutex_lock(&lock)
> wait_for_completion(&c);
> mutex_lock(&lock);
> complete(&c);
>
> The completion doesn't have an owner to transfer.

Well, it really does. The "init_completion()" would be the original
owner (essentially the same as a "lock()"), then it has a transfer,
and then a receive, and then "complete()" is basically the unlock
elsewhere.

Of course, right now that transfer and receive is entirely implicit,
so you don't really see it anywhere. And for completions, the whole
_point_ is that transfer, so ..

The "wait_for_completion()" is then a normal lock operation (no
transfer there - it's just trying to get the lock again).

Linus