>From the recent 4e44f3497d41db4c3b9051c61410dee8ae4fb49c commit, > asmlinkage long sys_time(time_t __user * tloc) > { > - time_t i; > - struct timeval tv; > + /* > + * We read xtime.tv_sec atomically - it's updated > + * atomically by update_wall_time(), so no need to > + * even read-lock the xtime seqlock: > + */ > + time_t i = xtime.tv_sec; > > - do_gettimeofday(&tv); > - i = tv.tv_sec; > + smp_rmb(); /* sys_time() results are coherent */
The is no reason to use rmb(), we don't do any LOADs which could be reordered. What we need is a simple compiler barrier, to prevent the reading of the "volatile" xtime.tv_sec twice. Signed-off-by: Oleg Nesterov <[EMAIL PROTECTED]> --- t/kernel/time.c~ 2007-06-26 16:28:59.000000000 +0400 +++ t/kernel/time.c 2007-06-26 16:32:09.000000000 +0400 @@ -64,7 +64,7 @@ asmlinkage long sys_time(time_t __user * */ time_t i = xtime.tv_sec; - smp_rmb(); /* sys_time() results are coherent */ + barrier(); /* sys_time() results are coherent */ if (tloc) { if (put_user(i, tloc)) - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/