Hello,

I've committed a few changes to the CVS tree:

 - Made the transition code more self-contained.  These are mostly
   cosmetic fixes (e.g. the transition code itself clears the busy
   bit of the TSS instead of relying on the caller to do it), but
   contain one bugfix:  the old code assumed that the host parameters
   (PDBR, GDT, TSS, ...) remain constant while a process is running.
   This is not true in general; e.g. on Linux 2.3.x SMP systems, each
   processor always uses the same TSS.  This means that if the process
   is rescheduled from one processor to another, it will use multiple
   TSSes throughout its lifetime.  The old code would surely have caused
   a crash if this happened :-/

   The new version saves *all* host parameters on every transition;
   this might be overkill, but it stays on the safe side (and it doesn't
   really matter performance-wise; according to rdtsc this adds about
   200-300 cycles per transition, out of a total of 4000 +/- 500 on a
   Pentium).

 - Separated the monitor initialization from the default guest init;
   this (and avoiding to store linear addresses into the monitor as
   far as possible) now actually allows the monitor to migrate in the
   the guest address space from one linear address to another (and from
   one set of selectors to another) with not very much overhead; see
   the new map_monitor()/unmap_monitor() routines.

 - Finally, I've improved operand decoding in the kernel-side emulator
   a bit, and added support for a few more opcodes.  This doesn't have
   any visible effect, because lgdt still doesn't work, unfortunately ...


Everyone who was experiencing crashes: could you retry with this version
containing the revised transition code? 

Bye,
Ulrich

-- 
  Ulrich Weigand,
  IMMD 1, Universitaet Erlangen-Nuernberg,
  Martensstr. 3, D-91058 Erlangen, Phone: +49 9131 85-7688

Reply via email to