Keir Fraser wrote:
> I have a patch I'll check in. It'd be good get some testing of it.
>
> Changeset is 12365:ca75b51d69c7
>
> -- Keir
>
Keir,
I was playing with Plan9 which happens to also tinker with ss, fs, and
gs in this critical section. It still crashes pretty early, but it
crashes earlier without this patch. This patch lets Plan9 crash at the
same location before the original patch Stephen Tweedie sent :}.
This patch makes the mov_to_seg more complete. I left out cs, since I
don't think that would even make sense with a mov.
-- Steve
Signed-off-by: Steven Rostedt <srostedt@xxxxxxxxxx>
diff -r ca75b51d69c7 tools/firmware/vmxassist/vm86.c
--- a/tools/firmware/vmxassist/vm86.c Fri Nov 10 17:21:54 2006 +0000
+++ b/tools/firmware/vmxassist/vm86.c Fri Nov 10 17:28:02 2006 -0500
@@ -829,15 +829,33 @@ mov_to_seg(struct regs *regs, unsigned p
goto fail;
switch ((modrm & 0x38) >> 3) {
+ case 0: /* es */
+ regs->ves = getreg16(regs, modrm);
+ saved_rm_regs.ves = 0;
+ oldctx.es_sel = regs->ves;
+ return 1;
+
+ /* case 1: cs */
+
+ case 2: /* ss */
+ regs->uss = getreg16(regs, modrm);
+ saved_rm_regs.uss = 0;
+ oldctx.ss_sel = regs->uss;
+ return 1;
case 3: /* ds */
regs->vds = getreg16(regs, modrm);
saved_rm_regs.vds = 0;
oldctx.ds_sel = regs->vds;
return 1;
- case 0: /* es */
- regs->ves = getreg16(regs, modrm);
- saved_rm_regs.ves = 0;
- oldctx.es_sel = regs->ves;
+ case 4: /* fs */
+ regs->vfs = getreg16(regs, modrm);
+ saved_rm_regs.vfs = 0;
+ oldctx.fs_sel = regs->vfs;
+ return 1;
+ case 5: /* gs */
+ regs->vgs = getreg16(regs, modrm);
+ saved_rm_regs.vgs = 0;
+ oldctx.gs_sel = regs->vgs;
return 1;
}
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|