RE: [PATCH v2 1/1] x86/hyperv: Initialize clockevents earlier in CPU onlining
From: Dexuan Cui <decui@microsoft.com>
Date: 2019-11-15 06:49:01
Also in:
lkml
From: Dexuan Cui <decui@microsoft.com>
Date: 2019-11-15 06:49:01
Also in:
lkml
From: Michael Kelley <redacted> Sent: Tuesday, November 12, 2019 5:12 PM ...@@ -190,14 +278,20 @@ void hv_stimer_free(void) void hv_stimer_global_cleanup(void) { int cpu; ... + /* + * hv_stime_legacy_cleanup() will stop the stimer if Direct + * Mode is not enabled, and fallback to the LAPIC timer. + */ + for_each_present_cpu(cpu) { + hv_stimer_legacy_cleanup(cpu); } + + /* + * If Direct Mode is enabled, the cpuhp teardown callback + * (hv_stimer_cleanup) will be run on all CPUs to stop the + * stimers. + */ hv_stimer_free(); }
In the case of direct_mode_enabled == true: When hv_vmbus unloads, vmbus_exit() -> hv_stimer_global_cleanup() -> hv_stimer_free() -> cpuhp_remove_state() disables the direct mode timers. This does not look symmetric since hv_stimer_alloc() is called before hv_vmbus loads, but I suppose this is not a real issue because hv_vmbus should never unload in practice. :-) Tested-by: Dexuan Cui <decui@microsoft.com> Reviewed-by: Dexuan Cui <decui@microsoft.com>