Hi Gilles,
Gilles Carry wrote:
> This flag is set by timer_thread when the sampling is finished.
> This fixes this deadlock/race condition:
> 1. busy threads run until main thread exits
> 2. main thread waits for timer_thread to finish
> 3. timer_thread is writing samples results into
> files and waits for a filesystem global lock to be released
> 4. sync threads (kjournald, pdflush) with non-rt prio hold
> the above mentioned lock and cannot finish their job because
> cpu is hogged by busy threads.
>
> Solution: tell busy threads to quit before writing to disk.
>
> Signed-off-by: Gilles Carry <[EMAIL PROTECTED]>
> Cc: Darren Hart <[EMAIL PROTECTED]>
> Cc: Tim Chavez <[EMAIL PROTECTED]>
>
I first ran the "hrtimer-prio" test case without this patch and could
get the system to hang repeatedly and frequently (nearly every attempt,
actually). After applying this patch and running the test about 100,000
times, I saw no more hangs. Thanks, Gilles!
Acked-by: Timothy R. Chavez <[EMAIL PROTECTED]>
> ---
> .../realtime/func/hrtimer-prio/hrtimer-prio.c | 4 +++-
> 1 files changed, 3 insertions(+), 1 deletions(-)
>
> diff --git a/testcases/realtime/func/hrtimer-prio/hrtimer-prio.c
> b/testcases/realtime/func/hrtimer-prio/hrtimer-prio.c
> index f22ca83..9e051aa 100644
> --- a/testcases/realtime/func/hrtimer-prio/hrtimer-prio.c
> +++ b/testcases/realtime/func/hrtimer-prio/hrtimer-prio.c
> @@ -63,6 +63,7 @@ static int busy_time = DEF_BUSY_TIME;
> static int iterations = DEF_ITERATIONS;
> static unsigned long criteria = DEF_CRITERIA;
> static int busy_threads;
> +static int busy_exit = 0;
>
> static stats_container_t dat;
> static atomic_t busy_threads_started;
> @@ -117,7 +118,7 @@ int parse_args(int c, char *v)
> void *busy_thread(void *thread)
> {
> atomic_inc(&busy_threads_started);
> - while (1) {
> + while (!busy_exit) {
> busy_work_ms(busy_time);
> sched_yield();
> }
> @@ -146,6 +147,7 @@ void *timer_thread(void *thread)
> max_delta = MAX(max_delta, delta_us);
> min_delta = (i == 0) ? delta_us : MIN(min_delta, delta_us);
> }
> + busy_exit = 1; // Tell busy_threads to exit.
> return NULL;
> }
>
>
-tim
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list