mirror of
https://github.com/opnsense/src.git
synced 2026-05-27 20:02:43 -04:00
vmm: vlapic resume can eat 100% CPU by vlapic_callout_handler
Suspend/Resume of Win10 leads that CPU0 is busy on handling interrupts.
Win10 does not use LAPIC timer to often and in most cases, and I see it
is disabled by writing 0 to Initial Count Register (for Timer).
During resume, restart timer only for enabled LAPIC and enabled timer
for that LAPIC.
Reviewed by: markj
(cherry picked from commit c72e914cf1)
This commit is contained in:
parent
82acfc0d78
commit
b1ced97e75
1 changed files with 5 additions and 2 deletions
|
|
@ -1740,10 +1740,13 @@ vlapic_snapshot(struct vm *vm, struct vm_snapshot_meta *meta)
|
|||
|
||||
SNAPSHOT_VAR_OR_LEAVE(ccr, meta, ret, done);
|
||||
|
||||
if (meta->op == VM_SNAPSHOT_RESTORE) {
|
||||
if (meta->op == VM_SNAPSHOT_RESTORE &&
|
||||
vlapic_enabled(vlapic) && lapic->icr_timer != 0) {
|
||||
/* Reset the value of the 'timer_fire_bt' and the vlapic
|
||||
* callout based on the value of the current count
|
||||
* register saved when the VM snapshot was created
|
||||
* register saved when the VM snapshot was created.
|
||||
* If initial count register is 0, timer is not used.
|
||||
* Look at "10.5.4 APIC Timer" in Software Developer Manual.
|
||||
*/
|
||||
vlapic_reset_callout(vlapic, ccr);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue