rk: revert 20f3d0b+v3.0.66 to v3.0
[firefly-linux-kernel-4.4.55.git] / arch / x86 / kvm / emulate.c
index 3e7d9138dd2ef75923987a6c5ae7a0bb133b60c9..adc98675cda03505cff59be011df491cd271072a 100644 (file)
@@ -1901,51 +1901,6 @@ setup_syscalls_segments(struct x86_emulate_ctxt *ctxt,
        ss->p = 1;
 }
 
-static bool em_syscall_is_enabled(struct x86_emulate_ctxt *ctxt)
-{
-       struct x86_emulate_ops *ops = ctxt->ops;
-       u32 eax, ebx, ecx, edx;
-
-       /*
-        * syscall should always be enabled in longmode - so only become
-        * vendor specific (cpuid) if other modes are active...
-        */
-       if (ctxt->mode == X86EMUL_MODE_PROT64)
-               return true;
-
-       eax = 0x00000000;
-       ecx = 0x00000000;
-       if (ops->get_cpuid(ctxt, &eax, &ebx, &ecx, &edx)) {
-               /*
-                * Intel ("GenuineIntel")
-                * remark: Intel CPUs only support "syscall" in 64bit
-                * longmode. Also an 64bit guest with a
-                * 32bit compat-app running will #UD !! While this
-                * behaviour can be fixed (by emulating) into AMD
-                * response - CPUs of AMD can't behave like Intel.
-                */
-               if (ebx == X86EMUL_CPUID_VENDOR_GenuineIntel_ebx &&
-                   ecx == X86EMUL_CPUID_VENDOR_GenuineIntel_ecx &&
-                   edx == X86EMUL_CPUID_VENDOR_GenuineIntel_edx)
-                       return false;
-
-               /* AMD ("AuthenticAMD") */
-               if (ebx == X86EMUL_CPUID_VENDOR_AuthenticAMD_ebx &&
-                   ecx == X86EMUL_CPUID_VENDOR_AuthenticAMD_ecx &&
-                   edx == X86EMUL_CPUID_VENDOR_AuthenticAMD_edx)
-                       return true;
-
-               /* AMD ("AMDisbetter!") */
-               if (ebx == X86EMUL_CPUID_VENDOR_AMDisbetterI_ebx &&
-                   ecx == X86EMUL_CPUID_VENDOR_AMDisbetterI_ecx &&
-                   edx == X86EMUL_CPUID_VENDOR_AMDisbetterI_edx)
-                       return true;
-       }
-
-       /* default: (not Intel, not AMD), apply Intel's stricter rules... */
-       return false;
-}
-
 static int
 emulate_syscall(struct x86_emulate_ctxt *ctxt, struct x86_emulate_ops *ops)
 {
@@ -1960,15 +1915,9 @@ emulate_syscall(struct x86_emulate_ctxt *ctxt, struct x86_emulate_ops *ops)
            ctxt->mode == X86EMUL_MODE_VM86)
                return emulate_ud(ctxt);
 
-       if (!(em_syscall_is_enabled(ctxt)))
-               return emulate_ud(ctxt);
-
        ops->get_msr(ctxt, MSR_EFER, &efer);
        setup_syscalls_segments(ctxt, ops, &cs, &ss);
 
-       if (!(efer & EFER_SCE))
-               return emulate_ud(ctxt);
-
        ops->get_msr(ctxt, MSR_STAR, &msr_data);
        msr_data >>= 32;
        cs_sel = (u16)(msr_data & 0xfffc);