diff mbox

[v2] x86emul: simplify prefix handling for VMFUNC

Message ID 587F8E3F0200007800131570@prv-mh.provo.novell.com (mailing list archive)
State New, archived
Headers show

Commit Message

Jan Beulich Jan. 18, 2017, 2:48 p.m. UTC
LOCK prefixes get dealt with elsewhere, and 66, F2, and F3 can all be
checked for in one go by looking at vex.pfx.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
---
v2: Retain explicit generation of #UD.
---
Note: The SDM doesn't indicate 66, F2, and F3 to be invalid; Intel
      meanwhile half-way indicated the SDM to be wrong here, and Andrew
      (thanks!) has verified this in practice.
x86emul: simplify prefix handling for VMFUNC

LOCK prefixes get dealt with elsewhere, and 66, F2, and F3 can all be
checked for in one go by looking at vex.pfx.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
---
v2: Retain explicit generation of #UD.
---
Note: The SDM doesn't indicate 66, F2, and F3 to be invalid; Intel
      meanwhile half-way indicated the SDM to be wrong here, and Andrew
      (thanks!) has verified this in practice.

--- a/xen/arch/x86/x86_emulate/x86_emulate.c
+++ b/xen/arch/x86/x86_emulate/x86_emulate.c
@@ -4679,8 +4679,7 @@ x86_emulate(
 #endif
 
         case 0xd4: /* vmfunc */
-            generate_exception_if(lock_prefix | rep_prefix() | (vex.pfx == vex_66),
-                                  EXC_UD);
+            generate_exception_if(vex.pfx, EXC_UD);
             fail_if(!ops->vmfunc);
             if ( (rc = ops->vmfunc(ctxt)) != X86EMUL_OKAY )
                 goto done;

Comments

Andrew Cooper Jan. 18, 2017, 2:48 p.m. UTC | #1
On 18/01/17 14:48, Jan Beulich wrote:
> LOCK prefixes get dealt with elsewhere, and 66, F2, and F3 can all be
> checked for in one go by looking at vex.pfx.
>
> Signed-off-by: Jan Beulich <jbeulich@suse.com>

Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
diff mbox

Patch

--- a/xen/arch/x86/x86_emulate/x86_emulate.c
+++ b/xen/arch/x86/x86_emulate/x86_emulate.c
@@ -4679,8 +4679,7 @@  x86_emulate(
 #endif
 
         case 0xd4: /* vmfunc */
-            generate_exception_if(lock_prefix | rep_prefix() | (vex.pfx == vex_66),
-                                  EXC_UD);
+            generate_exception_if(vex.pfx, EXC_UD);
             fail_if(!ops->vmfunc);
             if ( (rc = ops->vmfunc(ctxt)) != X86EMUL_OKAY )
                 goto done;