LGTM, Jarno
Acked-by: Jarno Rajahalme <jrajaha...@nicira.com> > On Apr 30, 2014, at 2:35 PM, Ben Pfaff <b...@nicira.com> wrote: > > The poll_loop code has a feature that, when turned on manually or > automatically (due to high CPU use), logs the source file and line number > of the code that caused a thread to wake up from poll(). Until now, when > a function calls seq_wait(), the source file and line number logged was > the code inside seq_wait(). seq_wait() has many callers, so that > information is not as useful as it could be. This commit changes the > source file and line number used to be that of seq_wait()'s caller. > > I found this useful for debugging. > > Signed-off-by: Ben Pfaff <b...@nicira.com> > --- > lib/seq.c | 20 ++++++++++++-------- > lib/seq.h | 7 +++++-- > 2 files changed, 17 insertions(+), 10 deletions(-) > > diff --git a/lib/seq.c b/lib/seq.c > index 7a34244..452d683 100644 > --- a/lib/seq.c > +++ b/lib/seq.c > @@ -1,5 +1,5 @@ > /* > - * Copyright (c) 2013 Nicira, Inc. > + * Copyright (c) 2013, 2014 Nicira, Inc. > * > * Licensed under the Apache License, Version 2.0 (the "License"); > * you may not use this file except in compliance with the License. > @@ -125,7 +125,7 @@ seq_read(const struct seq *seq) > } > > static void > -seq_wait__(struct seq *seq, uint64_t value) > +seq_wait__(struct seq *seq, uint64_t value, const char *where) > OVS_REQUIRES(seq_mutex) > { > unsigned int id = ovsthread_id_self(); > @@ -137,7 +137,7 @@ seq_wait__(struct seq *seq, uint64_t value) > if (waiter->value != value) { > /* The current value is different from the value we've already > * waited for, */ > - poll_immediate_wake(); > + poll_immediate_wake_at(where); > } else { > /* Already waiting on 'value', nothing more to do. */ > } > @@ -154,7 +154,7 @@ seq_wait__(struct seq *seq, uint64_t value) > list_push_back(&waiter->thread->waiters, &waiter->list_node); > > if (!waiter->thread->waiting) { > - latch_wait(&waiter->thread->latch); > + latch_wait_at(&waiter->thread->latch, where); > waiter->thread->waiting = true; > } > } > @@ -165,18 +165,22 @@ seq_wait__(struct seq *seq, uint64_t value) > * > * seq_read() and seq_wait() can be used together to yield a race-free wakeup > * when an object changes, even without an ability to lock the object. See > - * Usage in seq.h for details. */ > + * Usage in seq.h for details. > + * > + * ('where' is used in debug logging. Commonly one would use seq_wait() to > + * automatically provide the caller's source file and line number for > + * 'where'.) */ > void > -seq_wait(const struct seq *seq_, uint64_t value) > +seq_wait_at(const struct seq *seq_, uint64_t value, const char *where) > OVS_EXCLUDED(seq_mutex) > { > struct seq *seq = CONST_CAST(struct seq *, seq_); > > ovs_mutex_lock(&seq_mutex); > if (value == seq->value) { > - seq_wait__(seq, value); > + seq_wait__(seq, value, where); > } else { > - poll_immediate_wake(); > + poll_immediate_wake_at(where); > } > ovs_mutex_unlock(&seq_mutex); > } > diff --git a/lib/seq.h b/lib/seq.h > index c764809..38c0e52 100644 > --- a/lib/seq.h > +++ b/lib/seq.h > @@ -1,5 +1,5 @@ > /* > - * Copyright (c) 2013 Nicira, Inc. > + * Copyright (c) 2013, 2014 Nicira, Inc. > * > * Licensed under the Apache License, Version 2.0 (the "License"); > * you may not use this file except in compliance with the License. > @@ -111,6 +111,7 @@ > */ > > #include <stdint.h> > +#include "util.h" > > /* For implementation of an object with a sequence number attached. */ > struct seq *seq_create(void); > @@ -119,7 +120,9 @@ void seq_change(struct seq *); > > /* For observers. */ > uint64_t seq_read(const struct seq *); > -void seq_wait(const struct seq *, uint64_t value); > + > +void seq_wait_at(const struct seq *, uint64_t value, const char *where); > +#define seq_wait(seq, value) seq_wait_at(seq, value, SOURCE_LOCATOR) > > /* For poll_block() internal use. */ > void seq_woke(void); > -- > 1.7.10.4 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev