Message ID | 5848246B0200007800126433@prv-mh.provo.novell.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 07/12/16 14:02, Jan Beulich wrote: > There's no point reading CS - all of the fields get set from scratch > right afterwards. Also correct a wrong comment. > > Signed-off-by: Jan Beulich <jbeulich@suse.com> Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>, although > > --- a/xen/arch/x86/x86_emulate/x86_emulate.c > +++ b/xen/arch/x86/x86_emulate/x86_emulate.c > @@ -4841,12 +4841,10 @@ x86_emulate( > > _regs.eflags &= ~(EFLG_VM | EFLG_IF | EFLG_RF); > > - fail_if(ops->read_segment == NULL); > - ops->read_segment(x86_seg_cs, &cs, ctxt); > cs.sel = msr_content & ~3; /* SELECTOR_RPL_MASK */ > cs.base = 0; /* flat segment */ > cs.limit = ~0u; /* 4GB limit */ > - cs.attr.bytes = lm ? 0xa9b /* L+DB+P+S+Code */ > + cs.attr.bytes = lm ? 0xa9b /* L+G+P+S+Code */ Strictly speaking its G+L+P, seeing as the other attributes are listed in bit order. ~Andrew > : 0xc9b; /* G+DB+P+S+Code */ > > sreg.sel = cs.sel + 8; > > >
--- a/xen/arch/x86/x86_emulate/x86_emulate.c +++ b/xen/arch/x86/x86_emulate/x86_emulate.c @@ -4841,12 +4841,10 @@ x86_emulate( _regs.eflags &= ~(EFLG_VM | EFLG_IF | EFLG_RF); - fail_if(ops->read_segment == NULL); - ops->read_segment(x86_seg_cs, &cs, ctxt); cs.sel = msr_content & ~3; /* SELECTOR_RPL_MASK */ cs.base = 0; /* flat segment */ cs.limit = ~0u; /* 4GB limit */ - cs.attr.bytes = lm ? 0xa9b /* L+DB+P+S+Code */ + cs.attr.bytes = lm ? 0xa9b /* L+G+P+S+Code */ : 0xc9b; /* G+DB+P+S+Code */ sreg.sel = cs.sel + 8;