Jarno, Thanks for the patch. With this patch, I confirmed that I no longer encounter the problem I reported before. Just curious but where is VLOG_INFO() written to in this case?
--- Motonori Shindo 2015-01-13 6:27 GMT+09:00 Jarno Rajahalme <jrajaha...@nicira.com>: > When the test suite is run on an OS with 1 core (e.g., a VM with one > core assigned to it), some of the atomic memory model tests take a > long time, with the effect that the test seems stuck. > > This patch stops these tests after one second and only fails the test > if there has not been any significant progress, allowing the test to > pass also when running only with one core. > > Reported-by: Motonori Shindo <moton...@shin.do> > Signed-off-by: Jarno Rajahalme <jrajaha...@nicira.com> > --- > tests/test-atomic.c | 40 ++++++++++++++++++++++++++++++++++++---- > 1 file changed, 36 insertions(+), 4 deletions(-) > > diff --git a/tests/test-atomic.c b/tests/test-atomic.c > index dcd0a73..0f7f2c0 100644 > --- a/tests/test-atomic.c > +++ b/tests/test-atomic.c > @@ -17,9 +17,13 @@ > #include <config.h> > #undef NDEBUG > #include "ovs-atomic.h" > -#include "util.h" > #include "ovstest.h" > #include "ovs-thread.h" > +#include "timeval.h" > +#include "util.h" > +#include "openvswitch/vlog.h" > + > +VLOG_DEFINE_THIS_MODULE(test_atomic); > > #define TEST_ATOMIC_TYPE(ATOMIC_TYPE, BASE_TYPE) \ > { \ > @@ -186,6 +190,7 @@ atomic_consumer(void * arg1 OVS_UNUSED) > { > struct atomic_aux *old_aux = NULL; > uint64_t count; > + long long int stop_time = time_msec() + 1000; > > do { > struct atomic_aux *aux; > @@ -202,7 +207,14 @@ atomic_consumer(void * arg1 OVS_UNUSED) > ovs_assert(b == count + 42); > > old_aux = aux; > - } while (count < ATOMIC_ITEM_COUNT - 1); > + } while (count < ATOMIC_ITEM_COUNT - 1 && time_msec() < stop_time); > + > + if (time_msec() >= stop_time) { > + if (count < 10) { > + VLOG_INFO("atomic_consumer test stopped due to excessive > runtime. " > + "Count = %"PRIu64, count); > + } > + } > > return NULL; > } > @@ -249,6 +261,8 @@ atomic_reader(void *aux_) > struct atomic_aux *aux = aux_; > uint64_t count; > uint64_t data; > + long long int now = time_msec(); > + long long int stop_time = now + 1000; > > do { > /* Non-synchronized add. */ > @@ -256,7 +270,15 @@ atomic_reader(void *aux_) > > do { > atomic_read_explicit(&aux->data64, &data, > memory_order_acquire); > - } while (!data); > + } while (!data && (now = time_msec()) < stop_time); > + > + if (now >= stop_time) { > + if (count < 10) { > + VLOG_INFO("atomic_reader test stopped due to excessive " > + "runtime. Count = %"PRIu64, count); > + } > + break; > + } > > ovs_assert(data == a && data == aux->b && a == aux->b); > > @@ -277,12 +299,22 @@ atomic_writer(void *aux_) > uint64_t old_count; > uint64_t data; > size_t i; > + long long int now = time_msec(); > + long long int stop_time = now + 1000; > > for (i = 0; i < ATOMIC_ITEM_COUNT; i++) { > /* Wait for the reader to be done with the data. */ > do { > atomic_read_explicit(&aux->data64, &data, > memory_order_acquire); > - } while (data); > + } while (data && (now = time_msec()) < stop_time); > + > + if (now >= stop_time) { > + if (i < 10) { > + VLOG_INFO("atomic_writer test stopped due to excessive " > + "runtime, Count = %"PRIuSIZE, i); > + } > + break; > + } > > a = i + 1; > atomic_add_explicit(&aux->count, 1, &old_count, > memory_order_relaxed); > -- > 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