Re: [PATCH v3 3/4] rtc: Add support for configuring the UIP timeout for RTC reads

From: kernel test robot
Date: Mon Nov 27 2023 - 22:02:17 EST


Hi Mario,

kernel test robot noticed the following build warnings:

[auto build test WARNING on 2cc14f52aeb78ce3f29677c2de1f06c0e91471ab]

url: https://github.com/intel-lab-lkp/linux/commits/Mario-Limonciello/rtc-mc146818-lib-Adjust-failure-return-code-for-mc146818_get_time/20231128-032825
base: 2cc14f52aeb78ce3f29677c2de1f06c0e91471ab
patch link: https://lore.kernel.org/r/20231127192553.9734-4-mario.limonciello%40amd.com
patch subject: [PATCH v3 3/4] rtc: Add support for configuring the UIP timeout for RTC reads
config: i386-randconfig-141-20231128 (https://download.01.org/0day-ci/archive/20231128/202311280845.YrtuJ0eq-lkp@xxxxxxxxx/config)
compiler: clang version 16.0.4 (https://github.com/llvm/llvm-project.git ae42196bc493ffe877a7e3dff8be32035dea4d07)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231128/202311280845.YrtuJ0eq-lkp@xxxxxxxxx/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Closes: https://lore.kernel.org/oe-kbuild-all/202311280845.YrtuJ0eq-lkp@xxxxxxxxx/

All warnings (new ones prefixed by >>):

>> drivers/rtc/rtc-mc146818-lib.c:82:5: warning: format specifies type 'int' but the argument has type 'long' [-Wformat]
UIP_RECHECK_TIMEOUT_MS(i));
^~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/printk.h:508:37: note: expanded from macro 'pr_warn'
printk(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__)
~~~ ^~~~~~~~~~~
include/linux/printk.h:455:60: note: expanded from macro 'printk'
#define printk(fmt, ...) printk_index_wrap(_printk, fmt, ##__VA_ARGS__)
~~~ ^~~~~~~~~~~
include/linux/printk.h:427:19: note: expanded from macro 'printk_index_wrap'
_p_func(_fmt, ##__VA_ARGS__); \
~~~~ ^~~~~~~~~~~
drivers/rtc/rtc-mc146818-lib.c:13:35: note: expanded from macro 'UIP_RECHECK_TIMEOUT_MS'
#define UIP_RECHECK_TIMEOUT_MS(x) (x / UIP_RECHECK_DELAY_MS)
^~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.


vim +82 drivers/rtc/rtc-mc146818-lib.c

14
15 /*
16 * Execute a function while the UIP (Update-in-progress) bit of the RTC is
17 * unset. The timeout is configurable by the caller in ms.
18 *
19 * Warning: callback may be executed more then once.
20 */
21 bool mc146818_avoid_UIP(void (*callback)(unsigned char seconds, void *param),
22 int timeout,
23 void *param)
24 {
25 int i;
26 unsigned long flags;
27 unsigned char seconds;
28
29 for (i = 0; i < UIP_RECHECK_TIMEOUT_MS(timeout); i++) {
30 spin_lock_irqsave(&rtc_lock, flags);
31
32 /*
33 * Check whether there is an update in progress during which the
34 * readout is unspecified. The maximum update time is ~2ms. Poll
35 * for completion.
36 *
37 * Store the second value before checking UIP so a long lasting
38 * NMI which happens to hit after the UIP check cannot make
39 * an update cycle invisible.
40 */
41 seconds = CMOS_READ(RTC_SECONDS);
42
43 if (CMOS_READ(RTC_FREQ_SELECT) & RTC_UIP) {
44 spin_unlock_irqrestore(&rtc_lock, flags);
45 udelay(UIP_RECHECK_DELAY);
46 continue;
47 }
48
49 /* Revalidate the above readout */
50 if (seconds != CMOS_READ(RTC_SECONDS)) {
51 spin_unlock_irqrestore(&rtc_lock, flags);
52 continue;
53 }
54
55 if (callback)
56 callback(seconds, param);
57
58 /*
59 * Check for the UIP bit again. If it is set now then
60 * the above values may contain garbage.
61 */
62 if (CMOS_READ(RTC_FREQ_SELECT) & RTC_UIP) {
63 spin_unlock_irqrestore(&rtc_lock, flags);
64 udelay(UIP_RECHECK_DELAY);
65 continue;
66 }
67
68 /*
69 * A NMI might have interrupted the above sequence so check
70 * whether the seconds value has changed which indicates that
71 * the NMI took longer than the UIP bit was set. Unlikely, but
72 * possible and there is also virt...
73 */
74 if (seconds != CMOS_READ(RTC_SECONDS)) {
75 spin_unlock_irqrestore(&rtc_lock, flags);
76 continue;
77 }
78 spin_unlock_irqrestore(&rtc_lock, flags);
79
80 if (i >= UIP_RECHECK_TIMEOUT_MS(100))
81 pr_warn("Reading current time from RTC took around %d ms\n",
> 82 UIP_RECHECK_TIMEOUT_MS(i));
83
84 return true;
85 }
86 return false;
87 }
88 EXPORT_SYMBOL_GPL(mc146818_avoid_UIP);
89

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki