Commit Graph

4 Commits

Author SHA1 Message Date
Kevin Lawton
87d648682e Code cleanup. Moved the interrupt redirection instrumentation
into the host-specific files and wrapped access to them
  with atomic operations since that's a structure global to
  all the VMs.  I think all the other globals are SMP clean
  since they are only written once during module init time,
  and read thereafter my all VMs.
Renamed all host OS specific functions to hostOS*().  All host
  independent functions to host*().
I'd like to rename all monitor space functions to mon*() next.
2003-01-10 04:27:51 +00:00
Kevin Lawton
f45a747e59 Got rid of use of mmap() altogether. User space (bochs) allocates
all the memory it needs, and the plex86 kernel module uses
  get_user_pages() from the Linux kernel to get at them and
  pin the few that are needed statically (and later up to
  a watermark of pages that are needed dynamically).
Guest physical memory pages are now dynamically pinned/unpinned.
  For now, I use a hard limit of 4Megs of pinned pages and
  a really primitive algorithm to decide which one to unpin
  when the limit is reached and one needs to be bumped.  Seems
  to work.  Though I haven't run into the limit yet since I'm using
  just a small test program.
2003-01-09 04:02:31 +00:00
Kevin Lawton
6b2c7ef341 Changed over from allocating the the guest physical memory area
in the plex86 module and mmap()'ing it into user space (bochs),
  to letting bochs malloc() it normally and using the
  Linux kernel facility get_user_pages() to get the associated
  physical pages and pin them in memory.  I only have code for
  Linux kernel 2.4.20 and up, as that's the first version to
  export the get_user_pages() symbol so modules can use it.
2003-01-08 17:20:01 +00:00
Kevin Lawton
0768d01522 Added plex86 directory to bochs. This directory contains the
new experimental stripped-down version of plex86, which is now
  a user-code-only VM.  I ripped out all the fancy stuff in plex86,
  such that under that right conditions, user-code (protection level 3)
  can run at near native speeds inside the plex86 VM.
The general idea is that bochs emulates all the initial real-mode code,
  and guest kernel code (protection level 0).  When it senses the
  right conditions (like the context switches to user-code), a shim
  is called to execute the guest inside the plex86 VM.  All guest-generated
  faults/exceptions are then forwarded back to bochs to be handled in
  the emulator.
Actually, I'm not yet adding the mods to the bochs code (other than
  the shim code which is in a separate file), until I hear that we're
  back in a more development mode with bochs after the 2.0 release.
The plex86 subdirectory is really a separate project.  It's just more
  convenient to co-develop it with bochs for now.  Both projects are
  currently LGPL, but each should be taken to be a separate project,
  and have their own license file.  Plex86 (it's only a kernel driver
  now) could ultimately be used with other projects, as it's modular.
  I talked with Bryce, and we both agreed it's OK to keep plex86 as
  a subdir in bochs for now.
2003-01-01 17:32:06 +00:00