[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [Patch] Fix for x86_64 boot failures due tobadsegment setup for protected mode.



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

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.