* Dave Voutila <[email protected]> [2018-02-22 23:40:21 -0500]:
Synopsis: VMD consumes 100% cpu after unpausing guest
Category: amd64
Environment:
System : OpenBSD 6.2
Details : OpenBSD 6.2-current (GENERIC.MP) #10: Wed Feb 21 21:26:27
MST 2018
[email protected]:/usr/src/sys/arch/amd64/compile/GENERIC.MP
Architecture: OpenBSD.amd64
Machine : amd64
Description:
Not sure if this is a known issue, but I couldn't find anything
searching the lists.
Using an Alpine Linux guest vm, I can successfully pause the guest using
`vmctl pause 1` and some time later resume it using `vmctl unpause 1`.
Unpausing works as the guest comes back to life, I can SSH back in, and
it's fine. However, on the host the vmd process representing that guest
sits at 100% CPU utilization with 1 thread constantly queueing onto a
cpu and running. The guest reports normal load so it must be one of the
2 threads.
This should fix it.
Use rtc_reschedule_per in mc146818_start instead of re arming the
periodic interrupt without checking if it's enabled in REGB.
ok?
--
Pratik
Index: usr.sbin/vmd/mc146818.c
===================================================================
RCS file: /home/pdvyas/cvs/src/usr.sbin/vmd/mc146818.c,v
retrieving revision 1.15
diff -u -p -a -u -r1.15 mc146818.c
--- usr.sbin/vmd/mc146818.c 9 Jul 2017 00:51:40 -0000 1.15
+++ usr.sbin/vmd/mc146818.c 27 Feb 2018 02:47:18 -0000
@@ -354,6 +354,6 @@ mc146818_stop()
void
mc146818_start()
{
- evtimer_add(&rtc.per, &rtc.per_tv);
evtimer_add(&rtc.sec, &rtc.sec_tv);
+ rtc_reschedule_per();
}