Lines Matching full:features
782 * Kernel-only features that can be shown to usermode programs even if
813 * CPUID_*_KERNEL_FEATURES denotes bits and features that are not usable
815 * TCG features unconditionally in user-mode emulation mode. This may
956 * to features[FEAT_8000_0001_EDX] if and only if CPU vendor is AMD.
1359 /*Below are MSR exposed features*/
1379 * features do not matter.
1905 return ((uint64_t)cpu->env.features[FEAT_XSAVE_XCR0_HI]) << 32 | in x86_cpu_xsave_xcr0_components()
1906 cpu->env.features[FEAT_XSAVE_XCR0_LO]; in x86_cpu_xsave_xcr0_components()
1920 return ((uint64_t)cpu->env.features[FEAT_XSAVE_XSS_HI]) << 32 | in x86_cpu_xsave_xss_components()
1921 cpu->env.features[FEAT_XSAVE_XSS_LO]; in x86_cpu_xsave_xss_components()
2030 FeatureWordArray features; member
2454 /* The following VMX features are not supported by KVM and are left out in the
2490 .features[FEAT_1_EDX] =
2494 .features[FEAT_1_ECX] =
2496 .features[FEAT_8000_0001_EDX] =
2498 .features[FEAT_8000_0001_ECX] =
2511 .features[FEAT_1_EDX] =
2515 .features[FEAT_1_ECX] =
2518 .features[FEAT_8000_0001_EDX] =
2526 .features[FEAT_8000_0001_ECX] =
2530 .features[FEAT_SVM] =
2543 .features[FEAT_1_EDX] =
2549 .features[FEAT_1_ECX] =
2552 .features[FEAT_8000_0001_EDX] =
2554 .features[FEAT_8000_0001_ECX] =
2556 .features[FEAT_VMX_BASIC] = MSR_VMX_BASIC_INS_OUTS,
2557 .features[FEAT_VMX_ENTRY_CTLS] = VMX_VM_ENTRY_IA32E_MODE,
2558 .features[FEAT_VMX_EXIT_CTLS] = VMX_VM_EXIT_ACK_INTR_ON_EXIT,
2559 .features[FEAT_VMX_MISC] = MSR_VMX_MISC_ACTIVITY_HLT,
2560 .features[FEAT_VMX_PINBASED_CTLS] = VMX_PIN_BASED_EXT_INTR_MASK |
2562 .features[FEAT_VMX_PROCBASED_CTLS] = VMX_CPU_BASED_VIRTUAL_INTR_PENDING |
2572 .features[FEAT_VMX_SECONDARY_CTLS] =
2585 .features[FEAT_1_EDX] =
2590 .features[FEAT_1_ECX] =
2593 .features[FEAT_8000_0001_EDX] =
2599 .features[FEAT_8000_0001_ECX] =
2601 /* VMX features from Cedar Mill/Prescott */
2602 .features[FEAT_VMX_ENTRY_CTLS] = VMX_VM_ENTRY_IA32E_MODE,
2603 .features[FEAT_VMX_EXIT_CTLS] = VMX_VM_EXIT_ACK_INTR_ON_EXIT,
2604 .features[FEAT_VMX_MISC] = MSR_VMX_MISC_ACTIVITY_HLT,
2605 .features[FEAT_VMX_PINBASED_CTLS] = VMX_PIN_BASED_EXT_INTR_MASK |
2607 .features[FEAT_VMX_PROCBASED_CTLS] = VMX_CPU_BASED_VIRTUAL_INTR_PENDING |
2625 .features[FEAT_1_EDX] =
2627 .features[FEAT_1_ECX] =
2639 .features[FEAT_1_EDX] =
2642 .features[FEAT_1_ECX] =
2644 .features[FEAT_8000_0001_ECX] =
2646 /* VMX features from Yonah */
2647 .features[FEAT_VMX_ENTRY_CTLS] = VMX_VM_ENTRY_IA32E_MODE,
2648 .features[FEAT_VMX_EXIT_CTLS] = VMX_VM_EXIT_ACK_INTR_ON_EXIT,
2649 .features[FEAT_VMX_MISC] = MSR_VMX_MISC_ACTIVITY_HLT,
2650 .features[FEAT_VMX_PINBASED_CTLS] = VMX_PIN_BASED_EXT_INTR_MASK |
2652 .features[FEAT_VMX_PROCBASED_CTLS] = VMX_CPU_BASED_VIRTUAL_INTR_PENDING |
2670 .features[FEAT_1_EDX] =
2676 .features[FEAT_1_ECX] =
2678 .features[FEAT_8000_0001_EDX] =
2680 .features[FEAT_VMX_ENTRY_CTLS] = VMX_VM_ENTRY_IA32E_MODE,
2681 .features[FEAT_VMX_EXIT_CTLS] = VMX_VM_EXIT_ACK_INTR_ON_EXIT,
2682 .features[FEAT_VMX_MISC] = MSR_VMX_MISC_ACTIVITY_HLT,
2683 .features[FEAT_VMX_PINBASED_CTLS] = VMX_PIN_BASED_EXT_INTR_MASK |
2685 .features[FEAT_VMX_PROCBASED_CTLS] = VMX_CPU_BASED_VIRTUAL_INTR_PENDING |
2702 .features[FEAT_1_EDX] =
2714 .features[FEAT_1_EDX] =
2726 .features[FEAT_1_EDX] =
2738 .features[FEAT_1_EDX] =
2750 .features[FEAT_1_EDX] =
2753 .features[FEAT_8000_0001_EDX] =
2766 .features[FEAT_1_EDX] =
2773 .features[FEAT_1_ECX] =
2776 .features[FEAT_8000_0001_EDX] =
2778 .features[FEAT_8000_0001_ECX] =
2790 .features[FEAT_1_EDX] =
2796 .features[FEAT_1_ECX] =
2798 .features[FEAT_8000_0001_EDX] =
2800 .features[FEAT_8000_0001_ECX] =
2802 .features[FEAT_VMX_BASIC] = MSR_VMX_BASIC_INS_OUTS,
2803 .features[FEAT_VMX_ENTRY_CTLS] = VMX_VM_ENTRY_IA32E_MODE,
2804 .features[FEAT_VMX_EXIT_CTLS] = VMX_VM_EXIT_ACK_INTR_ON_EXIT,
2805 .features[FEAT_VMX_MISC] = MSR_VMX_MISC_ACTIVITY_HLT,
2806 .features[FEAT_VMX_PINBASED_CTLS] = VMX_PIN_BASED_EXT_INTR_MASK |
2808 .features[FEAT_VMX_PROCBASED_CTLS] = VMX_CPU_BASED_VIRTUAL_INTR_PENDING |
2818 .features[FEAT_VMX_SECONDARY_CTLS] =
2830 .features[FEAT_1_EDX] =
2836 .features[FEAT_1_ECX] =
2839 .features[FEAT_8000_0001_EDX] =
2841 .features[FEAT_8000_0001_ECX] =
2843 .features[FEAT_VMX_BASIC] = MSR_VMX_BASIC_INS_OUTS,
2844 .features[FEAT_VMX_ENTRY_CTLS] = VMX_VM_ENTRY_IA32E_MODE |
2846 .features[FEAT_VMX_EXIT_CTLS] = VMX_VM_EXIT_ACK_INTR_ON_EXIT |
2848 .features[FEAT_VMX_MISC] = MSR_VMX_MISC_ACTIVITY_HLT,
2849 .features[FEAT_VMX_PINBASED_CTLS] = VMX_PIN_BASED_EXT_INTR_MASK |
2851 .features[FEAT_VMX_PROCBASED_CTLS] = VMX_CPU_BASED_VIRTUAL_INTR_PENDING |
2861 .features[FEAT_VMX_SECONDARY_CTLS] =
2874 .features[FEAT_1_EDX] =
2880 .features[FEAT_1_ECX] =
2883 .features[FEAT_8000_0001_EDX] =
2885 .features[FEAT_8000_0001_ECX] =
2887 .features[FEAT_VMX_BASIC] = MSR_VMX_BASIC_INS_OUTS |
2889 .features[FEAT_VMX_ENTRY_CTLS] = VMX_VM_ENTRY_IA32E_MODE |
2892 .features[FEAT_VMX_EPT_VPID_CAPS] = MSR_VMX_EPT_EXECONLY |
2899 .features[FEAT_VMX_EXIT_CTLS] =
2905 .features[FEAT_VMX_MISC] = MSR_VMX_MISC_ACTIVITY_HLT,
2906 .features[FEAT_VMX_PINBASED_CTLS] = VMX_PIN_BASED_EXT_INTR_MASK |
2909 .features[FEAT_VMX_PROCBASED_CTLS] = VMX_CPU_BASED_VIRTUAL_INTR_PENDING |
2921 .features[FEAT_VMX_SECONDARY_CTLS] =
2951 .features[FEAT_1_EDX] =
2957 .features[FEAT_1_ECX] =
2961 .features[FEAT_8000_0001_EDX] =
2963 .features[FEAT_8000_0001_ECX] =
2965 .features[FEAT_6_EAX] =
2967 .features[FEAT_VMX_BASIC] = MSR_VMX_BASIC_INS_OUTS |
2969 .features[FEAT_VMX_ENTRY_CTLS] = VMX_VM_ENTRY_IA32E_MODE |
2972 .features[FEAT_VMX_EPT_VPID_CAPS] = MSR_VMX_EPT_EXECONLY |
2979 .features[FEAT_VMX_EXIT_CTLS] =
2985 .features[FEAT_VMX_MISC] = MSR_VMX_MISC_ACTIVITY_HLT |
2987 .features[FEAT_VMX_PINBASED_CTLS] = VMX_PIN_BASED_EXT_INTR_MASK |
2990 .features[FEAT_VMX_PROCBASED_CTLS] = VMX_CPU_BASED_VIRTUAL_INTR_PENDING |
3002 .features[FEAT_VMX_SECONDARY_CTLS] =
3032 .features[FEAT_1_EDX] =
3038 .features[FEAT_1_ECX] =
3044 .features[FEAT_8000_0001_EDX] =
3047 .features[FEAT_8000_0001_ECX] =
3049 .features[FEAT_XSAVE] =
3051 .features[FEAT_6_EAX] =
3053 .features[FEAT_VMX_BASIC] = MSR_VMX_BASIC_INS_OUTS |
3055 .features[FEAT_VMX_ENTRY_CTLS] = VMX_VM_ENTRY_IA32E_MODE |
3058 .features[FEAT_VMX_EPT_VPID_CAPS] = MSR_VMX_EPT_EXECONLY |
3065 .features[FEAT_VMX_EXIT_CTLS] =
3071 .features[FEAT_VMX_MISC] = MSR_VMX_MISC_ACTIVITY_HLT |
3073 .features[FEAT_VMX_PINBASED_CTLS] = VMX_PIN_BASED_EXT_INTR_MASK |
3076 .features[FEAT_VMX_PROCBASED_CTLS] = VMX_CPU_BASED_VIRTUAL_INTR_PENDING |
3088 .features[FEAT_VMX_SECONDARY_CTLS] =
3118 .features[FEAT_1_EDX] =
3124 .features[FEAT_1_ECX] =
3130 .features[FEAT_7_0_EBX] =
3133 .features[FEAT_8000_0001_EDX] =
3136 .features[FEAT_8000_0001_ECX] =
3138 .features[FEAT_XSAVE] =
3140 .features[FEAT_6_EAX] =
3142 .features[FEAT_VMX_BASIC] = MSR_VMX_BASIC_INS_OUTS |
3144 .features[FEAT_VMX_ENTRY_CTLS] = VMX_VM_ENTRY_IA32E_MODE |
3147 .features[FEAT_VMX_EPT_VPID_CAPS] = MSR_VMX_EPT_EXECONLY |
3154 .features[FEAT_VMX_EXIT_CTLS] =
3160 .features[FEAT_VMX_MISC] = MSR_VMX_MISC_ACTIVITY_HLT |
3162 .features[FEAT_VMX_PINBASED_CTLS] = VMX_PIN_BASED_EXT_INTR_MASK |
3165 .features[FEAT_VMX_PROCBASED_CTLS] = VMX_CPU_BASED_VIRTUAL_INTR_PENDING |
3177 .features[FEAT_VMX_SECONDARY_CTLS] =
3210 .features[FEAT_1_EDX] =
3216 .features[FEAT_1_ECX] =
3223 .features[FEAT_8000_0001_EDX] =
3226 .features[FEAT_8000_0001_ECX] =
3228 .features[FEAT_7_0_EBX] =
3233 .features[FEAT_XSAVE] =
3235 .features[FEAT_6_EAX] =
3237 .features[FEAT_VMX_BASIC] = MSR_VMX_BASIC_INS_OUTS |
3239 .features[FEAT_VMX_ENTRY_CTLS] = VMX_VM_ENTRY_IA32E_MODE |
3242 .features[FEAT_VMX_EPT_VPID_CAPS] = MSR_VMX_EPT_EXECONLY |
3249 .features[FEAT_VMX_EXIT_CTLS] =
3255 .features[FEAT_VMX_MISC] = MSR_VMX_MISC_ACTIVITY_HLT |
3257 .features[FEAT_VMX_PINBASED_CTLS] = VMX_PIN_BASED_EXT_INTR_MASK |
3260 .features[FEAT_VMX_PROCBASED_CTLS] = VMX_CPU_BASED_VIRTUAL_INTR_PENDING |
3272 .features[FEAT_VMX_SECONDARY_CTLS] =
3282 .features[FEAT_VMX_VMFUNC] = MSR_VMX_VMFUNC_EPT_SWITCHING,
3302 /* Restore TSX features removed by -v2 above */
3339 .features[FEAT_1_EDX] =
3345 .features[FEAT_1_ECX] =
3352 .features[FEAT_8000_0001_EDX] =
3355 .features[FEAT_8000_0001_ECX] =
3357 .features[FEAT_7_0_EBX] =
3363 .features[FEAT_XSAVE] =
3365 .features[FEAT_6_EAX] =
3367 .features[FEAT_VMX_BASIC] = MSR_VMX_BASIC_INS_OUTS |
3369 .features[FEAT_VMX_ENTRY_CTLS] = VMX_VM_ENTRY_IA32E_MODE |
3372 .features[FEAT_VMX_EPT_VPID_CAPS] = MSR_VMX_EPT_EXECONLY |
3379 .features[FEAT_VMX_EXIT_CTLS] =
3385 .features[FEAT_VMX_MISC] = MSR_VMX_MISC_ACTIVITY_HLT |
3387 .features[FEAT_VMX_PINBASED_CTLS] = VMX_PIN_BASED_EXT_INTR_MASK |
3390 .features[FEAT_VMX_PROCBASED_CTLS] = VMX_CPU_BASED_VIRTUAL_INTR_PENDING |
3402 .features[FEAT_VMX_SECONDARY_CTLS] =
3413 .features[FEAT_VMX_VMFUNC] = MSR_VMX_VMFUNC_EPT_SWITCHING,
3432 /* Restore TSX features removed by -v2 above */
3463 .features[FEAT_1_EDX] =
3469 .features[FEAT_1_ECX] =
3476 .features[FEAT_8000_0001_EDX] =
3479 .features[FEAT_8000_0001_ECX] =
3481 .features[FEAT_7_0_EBX] =
3488 .features[FEAT_XSAVE] =
3491 .features[FEAT_6_EAX] =
3494 .features[FEAT_VMX_BASIC] = MSR_VMX_BASIC_INS_OUTS |
3496 .features[FEAT_VMX_ENTRY_CTLS] = VMX_VM_ENTRY_IA32E_MODE |
3499 .features[FEAT_VMX_EPT_VPID_CAPS] = MSR_VMX_EPT_EXECONLY |
3506 .features[FEAT_VMX_EXIT_CTLS] =
3512 .features[FEAT_VMX_MISC] = MSR_VMX_MISC_ACTIVITY_HLT |
3514 .features[FEAT_VMX_PINBASED_CTLS] = VMX_PIN_BASED_EXT_INTR_MASK |
3517 .features[FEAT_VMX_PROCBASED_CTLS] = VMX_CPU_BASED_VIRTUAL_INTR_PENDING |
3529 .features[FEAT_VMX_SECONDARY_CTLS] =
3537 .features[FEAT_VMX_VMFUNC] = MSR_VMX_VMFUNC_EPT_SWITCHING,
3582 .features[FEAT_1_EDX] =
3588 .features[FEAT_1_ECX] =
3595 .features[FEAT_8000_0001_EDX] =
3598 .features[FEAT_8000_0001_ECX] =
3600 .features[FEAT_7_0_EBX] =
3609 .features[FEAT_7_0_ECX] =
3612 .features[FEAT_XSAVE] =
3615 .features[FEAT_6_EAX] =
3618 .features[FEAT_VMX_BASIC] = MSR_VMX_BASIC_INS_OUTS |
3620 .features[FEAT_VMX_ENTRY_CTLS] = VMX_VM_ENTRY_IA32E_MODE |
3623 .features[FEAT_VMX_EPT_VPID_CAPS] = MSR_VMX_EPT_EXECONLY |
3630 .features[FEAT_VMX_EXIT_CTLS] =
3636 .features[FEAT_VMX_MISC] = MSR_VMX_MISC_ACTIVITY_HLT |
3638 .features[FEAT_VMX_PINBASED_CTLS] = VMX_PIN_BASED_EXT_INTR_MASK |
3641 .features[FEAT_VMX_PROCBASED_CTLS] = VMX_CPU_BASED_VIRTUAL_INTR_PENDING |
3653 .features[FEAT_VMX_SECONDARY_CTLS] =
3719 .features[FEAT_1_EDX] =
3725 .features[FEAT_1_ECX] =
3732 .features[FEAT_8000_0001_EDX] =
3735 .features[FEAT_8000_0001_ECX] =
3737 .features[FEAT_7_0_EBX] =
3746 .features[FEAT_7_0_ECX] =
3749 .features[FEAT_7_0_EDX] =
3752 .features[FEAT_XSAVE] =
3755 .features[FEAT_6_EAX] =
3758 .features[FEAT_VMX_BASIC] = MSR_VMX_BASIC_INS_OUTS |
3760 .features[FEAT_VMX_ENTRY_CTLS] = VMX_VM_ENTRY_IA32E_MODE |
3763 .features[FEAT_VMX_EPT_VPID_CAPS] = MSR_VMX_EPT_EXECONLY |
3770 .features[FEAT_VMX_EXIT_CTLS] =
3776 .features[FEAT_VMX_MISC] = MSR_VMX_MISC_ACTIVITY_HLT |
3778 .features[FEAT_VMX_PINBASED_CTLS] = VMX_PIN_BASED_EXT_INTR_MASK |
3781 .features[FEAT_VMX_PROCBASED_CTLS] = VMX_CPU_BASED_VIRTUAL_INTR_PENDING |
3793 .features[FEAT_VMX_SECONDARY_CTLS] =
3853 .features[FEAT_1_EDX] =
3859 .features[FEAT_1_ECX] =
3866 .features[FEAT_8000_0001_EDX] =
3869 .features[FEAT_8000_0001_ECX] =
3871 .features[FEAT_7_0_EBX] =
3880 .features[FEAT_7_0_ECX] =
3883 .features[FEAT_7_0_EDX] =
3886 .features[FEAT_ARCH_CAPABILITIES] =
3890 .features[FEAT_7_1_EAX] =
3893 .features[FEAT_XSAVE] =
3896 .features[FEAT_6_EAX] =
3899 .features[FEAT_VMX_BASIC] = MSR_VMX_BASIC_INS_OUTS |
3901 .features[FEAT_VMX_ENTRY_CTLS] = VMX_VM_ENTRY_IA32E_MODE |
3904 .features[FEAT_VMX_EPT_VPID_CAPS] = MSR_VMX_EPT_EXECONLY |
3911 .features[FEAT_VMX_EXIT_CTLS] =
3917 .features[FEAT_VMX_MISC] = MSR_VMX_MISC_ACTIVITY_HLT |
3919 .features[FEAT_VMX_PINBASED_CTLS] = VMX_PIN_BASED_EXT_INTR_MASK |
3922 .features[FEAT_VMX_PROCBASED_CTLS] = VMX_CPU_BASED_VIRTUAL_INTR_PENDING |
3934 .features[FEAT_VMX_SECONDARY_CTLS] =
3945 .features[FEAT_VMX_VMFUNC] = MSR_VMX_VMFUNC_EPT_SWITCHING,
3968 .features[FEAT_1_EDX] =
3974 .features[FEAT_1_ECX] =
3981 .features[FEAT_8000_0001_EDX] =
3984 .features[FEAT_8000_0001_ECX] =
3986 .features[FEAT_8000_0008_EBX] =
3988 .features[FEAT_7_0_EBX] =
3997 .features[FEAT_7_0_ECX] =
4003 .features[FEAT_7_0_EDX] =
4006 .features[FEAT_XSAVE] =
4009 .features[FEAT_6_EAX] =
4012 .features[FEAT_VMX_BASIC] = MSR_VMX_BASIC_INS_OUTS |
4014 .features[FEAT_VMX_ENTRY_CTLS] = VMX_VM_ENTRY_IA32E_MODE |
4017 .features[FEAT_VMX_EPT_VPID_CAPS] = MSR_VMX_EPT_EXECONLY |
4024 .features[FEAT_VMX_EXIT_CTLS] =
4030 .features[FEAT_VMX_MISC] = MSR_VMX_MISC_ACTIVITY_HLT |
4032 .features[FEAT_VMX_PINBASED_CTLS] = VMX_PIN_BASED_EXT_INTR_MASK |
4035 .features[FEAT_VMX_PROCBASED_CTLS] = VMX_CPU_BASED_VIRTUAL_INTR_PENDING |
4047 .features[FEAT_VMX_SECONDARY_CTLS] =
4119 /* Restore TSX features removed by -v2 above */
4139 .features[FEAT_1_EDX] =
4145 .features[FEAT_1_ECX] =
4151 .features[FEAT_8000_0001_EDX] =
4154 .features[FEAT_8000_0001_ECX] =
4156 .features[FEAT_8000_0008_EBX] =
4158 .features[FEAT_7_0_EBX] =
4167 .features[FEAT_7_0_ECX] =
4174 .features[FEAT_7_0_EDX] =
4180 .features[FEAT_ARCH_CAPABILITIES] =
4184 .features[FEAT_XSAVE] =
4187 .features[FEAT_6_EAX] =
4189 .features[FEAT_7_1_EAX] =
4192 .features[FEAT_VMX_BASIC] =
4194 .features[FEAT_VMX_ENTRY_CTLS] =
4198 .features[FEAT_VMX_EPT_VPID_CAPS] =
4208 .features[FEAT_VMX_EXIT_CTLS] =
4214 .features[FEAT_VMX_MISC] =
4217 .features[FEAT_VMX_PINBASED_CTLS] =
4221 .features[FEAT_VMX_PROCBASED_CTLS] =
4234 .features[FEAT_VMX_SECONDARY_CTLS] =
4248 .features[FEAT_VMX_VMFUNC] =
4288 .features[FEAT_1_EDX] =
4294 .features[FEAT_1_ECX] =
4300 .features[FEAT_8000_0001_EDX] =
4303 .features[FEAT_8000_0001_ECX] =
4305 .features[FEAT_8000_0008_EBX] =
4307 .features[FEAT_7_0_EBX] =
4316 .features[FEAT_7_0_ECX] =
4323 .features[FEAT_7_0_EDX] =
4329 .features[FEAT_ARCH_CAPABILITIES] =
4335 .features[FEAT_XSAVE] =
4338 .features[FEAT_6_EAX] =
4340 .features[FEAT_7_1_EAX] =
4344 .features[FEAT_7_1_EDX] =
4346 .features[FEAT_7_2_EDX] =
4348 .features[FEAT_VMX_BASIC] =
4350 .features[FEAT_VMX_ENTRY_CTLS] =
4354 .features[FEAT_VMX_EPT_VPID_CAPS] =
4364 .features[FEAT_VMX_EXIT_CTLS] =
4370 .features[FEAT_VMX_MISC] =
4373 .features[FEAT_VMX_PINBASED_CTLS] =
4377 .features[FEAT_VMX_PROCBASED_CTLS] =
4390 .features[FEAT_VMX_SECONDARY_CTLS] =
4404 .features[FEAT_VMX_VMFUNC] =
4441 .features[FEAT_1_EDX] =
4447 .features[FEAT_1_ECX] =
4453 .features[FEAT_8000_0001_EDX] =
4456 .features[FEAT_8000_0001_ECX] =
4458 .features[FEAT_8000_0008_EBX] =
4460 .features[FEAT_7_0_EBX] =
4466 .features[FEAT_7_0_ECX] =
4470 .features[FEAT_7_0_EDX] =
4474 .features[FEAT_ARCH_CAPABILITIES] =
4480 .features[FEAT_XSAVE] =
4483 .features[FEAT_6_EAX] =
4485 .features[FEAT_7_1_EAX] =
4488 .features[FEAT_7_1_EDX] =
4490 .features[FEAT_7_2_EDX] =
4492 .features[FEAT_VMX_BASIC] =
4494 .features[FEAT_VMX_ENTRY_CTLS] =
4498 .features[FEAT_VMX_EPT_VPID_CAPS] =
4507 .features[FEAT_VMX_EXIT_CTLS] =
4513 .features[FEAT_VMX_MISC] =
4516 .features[FEAT_VMX_PINBASED_CTLS] =
4520 .features[FEAT_VMX_PROCBASED_CTLS] =
4533 .features[FEAT_VMX_SECONDARY_CTLS] =
4547 .features[FEAT_VMX_VMFUNC] =
4563 .features[FEAT_1_EDX] =
4569 .features[FEAT_1_ECX] =
4575 .features[FEAT_8000_0001_EDX] =
4578 .features[FEAT_8000_0001_ECX] =
4580 .features[FEAT_7_0_EBX] =
4584 .features[FEAT_7_0_EDX] =
4588 .features[FEAT_XSAVE] =
4590 .features[FEAT_6_EAX] =
4592 .features[FEAT_ARCH_CAPABILITIES] =
4594 .features[FEAT_VMX_BASIC] = MSR_VMX_BASIC_INS_OUTS |
4596 .features[FEAT_VMX_ENTRY_CTLS] = VMX_VM_ENTRY_IA32E_MODE |
4599 .features[FEAT_VMX_EPT_VPID_CAPS] = MSR_VMX_EPT_EXECONLY |
4606 .features[FEAT_VMX_EXIT_CTLS] =
4612 .features[FEAT_VMX_MISC] = MSR_VMX_MISC_ACTIVITY_HLT |
4614 .features[FEAT_VMX_PINBASED_CTLS] = VMX_PIN_BASED_EXT_INTR_MASK |
4617 .features[FEAT_VMX_PROCBASED_CTLS] = VMX_CPU_BASED_VIRTUAL_INTR_PENDING |
4629 .features[FEAT_VMX_SECONDARY_CTLS] =
4640 .features[FEAT_VMX_VMFUNC] = MSR_VMX_VMFUNC_EPT_SWITCHING,
4673 .features[FEAT_1_EDX] =
4683 .features[FEAT_1_ECX] =
4692 .features[FEAT_8000_0001_EDX] =
4697 .features[FEAT_8000_0001_ECX] =
4700 .features[FEAT_7_0_EBX] =
4709 .features[FEAT_7_0_ECX] =
4715 .features[FEAT_7_0_EDX] =
4719 .features[FEAT_CORE_CAPABILITY] =
4722 .features[FEAT_XSAVE] =
4725 .features[FEAT_6_EAX] =
4727 .features[FEAT_VMX_BASIC] = MSR_VMX_BASIC_INS_OUTS |
4729 .features[FEAT_VMX_ENTRY_CTLS] = VMX_VM_ENTRY_IA32E_MODE |
4732 .features[FEAT_VMX_EPT_VPID_CAPS] = MSR_VMX_EPT_EXECONLY |
4739 .features[FEAT_VMX_EXIT_CTLS] =
4745 .features[FEAT_VMX_MISC] = MSR_VMX_MISC_ACTIVITY_HLT |
4747 .features[FEAT_VMX_PINBASED_CTLS] = VMX_PIN_BASED_EXT_INTR_MASK |
4750 .features[FEAT_VMX_PROCBASED_CTLS] = VMX_CPU_BASED_VIRTUAL_INTR_PENDING |
4762 .features[FEAT_VMX_SECONDARY_CTLS] =
4773 .features[FEAT_VMX_VMFUNC] = MSR_VMX_VMFUNC_EPT_SWITCHING,
4814 .features[FEAT_1_EDX] =
4820 .features[FEAT_1_ECX] =
4827 .features[FEAT_8000_0001_EDX] =
4830 .features[FEAT_8000_0001_ECX] =
4832 .features[FEAT_7_0_EBX] =
4838 .features[FEAT_7_0_ECX] =
4840 .features[FEAT_7_0_EDX] =
4842 .features[FEAT_XSAVE] =
4844 .features[FEAT_6_EAX] =
4856 .features[FEAT_1_EDX] =
4862 .features[FEAT_1_ECX] =
4864 .features[FEAT_8000_0001_EDX] =
4876 .features[FEAT_1_EDX] =
4882 .features[FEAT_1_ECX] =
4884 .features[FEAT_8000_0001_EDX] =
4886 .features[FEAT_8000_0001_ECX] =
4898 .features[FEAT_1_EDX] =
4904 .features[FEAT_1_ECX] =
4907 .features[FEAT_8000_0001_EDX] =
4910 .features[FEAT_8000_0001_ECX] =
4923 .features[FEAT_1_EDX] =
4929 .features[FEAT_1_ECX] =
4934 .features[FEAT_8000_0001_EDX] =
4937 .features[FEAT_8000_0001_ECX] =
4942 .features[FEAT_SVM] =
4955 .features[FEAT_1_EDX] =
4961 .features[FEAT_1_ECX] =
4966 .features[FEAT_8000_0001_EDX] =
4969 .features[FEAT_8000_0001_ECX] =
4974 .features[FEAT_SVM] =
4987 .features[FEAT_1_EDX] =
4993 .features[FEAT_1_ECX] =
4999 .features[FEAT_8000_0001_EDX] =
5003 .features[FEAT_8000_0001_ECX] =
5008 .features[FEAT_7_0_EBX] =
5013 .features[FEAT_XSAVE] =
5016 .features[FEAT_6_EAX] =
5018 .features[FEAT_SVM] =
5067 .features[FEAT_1_EDX] =
5073 .features[FEAT_1_ECX] =
5079 .features[FEAT_8000_0001_EDX] =
5083 .features[FEAT_8000_0001_ECX] =
5088 .features[FEAT_8000_0008_EBX] =
5090 .features[FEAT_7_0_EBX] =
5095 .features[FEAT_XSAVE] =
5098 .features[FEAT_6_EAX] =
5100 .features[FEAT_SVM] =
5124 .features[FEAT_1_EDX] =
5130 .features[FEAT_1_ECX] =
5136 .features[FEAT_8000_0001_EDX] =
5140 .features[FEAT_8000_0001_ECX] =
5145 .features[FEAT_8000_0008_EBX] =
5149 .features[FEAT_7_0_EBX] =
5154 .features[FEAT_7_0_ECX] =
5156 .features[FEAT_XSAVE] =
5159 .features[FEAT_6_EAX] =
5161 .features[FEAT_SVM] =
5205 .features[FEAT_1_EDX] =
5211 .features[FEAT_1_ECX] =
5218 .features[FEAT_8000_0001_EDX] =
5222 .features[FEAT_8000_0001_ECX] =
5227 .features[FEAT_8000_0008_EBX] =
5232 .features[FEAT_7_0_EBX] =
5238 .features[FEAT_7_0_ECX] =
5240 .features[FEAT_7_0_EDX] =
5242 .features[FEAT_XSAVE] =
5245 .features[FEAT_6_EAX] =
5247 .features[FEAT_SVM] =
5280 .features[FEAT_1_EDX] =
5286 .features[FEAT_1_ECX] =
5293 .features[FEAT_8000_0001_EDX] =
5297 .features[FEAT_8000_0001_ECX] =
5302 .features[FEAT_8000_0008_EBX] =
5308 .features[FEAT_8000_0021_EAX] =
5313 .features[FEAT_7_0_EBX] =
5322 .features[FEAT_7_0_ECX] =
5329 .features[FEAT_7_0_EDX] =
5331 .features[FEAT_7_1_EAX] =
5333 .features[FEAT_XSAVE] =
5336 .features[FEAT_6_EAX] =
5338 .features[FEAT_SVM] =
5399 if (X86_CPU(obj)->env.features[FEAT_8000_0001_EDX] & CPUID_EXT2_LM) { in max_x86_cpu_realize()
5421 "Enables all features supported by the accelerator in the current host"; in max_x86_cpu_class_init()
5431 /* We can't fill the features array here because we don't know yet if in max_x86_cpu_initfn()
5496 env->features[w] &= ~mask; in mark_unavailable_features()
5727 /* Generic getter for "feature-words" and "filtered-features" properties */
5741 * We didn't have MSR features when "feature-words" was in x86_cpu_get_feature_words()
5752 qwi->features = array[w]; in x86_cpu_get_feature_words()
5777 /* XSAVE components are automatically enabled by other features, in x86_cpu_feature_name()
5811 static void x86_cpu_parse_featurestr(const char *typename, char *features, in x86_cpu_parse_featurestr() argument
5823 if (!features) { in x86_cpu_parse_featurestr()
5827 for (featurestr = strtok(features, ","); in x86_cpu_parse_featurestr()
5901 /* Build a list with the name of all features on a feature word array */
5902 static void x86_cpu_list_feature_names(FeatureWordArray features, in x86_cpu_list_feature_names() argument
5909 uint64_t filtered = features[w]; in x86_cpu_list_feature_names()
5927 visit_type_strList(v, "unavailable-features", &result, errp); in x86_cpu_get_unavailable_features()
5932 static void listflags(GList *features) in listflags() argument
5937 for (tmp = features; tmp; tmp = tmp->next) { in listflags()
6060 /* Check for missing features that may prevent the CPU class from
6368 env->features[w] = def->features[w]; in x86_cpu_load_model()
6374 env->features[FEAT_1_ECX] |= CPUID_EXT_HYPERVISOR; in x86_cpu_load_model()
6396 * Properties in versioned CPU model are not user specified features. in x86_cpu_load_model()
6450 assert(!(def->features[FEAT_8000_0001_EDX] & CPUID_EXT2_AMD_ALIASES)); in x86_register_cpudef_types()
6486 if (env->features[FEAT_7_0_ECX] & CPUID_7_0_ECX_LA57) { in cpu_x86_virtual_addr_width()
6544 *ecx = env->features[FEAT_1_ECX]; in cpu_x86_cpuid()
6548 *edx = env->features[FEAT_1_EDX]; in cpu_x86_cpuid()
6648 *eax = env->features[FEAT_6_EAX]; in cpu_x86_cpuid()
6658 *ebx = env->features[FEAT_7_0_EBX]; /* Feature flags */ in cpu_x86_cpuid()
6659 *ecx = env->features[FEAT_7_0_ECX]; /* Feature flags */ in cpu_x86_cpuid()
6663 *edx = env->features[FEAT_7_0_EDX]; /* Feature flags */ in cpu_x86_cpuid()
6665 *eax = env->features[FEAT_7_1_EAX]; in cpu_x86_cpuid()
6666 *edx = env->features[FEAT_7_1_EDX]; in cpu_x86_cpuid()
6670 *edx = env->features[FEAT_7_2_EDX]; in cpu_x86_cpuid()
6730 if (cpu->enable_pmu && (env->features[FEAT_7_0_EDX] & CPUID_7_0_EDX_ARCH_LBR)) { in cpu_x86_cpuid()
6750 if (!(env->features[FEAT_1_ECX] & CPUID_EXT_XSAVE)) { in cpu_x86_cpuid()
6756 *eax = env->features[FEAT_XSAVE_XCR0_LO]; in cpu_x86_cpuid()
6757 *edx = env->features[FEAT_XSAVE_XCR0_HI]; in cpu_x86_cpuid()
6769 *eax = env->features[FEAT_XSAVE]; in cpu_x86_cpuid()
6771 *ecx = env->features[FEAT_XSAVE_XSS_LO]; in cpu_x86_cpuid()
6772 *edx = env->features[FEAT_XSAVE_XSS_HI]; in cpu_x86_cpuid()
6774 (env->features[FEAT_7_0_EDX] & CPUID_7_0_EDX_ARCH_LBR) && in cpu_x86_cpuid()
6781 && (env->features[FEAT_7_0_EDX] & CPUID_7_0_EDX_ARCH_LBR)) { in cpu_x86_cpuid()
6802 !(env->features[FEAT_7_0_EBX] & CPUID_7_0_EBX_SGX)) { in cpu_x86_cpuid()
6830 * and KVM, i.e. QEMU cannot emulate features to override what KVM in cpu_x86_cpuid()
6831 * supports. Features can be further restricted by userspace, but not in cpu_x86_cpuid()
6837 *eax &= env->features[FEAT_SGX_12_0_EAX]; in cpu_x86_cpuid()
6838 *ebx &= env->features[FEAT_SGX_12_0_EBX]; in cpu_x86_cpuid()
6840 *eax &= env->features[FEAT_SGX_12_1_EAX]; in cpu_x86_cpuid()
6842 *ecx &= env->features[FEAT_XSAVE_XCR0_LO]; in cpu_x86_cpuid()
6843 *edx &= env->features[FEAT_XSAVE_XCR0_HI]; in cpu_x86_cpuid()
6862 if (!(env->features[FEAT_7_0_EBX] & CPUID_7_0_EBX_INTEL_PT) || in cpu_x86_cpuid()
6875 if (env->features[FEAT_14_0_ECX] & CPUID_14_0_ECX_LIP) { in cpu_x86_cpuid()
6890 if (!(env->features[FEAT_7_0_EDX] & CPUID_7_0_EDX_AMX_TILE)) { in cpu_x86_cpuid()
6911 if (!(env->features[FEAT_7_0_EDX] & CPUID_7_0_EDX_AMX_TILE)) { in cpu_x86_cpuid()
6926 if ((env->features[FEAT_7_1_EDX] & CPUID_7_1_EDX_AVX10) && count == 0) { in cpu_x86_cpuid()
6927 *ebx = env->features[FEAT_24_0_EBX] | env->avx10_version; in cpu_x86_cpuid()
6964 *ecx = env->features[FEAT_8000_0001_ECX]; in cpu_x86_cpuid()
6965 *edx = env->features[FEAT_8000_0001_EDX]; in cpu_x86_cpuid()
7025 *ebx = env->features[FEAT_8000_0007_EBX]; in cpu_x86_cpuid()
7027 *edx = env->features[FEAT_8000_0007_EDX]; in cpu_x86_cpuid()
7032 if (env->features[FEAT_8000_0001_EDX] & CPUID_EXT2_LM) { in cpu_x86_cpuid()
7037 *ebx = env->features[FEAT_8000_0008_EBX]; in cpu_x86_cpuid()
7053 if (env->features[FEAT_8000_0001_ECX] & CPUID_EXT3_SVM) { in cpu_x86_cpuid()
7057 *edx = env->features[FEAT_SVM]; /* optional features */ in cpu_x86_cpuid()
7110 (env->features[FEAT_8000_0022_EAX] & CPUID_8000_0022_EAX_PERFMON_V2)) { in cpu_x86_cpuid()
7127 *edx = env->features[FEAT_C000_0001_EDX]; in cpu_x86_cpuid()
7150 *eax = env->features[FEAT_8000_0021_EAX]; in cpu_x86_cpuid()
7151 *ebx = env->features[FEAT_8000_0021_EBX]; in cpu_x86_cpuid()
7180 if (env->features[esa->feature] & esa->bits) { in cpuid_has_xsave_feature()
7184 && (env->features[FEAT_7_1_EDX] & CPUID_7_1_EDX_AVX10)) { in cpuid_has_xsave_feature()
7280 if (env->features[FEAT_1_ECX] & CPUID_EXT_MONITOR) { in x86_cpu_reset_hold()
7294 /* Enable all the features for user-mode. */ in x86_cpu_reset_hold()
7295 if (env->features[FEAT_1_EDX] & CPUID_SSE) { in x86_cpu_reset_hold()
7308 if (env->features[FEAT_1_ECX] & CPUID_EXT_XSAVE) { in x86_cpu_reset_hold()
7311 if (env->features[FEAT_7_0_EBX] & CPUID_7_0_EBX_FSGSBASE) { in x86_cpu_reset_hold()
7373 && (cenv->features[FEAT_1_EDX] & (CPUID_MCE | CPUID_MCA)) == in mce_init()
7400 if (!env->features[w]) { in x86_cpu_adjust_feat_level()
7430 if (!(env->features[FEAT_1_ECX] & CPUID_EXT_XSAVE)) { in x86_cpu_enable_xsave_components()
7431 env->features[FEAT_XSAVE_XCR0_LO] = 0; in x86_cpu_enable_xsave_components()
7432 env->features[FEAT_XSAVE_XCR0_HI] = 0; in x86_cpu_enable_xsave_components()
7433 env->features[FEAT_XSAVE_XSS_LO] = 0; in x86_cpu_enable_xsave_components()
7434 env->features[FEAT_XSAVE_XSS_HI] = 0; in x86_cpu_enable_xsave_components()
7452 env->features[FEAT_XSAVE_XCR0_LO] = mask & CPUID_XSTATE_XCR0_MASK; in x86_cpu_enable_xsave_components()
7453 env->features[FEAT_XSAVE_XCR0_HI] = (mask & CPUID_XSTATE_XCR0_MASK) >> 32; in x86_cpu_enable_xsave_components()
7454 env->features[FEAT_XSAVE_XSS_LO] = mask & CPUID_XSTATE_XSS_MASK; in x86_cpu_enable_xsave_components()
7455 env->features[FEAT_XSAVE_XSS_HI] = (mask & CPUID_XSTATE_XSS_MASK) >> 32; in x86_cpu_enable_xsave_components()
7488 * to run CPUID filtering, as the 'unavailable-features'
7495 /* Expand CPU configuration data, based on configured features
7519 /*TODO: Now cpu->max_features doesn't overwrite features in x86_cpu_expand_features()
7526 /* Override only features that weren't set explicitly in x86_cpu_expand_features()
7529 env->features[w] |= in x86_cpu_expand_features()
7535 if ((env->features[FEAT_7_1_EDX] & CPUID_7_1_EDX_AVX10) && !env->avx10_version) { in x86_cpu_expand_features()
7544 if (!(env->features[d->from.index] & d->from.mask)) { in x86_cpu_expand_features()
7545 uint64_t unavailable_features = env->features[d->to.index] & d->to.mask; in x86_cpu_expand_features()
7550 … "This feature depends on other features that were not requested"); in x86_cpu_expand_features()
7552 env->features[d->to.index] &= ~unavailable_features; in x86_cpu_expand_features()
7557 env->features[FEAT_KVM] = 0; in x86_cpu_expand_features()
7581 if ((env->features[FEAT_7_0_EBX] & CPUID_7_0_EBX_INTEL_PT)) { in x86_cpu_expand_features()
7604 if (env->features[FEAT_7_1_EDX] & CPUID_7_1_EDX_AVX10) { in x86_cpu_expand_features()
7609 if (env->features[FEAT_8000_0001_ECX] & CPUID_EXT3_SVM) { in x86_cpu_expand_features()
7618 if (env->features[FEAT_8000_0021_EAX]) { in x86_cpu_expand_features()
7623 if (env->features[FEAT_7_0_EBX] & CPUID_7_0_EBX_SGX) { in x86_cpu_expand_features()
7672 uint64_t requested_features = env->features[w]; in x86_cpu_filter_features()
7678 * Check that KVM actually allows the processor tracing features that in x86_cpu_filter_features()
7681 if ((env->features[FEAT_7_0_EBX] & CPUID_7_0_EBX_INTEL_PT) && in x86_cpu_filter_features()
7697 (env->features[FEAT_14_0_ECX] & CPUID_14_0_ECX_LIP))) { in x86_cpu_filter_features()
7709 if (env->features[FEAT_7_1_EDX] & CPUID_7_1_EDX_AVX10) { in x86_cpu_filter_features()
7782 * Note: this currently has to happen before the expansion of CPU features. in x86_cpu_realizefn()
7792 * Override env->features[FEAT_PERF_CAPABILITIES].LBR_FMT in x86_cpu_realizefn()
7800 env->features[FEAT_PERF_CAPABILITIES] &= ~PERF_CAP_LBR_FMT; in x86_cpu_realizefn()
7801 env->features[FEAT_PERF_CAPABILITIES] |= cpu->lbr_fmt; in x86_cpu_realizefn()
7809 env->features[FEAT_PERF_CAPABILITIES] & PERF_CAP_LBR_FMT; in x86_cpu_realizefn()
7831 "Host doesn't support requested features" : in x86_cpu_realizefn()
7832 "TCG doesn't support requested features"); in x86_cpu_realizefn()
7841 env->features[FEAT_8000_0001_EDX] &= ~CPUID_EXT2_AMD_ALIASES; in x86_cpu_realizefn()
7842 env->features[FEAT_8000_0001_EDX] |= (env->features[FEAT_1_EDX] in x86_cpu_realizefn()
7902 * Note that this code assumes features expansion has already been done in x86_cpu_realizefn()
7907 if (env->features[FEAT_8000_0001_EDX] & CPUID_EXT2_LM) { in x86_cpu_realizefn()
7945 if (env->features[FEAT_1_EDX] & (CPUID_PSE36 | CPUID_PAE)) { in x86_cpu_realizefn()
7987 if (cpu->env.features[FEAT_1_EDX] & CPUID_APIC || ms->smp.cpus > 1) { in x86_cpu_realizefn()
8010 !(env->features[FEAT_8000_0001_ECX] & CPUID_EXT3_TOPOEXT) && in x86_cpu_realizefn()
8063 uint64_t f = cpu->env.features[fp->w]; in x86_cpu_get_bit_prop()
8086 cpu->env.features[fp->w] |= fp->mask; in x86_cpu_set_bit_prop()
8088 cpu->env.features[fp->w] &= ~fp->mask; in x86_cpu_set_bit_prop()
8195 NULL, NULL, (void *)env->features); in x86_cpu_initfn()
8196 object_property_add(obj, "filtered-features", "X86CPUFeatureWordInfo", in x86_cpu_initfn()
8498 DEFINE_PROP_BOOL("x-force-features", X86CPU, force_features, false),
8519 DEFINE_PROP_BOOL("x-amd-topoext-features-only", X86CPU, amd_topoext_features_only, true),
8636 * The "unavailable-features" property has the same semantics as in x86_cpu_common_class_init()
8637 * CpuDefinitionInfo.unavailable-features on the "query-cpu-definitions" in x86_cpu_common_class_init()
8638 * QMP command: they list the features that would have prevented the in x86_cpu_common_class_init()
8641 object_class_property_add(oc, "unavailable-features", "strList", in x86_cpu_common_class_init()
8678 xcc->model_description = "base CPU model type with no features enabled"; in x86_cpu_base_class_init()