<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div class="gmail_default" style="font-size:small">Hi Richard,</div><div class="gmail_default" style="font-size:small"> <br></div><div class="gmail_extra"><div><div class="gmail_default" style="font-size:small">I have gone though this new fzsync API, the whole picture looks good but with a tiny issue maybe be needs adjustment.</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">1. Moving the expired time detection to tst_fzsync_end_race_a() function, because it maybe better if exit the loop after finishing a complete race testing, and it also makes the _start_race_a() more aligned to _start_race_b() I guess.</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default">2. Do fzsync_pair_cleanup when the expired time occuring. This is for JOIN the threads which might have collision(I know it has very small probability but in case of that)with new threads if with -i parameter. And re-org the tst_fzsync_clenaup() to make sure to be widely used.</div></div><div class="gmail_default"><br></div><div class="gmail_default">So, for suggestion 1&2, the related function will be changed as:</div><div class="gmail_default"><br></div><div class="gmail_default"><div class="gmail_default">static void tst_fzsync_pair_cleanup(struct tst_fzsync_pair *pair)</div><div class="gmail_default">{</div><div class="gmail_default"><span style="white-space:pre">    </span>tst_fzsync_pair_exit(pair);</div><div class="gmail_default"><br></div><div class="gmail_default"><span style="white-space:pre">  </span>if (pair->thread_b) {</div><div class="gmail_default"><span style="white-space:pre">              </span>SAFE_PTHREAD_JOIN(pair->thread_b, 0);</div><div class="gmail_default"><span style="white-space:pre">              </span>pair->thread_b = 0;</div><div class="gmail_default"><span style="white-space:pre">        </span>}</div><div class="gmail_default">}</div><div><br></div></div><div class="gmail_default"><div class="gmail_default">static inline int tst_fzsync_end_race_a(struct tst_fzsync_pair *pair)</div><div class="gmail_default">{</div><div class="gmail_default"><span style="white-space:pre"> </span>if (tst_timer_expired_st(&pair->timer)) {</div><div class="gmail_default"><span style="white-space:pre">              </span>tst_res(TINFO,</div><div class="gmail_default"><span style="white-space:pre">                        </span>"Exceeded fuzzy sync time limit, requesting exit");</div><div class="gmail_default"><span style="white-space:pre">         </span>tst_fzsync_pair_cleanup(pair);</div><div class="gmail_default"><span style="white-space:pre">        </span>}</div><div class="gmail_default"><br></div><div class="gmail_default"><span style="white-space:pre">    </span>tst_fzsync_time(&pair->a_end);</div><div class="gmail_default"><span style="white-space:pre"> </span>return tst_fzsync_pair_wait(pair, &pair->a_cntr, &pair->b_cntr,</div><div class="gmail_default"><span style="white-space:pre">                         </span>    &pair->spins);</div><div class="gmail_default">}</div><div><br></div><div>3. I tend to agree with Cyril's opinion, to take use of the tst_timeout_remaining() function which will be introduced by Jan's patch for move_pages12, then fzsync can drop the expired time detection by with new timer function involved.</div><div><br></div><div>4. The usage of fzsync is not very neat. For example in some places you put tst_fzsync_start_race_b(&pair) into curves but others not, I know that because of different situation needs variant race condition area,</div><div>but if we can have a uniform format to satisfy that, it would be more happy to users.</div><div><br></div><div>5. I do not fully understand about the 'tst_fzsync_stat' part, if you can give more explanation in code comments, that will be much appreciated.</div><div><br></div></div><div><div class="gmail_default" style="font-size:small">Btw, I have tried this new API with my rhel7.5 x86_64 system, it woks fine with or without -i parameter, and it also does correctly when the execution_time expired. These comments are just FYI. Thanks!</div></div><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><div>Regards,<br></div><div>Li Wang<br></div></div></div>
</div></div></div></div></div></div></div></div></div></div></div></div></div>