From Mark.Johnson at Sun.COM Thu Jan 3 15:35:12 2008 From: Mark.Johnson at Sun.COM (Mark Johnson) Date: Thu, 03 Jan 2008 18:35:12 -0500 Subject: [intel-platform-dev] [Fwd: xvm-gate commit: 6637632 FC6 HVM Guest can not boot up] Message-ID: <477D7130.5000508@sun.com> Thanks Nitin! MRJ -------- Original Message -------- Subject: xvm-gate commit: 6637632 FC6 HVM Guest can not boot up Date: Thu, 03 Jan 2008 15:30:49 -0800 (PST) From: Mark Johnson To: David.Marker at Sun.COM, john.beck at Sun.COM, matrix-eng at Sun.COM changeset: 11:114085f2805a tag: tip user: Mark Johnson date: Tue Dec 18 15:13:14 2007 -0800 files: intel-realmode-fixes description: 6637632 FC6 HVM Guest can not boot up Contributed by Nitin Kamble (nitin.a.kamble at intel.com) diff -r 8c7e4c17de06 -r 114085f2805a intel-realmode-fixes --- a/intel-realmode-fixes Mon Dec 10 13:01:11 2007 -0800 +++ b/intel-realmode-fixes Tue Dec 18 15:13:14 2007 -0800 @@ -97,19 +97,17 @@ diff --git a/tools/firmware/vmxassist/vm switch (cr) { case 0: oldctx.cr0 = getreg32(regs, modrm) | (CR0_PE | CR0_NE); -@@ -806,60 +834,193 @@ pop(struct regs *regs, unsigned prefix, +@@ -806,60 +834,146 @@ pop(struct regs *regs, unsigned prefix, write16(addr, pop16(regs)); TRACE((regs, regs->eip - eip, "pop *0x%x", addr)); break; - - /* other pop opcodes ... */ -- } -- + default: /* other pop opcodes ... */ + return (1); -+ } -+ -+ return 1; + } + + return 1; +} + +static void @@ -129,53 +127,6 @@ diff --git a/tools/firmware/vmxassist/vm + TRACE((regs, regs->eip - eip, "push%s %s%s (val 0x%x)", + (prefix & DATA32) ? "l" : "", + (prefix & DATA32) ? "e" : "", rnames[opc & 0xF], data)); -+} -+ -+static int -+mov_from_seg(struct regs *regs, unsigned prefix, unsigned opc) -+{ -+ unsigned eip = regs->eip - 1; -+ unsigned modrm = fetch8(regs); -+ unsigned r = modrm & 3; /* dest reg is in r/m field */ -+ unsigned data; -+ -+ if ((modrm & 0xC0) != 0xC0) /* reg destinations only. memory unimpl */ -+ return 0; -+ -+ switch ((modrm & 0x38) >> 3) { /* source reg is in reg field */ -+ case 0: /* es */ -+ data = regs->ves; -+ break; -+ -+ case 1: /* cs */ -+ data = regs->cs; -+ break; -+ -+ case 2: /* ss */ -+ data = regs->uss; -+ break; -+ -+ case 3: /* ds */ -+ data = regs->vds; -+ break; -+ -+ case 4: /* fs */ -+ data = regs->vfs; -+ break; -+ -+ case 5: /* gs */ -+ data = regs->vgs; -+ break; -+ -+ default: -+ return 0; -+ } -+ -+ TRACE((regs, regs->eip - eip, "mov %%%s %%%s (val 0x%x)\n", -+ srnames[(modrm & 0x38) >> 3], rnames[r], data)); -+ -+ setreg16(regs, r, data); - return 1; } static int @@ -333,7 +284,7 @@ diff --git a/tools/firmware/vmxassist/vm return 0; } -@@ -867,9 +1028,11 @@ mov_to_seg(struct regs *regs, unsigned p +@@ -867,9 +981,11 @@ mov_to_seg(struct regs *regs, unsigned p * Emulate a segment load in protected mode */ static int @@ -348,7 +299,7 @@ diff --git a/tools/firmware/vmxassist/vm unsigned long long entry; /* protected mode: use seg as index into gdt */ -@@ -881,12 +1044,14 @@ load_seg(unsigned long sel, uint32_t *ba +@@ -881,12 +997,14 @@ load_seg(unsigned long sel, uint32_t *ba return 1; } @@ -367,7 +318,7 @@ diff --git a/tools/firmware/vmxassist/vm /* Check the P bit first */ if (!((entry >> (15+32)) & 0x1) && sel != 0) -@@ -921,7 +1086,8 @@ load_seg(unsigned long sel, uint32_t *ba +@@ -921,7 +1039,8 @@ load_seg(unsigned long sel, uint32_t *ba * the descriptor was invalid. */ static void @@ -377,7 +328,7 @@ diff --git a/tools/firmware/vmxassist/vm { if (!load_seg(sel, base, limit, arbytes)) load_seg(0, base, limit, arbytes); -@@ -944,8 +1110,11 @@ protected_mode(struct regs *regs) +@@ -944,8 +1063,11 @@ protected_mode(struct regs *regs) /* reload all segment registers */ if (!load_seg(regs->cs, &oldctx.cs_base, @@ -390,7 +341,7 @@ diff --git a/tools/firmware/vmxassist/vm oldctx.cs_sel = regs->cs; load_or_clear_seg(oldctx.es_sel, &oldctx.es_base, -@@ -961,7 +1130,7 @@ protected_mode(struct regs *regs) +@@ -961,7 +1083,7 @@ protected_mode(struct regs *regs) /* initialize jump environment to warp back to protected mode */ regs->uss = DATA_SELECTOR; @@ -399,7 +350,7 @@ diff --git a/tools/firmware/vmxassist/vm regs->cs = CODE_SELECTOR; regs->eip = (unsigned) switch_to_protected_mode; -@@ -1080,7 +1249,7 @@ jmpl(struct regs *regs, int prefix) +@@ -1080,7 +1202,7 @@ jmpl(struct regs *regs, int prefix) regs->cs = cs; regs->eip = eip; @@ -408,7 +359,7 @@ diff --git a/tools/firmware/vmxassist/vm set_mode(regs, VM86_PROTECTED); else if (mode == VM86_PROTECTED_TO_REAL)/* jump to real mode */ set_mode(regs, VM86_REAL); -@@ -1106,12 +1275,12 @@ jmpl_indirect(struct regs *regs, int pre +@@ -1106,12 +1228,12 @@ jmpl_indirect(struct regs *regs, int pre regs->cs = cs; regs->eip = eip; @@ -423,7 +374,7 @@ diff --git a/tools/firmware/vmxassist/vm } static void -@@ -1132,7 +1301,7 @@ retl(struct regs *regs, int prefix) +@@ -1132,7 +1254,7 @@ retl(struct regs *regs, int prefix) regs->cs = cs; regs->eip = eip; @@ -432,7 +383,7 @@ diff --git a/tools/firmware/vmxassist/vm set_mode(regs, VM86_PROTECTED); else if (mode == VM86_PROTECTED_TO_REAL)/* jump to real mode */ set_mode(regs, VM86_REAL); -@@ -1374,6 +1543,10 @@ opcode(struct regs *regs) +@@ -1374,6 +1496,10 @@ opcode(struct regs *regs) prefix |= SEG_DS; continue; @@ -443,21 +394,16 @@ diff --git a/tools/firmware/vmxassist/vm case 0x64: TRACE((regs, regs->eip - eip, "%%fs:")); prefix |= SEG_FS; -@@ -1430,7 +1603,12 @@ opcode(struct regs *regs) +@@ -1430,7 +1556,7 @@ opcode(struct regs *regs) goto invalid; return OPC_EMULATED; - case 0x8E: /* mov r16, sreg */ -+ case 0x8C: /* mov sreg, r/m16 */ -+ if (!mov_from_seg(regs, prefix, opc)) -+ goto invalid; -+ return OPC_EMULATED; -+ + case 0x8E: /* mov r/m16, sreg */ if (!mov_to_seg(regs, prefix, opc)) goto invalid; return OPC_EMULATED; -@@ -1468,7 +1646,8 @@ opcode(struct regs *regs) +@@ -1468,7 +1594,8 @@ opcode(struct regs *regs) { int addr, data; int seg = segment(prefix, regs, regs->vds); @@ -467,7 +413,7 @@ diff --git a/tools/firmware/vmxassist/vm if (prefix & DATA32) { addr = address(regs, seg, offset); -@@ -1479,7 +1658,8 @@ opcode(struct regs *regs) +@@ -1479,7 +1606,8 @@ opcode(struct regs *regs) data = read16(addr); setreg16(regs, 0, data); } @@ -477,7 +423,7 @@ diff --git a/tools/firmware/vmxassist/vm } return OPC_EMULATED; -@@ -1493,7 +1673,8 @@ opcode(struct regs *regs) +@@ -1493,7 +1621,8 @@ opcode(struct regs *regs) data = fetch16(regs); setreg16(regs, 3, data); } @@ -487,7 +433,7 @@ diff --git a/tools/firmware/vmxassist/vm } return OPC_EMULATED; -@@ -1508,7 +1689,7 @@ opcode(struct regs *regs) +@@ -1508,7 +1637,7 @@ opcode(struct regs *regs) if ((mode == VM86_REAL_TO_PROTECTED) || (mode == VM86_PROTECTED_TO_REAL)) { retl(regs, prefix); @@ -496,7 +442,7 @@ diff --git a/tools/firmware/vmxassist/vm } goto invalid; -@@ -1546,7 +1727,7 @@ opcode(struct regs *regs) +@@ -1546,7 +1675,7 @@ opcode(struct regs *regs) if ((mode == VM86_REAL_TO_PROTECTED) || (mode == VM86_PROTECTED_TO_REAL)) { jmpl(regs, prefix); @@ -505,7 +451,7 @@ diff --git a/tools/firmware/vmxassist/vm } goto invalid; -@@ -1680,8 +1861,10 @@ trap(int trapno, int errno, struct regs +@@ -1680,8 +1809,10 @@ trap(int trapno, int errno, struct regs default: invalid: From mark.johnson at sun.com Wed Jan 23 11:53:37 2008 From: mark.johnson at sun.com (mark.johnson at sun.com) Date: Wed, 23 Jan 2008 11:53:37 -0800 (PST) Subject: [intel-platform-dev] Code Cleanup Message-ID: <20080123195337.A94CE10DCE7@mail.opensolaris.org> Author: Mark Johnson Repository: /hg/intel-platform/onnv-intel-ioat Latest revision: 150d788047fdbf646ead78e3c190d31f0edb49e4 Total changesets: 1 Log message: Code Cleanup Files: update: usr/src/uts/i86pc/io/ioat/ioat.c update: usr/src/uts/i86pc/io/ioat/ioat_chan.c update: usr/src/uts/i86pc/io/ioat/ioat_ioctl.c update: usr/src/uts/i86pc/sys/ioat.h From mark.johnson at sun.com Wed Jan 23 11:53:38 2008 From: mark.johnson at sun.com (mark.johnson at sun.com) Date: Wed, 23 Jan 2008 11:53:38 -0800 (PST) Subject: [intel-platform-dev] Added tag IOAT_DROP4 for changeset 150d788047fd Message-ID: <20080123195338.6EA6410DCEA@mail.opensolaris.org> Author: Mark Johnson Repository: /hg/intel-platform/onnv-intel-ioat Latest revision: fc0edd8fa89ee6f83ea54ff5379a8e7a66288b76 Total changesets: 1 Log message: Added tag IOAT_DROP4 for changeset 150d788047fd Files: update: .hgtags From mark.johnson at sun.com Thu Jan 24 12:39:14 2008 From: mark.johnson at sun.com (mark.johnson at sun.com) Date: Thu, 24 Jan 2008 12:39:14 -0800 (PST) Subject: [intel-platform-dev] fix memory leak Message-ID: <20080124203914.26DE811E219@mail.opensolaris.org> Author: Mark Johnson Repository: /hg/intel-platform/onnv-intel-ioat Latest revision: 509bb156332856e563a214147cd1a39ac86a3c89 Total changesets: 1 Log message: fix memory leak ioat can miss an interrupt under heavy load lint fixes misc cleanup Files: update: usr/src/uts/common/io/dcopy.c update: usr/src/uts/common/os/move.c update: usr/src/uts/common/sys/dcopy_device.h update: usr/src/uts/i86pc/io/ioat/ioat_chan.c