A fair number of things seem to do a WBINVD on bootup.  I think we can just
ignore it -- it should clear the caches, and we only have a one-instruction
icache.  Kevin, am I wrong?  I don't know what effect the host's cache would
have...

Oh, the patch is against current CVS.

       -=- James Mastros
-- 
-----BEGIN GEEK CODE BLOCK-----
Version: 3.1
GU>CS d->-- s-:- a20 C++ UL+++@ P+++>+++++ L++@ E-() N o? K? w@ M-- !V
PS++ PE Y+ PGP(-) t++@ 5+ X+++ R+ tv+ b+++ DI+ D+ G e>++ h! r- y?
------END GEEK CODE BLOCK------
Index: emulation.c
===================================================================
RCS file: /cvsroot-plex86/plex86/kernel/emulation/emulation.c,v
retrieving revision 1.10
diff -u -r1.10 emulation.c
--- emulation.c 2000/11/16 07:27:13     1.10
+++ emulation.c 2000/11/19 03:54:30
@@ -1052,6 +1052,10 @@
       CLTS(vm);
       goto advance;
 
+    case 0x109:
+      WBINVD(vm);
+      goto advance;
+     
     case 0x120:
       MOV_RdCd(vm);
       goto advance;
Index: proc_ctrl.c
===================================================================
RCS file: /cvsroot-plex86/plex86/kernel/emulation/proc_ctrl.c,v
retrieving revision 1.5
diff -u -r1.5 proc_ctrl.c
--- proc_ctrl.c 2000/11/16 07:27:14     1.5
+++ proc_ctrl.c 2000/11/19 03:54:31
@@ -129,7 +129,15 @@
   SetCR0(vm, cr0);
 }
 
-  void
+/* does this belong here? */
+ void
+WBINVD(vm_t *vm)
+{
+   /* We've only got a very minimal cache -- it shouldn't get in the way. */
+   monprint(vm, "Ignoring WBINVD\n");
+}
+
+ void
 INVLPG(vm_t *vm)
 {
   monpanic(vm, "INVLPG:\n");

Reply via email to