Index: vm86.c =================================================================== RCS file: /usr/cvs/src/sys/i386/i386/vm86.c,v retrieving revision 1.56 diff -u -r1.56 vm86.c --- vm86.c 25 Aug 2003 09:48:47 -0000 1.56 +++ vm86.c 18 Nov 2003 14:20:02 -0000 @@ -164,10 +164,12 @@ inc_ip++; switch (i_byte) { case PUSHF: +#if 0 if (vmf->vmf_eflags & PSL_VIF) PUSHL((vmf->vmf_eflags & PUSH_MASK) | PSL_IOPL | PSL_I, vmf); else +#endif PUSHL((vmf->vmf_eflags & PUSH_MASK) | PSL_IOPL, vmf); vmf->vmf_ip += inc_ip; @@ -176,7 +178,7 @@ case POPF: temp_flags = POPL(vmf) & POP_MASK; vmf->vmf_eflags = (vmf->vmf_eflags & ~POP_MASK) - | temp_flags | PSL_VM | PSL_I; + | temp_flags | PSL_VM; vmf->vmf_ip += inc_ip; if (temp_flags & PSL_I) { vmf->vmf_eflags |= PSL_VIF; @@ -207,7 +209,7 @@ case POPF: temp_flags = POP(vmf) & POP_MASK; vmf->vmf_flags = (vmf->vmf_flags & ~POP_MASK) - | temp_flags | PSL_VM | PSL_I; + | temp_flags | PSL_VM; vmf->vmf_ip += inc_ip; if (temp_flags & PSL_I) { vmf->vmf_eflags |= PSL_VIF; @@ -224,7 +226,7 @@ vmf->vmf_cs = POP(vmf); temp_flags = POP(vmf) & POP_MASK; vmf->vmf_flags = (vmf->vmf_flags & ~POP_MASK) - | temp_flags | PSL_VM | PSL_I; + | temp_flags | PSL_VM; if (temp_flags & PSL_I) { vmf->vmf_eflags |= PSL_VIF; if (vmf->vmf_eflags & PSL_VIP) @@ -244,10 +246,12 @@ inc_ip++; switch (i_byte) { case PUSHF: +#if 0 if (vm86->vm86_eflags & PSL_VIF) PUSHL((vmf->vmf_flags & PUSH_MASK) | PSL_IOPL | PSL_I, vmf); else +#endif PUSHL((vmf->vmf_flags & PUSH_MASK) | PSL_IOPL, vmf); vmf->vmf_ip += inc_ip; @@ -256,7 +260,7 @@ case POPF: temp_flags = POPL(vmf) & POP_MASK; vmf->vmf_eflags = (vmf->vmf_eflags & ~POP_MASK) - | temp_flags | PSL_VM | PSL_I; + | temp_flags | PSL_VM; vmf->vmf_ip += inc_ip; if (temp_flags & PSL_I) { vm86->vm86_eflags |= PSL_VIF; @@ -283,10 +287,12 @@ return (retcode); case PUSHF: +#if 0 if (vm86->vm86_eflags & PSL_VIF) PUSH((vmf->vmf_flags & PUSH_MASK) | PSL_IOPL | PSL_I, vmf); else +#endif PUSH((vmf->vmf_flags & PUSH_MASK) | PSL_IOPL, vmf); vmf->vmf_ip += inc_ip; return (retcode); @@ -295,10 +301,12 @@ i_byte = fubyte(addr + 1); if ((vm86->vm86_intmap[i_byte >> 3] & (1 << (i_byte & 7))) != 0) break; +#if 0 if (vm86->vm86_eflags & PSL_VIF) PUSH((vmf->vmf_flags & PUSH_MASK) | PSL_IOPL | PSL_I, vmf); else +#endif PUSH((vmf->vmf_flags & PUSH_MASK) | PSL_IOPL, vmf); PUSH(vmf->vmf_cs, vmf); PUSH(vmf->vmf_ip + inc_ip + 1, vmf); /* increment IP */ @@ -313,7 +321,7 @@ vmf->vmf_cs = POP(vmf); temp_flags = POP(vmf) & POP_MASK; vmf->vmf_flags = (vmf->vmf_flags & ~POP_MASK) - | temp_flags | PSL_VM | PSL_I; + | temp_flags | PSL_VM; if (temp_flags & PSL_I) { vm86->vm86_eflags |= PSL_VIF; if (vm86->vm86_eflags & PSL_VIP) @@ -326,7 +334,7 @@ case POPF: temp_flags = POP(vmf) & POP_MASK; vmf->vmf_flags = (vmf->vmf_flags & ~POP_MASK) - | temp_flags | PSL_VM | PSL_I; + | temp_flags | PSL_VM; vmf->vmf_ip += inc_ip; if (temp_flags & PSL_I) { vm86->vm86_eflags |= PSL_VIF; @@ -545,6 +553,7 @@ vmf.kernel_fs = vmf.kernel_es = vmf.kernel_ds = 0; vmf.vmf_ss = 0; vmf.vmf_eflags = PSL_VIF | PSL_VM | PSL_USER; + vmf.vmf_eflags &= ~PSL_I; vm86_initflags(&vmf); }