[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PULL 00/11] RCU, scsi, modules, icount changes for 201
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [PULL 00/11] RCU, scsi, modules, icount changes for 2015-01-30 |
Date: |
Mon, 02 Feb 2015 15:55:54 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.4.0 |
On 02/02/2015 15:36, Peter Maydell wrote:
> (Strictly speaking "local" isn't POSIX sh, but dash seems to cope
> with it, which is the major non-POSIX shell, and we have a couple
> of instances in configure already. Still, why do we need these
> variables to be local?)
Just for cleanliness; they aren't supposed to be used outside the function.
> Also some clang warnings:
> CC tests/rcutorture.o
> /Users/pm215/src/qemu/tests/rcutorture.c:260:13: warning: variable 'garbage'
> is
> uninitialized when used here [-Wuninitialized]
> garbage++;
> ^~~~~~~
> /Users/pm215/src/qemu/tests/rcutorture.c:244:25: note: initialize the variable
> 'garbage' to silence this warning
> volatile int garbage;
> ^
> = 0
> 1 warning generated.
Fixed.
> And the rcutorture test seems to hang on OSX, or at least take way
> longer than anything we put in 'make check' ought to take.
It should only take 2-3 seconds.
Can you try this:
diff --git a/tests/rcutorture.c b/tests/rcutorture.c
index e94caf2..b17b4a6 100644
--- a/tests/rcutorture.c
+++ b/tests/rcutorture.c
@@ -168,7 +168,7 @@ static void perftestrun(int nthreads, int duration,
int nreaders, int nupdaters)
g_usleep(1000);
}
goflag = GOFLAG_RUN;
- sleep(duration);
+ g_usleep(duration * G_USEC_PER_SEC);
goflag = GOFLAG_STOP;
wait_all_threads();
printf("n_reads: %lld n_updates: %ld nreaders: %d nupdaters: %d
duration: %d\n",
@@ -344,7 +344,7 @@ static void stresstest(int nreaders, int duration)
create_thread(rcu_fake_update_stress_test);
}
goflag = GOFLAG_RUN;
- sleep(duration);
+ g_usleep(duration * G_USEC_PER_SEC);
goflag = GOFLAG_STOP;
wait_all_threads();
printf("n_reads: %lld n_updates: %ld n_mberror: %d\n",
@@ -374,7 +374,7 @@ static void gtest_stress(int nreaders, int duration)
create_thread(rcu_fake_update_stress_test);
}
goflag = GOFLAG_RUN;
- sleep(duration);
+ g_usleep(duration * G_USEC_PER_SEC);
goflag = GOFLAG_STOP;
wait_all_threads();
g_assert_cmpint(n_mberror, ==, 0);
(though I doubt it matters: tests/fdc-test uses sleep(3) already)
and if it still fails, catch a backtrace of all threads?
Thanks,
Paolo