ftp://ftp.plex86.org/pub/plex86/plex86-diffs.2000_0625a
OK, some mods to plex86 to make the monitor interruptible.
When the guest is executing, the VM was always interruptible,
but there can be some extensive processing in the monitor
during emulation of instructions and prescanning etc. Now
even that processing is interruptible, so we can pass hardware
interrupts back to the host very quickly.
I ran all three guests many times with no random crashes
or panics. Last night I ran all 3 at one time and left
them running all night with no crashs. Still spinning
away in the morning.
The only thing wrong I see is, when I killed the VMs, the user
code reports:
Unmapping guest physical memory
Tearing down VM
ioctl
: Device or resource busy
and the kernel logs:
kernel: plex86: guest memory is still mapped!
I'm not sure what's doing that.
-Kevin
=====================================================
>From the ChangeLog:
- "Kevin P. Lawton" <[EMAIL PROTECTED]>:
Incoporated fix from Ulrich for broken logic in fetchdecode.c.
Added support for monitor interruptibility. Interrupts
disabled dwell time is really short. This version should
be a lot nicer to your host OS.
Fixed bug in sbe(); for guest CR0.PG==1, getting address of
monitor page table was wrong.
Fixed bug in get_cpu_capability(); added ecx and edx to list
of registers 'touched' by cpuid instruction for eax==1 case.
Split vm->state into vm->mon_state and vm->mon_request, to
keep things sane for an interruptible monitor. Because even
a HW interrupt needs to call sbe() after it's done, even the
end of the HW interrupt handler has to be interruptible
(the sbe() function can be long). Thus, HW int redirection
does not step on the vm->mon_state.
I added some extra push/pops to the transition code. Not sure
if all of it was needed. Will look into eliminating code
not needed. But, I wanted to quickly get a release out
that had the above fixes in int.
Please try all 3 guests: cooperative, preemptible, paging on
your machine and report.