Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2071847
Tested: This is one of a series of patch sets to enable Arm SystemReady IR
support in the kernel for compliant platforms. This set updates the
RTC drivers as needed in drivers/rtc. This set has been tested via
simple boot tests, and of course the CI loop.
commit 1d1bb12a8b1805ddeef9793ebeb920179fb0fa38
Author: Cassio Neri <cassio.neri@gmail.com>
Date: Thu Jun 24 21:13:43 2021 +0100
rtc: Improve performance of rtc_time64_to_tm(). Add tests.
The current implementation of rtc_time64_to_tm() contains unnecessary
loops, branches and look-up tables. The new one uses an arithmetic-based
algorithm appeared in [1] and is approximately 4.3 times faster (YMMV).
The drawback is that the new code isn't intuitive and contains many 'magic
numbers' (not unusual for this type of algorithm). However, [1] justifies
all those numbers and, given this function's history, the code is unlikely
to need much maintenance, if any at all.
Add a KUnit test case that checks every day in a 160,000 years interval
starting on 1970-01-01 against the expected result. Add a new config
RTC_LIB_KUNIT_TEST symbol to give the option to run this test suite.
[1] Neri, Schneider, "Euclidean Affine Functions and Applications to
Calendar Algorithms". https://arxiv.org/abs/2102.06959
Signed-off-by: Cassio Neri <cassio.neri@gmail.com>
Reported-by: kernel test robot <lkp@intel.com>
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Link: https://lore.kernel.org/r/20210624201343.85441-1-cassio.neri@gmail.com
(cherry picked from commit 1d1bb12a8b1805ddeef9793ebeb920179fb0fa38)
Signed-off-by: Al Stone <ahs3@redhat.com>
Use SPDX-License-Identifier instead of a verbose license text. Also fix the
block comment alignment.
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Users may call 'ioctl' and pass a very big value on 'tm->tm_year'.
It can be overflowed in 'int' after add 1900.
In function 'rtc_month_days' and 'mktime64', also treated it as an
'unsigned' parameter.
UBSAN: Undefined behaviour in drivers/rtc/rtc-lib.c:103:59
signed integer overflow:
2147483647 + 1900 cannot be represented in type 'int'
UBSAN: Undefined behaviour in drivers/rtc/rtc-lib.c:119:30
signed integer overflow:
2147483647 + 1900 cannot be represented in type 'int'
So, covert it to 'unsigned' explicitly.
Signed-off-by: ZhangXiaoxu <zhangxiaoxu5@huawei.com>
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Rename core files so there is a clearer separation between the RTC core and
the RTC drivers.
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>