Hi! Mezzano is an operating system written in Common lisp. I would like
to test it in bhyve. When I launch it, it spins infinitely in a loop
measuring how many CPU cycles it makes in a unit of time (I understood
it by adding various debug messages).
The timer it uses is something called a PIT:
https://wiki.osdev.org/Programmable_Interval_Timer
<https://wiki.osdev.org/Programmable_Interval_Timer>
The problem is, once the timer is configured it fires an interrupt only
once, while it obviously must fire interrupts constantly at some
frequency (100 Hz, as I understand from the code).
Is the PIT supported by bhyve? Does FreeBSD use it anywhere in its kernel?
Yes, though mode 3 of the timer isn't supported by the device
emulation. It appears that Mezzano uses that mode
https://github.com/froggey/Mezzano/blob/master/supervisor/x86-64/time.lisp#L20
Try this patch to the PIT code to see if it helps
https://people.freebsd.org/~grehan/bhyve_vatpit.diff
later,
Peter.