For one, "using_pit" shouldn't be set ahead of the function's last
(for now: only) error path. Otherwise "clocksource=pit" on the command
line can lead to misbehavior when actually taking that error path.
And then make an implicit assumption explicit: CALIBRATE_FRAC cannot,
for example, simply be changed to 10. The way init_pit() works, the
upper bound on the calibration period is about 54ms.
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
u64 start, end;
unsigned long count;
- using_pit = true;
-
/* Set the Gate high, disable speaker. */
outb((portb & ~0x02) | 0x01, 0x61);
* (LSB and MSB) to begin countdown.
*/
#define CALIBRATE_LATCH CALIBRATE_VALUE(CLOCK_TICK_RATE)
+ BUILD_BUG_ON(CALIBRATE_LATCH >> 16);
outb(0xb0, PIT_MODE); /* binary, mode 0, LSB/MSB, Ch 2 */
outb(CALIBRATE_LATCH & 0xff, PIT_CH2); /* LSB of count */
outb(CALIBRATE_LATCH >> 8, PIT_CH2); /* MSB of count */
if ( count == 0 )
return 0;
+ using_pit = true;
+
return (end - start) * CALIBRATE_FRAC;
}