Two fixes for timers:
- Use the ALARM feature check in the alarmtimer core code insted of the old method of checking for the set_alarm() callback. Drivers can have that callback set but the feature bit cleared. If such a RTC device is selected then alarms wont work. - Use a proper define to let the preprocessor check whether Hyper-V VDSO clocksource should be active. The code used a constant in an enum with #ifdef, which evaluates to always false and disabled the clocksource for VDSO. -----BEGIN PGP SIGNATURE----- iQJHBAABCgAxFiEEQp8+kY+LLUocC4bMphj1TA10mKEFAmChLI8THHRnbHhAbGlu dXRyb25peC5kZQAKCRCmGPVMDXSYoUJMD/wOQ/R7jXe/EWti3+w11TATvkP+ZzDv LcAfZ/ZP8wgrUTbjLqTTyeOFoI9q39emnq3FvCoRsF+rdHRbnZNAB3kWQmh/i1tL j8BuGogzvVLkBmriQIzVxYgEroCZVySWkO27B7ToBq64IeI4IBVB4jQiJis614m7 5wTHKgN0MkAtWUmwDqkqycFDuWyZNPkR3Ht26zk46Lvk0dmIPh14zbVzezfFEtq4 9DBeGuLDLVtzaBNLWUvnpXL7wxuFB+E8euO5otbmgRNz7CXaE6e6zy6zspK2ahmp FRq+nrG6yK6ucoFhGFABfKZCGorhh1ghhniPUXQKP9B29z146pN6TLFAVAutBk4z RoRdyGb9npoO1pB0f2tl0U65TBBlMCnLnDB3hcQ/eyMG7AC8ABHalBIFUjzEPB4b 3eDa+ZxfkW8/oiSLTssQiJ6TJW1EQNaVja1TuHvtPi5RdasbS4LEkQnDaePQ3/nl tDLekfsDF4KxetZehIlRDqyN9cqIHVphs3pTysyWR7+aOTduWWF58ZtgR7SvTCVu 7Zu+PhP06A1MtEugnwcAcpG5XYCsAXdZXinuQhPndXqazN4wMJkanXNk03z//JmQ wG//lFAC+9EfA8i9RDr2DeE6JISD2g+jj2Di9bjjxelp5Mi0bNZ0zdIiww6EJjRg v4F0vCp3By8SQg== =TruV -----END PGP SIGNATURE----- Merge tag 'timers-urgent-2021-05-16' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip Pull timer fixes from Thomas Gleixner: "Two fixes for timers: - Use the ALARM feature check in the alarmtimer core code insted of the old method of checking for the set_alarm() callback. Drivers can have that callback set but the feature bit cleared. If such a RTC device is selected then alarms wont work. - Use a proper define to let the preprocessor check whether Hyper-V VDSO clocksource should be active. The code used a constant in an enum with #ifdef, which evaluates to always false and disabled the clocksource for VDSO" * tag 'timers-urgent-2021-05-16' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: clocksource/drivers/hyper-v: Re-enable VDSO_CLOCKMODE_HVCLOCK on X86 alarmtimer: Check RTC features instead of ops
This commit is contained in:
commit
8ce3648158
|
@ -7,4 +7,6 @@
|
||||||
VDSO_CLOCKMODE_PVCLOCK, \
|
VDSO_CLOCKMODE_PVCLOCK, \
|
||||||
VDSO_CLOCKMODE_HVCLOCK
|
VDSO_CLOCKMODE_HVCLOCK
|
||||||
|
|
||||||
|
#define HAVE_VDSO_CLOCKMODE_HVCLOCK
|
||||||
|
|
||||||
#endif /* __ASM_VDSO_CLOCKSOURCE_H */
|
#endif /* __ASM_VDSO_CLOCKSOURCE_H */
|
||||||
|
|
|
@ -419,7 +419,7 @@ static void resume_hv_clock_tsc(struct clocksource *arg)
|
||||||
hv_set_register(HV_REGISTER_REFERENCE_TSC, tsc_msr);
|
hv_set_register(HV_REGISTER_REFERENCE_TSC, tsc_msr);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef VDSO_CLOCKMODE_HVCLOCK
|
#ifdef HAVE_VDSO_CLOCKMODE_HVCLOCK
|
||||||
static int hv_cs_enable(struct clocksource *cs)
|
static int hv_cs_enable(struct clocksource *cs)
|
||||||
{
|
{
|
||||||
vclocks_set_used(VDSO_CLOCKMODE_HVCLOCK);
|
vclocks_set_used(VDSO_CLOCKMODE_HVCLOCK);
|
||||||
|
@ -435,7 +435,7 @@ static struct clocksource hyperv_cs_tsc = {
|
||||||
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
|
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
|
||||||
.suspend= suspend_hv_clock_tsc,
|
.suspend= suspend_hv_clock_tsc,
|
||||||
.resume = resume_hv_clock_tsc,
|
.resume = resume_hv_clock_tsc,
|
||||||
#ifdef VDSO_CLOCKMODE_HVCLOCK
|
#ifdef HAVE_VDSO_CLOCKMODE_HVCLOCK
|
||||||
.enable = hv_cs_enable,
|
.enable = hv_cs_enable,
|
||||||
.vdso_clock_mode = VDSO_CLOCKMODE_HVCLOCK,
|
.vdso_clock_mode = VDSO_CLOCKMODE_HVCLOCK,
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -92,7 +92,7 @@ static int alarmtimer_rtc_add_device(struct device *dev,
|
||||||
if (rtcdev)
|
if (rtcdev)
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
|
|
||||||
if (!rtc->ops->set_alarm)
|
if (!test_bit(RTC_FEATURE_ALARM, rtc->features))
|
||||||
return -1;
|
return -1;
|
||||||
if (!device_may_wakeup(rtc->dev.parent))
|
if (!device_may_wakeup(rtc->dev.parent))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
Loading…
Reference in New Issue