lkml.org 
[lkml]   [2014]   [Jul]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: Linux 3.16-rc6
    On 07/25/2014 12:10 PM, Peter Zijlstra wrote:
    > On Thu, Jul 24, 2014 at 04:38:28PM -0400, Waiman Long wrote:
    >> Yes, I think I may have a solution for that.
    >>
    >> Borislav, can you apply the following patch on top of the lockdep patch to
    >> see if it can fix the problem?
    >>
    >> diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
    >> index d24e433..507a8ce 100644
    >> --- a/kernel/locking/lockdep.c
    >> +++ b/kernel/locking/lockdep.c
    >> @@ -3595,6 +3595,12 @@ void lock_acquire(struct lockdep_map *lock, unsigned int
    >> raw_local_irq_save(flags);
    >> check_flags(flags);
    >>
    >> + /*
    >> + * An interrupt recursive read in interrupt context can be considered
    >> + * to be the same as a recursive read from checking perspective.
    >> + */
    >> + if ((read == 3)&& in_interrupt())
    >> + read = 2;
    >> current->lockdep_recursion = 1;
    >> trace_lock_acquire(lock, subclass, trylock, read, check, nest_lock, ip);
    >> __lock_acquire(lock, subclass, trylock, read, check,
    > Just had another look at the initial patch and it cannot be right, even
    > with the above.
    >
    > The problem is you cannot use in_interrupt() in check_deadlock().
    > Check_deadlock() must be context invariant, it should only test the
    > chain state and not rely on where or when its called.
    >
    >

    I am planning to take out the check in check_deadlock and only have the
    test in lock_acquire which change a 3 to 2 when in interrupt context.
    Now my question is whether to do it as a new patch on top of the
    existing one in tip or a total replacement. I also intend to use
    symbolic names for the read states for better readability as suggested
    by John.

    -Longman


    \
     
     \ /
      Last update: 2014-07-28 20:01    [W:2.109 / U:0.388 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site