Date: Wed, 24 Nov 2010 22:54:04 +1100 (EST) From: Bruce Evans <brde@optusnet.com.au> To: Gleb Smirnoff <glebius@freebsd.org> Cc: svn-src-stable@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org, svn-src-stable-8@freebsd.org, Bruce Evans <brde@optusnet.com.au> Subject: Re: svn commit: r215791 - stable/8/sys/netinet Message-ID: <20101124221820.X2463@besplex.bde.org> In-Reply-To: <20101124102922.GP98817@FreeBSD.org> References: <201011240537.oAO5bCSC056347@svn.freebsd.org> <20101124175843.I1829@besplex.bde.org> <20101124102922.GP98817@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, 24 Nov 2010, Gleb Smirnoff wrote: > On Wed, Nov 24, 2010 at 06:11:53PM +1100, Bruce Evans wrote: > B> > +++ stable/8/sys/netinet/if_ether.c Wed Nov 24 05:37:12 2010 (r215791) > B> > @@ -381,7 +381,7 @@ retry: > B> > int canceled; > B> > > B> > LLE_ADDREF(la); > B> > - la->la_expire = time_second + V_arpt_down; > B> > + la->la_expire = time_second; > B> > canceled = callout_reset(&la->la_timer, hz * V_arpt_down, > B> > arptimer, la); > B> > if (canceled) > B> > > B> > B> Isn't using non-monotic time for timeouts always wrong? monotonic > > Sure it is wrong. I never payed attention to that fact that time_second > could be non-monotic. Is it non-monotic? I failed to understand kern_tc > code at first glance. Real time (time_second) can go backwards (or jump forwards too much) if someone steps the the clock. In kern_tc.c, time_uptime is implemented as a purely monotonic clock which goes forward by 1 (second) approximately every 1 second of real-real-time, while time_second is misimplemented as essentially (boottime.tv_sec + time_uptime), where boottime is bogusly changed (although the actual boot time didn't change) if someone steps the realtime clock to fix drift in it, including for POSIX leap seconds and resumes. (Suspends stop the monotonic clock, and on resume only the real time clock is advanced by much (by bogusly setting boottime forwards so that (boottime.tv_sec + time_uptime) gives the correct real time.) Using real time is actually correct for some timeouts, mainly for long ones. E.g., ones for the next day shouldn't be 8 hours late because the system was suspended overnight. Bruce
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20101124221820.X2463>