[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <21457.33657.540940.996259@quad.stoffel.home>
Date: Thu, 24 Jul 2014 18:06:49 -0400
From: "John Stoffel" <john@...ffel.org>
To: Waiman Long <waiman.long@...com>
Cc: Peter Zijlstra <peterz@...radead.org>,
Linus Torvalds <torvalds@...ux-foundation.org>,
Borislav Petkov <bp@...en8.de>, Ingo Molnar <mingo@...nel.org>,
Linux Kernel Mailing List <linux-kernel@...r.kernel.org>,
USB list <linux-usb@...r.kernel.org>,
"linux-input\@vger.kernel.org" <linux-input@...r.kernel.org>
Subject: Re: Linux 3.16-rc6
>>>>> "Waiman" == Waiman Long <waiman.long@...com> writes:
Waiman> On 07/24/2014 02:36 PM, Peter Zijlstra wrote:
>> On Thu, Jul 24, 2014 at 11:18:16AM -0700, Linus Torvalds wrote:
>>> On Thu, Jul 24, 2014 at 5:58 AM, Peter Zijlstra<peterz@...radead.org> wrote:
>>>> So going by the nifty picture rostedt made:
>>>>
>>>> [ 61.454336] CPU0 CPU1
>>>> [ 61.454336] ---- ----
>>>> [ 61.454336] lock(&(&p->alloc_lock)->rlock);
>>>> [ 61.454336] local_irq_disable();
>>>> [ 61.454336] lock(tasklist_lock);
>>>> [ 61.454336] lock(&(&p->alloc_lock)->rlock);
>>>> [ 61.454336]<Interrupt>
>>>> [ 61.454336] lock(tasklist_lock);
>>> So this *should* be fine. It always has been in the past, and it was
>>> certainly the *intention* that it should continue to work with
>>> qrwlock, even in the presense of pending writers on other cpu's.
>>>
>>> The qrwlock rules are that a read-lock in an interrupt is still going
>>> to be unfair and succeed if there are other readers.
>> Ah, indeed. Should have checked :/
>>
>>> So it sounds to me like the new lockdep rules in tip/master are too
>>> strict and are throwing a false positive.
>> Right. Waiman can you have a look?
Waiman> Yes, I think I may have a solution for that.
Waiman> Borislav, can you apply the following patch on top of the lockdep patch
Waiman> to see if it can fix the problem?
Waiman> diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
Waiman> index d24e433..507a8ce 100644
Waiman> --- a/kernel/locking/lockdep.c
Waiman> +++ b/kernel/locking/lockdep.c
Waiman> @@ -3595,6 +3595,12 @@ void lock_acquire(struct lockdep_map *lock,
Waiman> unsigned int
Waiman> raw_local_irq_save(flags);
Waiman> check_flags(flags);
Waiman> + /*
Waiman> + * An interrupt recursive read in interrupt context can be
Waiman> considered
Waiman> + * to be the same as a recursive read from checking perspective.
Waiman> + */
Waiman> + if ((read == 3) && in_interrupt())
Waiman> + read = 2;
current-> lockdep_recursion = 1;
Waiman> trace_lock_acquire(lock, subclass, trylock, read, check,
Waiman> nest_lock, ip);
Waiman> __lock_acquire(lock, subclass, trylock, read, check,
Instead of the magic numbers 1,2,3, could you use some nicely named
constants here instead?
John
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists