#
66145c38 |
| 09-Aug-2024 |
Sebastian Huber <sebastian.huber@embedded-brains.de> |
ntptime: Use time_t for tv_sec related variables
The struct timespec tv_sec member is of type time_t. Make sure that all variables related to this member are of the type time_t. This is important
ntptime: Use time_t for tv_sec related variables
The struct timespec tv_sec member is of type time_t. Make sure that all variables related to this member are of the type time_t. This is important for targets where long is a 32-bit type and time_t a 64-bit type.
Reviewed by: imp Pull Request: https://github.com/freebsd/freebsd-src/pull/1373
show more ...
|
Revision tags: release/14.1.0, release/13.3.0, release/14.0.0 |
|
#
685dc743 |
| 16-Aug-2023 |
Warner Losh <imp@FreeBSD.org> |
sys: Remove $FreeBSD$: one-line .c pattern
Remove /^[\s*]*__FBSDID\("\$FreeBSD\$"\);?\s*\n/
|
#
af9ce4e9 |
| 08-Jun-2023 |
Dmitriy Alexandrov <d06alexandrov@users.noreply.github.com> |
kern_ntptime: Fix undefined behavior of the shift operator
L_LINT macro is used with negative numbers [i.e. L_LINT(time_freq, -MAXFREQ)], it could cause undefined behavior. It should be similar to t
kern_ntptime: Fix undefined behavior of the shift operator
L_LINT macro is used with negative numbers [i.e. L_LINT(time_freq, -MAXFREQ)], it could cause undefined behavior. It should be similar to the L_RSHIFT(v, n) macro.
MFC after: 2 weeks Reviewed by: cy Pull Request: https://github.com/freebsd/freebsd-src/pull/769 Signed-off-by: Dmitriy Alexandrov <d06alexandrov@gmail.com>
show more ...
|
Revision tags: release/13.2.0 |
|
#
1e48d9d3 |
| 27-Feb-2023 |
Sebastian Huber <sebastian.huber@embedded-brains.de> |
pps: Simplify the nsec calculation in pps_event()
Let A be the current calculation of the frequency accumulator (pps_fcount) update in pps_event()
scale = (uint64_t)1 << 63; scale /= captc->tc_
pps: Simplify the nsec calculation in pps_event()
Let A be the current calculation of the frequency accumulator (pps_fcount) update in pps_event()
scale = (uint64_t)1 << 63; scale /= captc->tc_frequency; scale *= 2; bt.sec = 0; bt.frac = 0; bintime_addx(&bt, scale * tcount); bintime2timespec(&bt, &ts); hardpps(tsp, ts.tv_nsec + 1000000000 * ts.tv_sec);
and hardpps(..., delta_nsec):
u_nsec = delta_nsec; if (u_nsec > (NANOSECOND >> 1)) u_nsec -= NANOSECOND; else if (u_nsec < -(NANOSECOND >> 1)) u_nsec += NANOSECOND; pps_fcount += u_nsec;
This change introduces a new calculation which is slightly simpler and more straight forward. Name it B.
Consider the following sample values with a tcount of 2000000100 and a tc_frequency of 2000000000 (2GHz).
For A, the scale is 9223372036. Then scale * tcount is 18446744994337203600 which is larger than UINT64_MAX (= 18446744073709551615). The result is 920627651984 == 18446744994337203600 % UINT64_MAX. Since all operands are unsigned the result is well defined through modulo arithmetic. The result of bintime2timespec(&bt, &ts) is 49. This is equal to the correct result 1000000049 % NANOSECOND.
In hardpps(), both conditional statements are not executed and pps_fcount is incremented by 49.
For the new calculation B, we have 1000000000 * tcount is 2000000100000000000 which is less than UINT64_MAX. This yields after the division with tc_frequency the correct result of 1000000050 for delta_nsec.
In hardpps(), the first conditional statement is executed and pps_fcount is incremented by 50.
This shows that both methods yield roughly the same results. However, method B is easier to understand and requires fewer conditional statements.
Reviewed by: imp Pull Request: https://github.com/freebsd/freebsd-src/pull/604
show more ...
|
#
a066bba2 |
| 13-Feb-2023 |
Mateusz Guzik <mjg@FreeBSD.org> |
ntptime: ansify
Sponsored by: Rubicon Communications, LLC ("Netgate")
|
#
c7c53e3c |
| 25-Jan-2023 |
Sebastian Huber <sebastian.huber@embedded-brains.de> |
Clarify hardpps() parameter name and comment
Since 32c203577a5e by phk in 1999 (Make even more of the PPSAPI implementations generic), the "nsec" parameter of hardpps() is a time difference and no l
Clarify hardpps() parameter name and comment
Since 32c203577a5e by phk in 1999 (Make even more of the PPSAPI implementations generic), the "nsec" parameter of hardpps() is a time difference and no longer a time point. Change the name to "delta_nsec" and adjust the comment.
Remove comment about a clock tick adjustment which is no longer in the code.
Pull Request: https://github.com/freebsd/freebsd-src/pull/640 Reviewed by: imp
show more ...
|
Revision tags: release/12.4.0, release/13.1.0 |
|
#
3ec0dc36 |
| 07-Feb-2022 |
Sebastian Huber <sebastian.huber@embedded-brains.de> |
kern_ntptime.c: Remove ntp_init()
The ntp_init() function did set a couple of global objects to zero. These objects are in the .bss section and already initialized to zero during kernel or module l
kern_ntptime.c: Remove ntp_init()
The ntp_init() function did set a couple of global objects to zero. These objects are in the .bss section and already initialized to zero during kernel or module loading.
show more ...
|
Revision tags: release/12.3.0, release/13.0.0 |
|
#
be2535b0 |
| 04-Dec-2020 |
Konstantin Belousov <kib@FreeBSD.org> |
Add kern_ntp_adjtime(9).
Reviewed by: brooks, cy Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D27471
|
#
e5a307c6 |
| 24-Nov-2020 |
Cy Schubert <cy@FreeBSD.org> |
Fix a typo in a comment.
MFC after: 3 days
|
Revision tags: release/12.2.0 |
|
#
6fed89b1 |
| 02-Sep-2020 |
Mateusz Guzik <mjg@FreeBSD.org> |
kern: clean up empty lines in .c and .h files
|
Revision tags: release/11.4.0 |
|
#
75dfc66c |
| 27-Feb-2020 |
Dimitry Andric <dim@FreeBSD.org> |
Merge ^/head r358269 through r358399.
|
#
7029da5c |
| 26-Feb-2020 |
Pawel Biernacki <kaktus@FreeBSD.org> |
Mark more nodes as CTLFLAG_MPSAFE or CTLFLAG_NEEDGIANT (17 of many)
r357614 added CTLFLAG_NEEDGIANT to make it easier to find nodes that are still not MPSAFE (or already are but aren’t properly mark
Mark more nodes as CTLFLAG_MPSAFE or CTLFLAG_NEEDGIANT (17 of many)
r357614 added CTLFLAG_NEEDGIANT to make it easier to find nodes that are still not MPSAFE (or already are but aren’t properly marked). Use it in preparation for a general review of all nodes.
This is non-functional change that adds annotations to SYSCTL_NODE and SYSCTL_PROC nodes using one of the soon-to-be-required flags.
Mark all obvious cases as MPSAFE. All entries that haven't been marked as MPSAFE before are by default marked as NEEDGIANT
Approved by: kib (mentor, blanket) Commented by: kib, gallatin, melifaro Differential Revision: https://reviews.freebsd.org/D23718
show more ...
|
Revision tags: release/12.1.0, release/11.3.0, release/12.0.0 |
|
#
3d5db455 |
| 24-Nov-2018 |
Dimitry Andric <dim@FreeBSD.org> |
Merge ^/head r340427 through r340868.
|
#
c7dc361d |
| 20-Nov-2018 |
Mark Johnston <markj@FreeBSD.org> |
Clear pad bytes in the struct exported by kern.ntp_pll.gettime.
Reported by: Thomas Barabosch, Fraunhofer FKIE MFC after: 3 days Sponsored by: The FreeBSD Foundation
|
Revision tags: release/11.2.0 |
|
#
fb441a88 |
| 27-Mar-2018 |
Konstantin Belousov <kib@FreeBSD.org> |
Fix several leaks of kernel stack data through paddings.
It is random collection of fixes for issues not yet corrected, reported at https://tsyrklevi.ch/clang_analyzer/freebsd_013017/. Many issues f
Fix several leaks of kernel stack data through paddings.
It is random collection of fixes for issues not yet corrected, reported at https://tsyrklevi.ch/clang_analyzer/freebsd_013017/. Many issues from that list were already corrected. Most of them are for compat32, old compat32 or affect both primary host ABI and compat32.
The freebsd32_kldstat(), for instance, was already fixed by using malloc(M_ZERO). Patch includes correction to report the supplied version back, which is just pedantic.
Reviewed by: brooks, emaste (previous version) Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D14868
show more ...
|
Revision tags: release/10.4.0, release/11.1.0 |
|
#
9b3ece1c |
| 04-Feb-2017 |
Enji Cooper <ngie@FreeBSD.org> |
MFhead@r313243
|
#
14f850f3 |
| 27-Jan-2017 |
Dimitry Andric <dim@FreeBSD.org> |
Merge ^/head r312720 through r312893.
|
#
f27ac8e2 |
| 25-Jan-2017 |
Ed Maste <emaste@FreeBSD.org> |
ANSIfy kern_ntptime.c
|
Revision tags: release/11.0.1, release/11.0.0 |
|
#
27067774 |
| 16-Aug-2016 |
Dimitry Andric <dim@FreeBSD.org> |
Merge ^/head r303250 through r304235.
|
#
4493f659 |
| 27-Jul-2016 |
Konstantin Belousov <kib@FreeBSD.org> |
Fix a bug in r302252.
Change ntpadj_lock to spinlock always, and rename stuff removing ADJ/adj from the names. ntp_update_second() requires ntp_lock and is called from the tc_windup(), so ntp_lock m
Fix a bug in r302252.
Change ntpadj_lock to spinlock always, and rename stuff removing ADJ/adj from the names. ntp_update_second() requires ntp_lock and is called from the tc_windup(), so ntp_lock must be a spinlock. Add missed lock to ntp_update_second().
Tested by: pho (as part of the whole patch) Reviewed by: jhb (same) Noted by: bde Sponsored by: The FreeBSD Foundation MFC after: 1 month X-Differential revision: https://reviews.freebsd.org/D7302
show more ...
|
#
364c516c |
| 28-Jun-2016 |
Konstantin Belousov <kib@FreeBSD.org> |
Currently the ntptime code and resettodr() are Giant-locked. In particular, the Giant is supposed to protect against parallel ntp_adjtime(2) invocations. But, for instance, sys_ntp_adjtime() does co
Currently the ntptime code and resettodr() are Giant-locked. In particular, the Giant is supposed to protect against parallel ntp_adjtime(2) invocations. But, for instance, sys_ntp_adjtime() does copyout(9) under Giant and then examines time_status to return syscall result. Since copyout(9) could sleep, the syscall result might be inconsistent.
Another and more important issue is that if PPS is configured, hardpps(9) is executed without any protection against the parallel top-level code invocation. Potentially, this may result in the inconsistent state of the ntptime state variables, but I cannot say how serious such distortion is. The non-functional splclock() call in sys_ntp_adjtime() protected against clock interrupts calling hardpps() in the pre-SMP era.
Modernize the locking. A mutex protects ntptime data. Due to the hardpps() KPI legitimately serving from the interrupt filters (and e.g. uart(4) does call it from filter), the lock cannot be sleepable mutex if PPS_SYNC is defined. Otherwise, use normal sleepable mutex to reduce interrupt latency.
Reviewed by: imp, jhb Sponsored by: The FreeBSD Foundation Approved by: re (gjb) Differential revision: https://reviews.freebsd.org/D6825
show more ...
|
Revision tags: release/10.3.0 |
|
#
b5ff185e |
| 12-Sep-2015 |
Baptiste Daroussin <bapt@FreeBSD.org> |
Merge from head
|
#
ab875b71 |
| 14-Aug-2015 |
Navdeep Parhar <np@FreeBSD.org> |
Catch up with head, primarily for the 1.14.4.0 firmware.
|
Revision tags: release/10.2.0 |
|
#
8d0f1085 |
| 22-Jul-2015 |
Dimitry Andric <dim@FreeBSD.org> |
Merge ^/head r285341 through r285792.
|
#
969fc29e |
| 12-Jul-2015 |
Ian Lepore <ian@FreeBSD.org> |
Use the monotonic (uptime) counter rather than time-of-day to measure elapsed time between ntp_adjtime() clock offset adjustments. This eliminates spurious frequency steering after a large clock ste
Use the monotonic (uptime) counter rather than time-of-day to measure elapsed time between ntp_adjtime() clock offset adjustments. This eliminates spurious frequency steering after a large clock step (such as a 1970->2015 step on a system with no battery-backed clock hardware).
This problem was discovered after the import of ntpd 4.2.8, which does things in a slightly different (but still correct) order than the 4.2.4 we had previously. In particular, 4.2.4 would step the clock then immediately after use ntp_adjtime() to set the frequency and offset to zero, which captured the post-step time-of-day as a side effect. In 4.2.8, ntpd sets frequency and offset to zero before any initial clock step, capturing the time as 1970-ish, then when it next calls ntp_adjtime() it's with a non-zero offset measurement. This non-zero value gets multiplied by the apparent 45-year interval, which blows up into a completely bogus frequency steer. That gets clamped to 500ppm, but that's still enough to make the clock drift so fast that ntpd has to keep stepping it every few minutes to compensate.
show more ...
|