lkml.org 
[lkml]   [2017]   [Jul]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH v7 06/16] lockdep: Detect and handle hist_lock ring buffer overwrite
    On Wed, Jul 12, 2017 at 09:56:17AM +0200, Peter Zijlstra wrote:
    > On Wed, Jul 12, 2017 at 11:00:53AM +0900, Byungchul Park wrote:
    > > On Tue, Jul 11, 2017 at 06:12:32PM +0200, Peter Zijlstra wrote:
    >
    > > > Right, like I wrote in the comment; I don't think you need quite this
    > > > much.
    > > >
    > > > The problem only happens if you rewind more than MAX_XHLOCKS_NR;
    > > > although I realize it can be an accumulative rewind, which makes it
    > > > slightly more tricky.
    > > >
    > > > We can either make the rewind more expensive and make xhlock_valid()
    > > > false for each rewound entry; or we can keep the max_idx and account
    > >
    > > Does max_idx mean the 'original position - 1'?
    >
    > orig_idx = current->hist_idx;
    > current->hist_idx++;
    > if ((int)(current->hist_idx - orig_idx) > 0)
    > current->hist_idx_max = current->hist_idx;
    >
    >
    > I've forgotten if the idx points to the most recent entry or beyond it.
    >
    > Given the circular nature, and tail being one ahead of head, the max
    > effectively tracks the tail (I suppose we can also do an explicit tail
    > tracking, but that might end up more difficult).
    >
    > This allows rewinds of less than array_size() while still maintaining a
    > correct tail.
    >
    > Only once we (cummulative or not) rewind past the tail -- iow, loose the
    > _entire_ history, do we need to do something drastic.

    I am sorry but I don't understand why we have to do the drastic work.

    Does my approach have problems, rewinding to 'original idx' on exit and
    deciding whether overwrite or not? I think, this way, no need to do the
    drastic work. Or.. does my one get more overhead in usual case?

    >
    > > > from there. If we rewind >= MAX_XHLOCKS_NR from the max_idx we need to
    > > > invalidate the entire state, which we can do by invaliding
    > >
    > > Could you explain what the entire state is?
    >
    > All hist_lock[]. Did the above help?
    >
    > > > xhlock_valid() or by re-introduction of the hist_gen_id. When we
    > >
    > > What does the re-introduction of the hist_gen_id mean?
    >
    > What you used to call work_id or something like that. A generation count
    > for the hist_lock[].

    \
     
     \ /
      Last update: 2017-07-13 04:09    [W:3.713 / U:0.964 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site