[PATCH] fix gettimeofday vs. update_gtod race
Benjamin Herrenschmidt
benh at kernel.crashing.org
Thu Aug 17 09:48:54 EST 2006
On Fri, 2006-08-11 at 15:41 -0500, Nathan Lynch wrote:
> + /* Sampling the time base must be done after loading
> + * do_gtod.varp in order to avoid racing with update_gtod.
> + */
> + rmb();
> + tb_ticks = get_tb() - temp_varp->tb_orig_stamp;
The barrier isn't necessary and the race not completely closed imho... I
need to think about it a bit more closely but what about instead just
check if tb_ticks goes negative, and if yes, just do get_tb() again ?
That might be faster than having a sync in there and should still be
correct.
> temp_tb_to_xs = temp_varp->tb_to_xs;
> temp_stamp_xsec = temp_varp->stamp_xsec;
> xsec = temp_stamp_xsec + mulhdu(tb_ticks, temp_tb_to_xs);
> @@ -464,7 +469,7 @@ void do_gettimeofday(struct timeval *tv)
> tv->tv_usec = usec;
> return;
> }
> - __do_gettimeofday(tv, get_tb());
> + __do_gettimeofday(tv);
> }
>
> EXPORT_SYMBOL(do_gettimeofday);
>
> _______________________________________________
> Linuxppc-dev mailing list
> Linuxppc-dev at ozlabs.org
> https://ozlabs.org/mailman/listinfo/linuxppc-dev
More information about the Linuxppc-dev
mailing list