lkml.org 
[lkml]   [2013]   [Jul]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: /proc/timer_list and weird behavior with dropbear
    On Fri, Jul 19, 2013 at 03:33:24PM -0500, Nathan Zimmer wrote:
    > On Fri, Jul 19, 2013 at 07:03:54PM +0200, Holger Hans Peter Freyther wrote:
    > > On Fri, Jul 19, 2013 at 10:45:15AM -0500, Nathan Zimmer wrote:
    > >
    > > > I hadn't noticed anything.
    > > > Let me try your program and see what I may have missed.
    > >
    > > Hi,
    > >
    > > I neither know the semantics of the timer_list nor how to use
    > > seq_file correctly. What happens is that timer_list_next will only
    > > be called once. This means that iter->cpu will never be increased.
    > >
    > > This just moves to the next CPU when stop is called (e.g. nothing
    > > was added once the print_tickdevice was printed). Do you think
    > > this could be correct?
    > >
    > >
    > >
    > > diff --git a/kernel/time/timer_list.c b/kernel/time/timer_list.c
    > > index 3bdf283..8d36a3d 100644
    > > --- a/kernel/time/timer_list.c
    > > +++ b/kernel/time/timer_list.c
    > > @@ -327,8 +327,10 @@ static void *timer_list_next(struct seq_file *file, void *v, loff_t *offset)
    > > return timer_list_start(file, offset);
    > > }
    > >
    > > -static void timer_list_stop(struct seq_file *seq, void *v)
    > > +static void timer_list_stop(struct seq_file *file, void *v)
    > > {
    > > + struct timer_list_iter *iter = file->private;
    > > + iter->cpu = cpumask_next(iter->cpu, cpu_online_mask);
    > > }
    > >
    > > static const struct seq_operations timer_list_sops = {
    >
    >
    > I think this would be an acceptable fix.
    > It work file locally. Could you check it out to see if it behaves?
    >
    > Nate

    Forgot the patch last time.
    Sorry

    diff --git a/kernel/time/timer_list.c b/kernel/time/timer_list.c
    index 3bdf283..a3620ec 100644
    --- a/kernel/time/timer_list.c
    +++ b/kernel/time/timer_list.c
    @@ -305,24 +305,26 @@ static void *timer_list_start(struct seq_file *file, loff_t *offset)
    if (!*offset) {
    iter->cpu = -1;
    iter->now = ktime_to_ns(ktime_get());
    - } else if (iter->cpu >= nr_cpu_ids) {
    + } else {
    + iter->cpu = cpumask_next(iter->cpu, cpu_online_mask);
    + if (iter->cpu >= nr_cpu_ids) {
    #ifdef CONFIG_GENERIC_CLOCKEVENTS
    - if (!iter->second_pass) {
    - iter->cpu = -1;
    - iter->second_pass = true;
    - } else
    - return NULL;
    + if (!iter->second_pass) {
    + iter->cpu = -1;
    + iter->second_pass = true;
    + } else
    + return NULL;
    #else
    - return NULL;
    + return NULL;
    #endif
    + }
    }
    +
    return iter;
    }

    static void *timer_list_next(struct seq_file *file, void *v, loff_t *offset)
    {
    - struct timer_list_iter *iter = file->private;
    - iter->cpu = cpumask_next(iter->cpu, cpu_online_mask);
    ++*offset;
    return timer_list_start(file, offset);
    }
    \
     
     \ /
      Last update: 2013-07-19 23:21    [W:0.029 / U:68.068 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site