qemu/target-i386/cpu.c
<<
>>
Prefs
   1/*
   2 *  i386 CPUID helper functions
   3 *
   4 *  Copyright (c) 2003 Fabrice Bellard
   5 *
   6 * This library is free software; you can redistribute it and/or
   7 * modify it under the terms of the GNU Lesser General Public
   8 * License as published by the Free Software Foundation; either
   9 * version 2 of the License, or (at your option) any later version.
  10 *
  11 * This library is distributed in the hope that it will be useful,
  12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  14 * Lesser General Public License for more details.
  15 *
  16 * You should have received a copy of the GNU Lesser General Public
  17 * License along with this library; if not, see <http://www.gnu.org/licenses/>.
  18 */
  19#include "qemu/osdep.h"
  20#include "qemu/cutils.h"
  21
  22#include "cpu.h"
  23#include "exec/exec-all.h"
  24#include "sysemu/kvm.h"
  25#include "sysemu/cpus.h"
  26#include "kvm_i386.h"
  27
  28#include "qemu/error-report.h"
  29#include "qemu/option.h"
  30#include "qemu/config-file.h"
  31#include "qapi/qmp/qerror.h"
  32
  33#include "qapi-types.h"
  34#include "qapi-visit.h"
  35#include "qapi/visitor.h"
  36#include "sysemu/arch_init.h"
  37
  38#if defined(CONFIG_KVM)
  39#include <linux/kvm_para.h>
  40#endif
  41
  42#include "sysemu/sysemu.h"
  43#include "hw/qdev-properties.h"
  44#include "hw/i386/topology.h"
  45#ifndef CONFIG_USER_ONLY
  46#include "exec/address-spaces.h"
  47#include "hw/hw.h"
  48#include "hw/xen/xen.h"
  49#include "hw/i386/apic_internal.h"
  50#endif
  51
  52
  53/* Cache topology CPUID constants: */
  54
  55/* CPUID Leaf 2 Descriptors */
  56
  57#define CPUID_2_L1D_32KB_8WAY_64B 0x2c
  58#define CPUID_2_L1I_32KB_8WAY_64B 0x30
  59#define CPUID_2_L2_2MB_8WAY_64B   0x7d
  60
  61
  62/* CPUID Leaf 4 constants: */
  63
  64/* EAX: */
  65#define CPUID_4_TYPE_DCACHE  1
  66#define CPUID_4_TYPE_ICACHE  2
  67#define CPUID_4_TYPE_UNIFIED 3
  68
  69#define CPUID_4_LEVEL(l)          ((l) << 5)
  70
  71#define CPUID_4_SELF_INIT_LEVEL (1 << 8)
  72#define CPUID_4_FULLY_ASSOC     (1 << 9)
  73
  74/* EDX: */
  75#define CPUID_4_NO_INVD_SHARING (1 << 0)
  76#define CPUID_4_INCLUSIVE       (1 << 1)
  77#define CPUID_4_COMPLEX_IDX     (1 << 2)
  78
  79#define ASSOC_FULL 0xFF
  80
  81/* AMD associativity encoding used on CPUID Leaf 0x80000006: */
  82#define AMD_ENC_ASSOC(a) (a <=   1 ? a   : \
  83                          a ==   2 ? 0x2 : \
  84                          a ==   4 ? 0x4 : \
  85                          a ==   8 ? 0x6 : \
  86                          a ==  16 ? 0x8 : \
  87                          a ==  32 ? 0xA : \
  88                          a ==  48 ? 0xB : \
  89                          a ==  64 ? 0xC : \
  90                          a ==  96 ? 0xD : \
  91                          a == 128 ? 0xE : \
  92                          a == ASSOC_FULL ? 0xF : \
  93                          0 /* invalid value */)
  94
  95
  96/* Definitions of the hardcoded cache entries we expose: */
  97
  98/* L1 data cache: */
  99#define L1D_LINE_SIZE         64
 100#define L1D_ASSOCIATIVITY      8
 101#define L1D_SETS              64
 102#define L1D_PARTITIONS         1
 103/* Size = LINE_SIZE*ASSOCIATIVITY*SETS*PARTITIONS = 32KiB */
 104#define L1D_DESCRIPTOR CPUID_2_L1D_32KB_8WAY_64B
 105/*FIXME: CPUID leaf 0x80000005 is inconsistent with leaves 2 & 4 */
 106#define L1D_LINES_PER_TAG      1
 107#define L1D_SIZE_KB_AMD       64
 108#define L1D_ASSOCIATIVITY_AMD  2
 109
 110/* L1 instruction cache: */
 111#define L1I_LINE_SIZE         64
 112#define L1I_ASSOCIATIVITY      8
 113#define L1I_SETS              64
 114#define L1I_PARTITIONS         1
 115/* Size = LINE_SIZE*ASSOCIATIVITY*SETS*PARTITIONS = 32KiB */
 116#define L1I_DESCRIPTOR CPUID_2_L1I_32KB_8WAY_64B
 117/*FIXME: CPUID leaf 0x80000005 is inconsistent with leaves 2 & 4 */
 118#define L1I_LINES_PER_TAG      1
 119#define L1I_SIZE_KB_AMD       64
 120#define L1I_ASSOCIATIVITY_AMD  2
 121
 122/* Level 2 unified cache: */
 123#define L2_LINE_SIZE          64
 124#define L2_ASSOCIATIVITY      16
 125#define L2_SETS             4096
 126#define L2_PARTITIONS          1
 127/* Size = LINE_SIZE*ASSOCIATIVITY*SETS*PARTITIONS = 4MiB */
 128/*FIXME: CPUID leaf 2 descriptor is inconsistent with CPUID leaf 4 */
 129#define L2_DESCRIPTOR CPUID_2_L2_2MB_8WAY_64B
 130/*FIXME: CPUID leaf 0x80000006 is inconsistent with leaves 2 & 4 */
 131#define L2_LINES_PER_TAG       1
 132#define L2_SIZE_KB_AMD       512
 133
 134/* No L3 cache: */
 135#define L3_SIZE_KB             0 /* disabled */
 136#define L3_ASSOCIATIVITY       0 /* disabled */
 137#define L3_LINES_PER_TAG       0 /* disabled */
 138#define L3_LINE_SIZE           0 /* disabled */
 139
 140/* TLB definitions: */
 141
 142#define L1_DTLB_2M_ASSOC       1
 143#define L1_DTLB_2M_ENTRIES   255
 144#define L1_DTLB_4K_ASSOC       1
 145#define L1_DTLB_4K_ENTRIES   255
 146
 147#define L1_ITLB_2M_ASSOC       1
 148#define L1_ITLB_2M_ENTRIES   255
 149#define L1_ITLB_4K_ASSOC       1
 150#define L1_ITLB_4K_ENTRIES   255
 151
 152#define L2_DTLB_2M_ASSOC       0 /* disabled */
 153#define L2_DTLB_2M_ENTRIES     0 /* disabled */
 154#define L2_DTLB_4K_ASSOC       4
 155#define L2_DTLB_4K_ENTRIES   512
 156
 157#define L2_ITLB_2M_ASSOC       0 /* disabled */
 158#define L2_ITLB_2M_ENTRIES     0 /* disabled */
 159#define L2_ITLB_4K_ASSOC       4
 160#define L2_ITLB_4K_ENTRIES   512
 161
 162
 163
 164static void x86_cpu_vendor_words2str(char *dst, uint32_t vendor1,
 165                                     uint32_t vendor2, uint32_t vendor3)
 166{
 167    int i;
 168    for (i = 0; i < 4; i++) {
 169        dst[i] = vendor1 >> (8 * i);
 170        dst[i + 4] = vendor2 >> (8 * i);
 171        dst[i + 8] = vendor3 >> (8 * i);
 172    }
 173    dst[CPUID_VENDOR_SZ] = '\0';
 174}
 175
 176/* feature flags taken from "Intel Processor Identification and the CPUID
 177 * Instruction" and AMD's "CPUID Specification".  In cases of disagreement
 178 * between feature naming conventions, aliases may be added.
 179 */
 180static const char *feature_name[] = {
 181    "fpu", "vme", "de", "pse",
 182    "tsc", "msr", "pae", "mce",
 183    "cx8", "apic", NULL, "sep",
 184    "mtrr", "pge", "mca", "cmov",
 185    "pat", "pse36", "pn" /* Intel psn */, "clflush" /* Intel clfsh */,
 186    NULL, "ds" /* Intel dts */, "acpi", "mmx",
 187    "fxsr", "sse", "sse2", "ss",
 188    "ht" /* Intel htt */, "tm", "ia64", "pbe",
 189};
 190static const char *ext_feature_name[] = {
 191    "pni|sse3" /* Intel,AMD sse3 */, "pclmulqdq|pclmuldq", "dtes64", "monitor",
 192    "ds_cpl", "vmx", "smx", "est",
 193    "tm2", "ssse3", "cid", NULL,
 194    "fma", "cx16", "xtpr", "pdcm",
 195    NULL, "pcid", "dca", "sse4.1|sse4_1",
 196    "sse4.2|sse4_2", "x2apic", "movbe", "popcnt",
 197    "tsc-deadline", "aes", "xsave", "osxsave",
 198    "avx", "f16c", "rdrand", "hypervisor",
 199};
 200/* Feature names that are already defined on feature_name[] but are set on
 201 * CPUID[8000_0001].EDX on AMD CPUs don't have their names on
 202 * ext2_feature_name[]. They are copied automatically to cpuid_ext2_features
 203 * if and only if CPU vendor is AMD.
 204 */
 205static const char *ext2_feature_name[] = {
 206    NULL /* fpu */, NULL /* vme */, NULL /* de */, NULL /* pse */,
 207    NULL /* tsc */, NULL /* msr */, NULL /* pae */, NULL /* mce */,
 208    NULL /* cx8 */ /* AMD CMPXCHG8B */, NULL /* apic */, NULL, "syscall",
 209    NULL /* mtrr */, NULL /* pge */, NULL /* mca */, NULL /* cmov */,
 210    NULL /* pat */, NULL /* pse36 */, NULL, NULL /* Linux mp */,
 211    "nx|xd", NULL, "mmxext", NULL /* mmx */,
 212    NULL /* fxsr */, "fxsr_opt|ffxsr", "pdpe1gb" /* AMD Page1GB */, "rdtscp",
 213    NULL, "lm|i64", "3dnowext", "3dnow",
 214};
 215static const char *ext3_feature_name[] = {
 216    "lahf_lm" /* AMD LahfSahf */, "cmp_legacy", "svm", "extapic" /* AMD ExtApicSpace */,
 217    "cr8legacy" /* AMD AltMovCr8 */, "abm", "sse4a", "misalignsse",
 218    "3dnowprefetch", "osvw", "ibs", "xop",
 219    "skinit", "wdt", NULL, "lwp",
 220    "fma4", "tce", NULL, "nodeid_msr",
 221    NULL, "tbm", "topoext", "perfctr_core",
 222    "perfctr_nb", NULL, NULL, NULL,
 223    NULL, NULL, NULL, NULL,
 224};
 225
 226static const char *ext4_feature_name[] = {
 227    NULL, NULL, "xstore", "xstore-en",
 228    NULL, NULL, "xcrypt", "xcrypt-en",
 229    "ace2", "ace2-en", "phe", "phe-en",
 230    "pmm", "pmm-en", NULL, NULL,
 231    NULL, NULL, NULL, NULL,
 232    NULL, NULL, NULL, NULL,
 233    NULL, NULL, NULL, NULL,
 234    NULL, NULL, NULL, NULL,
 235};
 236
 237static const char *kvm_feature_name[] = {
 238    "kvmclock", "kvm_nopiodelay", "kvm_mmu", "kvmclock",
 239    "kvm_asyncpf", "kvm_steal_time", "kvm_pv_eoi", "kvm_pv_unhalt",
 240    NULL, NULL, NULL, NULL,
 241    NULL, NULL, NULL, NULL,
 242    NULL, NULL, NULL, NULL,
 243    NULL, NULL, NULL, NULL,
 244    "kvmclock-stable-bit", NULL, NULL, NULL,
 245    NULL, NULL, NULL, NULL,
 246};
 247
 248static const char *hyperv_priv_feature_name[] = {
 249    NULL /* hv_msr_vp_runtime_access */, NULL /* hv_msr_time_refcount_access */,
 250    NULL /* hv_msr_synic_access */, NULL /* hv_msr_stimer_access */,
 251    NULL /* hv_msr_apic_access */, NULL /* hv_msr_hypercall_access */,
 252    NULL /* hv_vpindex_access */, NULL /* hv_msr_reset_access */,
 253    NULL /* hv_msr_stats_access */, NULL /* hv_reftsc_access */,
 254    NULL /* hv_msr_idle_access */, NULL /* hv_msr_frequency_access */,
 255    NULL, NULL, NULL, NULL,
 256    NULL, NULL, NULL, NULL,
 257    NULL, NULL, NULL, NULL,
 258    NULL, NULL, NULL, NULL,
 259    NULL, NULL, NULL, NULL,
 260};
 261
 262static const char *hyperv_ident_feature_name[] = {
 263    NULL /* hv_create_partitions */, NULL /* hv_access_partition_id */,
 264    NULL /* hv_access_memory_pool */, NULL /* hv_adjust_message_buffers */,
 265    NULL /* hv_post_messages */, NULL /* hv_signal_events */,
 266    NULL /* hv_create_port */, NULL /* hv_connect_port */,
 267    NULL /* hv_access_stats */, NULL, NULL, NULL /* hv_debugging */,
 268    NULL /* hv_cpu_power_management */, NULL /* hv_configure_profiler */,
 269    NULL, NULL,
 270    NULL, NULL, NULL, NULL,
 271    NULL, NULL, NULL, NULL,
 272    NULL, NULL, NULL, NULL,
 273    NULL, NULL, NULL, NULL,
 274};
 275
 276static const char *hyperv_misc_feature_name[] = {
 277    NULL /* hv_mwait */, NULL /* hv_guest_debugging */,
 278    NULL /* hv_perf_monitor */, NULL /* hv_cpu_dynamic_part */,
 279    NULL /* hv_hypercall_params_xmm */, NULL /* hv_guest_idle_state */,
 280    NULL, NULL,
 281    NULL, NULL, NULL /* hv_guest_crash_msr */, NULL,
 282    NULL, NULL, NULL, NULL,
 283    NULL, NULL, NULL, NULL,
 284    NULL, NULL, NULL, NULL,
 285    NULL, NULL, NULL, NULL,
 286    NULL, NULL, NULL, NULL,
 287};
 288
 289static const char *svm_feature_name[] = {
 290    "npt", "lbrv", "svm_lock", "nrip_save",
 291    "tsc_scale", "vmcb_clean",  "flushbyasid", "decodeassists",
 292    NULL, NULL, "pause_filter", NULL,
 293    "pfthreshold", NULL, NULL, NULL,
 294    NULL, NULL, NULL, NULL,
 295    NULL, NULL, NULL, NULL,
 296    NULL, NULL, NULL, NULL,
 297    NULL, NULL, NULL, NULL,
 298};
 299
 300static const char *cpuid_7_0_ebx_feature_name[] = {
 301    "fsgsbase", "tsc_adjust", NULL, "bmi1", "hle", "avx2", NULL, "smep",
 302    "bmi2", "erms", "invpcid", "rtm", NULL, NULL, "mpx", NULL,
 303    "avx512f", NULL, "rdseed", "adx", "smap", NULL, "pcommit", "clflushopt",
 304    "clwb", NULL, "avx512pf", "avx512er", "avx512cd", NULL, NULL, NULL,
 305};
 306
 307static const char *cpuid_7_0_ecx_feature_name[] = {
 308    NULL, NULL, "umip", "pku",
 309    "ospke", NULL, NULL, NULL,
 310    NULL, NULL, NULL, NULL,
 311    NULL, NULL, NULL, NULL,
 312    NULL, NULL, NULL, NULL,
 313    NULL, NULL, "rdpid", NULL,
 314    NULL, NULL, NULL, NULL,
 315    NULL, NULL, NULL, NULL,
 316};
 317
 318static const char *cpuid_apm_edx_feature_name[] = {
 319    NULL, NULL, NULL, NULL,
 320    NULL, NULL, NULL, NULL,
 321    "invtsc", NULL, NULL, NULL,
 322    NULL, NULL, NULL, NULL,
 323    NULL, NULL, NULL, NULL,
 324    NULL, NULL, NULL, NULL,
 325    NULL, NULL, NULL, NULL,
 326    NULL, NULL, NULL, NULL,
 327};
 328
 329static const char *cpuid_xsave_feature_name[] = {
 330    "xsaveopt", "xsavec", "xgetbv1", "xsaves",
 331    NULL, NULL, NULL, NULL,
 332    NULL, NULL, NULL, NULL,
 333    NULL, NULL, NULL, NULL,
 334    NULL, NULL, NULL, NULL,
 335    NULL, NULL, NULL, NULL,
 336    NULL, NULL, NULL, NULL,
 337    NULL, NULL, NULL, NULL,
 338};
 339
 340static const char *cpuid_6_feature_name[] = {
 341    NULL, NULL, "arat", NULL,
 342    NULL, NULL, NULL, NULL,
 343    NULL, NULL, NULL, NULL,
 344    NULL, NULL, NULL, NULL,
 345    NULL, NULL, NULL, NULL,
 346    NULL, NULL, NULL, NULL,
 347    NULL, NULL, NULL, NULL,
 348    NULL, NULL, NULL, NULL,
 349};
 350
 351#define I486_FEATURES (CPUID_FP87 | CPUID_VME | CPUID_PSE)
 352#define PENTIUM_FEATURES (I486_FEATURES | CPUID_DE | CPUID_TSC | \
 353          CPUID_MSR | CPUID_MCE | CPUID_CX8 | CPUID_MMX | CPUID_APIC)
 354#define PENTIUM2_FEATURES (PENTIUM_FEATURES | CPUID_PAE | CPUID_SEP | \
 355          CPUID_MTRR | CPUID_PGE | CPUID_MCA | CPUID_CMOV | CPUID_PAT | \
 356          CPUID_PSE36 | CPUID_FXSR)
 357#define PENTIUM3_FEATURES (PENTIUM2_FEATURES | CPUID_SSE)
 358#define PPRO_FEATURES (CPUID_FP87 | CPUID_DE | CPUID_PSE | CPUID_TSC | \
 359          CPUID_MSR | CPUID_MCE | CPUID_CX8 | CPUID_PGE | CPUID_CMOV | \
 360          CPUID_PAT | CPUID_FXSR | CPUID_MMX | CPUID_SSE | CPUID_SSE2 | \
 361          CPUID_PAE | CPUID_SEP | CPUID_APIC)
 362
 363#define TCG_FEATURES (CPUID_FP87 | CPUID_PSE | CPUID_TSC | CPUID_MSR | \
 364          CPUID_PAE | CPUID_MCE | CPUID_CX8 | CPUID_APIC | CPUID_SEP | \
 365          CPUID_MTRR | CPUID_PGE | CPUID_MCA | CPUID_CMOV | CPUID_PAT | \
 366          CPUID_PSE36 | CPUID_CLFLUSH | CPUID_ACPI | CPUID_MMX | \
 367          CPUID_FXSR | CPUID_SSE | CPUID_SSE2 | CPUID_SS | CPUID_DE)
 368          /* partly implemented:
 369          CPUID_MTRR, CPUID_MCA, CPUID_CLFLUSH (needed for Win64) */
 370          /* missing:
 371          CPUID_VME, CPUID_DTS, CPUID_SS, CPUID_HT, CPUID_TM, CPUID_PBE */
 372#define TCG_EXT_FEATURES (CPUID_EXT_SSE3 | CPUID_EXT_PCLMULQDQ | \
 373          CPUID_EXT_MONITOR | CPUID_EXT_SSSE3 | CPUID_EXT_CX16 | \
 374          CPUID_EXT_SSE41 | CPUID_EXT_SSE42 | CPUID_EXT_POPCNT | \
 375          CPUID_EXT_XSAVE | /* CPUID_EXT_OSXSAVE is dynamic */   \
 376          CPUID_EXT_MOVBE | CPUID_EXT_AES | CPUID_EXT_HYPERVISOR)
 377          /* missing:
 378          CPUID_EXT_DTES64, CPUID_EXT_DSCPL, CPUID_EXT_VMX, CPUID_EXT_SMX,
 379          CPUID_EXT_EST, CPUID_EXT_TM2, CPUID_EXT_CID, CPUID_EXT_FMA,
 380          CPUID_EXT_XTPR, CPUID_EXT_PDCM, CPUID_EXT_PCID, CPUID_EXT_DCA,
 381          CPUID_EXT_X2APIC, CPUID_EXT_TSC_DEADLINE_TIMER, CPUID_EXT_AVX,
 382          CPUID_EXT_F16C, CPUID_EXT_RDRAND */
 383
 384#ifdef TARGET_X86_64
 385#define TCG_EXT2_X86_64_FEATURES (CPUID_EXT2_SYSCALL | CPUID_EXT2_LM)
 386#else
 387#define TCG_EXT2_X86_64_FEATURES 0
 388#endif
 389
 390#define TCG_EXT2_FEATURES ((TCG_FEATURES & CPUID_EXT2_AMD_ALIASES) | \
 391          CPUID_EXT2_NX | CPUID_EXT2_MMXEXT | CPUID_EXT2_RDTSCP | \
 392          CPUID_EXT2_3DNOW | CPUID_EXT2_3DNOWEXT | CPUID_EXT2_PDPE1GB | \
 393          TCG_EXT2_X86_64_FEATURES)
 394#define TCG_EXT3_FEATURES (CPUID_EXT3_LAHF_LM | CPUID_EXT3_SVM | \
 395          CPUID_EXT3_CR8LEG | CPUID_EXT3_ABM | CPUID_EXT3_SSE4A)
 396#define TCG_EXT4_FEATURES 0
 397#define TCG_SVM_FEATURES 0
 398#define TCG_KVM_FEATURES 0
 399#define TCG_7_0_EBX_FEATURES (CPUID_7_0_EBX_SMEP | CPUID_7_0_EBX_SMAP | \
 400          CPUID_7_0_EBX_BMI1 | CPUID_7_0_EBX_BMI2 | CPUID_7_0_EBX_ADX | \
 401          CPUID_7_0_EBX_PCOMMIT | CPUID_7_0_EBX_CLFLUSHOPT |            \
 402          CPUID_7_0_EBX_CLWB | CPUID_7_0_EBX_MPX | CPUID_7_0_EBX_FSGSBASE | \
 403          CPUID_7_0_EBX_ERMS)
 404          /* missing:
 405          CPUID_7_0_EBX_HLE, CPUID_7_0_EBX_AVX2,
 406          CPUID_7_0_EBX_INVPCID, CPUID_7_0_EBX_RTM,
 407          CPUID_7_0_EBX_RDSEED */
 408#define TCG_7_0_ECX_FEATURES (CPUID_7_0_ECX_PKU | CPUID_7_0_ECX_OSPKE)
 409#define TCG_APM_FEATURES 0
 410#define TCG_6_EAX_FEATURES CPUID_6_EAX_ARAT
 411#define TCG_XSAVE_FEATURES (CPUID_XSAVE_XSAVEOPT | CPUID_XSAVE_XGETBV1)
 412          /* missing:
 413          CPUID_XSAVE_XSAVEC, CPUID_XSAVE_XSAVES */
 414
 415typedef struct FeatureWordInfo {
 416    const char **feat_names;
 417    uint32_t cpuid_eax;   /* Input EAX for CPUID */
 418    bool cpuid_needs_ecx; /* CPUID instruction uses ECX as input */
 419    uint32_t cpuid_ecx;   /* Input ECX value for CPUID */
 420    int cpuid_reg;        /* output register (R_* constant) */
 421    uint32_t tcg_features; /* Feature flags supported by TCG */
 422    uint32_t unmigratable_flags; /* Feature flags known to be unmigratable */
 423} FeatureWordInfo;
 424
 425static FeatureWordInfo feature_word_info[FEATURE_WORDS] = {
 426    [FEAT_1_EDX] = {
 427        .feat_names = feature_name,
 428        .cpuid_eax = 1, .cpuid_reg = R_EDX,
 429        .tcg_features = TCG_FEATURES,
 430    },
 431    [FEAT_1_ECX] = {
 432        .feat_names = ext_feature_name,
 433        .cpuid_eax = 1, .cpuid_reg = R_ECX,
 434        .tcg_features = TCG_EXT_FEATURES,
 435    },
 436    [FEAT_8000_0001_EDX] = {
 437        .feat_names = ext2_feature_name,
 438        .cpuid_eax = 0x80000001, .cpuid_reg = R_EDX,
 439        .tcg_features = TCG_EXT2_FEATURES,
 440    },
 441    [FEAT_8000_0001_ECX] = {
 442        .feat_names = ext3_feature_name,
 443        .cpuid_eax = 0x80000001, .cpuid_reg = R_ECX,
 444        .tcg_features = TCG_EXT3_FEATURES,
 445    },
 446    [FEAT_C000_0001_EDX] = {
 447        .feat_names = ext4_feature_name,
 448        .cpuid_eax = 0xC0000001, .cpuid_reg = R_EDX,
 449        .tcg_features = TCG_EXT4_FEATURES,
 450    },
 451    [FEAT_KVM] = {
 452        .feat_names = kvm_feature_name,
 453        .cpuid_eax = KVM_CPUID_FEATURES, .cpuid_reg = R_EAX,
 454        .tcg_features = TCG_KVM_FEATURES,
 455    },
 456    [FEAT_HYPERV_EAX] = {
 457        .feat_names = hyperv_priv_feature_name,
 458        .cpuid_eax = 0x40000003, .cpuid_reg = R_EAX,
 459    },
 460    [FEAT_HYPERV_EBX] = {
 461        .feat_names = hyperv_ident_feature_name,
 462        .cpuid_eax = 0x40000003, .cpuid_reg = R_EBX,
 463    },
 464    [FEAT_HYPERV_EDX] = {
 465        .feat_names = hyperv_misc_feature_name,
 466        .cpuid_eax = 0x40000003, .cpuid_reg = R_EDX,
 467    },
 468    [FEAT_SVM] = {
 469        .feat_names = svm_feature_name,
 470        .cpuid_eax = 0x8000000A, .cpuid_reg = R_EDX,
 471        .tcg_features = TCG_SVM_FEATURES,
 472    },
 473    [FEAT_7_0_EBX] = {
 474        .feat_names = cpuid_7_0_ebx_feature_name,
 475        .cpuid_eax = 7,
 476        .cpuid_needs_ecx = true, .cpuid_ecx = 0,
 477        .cpuid_reg = R_EBX,
 478        .tcg_features = TCG_7_0_EBX_FEATURES,
 479    },
 480    [FEAT_7_0_ECX] = {
 481        .feat_names = cpuid_7_0_ecx_feature_name,
 482        .cpuid_eax = 7,
 483        .cpuid_needs_ecx = true, .cpuid_ecx = 0,
 484        .cpuid_reg = R_ECX,
 485        .tcg_features = TCG_7_0_ECX_FEATURES,
 486    },
 487    [FEAT_8000_0007_EDX] = {
 488        .feat_names = cpuid_apm_edx_feature_name,
 489        .cpuid_eax = 0x80000007,
 490        .cpuid_reg = R_EDX,
 491        .tcg_features = TCG_APM_FEATURES,
 492        .unmigratable_flags = CPUID_APM_INVTSC,
 493    },
 494    [FEAT_XSAVE] = {
 495        .feat_names = cpuid_xsave_feature_name,
 496        .cpuid_eax = 0xd,
 497        .cpuid_needs_ecx = true, .cpuid_ecx = 1,
 498        .cpuid_reg = R_EAX,
 499        .tcg_features = TCG_XSAVE_FEATURES,
 500    },
 501    [FEAT_6_EAX] = {
 502        .feat_names = cpuid_6_feature_name,
 503        .cpuid_eax = 6, .cpuid_reg = R_EAX,
 504        .tcg_features = TCG_6_EAX_FEATURES,
 505    },
 506};
 507
 508typedef struct X86RegisterInfo32 {
 509    /* Name of register */
 510    const char *name;
 511    /* QAPI enum value register */
 512    X86CPURegister32 qapi_enum;
 513} X86RegisterInfo32;
 514
 515#define REGISTER(reg) \
 516    [R_##reg] = { .name = #reg, .qapi_enum = X86_CPU_REGISTER32_##reg }
 517static const X86RegisterInfo32 x86_reg_info_32[CPU_NB_REGS32] = {
 518    REGISTER(EAX),
 519    REGISTER(ECX),
 520    REGISTER(EDX),
 521    REGISTER(EBX),
 522    REGISTER(ESP),
 523    REGISTER(EBP),
 524    REGISTER(ESI),
 525    REGISTER(EDI),
 526};
 527#undef REGISTER
 528
 529const ExtSaveArea x86_ext_save_areas[] = {
 530    [XSTATE_YMM_BIT] =
 531          { .feature = FEAT_1_ECX, .bits = CPUID_EXT_AVX,
 532            .offset = offsetof(X86XSaveArea, avx_state),
 533            .size = sizeof(XSaveAVX) },
 534    [XSTATE_BNDREGS_BIT] =
 535          { .feature = FEAT_7_0_EBX, .bits = CPUID_7_0_EBX_MPX,
 536            .offset = offsetof(X86XSaveArea, bndreg_state),
 537            .size = sizeof(XSaveBNDREG)  },
 538    [XSTATE_BNDCSR_BIT] =
 539          { .feature = FEAT_7_0_EBX, .bits = CPUID_7_0_EBX_MPX,
 540            .offset = offsetof(X86XSaveArea, bndcsr_state),
 541            .size = sizeof(XSaveBNDCSR)  },
 542    [XSTATE_OPMASK_BIT] =
 543          { .feature = FEAT_7_0_EBX, .bits = CPUID_7_0_EBX_AVX512F,
 544            .offset = offsetof(X86XSaveArea, opmask_state),
 545            .size = sizeof(XSaveOpmask) },
 546    [XSTATE_ZMM_Hi256_BIT] =
 547          { .feature = FEAT_7_0_EBX, .bits = CPUID_7_0_EBX_AVX512F,
 548            .offset = offsetof(X86XSaveArea, zmm_hi256_state),
 549            .size = sizeof(XSaveZMM_Hi256) },
 550    [XSTATE_Hi16_ZMM_BIT] =
 551          { .feature = FEAT_7_0_EBX, .bits = CPUID_7_0_EBX_AVX512F,
 552            .offset = offsetof(X86XSaveArea, hi16_zmm_state),
 553            .size = sizeof(XSaveHi16_ZMM) },
 554    [XSTATE_PKRU_BIT] =
 555          { .feature = FEAT_7_0_ECX, .bits = CPUID_7_0_ECX_PKU,
 556            .offset = offsetof(X86XSaveArea, pkru_state),
 557            .size = sizeof(XSavePKRU) },
 558};
 559
 560const char *get_register_name_32(unsigned int reg)
 561{
 562    if (reg >= CPU_NB_REGS32) {
 563        return NULL;
 564    }
 565    return x86_reg_info_32[reg].name;
 566}
 567
 568/*
 569 * Returns the set of feature flags that are supported and migratable by
 570 * QEMU, for a given FeatureWord.
 571 */
 572static uint32_t x86_cpu_get_migratable_flags(FeatureWord w)
 573{
 574    FeatureWordInfo *wi = &feature_word_info[w];
 575    uint32_t r = 0;
 576    int i;
 577
 578    for (i = 0; i < 32; i++) {
 579        uint32_t f = 1U << i;
 580        /* If the feature name is unknown, it is not supported by QEMU yet */
 581        if (!wi->feat_names[i]) {
 582            continue;
 583        }
 584        /* Skip features known to QEMU, but explicitly marked as unmigratable */
 585        if (wi->unmigratable_flags & f) {
 586            continue;
 587        }
 588        r |= f;
 589    }
 590    return r;
 591}
 592
 593void host_cpuid(uint32_t function, uint32_t count,
 594                uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx)
 595{
 596    uint32_t vec[4];
 597
 598#ifdef __x86_64__
 599    asm volatile("cpuid"
 600                 : "=a"(vec[0]), "=b"(vec[1]),
 601                   "=c"(vec[2]), "=d"(vec[3])
 602                 : "0"(function), "c"(count) : "cc");
 603#elif defined(__i386__)
 604    asm volatile("pusha \n\t"
 605                 "cpuid \n\t"
 606                 "mov %%eax, 0(%2) \n\t"
 607                 "mov %%ebx, 4(%2) \n\t"
 608                 "mov %%ecx, 8(%2) \n\t"
 609                 "mov %%edx, 12(%2) \n\t"
 610                 "popa"
 611                 : : "a"(function), "c"(count), "S"(vec)
 612                 : "memory", "cc");
 613#else
 614    abort();
 615#endif
 616
 617    if (eax)
 618        *eax = vec[0];
 619    if (ebx)
 620        *ebx = vec[1];
 621    if (ecx)
 622        *ecx = vec[2];
 623    if (edx)
 624        *edx = vec[3];
 625}
 626
 627#define iswhite(c) ((c) && ((c) <= ' ' || '~' < (c)))
 628
 629/* general substring compare of *[s1..e1) and *[s2..e2).  sx is start of
 630 * a substring.  ex if !NULL points to the first char after a substring,
 631 * otherwise the string is assumed to sized by a terminating nul.
 632 * Return lexical ordering of *s1:*s2.
 633 */
 634static int sstrcmp(const char *s1, const char *e1,
 635                   const char *s2, const char *e2)
 636{
 637    for (;;) {
 638        if (!*s1 || !*s2 || *s1 != *s2)
 639            return (*s1 - *s2);
 640        ++s1, ++s2;
 641        if (s1 == e1 && s2 == e2)
 642            return (0);
 643        else if (s1 == e1)
 644            return (*s2);
 645        else if (s2 == e2)
 646            return (*s1);
 647    }
 648}
 649
 650/* compare *[s..e) to *altstr.  *altstr may be a simple string or multiple
 651 * '|' delimited (possibly empty) strings in which case search for a match
 652 * within the alternatives proceeds left to right.  Return 0 for success,
 653 * non-zero otherwise.
 654 */
 655static int altcmp(const char *s, const char *e, const char *altstr)
 656{
 657    const char *p, *q;
 658
 659    for (q = p = altstr; ; ) {
 660        while (*p && *p != '|')
 661            ++p;
 662        if ((q == p && !*s) || (q != p && !sstrcmp(s, e, q, p)))
 663            return (0);
 664        if (!*p)
 665            return (1);
 666        else
 667            q = ++p;
 668    }
 669}
 670
 671/* search featureset for flag *[s..e), if found set corresponding bit in
 672 * *pval and return true, otherwise return false
 673 */
 674static bool lookup_feature(uint32_t *pval, const char *s, const char *e,
 675                           const char **featureset)
 676{
 677    uint32_t mask;
 678    const char **ppc;
 679    bool found = false;
 680
 681    for (mask = 1, ppc = featureset; mask; mask <<= 1, ++ppc) {
 682        if (*ppc && !altcmp(s, e, *ppc)) {
 683            *pval |= mask;
 684            found = true;
 685        }
 686    }
 687    return found;
 688}
 689
 690static void add_flagname_to_bitmaps(const char *flagname,
 691                                    FeatureWordArray words,
 692                                    Error **errp)
 693{
 694    FeatureWord w;
 695    for (w = 0; w < FEATURE_WORDS; w++) {
 696        FeatureWordInfo *wi = &feature_word_info[w];
 697        if (wi->feat_names &&
 698            lookup_feature(&words[w], flagname, NULL, wi->feat_names)) {
 699            break;
 700        }
 701    }
 702    if (w == FEATURE_WORDS) {
 703        error_setg(errp, "CPU feature %s not found", flagname);
 704    }
 705}
 706
 707/* CPU class name definitions: */
 708
 709#define X86_CPU_TYPE_SUFFIX "-" TYPE_X86_CPU
 710#define X86_CPU_TYPE_NAME(name) (name X86_CPU_TYPE_SUFFIX)
 711
 712/* Return type name for a given CPU model name
 713 * Caller is responsible for freeing the returned string.
 714 */
 715static char *x86_cpu_type_name(const char *model_name)
 716{
 717    return g_strdup_printf(X86_CPU_TYPE_NAME("%s"), model_name);
 718}
 719
 720static ObjectClass *x86_cpu_class_by_name(const char *cpu_model)
 721{
 722    ObjectClass *oc;
 723    char *typename;
 724
 725    if (cpu_model == NULL) {
 726        return NULL;
 727    }
 728
 729    typename = x86_cpu_type_name(cpu_model);
 730    oc = object_class_by_name(typename);
 731    g_free(typename);
 732    return oc;
 733}
 734
 735static char *x86_cpu_class_get_model_name(X86CPUClass *cc)
 736{
 737    const char *class_name = object_class_get_name(OBJECT_CLASS(cc));
 738    assert(g_str_has_suffix(class_name, X86_CPU_TYPE_SUFFIX));
 739    return g_strndup(class_name,
 740                     strlen(class_name) - strlen(X86_CPU_TYPE_SUFFIX));
 741}
 742
 743struct X86CPUDefinition {
 744    const char *name;
 745    uint32_t level;
 746    uint32_t xlevel;
 747    uint32_t xlevel2;
 748    /* vendor is zero-terminated, 12 character ASCII string */
 749    char vendor[CPUID_VENDOR_SZ + 1];
 750    int family;
 751    int model;
 752    int stepping;
 753    FeatureWordArray features;
 754    char model_id[48];
 755};
 756
 757static X86CPUDefinition builtin_x86_defs[] = {
 758    {
 759        .name = "qemu64",
 760        .level = 0xd,
 761        .vendor = CPUID_VENDOR_AMD,
 762        .family = 6,
 763        .model = 6,
 764        .stepping = 3,
 765        .features[FEAT_1_EDX] =
 766            PPRO_FEATURES |
 767            CPUID_MTRR | CPUID_CLFLUSH | CPUID_MCA |
 768            CPUID_PSE36,
 769        .features[FEAT_1_ECX] =
 770            CPUID_EXT_SSE3 | CPUID_EXT_CX16,
 771        .features[FEAT_8000_0001_EDX] =
 772            CPUID_EXT2_LM | CPUID_EXT2_SYSCALL | CPUID_EXT2_NX,
 773        .features[FEAT_8000_0001_ECX] =
 774            CPUID_EXT3_LAHF_LM | CPUID_EXT3_SVM,
 775        .xlevel = 0x8000000A,
 776        .model_id = "QEMU Virtual CPU version " QEMU_HW_VERSION,
 777    },
 778    {
 779        .name = "phenom",
 780        .level = 5,
 781        .vendor = CPUID_VENDOR_AMD,
 782        .family = 16,
 783        .model = 2,
 784        .stepping = 3,
 785        /* Missing: CPUID_HT */
 786        .features[FEAT_1_EDX] =
 787            PPRO_FEATURES |
 788            CPUID_MTRR | CPUID_CLFLUSH | CPUID_MCA |
 789            CPUID_PSE36 | CPUID_VME,
 790        .features[FEAT_1_ECX] =
 791            CPUID_EXT_SSE3 | CPUID_EXT_MONITOR | CPUID_EXT_CX16 |
 792            CPUID_EXT_POPCNT,
 793        .features[FEAT_8000_0001_EDX] =
 794            CPUID_EXT2_LM | CPUID_EXT2_SYSCALL | CPUID_EXT2_NX |
 795            CPUID_EXT2_3DNOW | CPUID_EXT2_3DNOWEXT | CPUID_EXT2_MMXEXT |
 796            CPUID_EXT2_FFXSR | CPUID_EXT2_PDPE1GB | CPUID_EXT2_RDTSCP,
 797        /* Missing: CPUID_EXT3_CMP_LEG, CPUID_EXT3_EXTAPIC,
 798                    CPUID_EXT3_CR8LEG,
 799                    CPUID_EXT3_MISALIGNSSE, CPUID_EXT3_3DNOWPREFETCH,
 800                    CPUID_EXT3_OSVW, CPUID_EXT3_IBS */
 801        .features[FEAT_8000_0001_ECX] =
 802            CPUID_EXT3_LAHF_LM | CPUID_EXT3_SVM |
 803            CPUID_EXT3_ABM | CPUID_EXT3_SSE4A,
 804        /* Missing: CPUID_SVM_LBRV */
 805        .features[FEAT_SVM] =
 806            CPUID_SVM_NPT,
 807        .xlevel = 0x8000001A,
 808        .model_id = "AMD Phenom(tm) 9550 Quad-Core Processor"
 809    },
 810    {
 811        .name = "core2duo",
 812        .level = 10,
 813        .vendor = CPUID_VENDOR_INTEL,
 814        .family = 6,
 815        .model = 15,
 816        .stepping = 11,
 817        /* Missing: CPUID_DTS, CPUID_HT, CPUID_TM, CPUID_PBE */
 818        .features[FEAT_1_EDX] =
 819            PPRO_FEATURES |
 820            CPUID_MTRR | CPUID_CLFLUSH | CPUID_MCA |
 821            CPUID_PSE36 | CPUID_VME | CPUID_ACPI | CPUID_SS,
 822        /* Missing: CPUID_EXT_DTES64, CPUID_EXT_DSCPL, CPUID_EXT_EST,
 823         * CPUID_EXT_TM2, CPUID_EXT_XTPR, CPUID_EXT_PDCM, CPUID_EXT_VMX */
 824        .features[FEAT_1_ECX] =
 825            CPUID_EXT_SSE3 | CPUID_EXT_MONITOR | CPUID_EXT_SSSE3 |
 826            CPUID_EXT_CX16,
 827        .features[FEAT_8000_0001_EDX] =
 828            CPUID_EXT2_LM | CPUID_EXT2_SYSCALL | CPUID_EXT2_NX,
 829        .features[FEAT_8000_0001_ECX] =
 830            CPUID_EXT3_LAHF_LM,
 831        .xlevel = 0x80000008,
 832        .model_id = "Intel(R) Core(TM)2 Duo CPU     T7700  @ 2.40GHz",
 833    },
 834    {
 835        .name = "kvm64",
 836        .level = 0xd,
 837        .vendor = CPUID_VENDOR_INTEL,
 838        .family = 15,
 839        .model = 6,
 840        .stepping = 1,
 841        /* Missing: CPUID_HT */
 842        .features[FEAT_1_EDX] =
 843            PPRO_FEATURES | CPUID_VME |
 844            CPUID_MTRR | CPUID_CLFLUSH | CPUID_MCA |
 845            CPUID_PSE36,
 846        /* Missing: CPUID_EXT_POPCNT, CPUID_EXT_MONITOR */
 847        .features[FEAT_1_ECX] =
 848            CPUID_EXT_SSE3 | CPUID_EXT_CX16,
 849        /* Missing: CPUID_EXT2_PDPE1GB, CPUID_EXT2_RDTSCP */
 850        .features[FEAT_8000_0001_EDX] =
 851            CPUID_EXT2_LM | CPUID_EXT2_SYSCALL | CPUID_EXT2_NX,
 852        /* Missing: CPUID_EXT3_LAHF_LM, CPUID_EXT3_CMP_LEG, CPUID_EXT3_EXTAPIC,
 853                    CPUID_EXT3_CR8LEG, CPUID_EXT3_ABM, CPUID_EXT3_SSE4A,
 854                    CPUID_EXT3_MISALIGNSSE, CPUID_EXT3_3DNOWPREFETCH,
 855                    CPUID_EXT3_OSVW, CPUID_EXT3_IBS, CPUID_EXT3_SVM */
 856        .features[FEAT_8000_0001_ECX] =
 857            0,
 858        .xlevel = 0x80000008,
 859        .model_id = "Common KVM processor"
 860    },
 861    {
 862        .name = "qemu32",
 863        .level = 4,
 864        .vendor = CPUID_VENDOR_INTEL,
 865        .family = 6,
 866        .model = 6,
 867        .stepping = 3,
 868        .features[FEAT_1_EDX] =
 869            PPRO_FEATURES,
 870        .features[FEAT_1_ECX] =
 871            CPUID_EXT_SSE3,
 872        .xlevel = 0x80000004,
 873        .model_id = "QEMU Virtual CPU version " QEMU_HW_VERSION,
 874    },
 875    {
 876        .name = "kvm32",
 877        .level = 5,
 878        .vendor = CPUID_VENDOR_INTEL,
 879        .family = 15,
 880        .model = 6,
 881        .stepping = 1,
 882        .features[FEAT_1_EDX] =
 883            PPRO_FEATURES | CPUID_VME |
 884            CPUID_MTRR | CPUID_CLFLUSH | CPUID_MCA | CPUID_PSE36,
 885        .features[FEAT_1_ECX] =
 886            CPUID_EXT_SSE3,
 887        .features[FEAT_8000_0001_ECX] =
 888            0,
 889        .xlevel = 0x80000008,
 890        .model_id = "Common 32-bit KVM processor"
 891    },
 892    {
 893        .name = "coreduo",
 894        .level = 10,
 895        .vendor = CPUID_VENDOR_INTEL,
 896        .family = 6,
 897        .model = 14,
 898        .stepping = 8,
 899        /* Missing: CPUID_DTS, CPUID_HT, CPUID_TM, CPUID_PBE */
 900        .features[FEAT_1_EDX] =
 901            PPRO_FEATURES | CPUID_VME |
 902            CPUID_MTRR | CPUID_CLFLUSH | CPUID_MCA | CPUID_ACPI |
 903            CPUID_SS,
 904        /* Missing: CPUID_EXT_EST, CPUID_EXT_TM2 , CPUID_EXT_XTPR,
 905         * CPUID_EXT_PDCM, CPUID_EXT_VMX */
 906        .features[FEAT_1_ECX] =
 907            CPUID_EXT_SSE3 | CPUID_EXT_MONITOR,
 908        .features[FEAT_8000_0001_EDX] =
 909            CPUID_EXT2_NX,
 910        .xlevel = 0x80000008,
 911        .model_id = "Genuine Intel(R) CPU           T2600  @ 2.16GHz",
 912    },
 913    {
 914        .name = "486",
 915        .level = 1,
 916        .vendor = CPUID_VENDOR_INTEL,
 917        .family = 4,
 918        .model = 8,
 919        .stepping = 0,
 920        .features[FEAT_1_EDX] =
 921            I486_FEATURES,
 922        .xlevel = 0,
 923    },
 924    {
 925        .name = "pentium",
 926        .level = 1,
 927        .vendor = CPUID_VENDOR_INTEL,
 928        .family = 5,
 929        .model = 4,
 930        .stepping = 3,
 931        .features[FEAT_1_EDX] =
 932            PENTIUM_FEATURES,
 933        .xlevel = 0,
 934    },
 935    {
 936        .name = "pentium2",
 937        .level = 2,
 938        .vendor = CPUID_VENDOR_INTEL,
 939        .family = 6,
 940        .model = 5,
 941        .stepping = 2,
 942        .features[FEAT_1_EDX] =
 943            PENTIUM2_FEATURES,
 944        .xlevel = 0,
 945    },
 946    {
 947        .name = "pentium3",
 948        .level = 3,
 949        .vendor = CPUID_VENDOR_INTEL,
 950        .family = 6,
 951        .model = 7,
 952        .stepping = 3,
 953        .features[FEAT_1_EDX] =
 954            PENTIUM3_FEATURES,
 955        .xlevel = 0,
 956    },
 957    {
 958        .name = "athlon",
 959        .level = 2,
 960        .vendor = CPUID_VENDOR_AMD,
 961        .family = 6,
 962        .model = 2,
 963        .stepping = 3,
 964        .features[FEAT_1_EDX] =
 965            PPRO_FEATURES | CPUID_PSE36 | CPUID_VME | CPUID_MTRR |
 966            CPUID_MCA,
 967        .features[FEAT_8000_0001_EDX] =
 968            CPUID_EXT2_MMXEXT | CPUID_EXT2_3DNOW | CPUID_EXT2_3DNOWEXT,
 969        .xlevel = 0x80000008,
 970        .model_id = "QEMU Virtual CPU version " QEMU_HW_VERSION,
 971    },
 972    {
 973        .name = "n270",
 974        .level = 10,
 975        .vendor = CPUID_VENDOR_INTEL,
 976        .family = 6,
 977        .model = 28,
 978        .stepping = 2,
 979        /* Missing: CPUID_DTS, CPUID_HT, CPUID_TM, CPUID_PBE */
 980        .features[FEAT_1_EDX] =
 981            PPRO_FEATURES |
 982            CPUID_MTRR | CPUID_CLFLUSH | CPUID_MCA | CPUID_VME |
 983            CPUID_ACPI | CPUID_SS,
 984            /* Some CPUs got no CPUID_SEP */
 985        /* Missing: CPUID_EXT_DSCPL, CPUID_EXT_EST, CPUID_EXT_TM2,
 986         * CPUID_EXT_XTPR */
 987        .features[FEAT_1_ECX] =
 988            CPUID_EXT_SSE3 | CPUID_EXT_MONITOR | CPUID_EXT_SSSE3 |
 989            CPUID_EXT_MOVBE,
 990        .features[FEAT_8000_0001_EDX] =
 991            CPUID_EXT2_NX,
 992        .features[FEAT_8000_0001_ECX] =
 993            CPUID_EXT3_LAHF_LM,
 994        .xlevel = 0x80000008,
 995        .model_id = "Intel(R) Atom(TM) CPU N270   @ 1.60GHz",
 996    },
 997    {
 998        .name = "Conroe",
 999        .level = 10,
1000        .vendor = CPUID_VENDOR_INTEL,
1001        .family = 6,
1002        .model = 15,
1003        .stepping = 3,
1004        .features[FEAT_1_EDX] =
1005            CPUID_VME | CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX |
1006            CPUID_CLFLUSH | CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | CPUID_MCA |
1007            CPUID_PGE | CPUID_MTRR | CPUID_SEP | CPUID_APIC | CPUID_CX8 |
1008            CPUID_MCE | CPUID_PAE | CPUID_MSR | CPUID_TSC | CPUID_PSE |
1009            CPUID_DE | CPUID_FP87,
1010        .features[FEAT_1_ECX] =
1011            CPUID_EXT_SSSE3 | CPUID_EXT_SSE3,
1012        .features[FEAT_8000_0001_EDX] =
1013            CPUID_EXT2_LM | CPUID_EXT2_NX | CPUID_EXT2_SYSCALL,
1014        .features[FEAT_8000_0001_ECX] =
1015            CPUID_EXT3_LAHF_LM,
1016        .xlevel = 0x80000008,
1017        .model_id = "Intel Celeron_4x0 (Conroe/Merom Class Core 2)",
1018    },
1019    {
1020        .name = "Penryn",
1021        .level = 10,
1022        .vendor = CPUID_VENDOR_INTEL,
1023        .family = 6,
1024        .model = 23,
1025        .stepping = 3,
1026        .features[FEAT_1_EDX] =
1027            CPUID_VME | CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX |
1028            CPUID_CLFLUSH | CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | CPUID_MCA |
1029            CPUID_PGE | CPUID_MTRR | CPUID_SEP | CPUID_APIC | CPUID_CX8 |
1030            CPUID_MCE | CPUID_PAE | CPUID_MSR | CPUID_TSC | CPUID_PSE |
1031            CPUID_DE | CPUID_FP87,
1032        .features[FEAT_1_ECX] =
1033            CPUID_EXT_SSE41 | CPUID_EXT_CX16 | CPUID_EXT_SSSE3 |
1034            CPUID_EXT_SSE3,
1035        .features[FEAT_8000_0001_EDX] =
1036            CPUID_EXT2_LM | CPUID_EXT2_NX | CPUID_EXT2_SYSCALL,
1037        .features[FEAT_8000_0001_ECX] =
1038            CPUID_EXT3_LAHF_LM,
1039        .xlevel = 0x80000008,
1040        .model_id = "Intel Core 2 Duo P9xxx (Penryn Class Core 2)",
1041    },
1042    {
1043        .name = "Nehalem",
1044        .level = 11,
1045        .vendor = CPUID_VENDOR_INTEL,
1046        .family = 6,
1047        .model = 26,
1048        .stepping = 3,
1049        .features[FEAT_1_EDX] =
1050            CPUID_VME | CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX |
1051            CPUID_CLFLUSH | CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | CPUID_MCA |
1052            CPUID_PGE | CPUID_MTRR | CPUID_SEP | CPUID_APIC | CPUID_CX8 |
1053            CPUID_MCE | CPUID_PAE | CPUID_MSR | CPUID_TSC | CPUID_PSE |
1054            CPUID_DE | CPUID_FP87,
1055        .features[FEAT_1_ECX] =
1056            CPUID_EXT_POPCNT | CPUID_EXT_SSE42 | CPUID_EXT_SSE41 |
1057            CPUID_EXT_CX16 | CPUID_EXT_SSSE3 | CPUID_EXT_SSE3,
1058        .features[FEAT_8000_0001_EDX] =
1059            CPUID_EXT2_LM | CPUID_EXT2_SYSCALL | CPUID_EXT2_NX,
1060        .features[FEAT_8000_0001_ECX] =
1061            CPUID_EXT3_LAHF_LM,
1062        .xlevel = 0x80000008,
1063        .model_id = "Intel Core i7 9xx (Nehalem Class Core i7)",
1064    },
1065    {
1066        .name = "Westmere",
1067        .level = 11,
1068        .vendor = CPUID_VENDOR_INTEL,
1069        .family = 6,
1070        .model = 44,
1071        .stepping = 1,
1072        .features[FEAT_1_EDX] =
1073            CPUID_VME | CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX |
1074            CPUID_CLFLUSH | CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | CPUID_MCA |
1075            CPUID_PGE | CPUID_MTRR | CPUID_SEP | CPUID_APIC | CPUID_CX8 |
1076            CPUID_MCE | CPUID_PAE | CPUID_MSR | CPUID_TSC | CPUID_PSE |
1077            CPUID_DE | CPUID_FP87,
1078        .features[FEAT_1_ECX] =
1079            CPUID_EXT_AES | CPUID_EXT_POPCNT | CPUID_EXT_SSE42 |
1080            CPUID_EXT_SSE41 | CPUID_EXT_CX16 | CPUID_EXT_SSSE3 |
1081            CPUID_EXT_PCLMULQDQ | CPUID_EXT_SSE3,
1082        .features[FEAT_8000_0001_EDX] =
1083            CPUID_EXT2_LM | CPUID_EXT2_SYSCALL | CPUID_EXT2_NX,
1084        .features[FEAT_8000_0001_ECX] =
1085            CPUID_EXT3_LAHF_LM,
1086        .features[FEAT_6_EAX] =
1087            CPUID_6_EAX_ARAT,
1088        .xlevel = 0x80000008,
1089        .model_id = "Westmere E56xx/L56xx/X56xx (Nehalem-C)",
1090    },
1091    {
1092        .name = "SandyBridge",
1093        .level = 0xd,
1094        .vendor = CPUID_VENDOR_INTEL,
1095        .family = 6,
1096        .model = 42,
1097        .stepping = 1,
1098        .features[FEAT_1_EDX] =
1099            CPUID_VME | CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX |
1100            CPUID_CLFLUSH | CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | CPUID_MCA |
1101            CPUID_PGE | CPUID_MTRR | CPUID_SEP | CPUID_APIC | CPUID_CX8 |
1102            CPUID_MCE | CPUID_PAE | CPUID_MSR | CPUID_TSC | CPUID_PSE |
1103            CPUID_DE | CPUID_FP87,
1104        .features[FEAT_1_ECX] =
1105            CPUID_EXT_AVX | CPUID_EXT_XSAVE | CPUID_EXT_AES |
1106            CPUID_EXT_TSC_DEADLINE_TIMER | CPUID_EXT_POPCNT |
1107            CPUID_EXT_X2APIC | CPUID_EXT_SSE42 | CPUID_EXT_SSE41 |
1108            CPUID_EXT_CX16 | CPUID_EXT_SSSE3 | CPUID_EXT_PCLMULQDQ |
1109            CPUID_EXT_SSE3,
1110        .features[FEAT_8000_0001_EDX] =
1111            CPUID_EXT2_LM | CPUID_EXT2_RDTSCP | CPUID_EXT2_NX |
1112            CPUID_EXT2_SYSCALL,
1113        .features[FEAT_8000_0001_ECX] =
1114            CPUID_EXT3_LAHF_LM,
1115        .features[FEAT_XSAVE] =
1116            CPUID_XSAVE_XSAVEOPT,
1117        .features[FEAT_6_EAX] =
1118            CPUID_6_EAX_ARAT,
1119        .xlevel = 0x80000008,
1120        .model_id = "Intel Xeon E312xx (Sandy Bridge)",
1121    },
1122    {
1123        .name = "IvyBridge",
1124        .level = 0xd,
1125        .vendor = CPUID_VENDOR_INTEL,
1126        .family = 6,
1127        .model = 58,
1128        .stepping = 9,
1129        .features[FEAT_1_EDX] =
1130            CPUID_VME | CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX |
1131            CPUID_CLFLUSH | CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | CPUID_MCA |
1132            CPUID_PGE | CPUID_MTRR | CPUID_SEP | CPUID_APIC | CPUID_CX8 |
1133            CPUID_MCE | CPUID_PAE | CPUID_MSR | CPUID_TSC | CPUID_PSE |
1134            CPUID_DE | CPUID_FP87,
1135        .features[FEAT_1_ECX] =
1136            CPUID_EXT_AVX | CPUID_EXT_XSAVE | CPUID_EXT_AES |
1137            CPUID_EXT_TSC_DEADLINE_TIMER | CPUID_EXT_POPCNT |
1138            CPUID_EXT_X2APIC | CPUID_EXT_SSE42 | CPUID_EXT_SSE41 |
1139            CPUID_EXT_CX16 | CPUID_EXT_SSSE3 | CPUID_EXT_PCLMULQDQ |
1140            CPUID_EXT_SSE3 | CPUID_EXT_F16C | CPUID_EXT_RDRAND,
1141        .features[FEAT_7_0_EBX] =
1142            CPUID_7_0_EBX_FSGSBASE | CPUID_7_0_EBX_SMEP |
1143            CPUID_7_0_EBX_ERMS,
1144        .features[FEAT_8000_0001_EDX] =
1145            CPUID_EXT2_LM | CPUID_EXT2_RDTSCP | CPUID_EXT2_NX |
1146            CPUID_EXT2_SYSCALL,
1147        .features[FEAT_8000_0001_ECX] =
1148            CPUID_EXT3_LAHF_LM,
1149        .features[FEAT_XSAVE] =
1150            CPUID_XSAVE_XSAVEOPT,
1151        .features[FEAT_6_EAX] =
1152            CPUID_6_EAX_ARAT,
1153        .xlevel = 0x80000008,
1154        .model_id = "Intel Xeon E3-12xx v2 (Ivy Bridge)",
1155    },
1156    {
1157        .name = "Haswell-noTSX",
1158        .level = 0xd,
1159        .vendor = CPUID_VENDOR_INTEL,
1160        .family = 6,
1161        .model = 60,
1162        .stepping = 1,
1163        .features[FEAT_1_EDX] =
1164            CPUID_VME | CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX |
1165            CPUID_CLFLUSH | CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | CPUID_MCA |
1166            CPUID_PGE | CPUID_MTRR | CPUID_SEP | CPUID_APIC | CPUID_CX8 |
1167            CPUID_MCE | CPUID_PAE | CPUID_MSR | CPUID_TSC | CPUID_PSE |
1168            CPUID_DE | CPUID_FP87,
1169        .features[FEAT_1_ECX] =
1170            CPUID_EXT_AVX | CPUID_EXT_XSAVE | CPUID_EXT_AES |
1171            CPUID_EXT_POPCNT | CPUID_EXT_X2APIC | CPUID_EXT_SSE42 |
1172            CPUID_EXT_SSE41 | CPUID_EXT_CX16 | CPUID_EXT_SSSE3 |
1173            CPUID_EXT_PCLMULQDQ | CPUID_EXT_SSE3 |
1174            CPUID_EXT_TSC_DEADLINE_TIMER | CPUID_EXT_FMA | CPUID_EXT_MOVBE |
1175            CPUID_EXT_PCID | CPUID_EXT_F16C | CPUID_EXT_RDRAND,
1176        .features[FEAT_8000_0001_EDX] =
1177            CPUID_EXT2_LM | CPUID_EXT2_RDTSCP | CPUID_EXT2_NX |
1178            CPUID_EXT2_SYSCALL,
1179        .features[FEAT_8000_0001_ECX] =
1180            CPUID_EXT3_ABM | CPUID_EXT3_LAHF_LM,
1181        .features[FEAT_7_0_EBX] =
1182            CPUID_7_0_EBX_FSGSBASE | CPUID_7_0_EBX_BMI1 |
1183            CPUID_7_0_EBX_AVX2 | CPUID_7_0_EBX_SMEP |
1184            CPUID_7_0_EBX_BMI2 | CPUID_7_0_EBX_ERMS | CPUID_7_0_EBX_INVPCID,
1185        .features[FEAT_XSAVE] =
1186            CPUID_XSAVE_XSAVEOPT,
1187        .features[FEAT_6_EAX] =
1188            CPUID_6_EAX_ARAT,
1189        .xlevel = 0x80000008,
1190        .model_id = "Intel Core Processor (Haswell, no TSX)",
1191    },    {
1192        .name = "Haswell",
1193        .level = 0xd,
1194        .vendor = CPUID_VENDOR_INTEL,
1195        .family = 6,
1196        .model = 60,
1197        .stepping = 1,
1198        .features[FEAT_1_EDX] =
1199            CPUID_VME | CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX |
1200            CPUID_CLFLUSH | CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | CPUID_MCA |
1201            CPUID_PGE | CPUID_MTRR | CPUID_SEP | CPUID_APIC | CPUID_CX8 |
1202            CPUID_MCE | CPUID_PAE | CPUID_MSR | CPUID_TSC | CPUID_PSE |
1203            CPUID_DE | CPUID_FP87,
1204        .features[FEAT_1_ECX] =
1205            CPUID_EXT_AVX | CPUID_EXT_XSAVE | CPUID_EXT_AES |
1206            CPUID_EXT_POPCNT | CPUID_EXT_X2APIC | CPUID_EXT_SSE42 |
1207            CPUID_EXT_SSE41 | CPUID_EXT_CX16 | CPUID_EXT_SSSE3 |
1208            CPUID_EXT_PCLMULQDQ | CPUID_EXT_SSE3 |
1209            CPUID_EXT_TSC_DEADLINE_TIMER | CPUID_EXT_FMA | CPUID_EXT_MOVBE |
1210            CPUID_EXT_PCID | CPUID_EXT_F16C | CPUID_EXT_RDRAND,
1211        .features[FEAT_8000_0001_EDX] =
1212            CPUID_EXT2_LM | CPUID_EXT2_RDTSCP | CPUID_EXT2_NX |
1213            CPUID_EXT2_SYSCALL,
1214        .features[FEAT_8000_0001_ECX] =
1215            CPUID_EXT3_ABM | CPUID_EXT3_LAHF_LM,
1216        .features[FEAT_7_0_EBX] =
1217            CPUID_7_0_EBX_FSGSBASE | CPUID_7_0_EBX_BMI1 |
1218            CPUID_7_0_EBX_HLE | CPUID_7_0_EBX_AVX2 | CPUID_7_0_EBX_SMEP |
1219            CPUID_7_0_EBX_BMI2 | CPUID_7_0_EBX_ERMS | CPUID_7_0_EBX_INVPCID |
1220            CPUID_7_0_EBX_RTM,
1221        .features[FEAT_XSAVE] =
1222            CPUID_XSAVE_XSAVEOPT,
1223        .features[FEAT_6_EAX] =
1224            CPUID_6_EAX_ARAT,
1225        .xlevel = 0x80000008,
1226        .model_id = "Intel Core Processor (Haswell)",
1227    },
1228    {
1229        .name = "Broadwell-noTSX",
1230        .level = 0xd,
1231        .vendor = CPUID_VENDOR_INTEL,
1232        .family = 6,
1233        .model = 61,
1234        .stepping = 2,
1235        .features[FEAT_1_EDX] =
1236            CPUID_VME | CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX |
1237            CPUID_CLFLUSH | CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | CPUID_MCA |
1238            CPUID_PGE | CPUID_MTRR | CPUID_SEP | CPUID_APIC | CPUID_CX8 |
1239            CPUID_MCE | CPUID_PAE | CPUID_MSR | CPUID_TSC | CPUID_PSE |
1240            CPUID_DE | CPUID_FP87,
1241        .features[FEAT_1_ECX] =
1242            CPUID_EXT_AVX | CPUID_EXT_XSAVE | CPUID_EXT_AES |
1243            CPUID_EXT_POPCNT | CPUID_EXT_X2APIC | CPUID_EXT_SSE42 |
1244            CPUID_EXT_SSE41 | CPUID_EXT_CX16 | CPUID_EXT_SSSE3 |
1245            CPUID_EXT_PCLMULQDQ | CPUID_EXT_SSE3 |
1246            CPUID_EXT_TSC_DEADLINE_TIMER | CPUID_EXT_FMA | CPUID_EXT_MOVBE |
1247            CPUID_EXT_PCID | CPUID_EXT_F16C | CPUID_EXT_RDRAND,
1248        .features[FEAT_8000_0001_EDX] =
1249            CPUID_EXT2_LM | CPUID_EXT2_RDTSCP | CPUID_EXT2_NX |
1250            CPUID_EXT2_SYSCALL,
1251        .features[FEAT_8000_0001_ECX] =
1252            CPUID_EXT3_ABM | CPUID_EXT3_LAHF_LM | CPUID_EXT3_3DNOWPREFETCH,
1253        .features[FEAT_7_0_EBX] =
1254            CPUID_7_0_EBX_FSGSBASE | CPUID_7_0_EBX_BMI1 |
1255            CPUID_7_0_EBX_AVX2 | CPUID_7_0_EBX_SMEP |
1256            CPUID_7_0_EBX_BMI2 | CPUID_7_0_EBX_ERMS | CPUID_7_0_EBX_INVPCID |
1257            CPUID_7_0_EBX_RDSEED | CPUID_7_0_EBX_ADX |
1258            CPUID_7_0_EBX_SMAP,
1259        .features[FEAT_XSAVE] =
1260            CPUID_XSAVE_XSAVEOPT,
1261        .features[FEAT_6_EAX] =
1262            CPUID_6_EAX_ARAT,
1263        .xlevel = 0x80000008,
1264        .model_id = "Intel Core Processor (Broadwell, no TSX)",
1265    },
1266    {
1267        .name = "Broadwell",
1268        .level = 0xd,
1269        .vendor = CPUID_VENDOR_INTEL,
1270        .family = 6,
1271        .model = 61,
1272        .stepping = 2,
1273        .features[FEAT_1_EDX] =
1274            CPUID_VME | CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX |
1275            CPUID_CLFLUSH | CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | CPUID_MCA |
1276            CPUID_PGE | CPUID_MTRR | CPUID_SEP | CPUID_APIC | CPUID_CX8 |
1277            CPUID_MCE | CPUID_PAE | CPUID_MSR | CPUID_TSC | CPUID_PSE |
1278            CPUID_DE | CPUID_FP87,
1279        .features[FEAT_1_ECX] =
1280            CPUID_EXT_AVX | CPUID_EXT_XSAVE | CPUID_EXT_AES |
1281            CPUID_EXT_POPCNT | CPUID_EXT_X2APIC | CPUID_EXT_SSE42 |
1282            CPUID_EXT_SSE41 | CPUID_EXT_CX16 | CPUID_EXT_SSSE3 |
1283            CPUID_EXT_PCLMULQDQ | CPUID_EXT_SSE3 |
1284            CPUID_EXT_TSC_DEADLINE_TIMER | CPUID_EXT_FMA | CPUID_EXT_MOVBE |
1285            CPUID_EXT_PCID | CPUID_EXT_F16C | CPUID_EXT_RDRAND,
1286        .features[FEAT_8000_0001_EDX] =
1287            CPUID_EXT2_LM | CPUID_EXT2_RDTSCP | CPUID_EXT2_NX |
1288            CPUID_EXT2_SYSCALL,
1289        .features[FEAT_8000_0001_ECX] =
1290            CPUID_EXT3_ABM | CPUID_EXT3_LAHF_LM | CPUID_EXT3_3DNOWPREFETCH,
1291        .features[FEAT_7_0_EBX] =
1292            CPUID_7_0_EBX_FSGSBASE | CPUID_7_0_EBX_BMI1 |
1293            CPUID_7_0_EBX_HLE | CPUID_7_0_EBX_AVX2 | CPUID_7_0_EBX_SMEP |
1294            CPUID_7_0_EBX_BMI2 | CPUID_7_0_EBX_ERMS | CPUID_7_0_EBX_INVPCID |
1295            CPUID_7_0_EBX_RTM | CPUID_7_0_EBX_RDSEED | CPUID_7_0_EBX_ADX |
1296            CPUID_7_0_EBX_SMAP,
1297        .features[FEAT_XSAVE] =
1298            CPUID_XSAVE_XSAVEOPT,
1299        .features[FEAT_6_EAX] =
1300            CPUID_6_EAX_ARAT,
1301        .xlevel = 0x80000008,
1302        .model_id = "Intel Core Processor (Broadwell)",
1303    },
1304    {
1305        .name = "Skylake-Client",
1306        .level = 0xd,
1307        .vendor = CPUID_VENDOR_INTEL,
1308        .family = 6,
1309        .model = 94,
1310        .stepping = 3,
1311        .features[FEAT_1_EDX] =
1312            CPUID_VME | CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX |
1313            CPUID_CLFLUSH | CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | CPUID_MCA |
1314            CPUID_PGE | CPUID_MTRR | CPUID_SEP | CPUID_APIC | CPUID_CX8 |
1315            CPUID_MCE | CPUID_PAE | CPUID_MSR | CPUID_TSC | CPUID_PSE |
1316            CPUID_DE | CPUID_FP87,
1317        .features[FEAT_1_ECX] =
1318            CPUID_EXT_AVX | CPUID_EXT_XSAVE | CPUID_EXT_AES |
1319            CPUID_EXT_POPCNT | CPUID_EXT_X2APIC | CPUID_EXT_SSE42 |
1320            CPUID_EXT_SSE41 | CPUID_EXT_CX16 | CPUID_EXT_SSSE3 |
1321            CPUID_EXT_PCLMULQDQ | CPUID_EXT_SSE3 |
1322            CPUID_EXT_TSC_DEADLINE_TIMER | CPUID_EXT_FMA | CPUID_EXT_MOVBE |
1323            CPUID_EXT_PCID | CPUID_EXT_F16C | CPUID_EXT_RDRAND,
1324        .features[FEAT_8000_0001_EDX] =
1325            CPUID_EXT2_LM | CPUID_EXT2_RDTSCP | CPUID_EXT2_NX |
1326            CPUID_EXT2_SYSCALL,
1327        .features[FEAT_8000_0001_ECX] =
1328            CPUID_EXT3_ABM | CPUID_EXT3_LAHF_LM | CPUID_EXT3_3DNOWPREFETCH,
1329        .features[FEAT_7_0_EBX] =
1330            CPUID_7_0_EBX_FSGSBASE | CPUID_7_0_EBX_BMI1 |
1331            CPUID_7_0_EBX_HLE | CPUID_7_0_EBX_AVX2 | CPUID_7_0_EBX_SMEP |
1332            CPUID_7_0_EBX_BMI2 | CPUID_7_0_EBX_ERMS | CPUID_7_0_EBX_INVPCID |
1333            CPUID_7_0_EBX_RTM | CPUID_7_0_EBX_RDSEED | CPUID_7_0_EBX_ADX |
1334            CPUID_7_0_EBX_SMAP | CPUID_7_0_EBX_MPX,
1335        /* Missing: XSAVES (not supported by some Linux versions,
1336         * including v4.1 to v4.6).
1337         * KVM doesn't yet expose any XSAVES state save component,
1338         * and the only one defined in Skylake (processor tracing)
1339         * probably will block migration anyway.
1340         */
1341        .features[FEAT_XSAVE] =
1342            CPUID_XSAVE_XSAVEOPT | CPUID_XSAVE_XSAVEC |
1343            CPUID_XSAVE_XGETBV1,
1344        .features[FEAT_6_EAX] =
1345            CPUID_6_EAX_ARAT,
1346        .xlevel = 0x80000008,
1347        .model_id = "Intel Core Processor (Skylake)",
1348    },
1349    {
1350        .name = "Opteron_G1",
1351        .level = 5,
1352        .vendor = CPUID_VENDOR_AMD,
1353        .family = 15,
1354        .model = 6,
1355        .stepping = 1,
1356        .features[FEAT_1_EDX] =
1357            CPUID_VME | CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX |
1358            CPUID_CLFLUSH | CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | CPUID_MCA |
1359            CPUID_PGE | CPUID_MTRR | CPUID_SEP | CPUID_APIC | CPUID_CX8 |
1360            CPUID_MCE | CPUID_PAE | CPUID_MSR | CPUID_TSC | CPUID_PSE |
1361            CPUID_DE | CPUID_FP87,
1362        .features[FEAT_1_ECX] =
1363            CPUID_EXT_SSE3,
1364        .features[FEAT_8000_0001_EDX] =
1365            CPUID_EXT2_LM | CPUID_EXT2_FXSR | CPUID_EXT2_MMX |
1366            CPUID_EXT2_NX | CPUID_EXT2_PSE36 | CPUID_EXT2_PAT |
1367            CPUID_EXT2_CMOV | CPUID_EXT2_MCA | CPUID_EXT2_PGE |
1368            CPUID_EXT2_MTRR | CPUID_EXT2_SYSCALL | CPUID_EXT2_APIC |
1369            CPUID_EXT2_CX8 | CPUID_EXT2_MCE | CPUID_EXT2_PAE | CPUID_EXT2_MSR |
1370            CPUID_EXT2_TSC | CPUID_EXT2_PSE | CPUID_EXT2_DE | CPUID_EXT2_FPU,
1371        .xlevel = 0x80000008,
1372        .model_id = "AMD Opteron 240 (Gen 1 Class Opteron)",
1373    },
1374    {
1375        .name = "Opteron_G2",
1376        .level = 5,
1377        .vendor = CPUID_VENDOR_AMD,
1378        .family = 15,
1379        .model = 6,
1380        .stepping = 1,
1381        .features[FEAT_1_EDX] =
1382            CPUID_VME | CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX |
1383            CPUID_CLFLUSH | CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | CPUID_MCA |
1384            CPUID_PGE | CPUID_MTRR | CPUID_SEP | CPUID_APIC | CPUID_CX8 |
1385            CPUID_MCE | CPUID_PAE | CPUID_MSR | CPUID_TSC | CPUID_PSE |
1386            CPUID_DE | CPUID_FP87,
1387        .features[FEAT_1_ECX] =
1388            CPUID_EXT_CX16 | CPUID_EXT_SSE3,
1389        /* Missing: CPUID_EXT2_RDTSCP */
1390        .features[FEAT_8000_0001_EDX] =
1391            CPUID_EXT2_LM | CPUID_EXT2_FXSR |
1392            CPUID_EXT2_MMX | CPUID_EXT2_NX | CPUID_EXT2_PSE36 |
1393            CPUID_EXT2_PAT | CPUID_EXT2_CMOV | CPUID_EXT2_MCA |
1394            CPUID_EXT2_PGE | CPUID_EXT2_MTRR | CPUID_EXT2_SYSCALL |
1395            CPUID_EXT2_APIC | CPUID_EXT2_CX8 | CPUID_EXT2_MCE |
1396            CPUID_EXT2_PAE | CPUID_EXT2_MSR | CPUID_EXT2_TSC | CPUID_EXT2_PSE |
1397            CPUID_EXT2_DE | CPUID_EXT2_FPU,
1398        .features[FEAT_8000_0001_ECX] =
1399            CPUID_EXT3_SVM | CPUID_EXT3_LAHF_LM,
1400        .xlevel = 0x80000008,
1401        .model_id = "AMD Opteron 22xx (Gen 2 Class Opteron)",
1402    },
1403    {
1404        .name = "Opteron_G3",
1405        .level = 5,
1406        .vendor = CPUID_VENDOR_AMD,
1407        .family = 15,
1408        .model = 6,
1409        .stepping = 1,
1410        .features[FEAT_1_EDX] =
1411            CPUID_VME | CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX |
1412            CPUID_CLFLUSH | CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | CPUID_MCA |
1413            CPUID_PGE | CPUID_MTRR | CPUID_SEP | CPUID_APIC | CPUID_CX8 |
1414            CPUID_MCE | CPUID_PAE | CPUID_MSR | CPUID_TSC | CPUID_PSE |
1415            CPUID_DE | CPUID_FP87,
1416        .features[FEAT_1_ECX] =
1417            CPUID_EXT_POPCNT | CPUID_EXT_CX16 | CPUID_EXT_MONITOR |
1418            CPUID_EXT_SSE3,
1419        /* Missing: CPUID_EXT2_RDTSCP */
1420        .features[FEAT_8000_0001_EDX] =
1421            CPUID_EXT2_LM | CPUID_EXT2_FXSR |
1422            CPUID_EXT2_MMX | CPUID_EXT2_NX | CPUID_EXT2_PSE36 |
1423            CPUID_EXT2_PAT | CPUID_EXT2_CMOV | CPUID_EXT2_MCA |
1424            CPUID_EXT2_PGE | CPUID_EXT2_MTRR | CPUID_EXT2_SYSCALL |
1425            CPUID_EXT2_APIC | CPUID_EXT2_CX8 | CPUID_EXT2_MCE |
1426            CPUID_EXT2_PAE | CPUID_EXT2_MSR | CPUID_EXT2_TSC | CPUID_EXT2_PSE |
1427            CPUID_EXT2_DE | CPUID_EXT2_FPU,
1428        .features[FEAT_8000_0001_ECX] =
1429            CPUID_EXT3_MISALIGNSSE | CPUID_EXT3_SSE4A |
1430            CPUID_EXT3_ABM | CPUID_EXT3_SVM | CPUID_EXT3_LAHF_LM,
1431        .xlevel = 0x80000008,
1432        .model_id = "AMD Opteron 23xx (Gen 3 Class Opteron)",
1433    },
1434    {
1435        .name = "Opteron_G4",
1436        .level = 0xd,
1437        .vendor = CPUID_VENDOR_AMD,
1438        .family = 21,
1439        .model = 1,
1440        .stepping = 2,
1441        .features[FEAT_1_EDX] =
1442            CPUID_VME | CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX |
1443            CPUID_CLFLUSH | CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | CPUID_MCA |
1444            CPUID_PGE | CPUID_MTRR | CPUID_SEP | CPUID_APIC | CPUID_CX8 |
1445            CPUID_MCE | CPUID_PAE | CPUID_MSR | CPUID_TSC | CPUID_PSE |
1446            CPUID_DE | CPUID_FP87,
1447        .features[FEAT_1_ECX] =
1448            CPUID_EXT_AVX | CPUID_EXT_XSAVE | CPUID_EXT_AES |
1449            CPUID_EXT_POPCNT | CPUID_EXT_SSE42 | CPUID_EXT_SSE41 |
1450            CPUID_EXT_CX16 | CPUID_EXT_SSSE3 | CPUID_EXT_PCLMULQDQ |
1451            CPUID_EXT_SSE3,
1452        /* Missing: CPUID_EXT2_RDTSCP */
1453        .features[FEAT_8000_0001_EDX] =
1454            CPUID_EXT2_LM |
1455            CPUID_EXT2_PDPE1GB | CPUID_EXT2_FXSR | CPUID_EXT2_MMX |
1456            CPUID_EXT2_NX | CPUID_EXT2_PSE36 | CPUID_EXT2_PAT |
1457            CPUID_EXT2_CMOV | CPUID_EXT2_MCA | CPUID_EXT2_PGE |
1458            CPUID_EXT2_MTRR | CPUID_EXT2_SYSCALL | CPUID_EXT2_APIC |
1459            CPUID_EXT2_CX8 | CPUID_EXT2_MCE | CPUID_EXT2_PAE | CPUID_EXT2_MSR |
1460            CPUID_EXT2_TSC | CPUID_EXT2_PSE | CPUID_EXT2_DE | CPUID_EXT2_FPU,
1461        .features[FEAT_8000_0001_ECX] =
1462            CPUID_EXT3_FMA4 | CPUID_EXT3_XOP |
1463            CPUID_EXT3_3DNOWPREFETCH | CPUID_EXT3_MISALIGNSSE |
1464            CPUID_EXT3_SSE4A | CPUID_EXT3_ABM | CPUID_EXT3_SVM |
1465            CPUID_EXT3_LAHF_LM,
1466        /* no xsaveopt! */
1467        .xlevel = 0x8000001A,
1468        .model_id = "AMD Opteron 62xx class CPU",
1469    },
1470    {
1471        .name = "Opteron_G5",
1472        .level = 0xd,
1473        .vendor = CPUID_VENDOR_AMD,
1474        .family = 21,
1475        .model = 2,
1476        .stepping = 0,
1477        .features[FEAT_1_EDX] =
1478            CPUID_VME | CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX |
1479            CPUID_CLFLUSH | CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | CPUID_MCA |
1480            CPUID_PGE | CPUID_MTRR | CPUID_SEP | CPUID_APIC | CPUID_CX8 |
1481            CPUID_MCE | CPUID_PAE | CPUID_MSR | CPUID_TSC | CPUID_PSE |
1482            CPUID_DE | CPUID_FP87,
1483        .features[FEAT_1_ECX] =
1484            CPUID_EXT_F16C | CPUID_EXT_AVX | CPUID_EXT_XSAVE |
1485            CPUID_EXT_AES | CPUID_EXT_POPCNT | CPUID_EXT_SSE42 |
1486            CPUID_EXT_SSE41 | CPUID_EXT_CX16 | CPUID_EXT_FMA |
1487            CPUID_EXT_SSSE3 | CPUID_EXT_PCLMULQDQ | CPUID_EXT_SSE3,
1488        /* Missing: CPUID_EXT2_RDTSCP */
1489        .features[FEAT_8000_0001_EDX] =
1490            CPUID_EXT2_LM |
1491            CPUID_EXT2_PDPE1GB | CPUID_EXT2_FXSR | CPUID_EXT2_MMX |
1492            CPUID_EXT2_NX | CPUID_EXT2_PSE36 | CPUID_EXT2_PAT |
1493            CPUID_EXT2_CMOV | CPUID_EXT2_MCA | CPUID_EXT2_PGE |
1494            CPUID_EXT2_MTRR | CPUID_EXT2_SYSCALL | CPUID_EXT2_APIC |
1495            CPUID_EXT2_CX8 | CPUID_EXT2_MCE | CPUID_EXT2_PAE | CPUID_EXT2_MSR |
1496            CPUID_EXT2_TSC | CPUID_EXT2_PSE | CPUID_EXT2_DE | CPUID_EXT2_FPU,
1497        .features[FEAT_8000_0001_ECX] =
1498            CPUID_EXT3_TBM | CPUID_EXT3_FMA4 | CPUID_EXT3_XOP |
1499            CPUID_EXT3_3DNOWPREFETCH | CPUID_EXT3_MISALIGNSSE |
1500            CPUID_EXT3_SSE4A | CPUID_EXT3_ABM | CPUID_EXT3_SVM |
1501            CPUID_EXT3_LAHF_LM,
1502        /* no xsaveopt! */
1503        .xlevel = 0x8000001A,
1504        .model_id = "AMD Opteron 63xx class CPU",
1505    },
1506};
1507
1508typedef struct PropValue {
1509    const char *prop, *value;
1510} PropValue;
1511
1512/* KVM-specific features that are automatically added/removed
1513 * from all CPU models when KVM is enabled.
1514 */
1515static PropValue kvm_default_props[] = {
1516    { "kvmclock", "on" },
1517    { "kvm-nopiodelay", "on" },
1518    { "kvm-asyncpf", "on" },
1519    { "kvm-steal-time", "on" },
1520    { "kvm-pv-eoi", "on" },
1521    { "kvmclock-stable-bit", "on" },
1522    { "x2apic", "on" },
1523    { "acpi", "off" },
1524    { "monitor", "off" },
1525    { "svm", "off" },
1526    { NULL, NULL },
1527};
1528
1529void x86_cpu_change_kvm_default(const char *prop, const char *value)
1530{
1531    PropValue *pv;
1532    for (pv = kvm_default_props; pv->prop; pv++) {
1533        if (!strcmp(pv->prop, prop)) {
1534            pv->value = value;
1535            break;
1536        }
1537    }
1538
1539    /* It is valid to call this function only for properties that
1540     * are already present in the kvm_default_props table.
1541     */
1542    assert(pv->prop);
1543}
1544
1545static uint32_t x86_cpu_get_supported_feature_word(FeatureWord w,
1546                                                   bool migratable_only);
1547
1548#ifdef CONFIG_KVM
1549
1550static bool lmce_supported(void)
1551{
1552    uint64_t mce_cap;
1553
1554    if (kvm_ioctl(kvm_state, KVM_X86_GET_MCE_CAP_SUPPORTED, &mce_cap) < 0) {
1555        return false;
1556    }
1557
1558    return !!(mce_cap & MCG_LMCE_P);
1559}
1560
1561static int cpu_x86_fill_model_id(char *str)
1562{
1563    uint32_t eax = 0, ebx = 0, ecx = 0, edx = 0;
1564    int i;
1565
1566    for (i = 0; i < 3; i++) {
1567        host_cpuid(0x80000002 + i, 0, &eax, &ebx, &ecx, &edx);
1568        memcpy(str + i * 16 +  0, &eax, 4);
1569        memcpy(str + i * 16 +  4, &ebx, 4);
1570        memcpy(str + i * 16 +  8, &ecx, 4);
1571        memcpy(str + i * 16 + 12, &edx, 4);
1572    }
1573    return 0;
1574}
1575
1576static X86CPUDefinition host_cpudef;
1577
1578static Property host_x86_cpu_properties[] = {
1579    DEFINE_PROP_BOOL("migratable", X86CPU, migratable, true),
1580    DEFINE_PROP_BOOL("host-cache-info", X86CPU, cache_info_passthrough, false),
1581    DEFINE_PROP_END_OF_LIST()
1582};
1583
1584/* class_init for the "host" CPU model
1585 *
1586 * This function may be called before KVM is initialized.
1587 */
1588static void host_x86_cpu_class_init(ObjectClass *oc, void *data)
1589{
1590    DeviceClass *dc = DEVICE_CLASS(oc);
1591    X86CPUClass *xcc = X86_CPU_CLASS(oc);
1592    uint32_t eax = 0, ebx = 0, ecx = 0, edx = 0;
1593
1594    xcc->kvm_required = true;
1595
1596    host_cpuid(0x0, 0, &eax, &ebx, &ecx, &edx);
1597    x86_cpu_vendor_words2str(host_cpudef.vendor, ebx, edx, ecx);
1598
1599    host_cpuid(0x1, 0, &eax, &ebx, &ecx, &edx);
1600    host_cpudef.family = ((eax >> 8) & 0x0F) + ((eax >> 20) & 0xFF);
1601    host_cpudef.model = ((eax >> 4) & 0x0F) | ((eax & 0xF0000) >> 12);
1602    host_cpudef.stepping = eax & 0x0F;
1603
1604    cpu_x86_fill_model_id(host_cpudef.model_id);
1605
1606    xcc->cpu_def = &host_cpudef;
1607
1608    /* level, xlevel, xlevel2, and the feature words are initialized on
1609     * instance_init, because they require KVM to be initialized.
1610     */
1611
1612    dc->props = host_x86_cpu_properties;
1613    /* Reason: host_x86_cpu_initfn() dies when !kvm_enabled() */
1614    dc->cannot_destroy_with_object_finalize_yet = true;
1615}
1616
1617static void host_x86_cpu_initfn(Object *obj)
1618{
1619    X86CPU *cpu = X86_CPU(obj);
1620    CPUX86State *env = &cpu->env;
1621    KVMState *s = kvm_state;
1622
1623    /* We can't fill the features array here because we don't know yet if
1624     * "migratable" is true or false.
1625     */
1626    cpu->host_features = true;
1627
1628    /* If KVM is disabled, x86_cpu_realizefn() will report an error later */
1629    if (kvm_enabled()) {
1630        env->cpuid_level = kvm_arch_get_supported_cpuid(s, 0x0, 0, R_EAX);
1631        env->cpuid_xlevel = kvm_arch_get_supported_cpuid(s, 0x80000000, 0, R_EAX);
1632        env->cpuid_xlevel2 = kvm_arch_get_supported_cpuid(s, 0xC0000000, 0, R_EAX);
1633
1634        if (lmce_supported()) {
1635            object_property_set_bool(OBJECT(cpu), true, "lmce", &error_abort);
1636        }
1637    }
1638
1639    object_property_set_bool(OBJECT(cpu), true, "pmu", &error_abort);
1640}
1641
1642static const TypeInfo host_x86_cpu_type_info = {
1643    .name = X86_CPU_TYPE_NAME("host"),
1644    .parent = TYPE_X86_CPU,
1645    .instance_init = host_x86_cpu_initfn,
1646    .class_init = host_x86_cpu_class_init,
1647};
1648
1649#endif
1650
1651static void report_unavailable_features(FeatureWord w, uint32_t mask)
1652{
1653    FeatureWordInfo *f = &feature_word_info[w];
1654    int i;
1655
1656    for (i = 0; i < 32; ++i) {
1657        if ((1UL << i) & mask) {
1658            const char *reg = get_register_name_32(f->cpuid_reg);
1659            assert(reg);
1660            fprintf(stderr, "warning: %s doesn't support requested feature: "
1661                "CPUID.%02XH:%s%s%s [bit %d]\n",
1662                kvm_enabled() ? "host" : "TCG",
1663                f->cpuid_eax, reg,
1664                f->feat_names[i] ? "." : "",
1665                f->feat_names[i] ? f->feat_names[i] : "", i);
1666        }
1667    }
1668}
1669
1670static void x86_cpuid_version_get_family(Object *obj, Visitor *v,
1671                                         const char *name, void *opaque,
1672                                         Error **errp)
1673{
1674    X86CPU *cpu = X86_CPU(obj);
1675    CPUX86State *env = &cpu->env;
1676    int64_t value;
1677
1678    value = (env->cpuid_version >> 8) & 0xf;
1679    if (value == 0xf) {
1680        value += (env->cpuid_version >> 20) & 0xff;
1681    }
1682    visit_type_int(v, name, &value, errp);
1683}
1684
1685static void x86_cpuid_version_set_family(Object *obj, Visitor *v,
1686                                         const char *name, void *opaque,
1687                                         Error **errp)
1688{
1689    X86CPU *cpu = X86_CPU(obj);
1690    CPUX86State *env = &cpu->env;
1691    const int64_t min = 0;
1692    const int64_t max = 0xff + 0xf;
1693    Error *local_err = NULL;
1694    int64_t value;
1695
1696    visit_type_int(v, name, &value, &local_err);
1697    if (local_err) {
1698        error_propagate(errp, local_err);
1699        return;
1700    }
1701    if (value < min || value > max) {
1702        error_setg(errp, QERR_PROPERTY_VALUE_OUT_OF_RANGE, "",
1703                   name ? name : "null", value, min, max);
1704        return;
1705    }
1706
1707    env->cpuid_version &= ~0xff00f00;
1708    if (value > 0x0f) {
1709        env->cpuid_version |= 0xf00 | ((value - 0x0f) << 20);
1710    } else {
1711        env->cpuid_version |= value << 8;
1712    }
1713}
1714
1715static void x86_cpuid_version_get_model(Object *obj, Visitor *v,
1716                                        const char *name, void *opaque,
1717                                        Error **errp)
1718{
1719    X86CPU *cpu = X86_CPU(obj);
1720    CPUX86State *env = &cpu->env;
1721    int64_t value;
1722
1723    value = (env->cpuid_version >> 4) & 0xf;
1724    value |= ((env->cpuid_version >> 16) & 0xf) << 4;
1725    visit_type_int(v, name, &value, errp);
1726}
1727
1728static void x86_cpuid_version_set_model(Object *obj, Visitor *v,
1729                                        const char *name, void *opaque,
1730                                        Error **errp)
1731{
1732    X86CPU *cpu = X86_CPU(obj);
1733    CPUX86State *env = &cpu->env;
1734    const int64_t min = 0;
1735    const int64_t max = 0xff;
1736    Error *local_err = NULL;
1737    int64_t value;
1738
1739    visit_type_int(v, name, &value, &local_err);
1740    if (local_err) {
1741        error_propagate(errp, local_err);
1742        return;
1743    }
1744    if (value < min || value > max) {
1745        error_setg(errp, QERR_PROPERTY_VALUE_OUT_OF_RANGE, "",
1746                   name ? name : "null", value, min, max);
1747        return;
1748    }
1749
1750    env->cpuid_version &= ~0xf00f0;
1751    env->cpuid_version |= ((value & 0xf) << 4) | ((value >> 4) << 16);
1752}
1753
1754static void x86_cpuid_version_get_stepping(Object *obj, Visitor *v,
1755                                           const char *name, void *opaque,
1756                                           Error **errp)
1757{
1758    X86CPU *cpu = X86_CPU(obj);
1759    CPUX86State *env = &cpu->env;
1760    int64_t value;
1761
1762    value = env->cpuid_version & 0xf;
1763    visit_type_int(v, name, &value, errp);
1764}
1765
1766static void x86_cpuid_version_set_stepping(Object *obj, Visitor *v,
1767                                           const char *name, void *opaque,
1768                                           Error **errp)
1769{
1770    X86CPU *cpu = X86_CPU(obj);
1771    CPUX86State *env = &cpu->env;
1772    const int64_t min = 0;
1773    const int64_t max = 0xf;
1774    Error *local_err = NULL;
1775    int64_t value;
1776
1777    visit_type_int(v, name, &value, &local_err);
1778    if (local_err) {
1779        error_propagate(errp, local_err);
1780        return;
1781    }
1782    if (value < min || value > max) {
1783        error_setg(errp, QERR_PROPERTY_VALUE_OUT_OF_RANGE, "",
1784                   name ? name : "null", value, min, max);
1785        return;
1786    }
1787
1788    env->cpuid_version &= ~0xf;
1789    env->cpuid_version |= value & 0xf;
1790}
1791
1792static char *x86_cpuid_get_vendor(Object *obj, Error **errp)
1793{
1794    X86CPU *cpu = X86_CPU(obj);
1795    CPUX86State *env = &cpu->env;
1796    char *value;
1797
1798    value = g_malloc(CPUID_VENDOR_SZ + 1);
1799    x86_cpu_vendor_words2str(value, env->cpuid_vendor1, env->cpuid_vendor2,
1800                             env->cpuid_vendor3);
1801    return value;
1802}
1803
1804static void x86_cpuid_set_vendor(Object *obj, const char *value,
1805                                 Error **errp)
1806{
1807    X86CPU *cpu = X86_CPU(obj);
1808    CPUX86State *env = &cpu->env;
1809    int i;
1810
1811    if (strlen(value) != CPUID_VENDOR_SZ) {
1812        error_setg(errp, QERR_PROPERTY_VALUE_BAD, "", "vendor", value);
1813        return;
1814    }
1815
1816    env->cpuid_vendor1 = 0;
1817    env->cpuid_vendor2 = 0;
1818    env->cpuid_vendor3 = 0;
1819    for (i = 0; i < 4; i++) {
1820        env->cpuid_vendor1 |= ((uint8_t)value[i    ]) << (8 * i);
1821        env->cpuid_vendor2 |= ((uint8_t)value[i + 4]) << (8 * i);
1822        env->cpuid_vendor3 |= ((uint8_t)value[i + 8]) << (8 * i);
1823    }
1824}
1825
1826static char *x86_cpuid_get_model_id(Object *obj, Error **errp)
1827{
1828    X86CPU *cpu = X86_CPU(obj);
1829    CPUX86State *env = &cpu->env;
1830    char *value;
1831    int i;
1832
1833    value = g_malloc(48 + 1);
1834    for (i = 0; i < 48; i++) {
1835        value[i] = env->cpuid_model[i >> 2] >> (8 * (i & 3));
1836    }
1837    value[48] = '\0';
1838    return value;
1839}
1840
1841static void x86_cpuid_set_model_id(Object *obj, const char *model_id,
1842                                   Error **errp)
1843{
1844    X86CPU *cpu = X86_CPU(obj);
1845    CPUX86State *env = &cpu->env;
1846    int c, len, i;
1847
1848    if (model_id == NULL) {
1849        model_id = "";
1850    }
1851    len = strlen(model_id);
1852    memset(env->cpuid_model, 0, 48);
1853    for (i = 0; i < 48; i++) {
1854        if (i >= len) {
1855            c = '\0';
1856        } else {
1857            c = (uint8_t)model_id[i];
1858        }
1859        env->cpuid_model[i >> 2] |= c << (8 * (i & 3));
1860    }
1861}
1862
1863static void x86_cpuid_get_tsc_freq(Object *obj, Visitor *v, const char *name,
1864                                   void *opaque, Error **errp)
1865{
1866    X86CPU *cpu = X86_CPU(obj);
1867    int64_t value;
1868
1869    value = cpu->env.tsc_khz * 1000;
1870    visit_type_int(v, name, &value, errp);
1871}
1872
1873static void x86_cpuid_set_tsc_freq(Object *obj, Visitor *v, const char *name,
1874                                   void *opaque, Error **errp)
1875{
1876    X86CPU *cpu = X86_CPU(obj);
1877    const int64_t min = 0;
1878    const int64_t max = INT64_MAX;
1879    Error *local_err = NULL;
1880    int64_t value;
1881
1882    visit_type_int(v, name, &value, &local_err);
1883    if (local_err) {
1884        error_propagate(errp, local_err);
1885        return;
1886    }
1887    if (value < min || value > max) {
1888        error_setg(errp, QERR_PROPERTY_VALUE_OUT_OF_RANGE, "",
1889                   name ? name : "null", value, min, max);
1890        return;
1891    }
1892
1893    cpu->env.tsc_khz = cpu->env.user_tsc_khz = value / 1000;
1894}
1895
1896/* Generic getter for "feature-words" and "filtered-features" properties */
1897static void x86_cpu_get_feature_words(Object *obj, Visitor *v,
1898                                      const char *name, void *opaque,
1899                                      Error **errp)
1900{
1901    uint32_t *array = (uint32_t *)opaque;
1902    FeatureWord w;
1903    X86CPUFeatureWordInfo word_infos[FEATURE_WORDS] = { };
1904    X86CPUFeatureWordInfoList list_entries[FEATURE_WORDS] = { };
1905    X86CPUFeatureWordInfoList *list = NULL;
1906
1907    for (w = 0; w < FEATURE_WORDS; w++) {
1908        FeatureWordInfo *wi = &feature_word_info[w];
1909        X86CPUFeatureWordInfo *qwi = &word_infos[w];
1910        qwi->cpuid_input_eax = wi->cpuid_eax;
1911        qwi->has_cpuid_input_ecx = wi->cpuid_needs_ecx;
1912        qwi->cpuid_input_ecx = wi->cpuid_ecx;
1913        qwi->cpuid_register = x86_reg_info_32[wi->cpuid_reg].qapi_enum;
1914        qwi->features = array[w];
1915
1916        /* List will be in reverse order, but order shouldn't matter */
1917        list_entries[w].next = list;
1918        list_entries[w].value = &word_infos[w];
1919        list = &list_entries[w];
1920    }
1921
1922    visit_type_X86CPUFeatureWordInfoList(v, "feature-words", &list, errp);
1923}
1924
1925static void x86_get_hv_spinlocks(Object *obj, Visitor *v, const char *name,
1926                                 void *opaque, Error **errp)
1927{
1928    X86CPU *cpu = X86_CPU(obj);
1929    int64_t value = cpu->hyperv_spinlock_attempts;
1930
1931    visit_type_int(v, name, &value, errp);
1932}
1933
1934static void x86_set_hv_spinlocks(Object *obj, Visitor *v, const char *name,
1935                                 void *opaque, Error **errp)
1936{
1937    const int64_t min = 0xFFF;
1938    const int64_t max = UINT_MAX;
1939    X86CPU *cpu = X86_CPU(obj);
1940    Error *err = NULL;
1941    int64_t value;
1942
1943    visit_type_int(v, name, &value, &err);
1944    if (err) {
1945        error_propagate(errp, err);
1946        return;
1947    }
1948
1949    if (value < min || value > max) {
1950        error_setg(errp, "Property %s.%s doesn't take value %" PRId64
1951                   " (minimum: %" PRId64 ", maximum: %" PRId64 ")",
1952                   object_get_typename(obj), name ? name : "null",
1953                   value, min, max);
1954        return;
1955    }
1956    cpu->hyperv_spinlock_attempts = value;
1957}
1958
1959static PropertyInfo qdev_prop_spinlocks = {
1960    .name  = "int",
1961    .get   = x86_get_hv_spinlocks,
1962    .set   = x86_set_hv_spinlocks,
1963};
1964
1965/* Convert all '_' in a feature string option name to '-', to make feature
1966 * name conform to QOM property naming rule, which uses '-' instead of '_'.
1967 */
1968static inline void feat2prop(char *s)
1969{
1970    while ((s = strchr(s, '_'))) {
1971        *s = '-';
1972    }
1973}
1974
1975/* Compatibily hack to maintain legacy +-feat semantic,
1976 * where +-feat overwrites any feature set by
1977 * feat=on|feat even if the later is parsed after +-feat
1978 * (i.e. "-x2apic,x2apic=on" will result in x2apic disabled)
1979 */
1980static FeatureWordArray plus_features = { 0 };
1981static FeatureWordArray minus_features = { 0 };
1982
1983/* Parse "+feature,-feature,feature=foo" CPU feature string
1984 */
1985static void x86_cpu_parse_featurestr(const char *typename, char *features,
1986                                     Error **errp)
1987{
1988    char *featurestr; /* Single 'key=value" string being parsed */
1989    Error *local_err = NULL;
1990    static bool cpu_globals_initialized;
1991
1992    if (cpu_globals_initialized) {
1993        return;
1994    }
1995    cpu_globals_initialized = true;
1996
1997    if (!features) {
1998        return;
1999    }
2000
2001    for (featurestr = strtok(features, ",");
2002         featurestr  && !local_err;
2003         featurestr = strtok(NULL, ",")) {
2004        const char *name;
2005        const char *val = NULL;
2006        char *eq = NULL;
2007        char num[32];
2008        GlobalProperty *prop;
2009
2010        /* Compatibility syntax: */
2011        if (featurestr[0] == '+') {
2012            add_flagname_to_bitmaps(featurestr + 1, plus_features, &local_err);
2013            continue;
2014        } else if (featurestr[0] == '-') {
2015            add_flagname_to_bitmaps(featurestr + 1, minus_features, &local_err);
2016            continue;
2017        }
2018
2019        eq = strchr(featurestr, '=');
2020        if (eq) {
2021            *eq++ = 0;
2022            val = eq;
2023        } else {
2024            val = "on";
2025        }
2026
2027        feat2prop(featurestr);
2028        name = featurestr;
2029
2030        /* Special case: */
2031        if (!strcmp(name, "tsc-freq")) {
2032            int64_t tsc_freq;
2033            char *err;
2034
2035            tsc_freq = qemu_strtosz_suffix_unit(val, &err,
2036                                           QEMU_STRTOSZ_DEFSUFFIX_B, 1000);
2037            if (tsc_freq < 0 || *err) {
2038                error_setg(errp, "bad numerical value %s", val);
2039                return;
2040            }
2041            snprintf(num, sizeof(num), "%" PRId64, tsc_freq);
2042            val = num;
2043            name = "tsc-frequency";
2044        }
2045
2046        prop = g_new0(typeof(*prop), 1);
2047        prop->driver = typename;
2048        prop->property = g_strdup(name);
2049        prop->value = g_strdup(val);
2050        prop->errp = &error_fatal;
2051        qdev_prop_register_global(prop);
2052    }
2053
2054    if (local_err) {
2055        error_propagate(errp, local_err);
2056    }
2057}
2058
2059/* Print all cpuid feature names in featureset
2060 */
2061static void listflags(FILE *f, fprintf_function print, const char **featureset)
2062{
2063    int bit;
2064    bool first = true;
2065
2066    for (bit = 0; bit < 32; bit++) {
2067        if (featureset[bit]) {
2068            print(f, "%s%s", first ? "" : " ", featureset[bit]);
2069            first = false;
2070        }
2071    }
2072}
2073
2074/* generate CPU information. */
2075void x86_cpu_list(FILE *f, fprintf_function cpu_fprintf)
2076{
2077    X86CPUDefinition *def;
2078    char buf[256];
2079    int i;
2080
2081    for (i = 0; i < ARRAY_SIZE(builtin_x86_defs); i++) {
2082        def = &builtin_x86_defs[i];
2083        snprintf(buf, sizeof(buf), "%s", def->name);
2084        (*cpu_fprintf)(f, "x86 %16s  %-48s\n", buf, def->model_id);
2085    }
2086#ifdef CONFIG_KVM
2087    (*cpu_fprintf)(f, "x86 %16s  %-48s\n", "host",
2088                   "KVM processor with all supported host features "
2089                   "(only available in KVM mode)");
2090#endif
2091
2092    (*cpu_fprintf)(f, "\nRecognized CPUID flags:\n");
2093    for (i = 0; i < ARRAY_SIZE(feature_word_info); i++) {
2094        FeatureWordInfo *fw = &feature_word_info[i];
2095
2096        (*cpu_fprintf)(f, "  ");
2097        listflags(f, cpu_fprintf, fw->feat_names);
2098        (*cpu_fprintf)(f, "\n");
2099    }
2100}
2101
2102CpuDefinitionInfoList *arch_query_cpu_definitions(Error **errp)
2103{
2104    CpuDefinitionInfoList *cpu_list = NULL;
2105    X86CPUDefinition *def;
2106    int i;
2107
2108    for (i = 0; i < ARRAY_SIZE(builtin_x86_defs); i++) {
2109        CpuDefinitionInfoList *entry;
2110        CpuDefinitionInfo *info;
2111
2112        def = &builtin_x86_defs[i];
2113        info = g_malloc0(sizeof(*info));
2114        info->name = g_strdup(def->name);
2115
2116        entry = g_malloc0(sizeof(*entry));
2117        entry->value = info;
2118        entry->next = cpu_list;
2119        cpu_list = entry;
2120    }
2121
2122    return cpu_list;
2123}
2124
2125static uint32_t x86_cpu_get_supported_feature_word(FeatureWord w,
2126                                                   bool migratable_only)
2127{
2128    FeatureWordInfo *wi = &feature_word_info[w];
2129    uint32_t r;
2130
2131    if (kvm_enabled()) {
2132        r = kvm_arch_get_supported_cpuid(kvm_state, wi->cpuid_eax,
2133                                                    wi->cpuid_ecx,
2134                                                    wi->cpuid_reg);
2135    } else if (tcg_enabled()) {
2136        r = wi->tcg_features;
2137    } else {
2138        return ~0;
2139    }
2140    if (migratable_only) {
2141        r &= x86_cpu_get_migratable_flags(w);
2142    }
2143    return r;
2144}
2145
2146/*
2147 * Filters CPU feature words based on host availability of each feature.
2148 *
2149 * Returns: 0 if all flags are supported by the host, non-zero otherwise.
2150 */
2151static int x86_cpu_filter_features(X86CPU *cpu)
2152{
2153    CPUX86State *env = &cpu->env;
2154    FeatureWord w;
2155    int rv = 0;
2156
2157    for (w = 0; w < FEATURE_WORDS; w++) {
2158        uint32_t host_feat =
2159            x86_cpu_get_supported_feature_word(w, cpu->migratable);
2160        uint32_t requested_features = env->features[w];
2161        env->features[w] &= host_feat;
2162        cpu->filtered_features[w] = requested_features & ~env->features[w];
2163        if (cpu->filtered_features[w]) {
2164            if (cpu->check_cpuid || cpu->enforce_cpuid) {
2165                report_unavailable_features(w, cpu->filtered_features[w]);
2166            }
2167            rv = 1;
2168        }
2169    }
2170
2171    return rv;
2172}
2173
2174static void x86_cpu_apply_props(X86CPU *cpu, PropValue *props)
2175{
2176    PropValue *pv;
2177    for (pv = props; pv->prop; pv++) {
2178        if (!pv->value) {
2179            continue;
2180        }
2181        object_property_parse(OBJECT(cpu), pv->value, pv->prop,
2182                              &error_abort);
2183    }
2184}
2185
2186/* Load data from X86CPUDefinition
2187 */
2188static void x86_cpu_load_def(X86CPU *cpu, X86CPUDefinition *def, Error **errp)
2189{
2190    CPUX86State *env = &cpu->env;
2191    const char *vendor;
2192    char host_vendor[CPUID_VENDOR_SZ + 1];
2193    FeatureWord w;
2194
2195    object_property_set_int(OBJECT(cpu), def->level, "level", errp);
2196    object_property_set_int(OBJECT(cpu), def->family, "family", errp);
2197    object_property_set_int(OBJECT(cpu), def->model, "model", errp);
2198    object_property_set_int(OBJECT(cpu), def->stepping, "stepping", errp);
2199    object_property_set_int(OBJECT(cpu), def->xlevel, "xlevel", errp);
2200    object_property_set_int(OBJECT(cpu), def->xlevel2, "xlevel2", errp);
2201    object_property_set_str(OBJECT(cpu), def->model_id, "model-id", errp);
2202    for (w = 0; w < FEATURE_WORDS; w++) {
2203        env->features[w] = def->features[w];
2204    }
2205
2206    /* Special cases not set in the X86CPUDefinition structs: */
2207    if (kvm_enabled()) {
2208        if (!kvm_irqchip_in_kernel()) {
2209            x86_cpu_change_kvm_default("x2apic", "off");
2210        }
2211
2212        x86_cpu_apply_props(cpu, kvm_default_props);
2213    }
2214
2215    env->features[FEAT_1_ECX] |= CPUID_EXT_HYPERVISOR;
2216
2217    /* sysenter isn't supported in compatibility mode on AMD,
2218     * syscall isn't supported in compatibility mode on Intel.
2219     * Normally we advertise the actual CPU vendor, but you can
2220     * override this using the 'vendor' property if you want to use
2221     * KVM's sysenter/syscall emulation in compatibility mode and
2222     * when doing cross vendor migration
2223     */
2224    vendor = def->vendor;
2225    if (kvm_enabled()) {
2226        uint32_t  ebx = 0, ecx = 0, edx = 0;
2227        host_cpuid(0, 0, NULL, &ebx, &ecx, &edx);
2228        x86_cpu_vendor_words2str(host_vendor, ebx, edx, ecx);
2229        vendor = host_vendor;
2230    }
2231
2232    object_property_set_str(OBJECT(cpu), vendor, "vendor", errp);
2233
2234}
2235
2236X86CPU *cpu_x86_init(const char *cpu_model)
2237{
2238    return X86_CPU(cpu_generic_init(TYPE_X86_CPU, cpu_model));
2239}
2240
2241static void x86_cpu_cpudef_class_init(ObjectClass *oc, void *data)
2242{
2243    X86CPUDefinition *cpudef = data;
2244    X86CPUClass *xcc = X86_CPU_CLASS(oc);
2245
2246    xcc->cpu_def = cpudef;
2247}
2248
2249static void x86_register_cpudef_type(X86CPUDefinition *def)
2250{
2251    char *typename = x86_cpu_type_name(def->name);
2252    TypeInfo ti = {
2253        .name = typename,
2254        .parent = TYPE_X86_CPU,
2255        .class_init = x86_cpu_cpudef_class_init,
2256        .class_data = def,
2257    };
2258
2259    type_register(&ti);
2260    g_free(typename);
2261}
2262
2263#if !defined(CONFIG_USER_ONLY)
2264
2265void cpu_clear_apic_feature(CPUX86State *env)
2266{
2267    env->features[FEAT_1_EDX] &= ~CPUID_APIC;
2268}
2269
2270#endif /* !CONFIG_USER_ONLY */
2271
2272void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count,
2273                   uint32_t *eax, uint32_t *ebx,
2274                   uint32_t *ecx, uint32_t *edx)
2275{
2276    X86CPU *cpu = x86_env_get_cpu(env);
2277    CPUState *cs = CPU(cpu);
2278
2279    /* test if maximum index reached */
2280    if (index & 0x80000000) {
2281        if (index > env->cpuid_xlevel) {
2282            if (env->cpuid_xlevel2 > 0) {
2283                /* Handle the Centaur's CPUID instruction. */
2284                if (index > env->cpuid_xlevel2) {
2285                    index = env->cpuid_xlevel2;
2286                } else if (index < 0xC0000000) {
2287                    index = env->cpuid_xlevel;
2288                }
2289            } else {
2290                /* Intel documentation states that invalid EAX input will
2291                 * return the same information as EAX=cpuid_level
2292                 * (Intel SDM Vol. 2A - Instruction Set Reference - CPUID)
2293                 */
2294                index =  env->cpuid_level;
2295            }
2296        }
2297    } else {
2298        if (index > env->cpuid_level)
2299            index = env->cpuid_level;
2300    }
2301
2302    switch(index) {
2303    case 0:
2304        *eax = env->cpuid_level;
2305        *ebx = env->cpuid_vendor1;
2306        *edx = env->cpuid_vendor2;
2307        *ecx = env->cpuid_vendor3;
2308        break;
2309    case 1:
2310        *eax = env->cpuid_version;
2311        *ebx = (cpu->apic_id << 24) |
2312               8 << 8; /* CLFLUSH size in quad words, Linux wants it. */
2313        *ecx = env->features[FEAT_1_ECX];
2314        if ((*ecx & CPUID_EXT_XSAVE) && (env->cr[4] & CR4_OSXSAVE_MASK)) {
2315            *ecx |= CPUID_EXT_OSXSAVE;
2316        }
2317        *edx = env->features[FEAT_1_EDX];
2318        if (cs->nr_cores * cs->nr_threads > 1) {
2319            *ebx |= (cs->nr_cores * cs->nr_threads) << 16;
2320            *edx |= CPUID_HT;
2321        }
2322        break;
2323    case 2:
2324        /* cache info: needed for Pentium Pro compatibility */
2325        if (cpu->cache_info_passthrough) {
2326            host_cpuid(index, 0, eax, ebx, ecx, edx);
2327            break;
2328        }
2329        *eax = 1; /* Number of CPUID[EAX=2] calls required */
2330        *ebx = 0;
2331        *ecx = 0;
2332        *edx = (L1D_DESCRIPTOR << 16) | \
2333               (L1I_DESCRIPTOR <<  8) | \
2334               (L2_DESCRIPTOR);
2335        break;
2336    case 4:
2337        /* cache info: needed for Core compatibility */
2338        if (cpu->cache_info_passthrough) {
2339            host_cpuid(index, count, eax, ebx, ecx, edx);
2340            *eax &= ~0xFC000000;
2341        } else {
2342            *eax = 0;
2343            switch (count) {
2344            case 0: /* L1 dcache info */
2345                *eax |= CPUID_4_TYPE_DCACHE | \
2346                        CPUID_4_LEVEL(1) | \
2347                        CPUID_4_SELF_INIT_LEVEL;
2348                *ebx = (L1D_LINE_SIZE - 1) | \
2349                       ((L1D_PARTITIONS - 1) << 12) | \
2350                       ((L1D_ASSOCIATIVITY - 1) << 22);
2351                *ecx = L1D_SETS - 1;
2352                *edx = CPUID_4_NO_INVD_SHARING;
2353                break;
2354            case 1: /* L1 icache info */
2355                *eax |= CPUID_4_TYPE_ICACHE | \
2356                        CPUID_4_LEVEL(1) | \
2357                        CPUID_4_SELF_INIT_LEVEL;
2358                *ebx = (L1I_LINE_SIZE - 1) | \
2359                       ((L1I_PARTITIONS - 1) << 12) | \
2360                       ((L1I_ASSOCIATIVITY - 1) << 22);
2361                *ecx = L1I_SETS - 1;
2362                *edx = CPUID_4_NO_INVD_SHARING;
2363                break;
2364            case 2: /* L2 cache info */
2365                *eax |= CPUID_4_TYPE_UNIFIED | \
2366                        CPUID_4_LEVEL(2) | \
2367                        CPUID_4_SELF_INIT_LEVEL;
2368                if (cs->nr_threads > 1) {
2369                    *eax |= (cs->nr_threads - 1) << 14;
2370                }
2371                *ebx = (L2_LINE_SIZE - 1) | \
2372                       ((L2_PARTITIONS - 1) << 12) | \
2373                       ((L2_ASSOCIATIVITY - 1) << 22);
2374                *ecx = L2_SETS - 1;
2375                *edx = CPUID_4_NO_INVD_SHARING;
2376                break;
2377            default: /* end of info */
2378                *eax = 0;
2379                *ebx = 0;
2380                *ecx = 0;
2381                *edx = 0;
2382                break;
2383            }
2384        }
2385
2386        /* QEMU gives out its own APIC IDs, never pass down bits 31..26.  */
2387        if ((*eax & 31) && cs->nr_cores > 1) {
2388            *eax |= (cs->nr_cores - 1) << 26;
2389        }
2390        break;
2391    case 5:
2392        /* mwait info: needed for Core compatibility */
2393        *eax = 0; /* Smallest monitor-line size in bytes */
2394        *ebx = 0; /* Largest monitor-line size in bytes */
2395        *ecx = CPUID_MWAIT_EMX | CPUID_MWAIT_IBE;
2396        *edx = 0;
2397        break;
2398    case 6:
2399        /* Thermal and Power Leaf */
2400        *eax = env->features[FEAT_6_EAX];
2401        *ebx = 0;
2402        *ecx = 0;
2403        *edx = 0;
2404        break;
2405    case 7:
2406        /* Structured Extended Feature Flags Enumeration Leaf */
2407        if (count == 0) {
2408            *eax = 0; /* Maximum ECX value for sub-leaves */
2409            *ebx = env->features[FEAT_7_0_EBX]; /* Feature flags */
2410            *ecx = env->features[FEAT_7_0_ECX]; /* Feature flags */
2411            if ((*ecx & CPUID_7_0_ECX_PKU) && env->cr[4] & CR4_PKE_MASK) {
2412                *ecx |= CPUID_7_0_ECX_OSPKE;
2413            }
2414            *edx = 0; /* Reserved */
2415        } else {
2416            *eax = 0;
2417            *ebx = 0;
2418            *ecx = 0;
2419            *edx = 0;
2420        }
2421        break;
2422    case 9:
2423        /* Direct Cache Access Information Leaf */
2424        *eax = 0; /* Bits 0-31 in DCA_CAP MSR */
2425        *ebx = 0;
2426        *ecx = 0;
2427        *edx = 0;
2428        break;
2429    case 0xA:
2430        /* Architectural Performance Monitoring Leaf */
2431        if (kvm_enabled() && cpu->enable_pmu) {
2432            KVMState *s = cs->kvm_state;
2433
2434            *eax = kvm_arch_get_supported_cpuid(s, 0xA, count, R_EAX);
2435            *ebx = kvm_arch_get_supported_cpuid(s, 0xA, count, R_EBX);
2436            *ecx = kvm_arch_get_supported_cpuid(s, 0xA, count, R_ECX);
2437            *edx = kvm_arch_get_supported_cpuid(s, 0xA, count, R_EDX);
2438        } else {
2439            *eax = 0;
2440            *ebx = 0;
2441            *ecx = 0;
2442            *edx = 0;
2443        }
2444        break;
2445    case 0xB:
2446        /* Extended Topology Enumeration Leaf */
2447        if (!cpu->enable_cpuid_0xb) {
2448                *eax = *ebx = *ecx = *edx = 0;
2449                break;
2450        }
2451
2452        *ecx = count & 0xff;
2453        *edx = cpu->apic_id;
2454
2455        switch (count) {
2456        case 0:
2457            *eax = apicid_core_offset(smp_cores, smp_threads);
2458            *ebx = smp_threads;
2459            *ecx |= CPUID_TOPOLOGY_LEVEL_SMT;
2460            break;
2461        case 1:
2462            *eax = apicid_pkg_offset(smp_cores, smp_threads);
2463            *ebx = smp_cores * smp_threads;
2464            *ecx |= CPUID_TOPOLOGY_LEVEL_CORE;
2465            break;
2466        default:
2467            *eax = 0;
2468            *ebx = 0;
2469            *ecx |= CPUID_TOPOLOGY_LEVEL_INVALID;
2470        }
2471
2472        assert(!(*eax & ~0x1f));
2473        *ebx &= 0xffff; /* The count doesn't need to be reliable. */
2474        break;
2475    case 0xD: {
2476        KVMState *s = cs->kvm_state;
2477        uint64_t ena_mask;
2478        int i;
2479
2480        /* Processor Extended State */
2481        *eax = 0;
2482        *ebx = 0;
2483        *ecx = 0;
2484        *edx = 0;
2485        if (!(env->features[FEAT_1_ECX] & CPUID_EXT_XSAVE)) {
2486            break;
2487        }
2488        if (kvm_enabled()) {
2489            ena_mask = kvm_arch_get_supported_cpuid(s, 0xd, 0, R_EDX);
2490            ena_mask <<= 32;
2491            ena_mask |= kvm_arch_get_supported_cpuid(s, 0xd, 0, R_EAX);
2492        } else {
2493            ena_mask = -1;
2494        }
2495
2496        if (count == 0) {
2497            *ecx = 0x240;
2498            for (i = 2; i < ARRAY_SIZE(x86_ext_save_areas); i++) {
2499                const ExtSaveArea *esa = &x86_ext_save_areas[i];
2500                if ((env->features[esa->feature] & esa->bits) == esa->bits
2501                    && ((ena_mask >> i) & 1) != 0) {
2502                    if (i < 32) {
2503                        *eax |= 1u << i;
2504                    } else {
2505                        *edx |= 1u << (i - 32);
2506                    }
2507                    *ecx = MAX(*ecx, esa->offset + esa->size);
2508                }
2509            }
2510            *eax |= ena_mask & (XSTATE_FP_MASK | XSTATE_SSE_MASK);
2511            *ebx = *ecx;
2512        } else if (count == 1) {
2513            *eax = env->features[FEAT_XSAVE];
2514        } else if (count < ARRAY_SIZE(x86_ext_save_areas)) {
2515            const ExtSaveArea *esa = &x86_ext_save_areas[count];
2516            if ((env->features[esa->feature] & esa->bits) == esa->bits
2517                && ((ena_mask >> count) & 1) != 0) {
2518                *eax = esa->size;
2519                *ebx = esa->offset;
2520            }
2521        }
2522        break;
2523    }
2524    case 0x80000000:
2525        *eax = env->cpuid_xlevel;
2526        *ebx = env->cpuid_vendor1;
2527        *edx = env->cpuid_vendor2;
2528        *ecx = env->cpuid_vendor3;
2529        break;
2530    case 0x80000001:
2531        *eax = env->cpuid_version;
2532        *ebx = 0;
2533        *ecx = env->features[FEAT_8000_0001_ECX];
2534        *edx = env->features[FEAT_8000_0001_EDX];
2535
2536        /* The Linux kernel checks for the CMPLegacy bit and
2537         * discards multiple thread information if it is set.
2538         * So don't set it here for Intel to make Linux guests happy.
2539         */
2540        if (cs->nr_cores * cs->nr_threads > 1) {
2541            if (env->cpuid_vendor1 != CPUID_VENDOR_INTEL_1 ||
2542                env->cpuid_vendor2 != CPUID_VENDOR_INTEL_2 ||
2543                env->cpuid_vendor3 != CPUID_VENDOR_INTEL_3) {
2544                *ecx |= 1 << 1;    /* CmpLegacy bit */
2545            }
2546        }
2547        break;
2548    case 0x80000002:
2549    case 0x80000003:
2550    case 0x80000004:
2551        *eax = env->cpuid_model[(index - 0x80000002) * 4 + 0];
2552        *ebx = env->cpuid_model[(index - 0x80000002) * 4 + 1];
2553        *ecx = env->cpuid_model[(index - 0x80000002) * 4 + 2];
2554        *edx = env->cpuid_model[(index - 0x80000002) * 4 + 3];
2555        break;
2556    case 0x80000005:
2557        /* cache info (L1 cache) */
2558        if (cpu->cache_info_passthrough) {
2559            host_cpuid(index, 0, eax, ebx, ecx, edx);
2560            break;
2561        }
2562        *eax = (L1_DTLB_2M_ASSOC << 24) | (L1_DTLB_2M_ENTRIES << 16) | \
2563               (L1_ITLB_2M_ASSOC <<  8) | (L1_ITLB_2M_ENTRIES);
2564        *ebx = (L1_DTLB_4K_ASSOC << 24) | (L1_DTLB_4K_ENTRIES << 16) | \
2565               (L1_ITLB_4K_ASSOC <<  8) | (L1_ITLB_4K_ENTRIES);
2566        *ecx = (L1D_SIZE_KB_AMD << 24) | (L1D_ASSOCIATIVITY_AMD << 16) | \
2567               (L1D_LINES_PER_TAG << 8) | (L1D_LINE_SIZE);
2568        *edx = (L1I_SIZE_KB_AMD << 24) | (L1I_ASSOCIATIVITY_AMD << 16) | \
2569               (L1I_LINES_PER_TAG << 8) | (L1I_LINE_SIZE);
2570        break;
2571    case 0x80000006:
2572        /* cache info (L2 cache) */
2573        if (cpu->cache_info_passthrough) {
2574            host_cpuid(index, 0, eax, ebx, ecx, edx);
2575            break;
2576        }
2577        *eax = (AMD_ENC_ASSOC(L2_DTLB_2M_ASSOC) << 28) | \
2578               (L2_DTLB_2M_ENTRIES << 16) | \
2579               (AMD_ENC_ASSOC(L2_ITLB_2M_ASSOC) << 12) | \
2580               (L2_ITLB_2M_ENTRIES);
2581        *ebx = (AMD_ENC_ASSOC(L2_DTLB_4K_ASSOC) << 28) | \
2582               (L2_DTLB_4K_ENTRIES << 16) | \
2583               (AMD_ENC_ASSOC(L2_ITLB_4K_ASSOC) << 12) | \
2584               (L2_ITLB_4K_ENTRIES);
2585        *ecx = (L2_SIZE_KB_AMD << 16) | \
2586               (AMD_ENC_ASSOC(L2_ASSOCIATIVITY) << 12) | \
2587               (L2_LINES_PER_TAG << 8) | (L2_LINE_SIZE);
2588        *edx = ((L3_SIZE_KB/512) << 18) | \
2589               (AMD_ENC_ASSOC(L3_ASSOCIATIVITY) << 12) | \
2590               (L3_LINES_PER_TAG << 8) | (L3_LINE_SIZE);
2591        break;
2592    case 0x80000007:
2593        *eax = 0;
2594        *ebx = 0;
2595        *ecx = 0;
2596        *edx = env->features[FEAT_8000_0007_EDX];
2597        break;
2598    case 0x80000008:
2599        /* virtual & phys address size in low 2 bytes. */
2600        if (env->features[FEAT_8000_0001_EDX] & CPUID_EXT2_LM) {
2601            /* 64 bit processor, 48 bits virtual, configurable
2602             * physical bits.
2603             */
2604            *eax = 0x00003000 + cpu->phys_bits;
2605        } else {
2606            *eax = cpu->phys_bits;
2607        }
2608        *ebx = 0;
2609        *ecx = 0;
2610        *edx = 0;
2611        if (cs->nr_cores * cs->nr_threads > 1) {
2612            *ecx |= (cs->nr_cores * cs->nr_threads) - 1;
2613        }
2614        break;
2615    case 0x8000000A:
2616        if (env->features[FEAT_8000_0001_ECX] & CPUID_EXT3_SVM) {
2617            *eax = 0x00000001; /* SVM Revision */
2618            *ebx = 0x00000010; /* nr of ASIDs */
2619            *ecx = 0;
2620            *edx = env->features[FEAT_SVM]; /* optional features */
2621        } else {
2622            *eax = 0;
2623            *ebx = 0;
2624            *ecx = 0;
2625            *edx = 0;
2626        }
2627        break;
2628    case 0xC0000000:
2629        *eax = env->cpuid_xlevel2;
2630        *ebx = 0;
2631        *ecx = 0;
2632        *edx = 0;
2633        break;
2634    case 0xC0000001:
2635        /* Support for VIA CPU's CPUID instruction */
2636        *eax = env->cpuid_version;
2637        *ebx = 0;
2638        *ecx = 0;
2639        *edx = env->features[FEAT_C000_0001_EDX];
2640        break;
2641    case 0xC0000002:
2642    case 0xC0000003:
2643    case 0xC0000004:
2644        /* Reserved for the future, and now filled with zero */
2645        *eax = 0;
2646        *ebx = 0;
2647        *ecx = 0;
2648        *edx = 0;
2649        break;
2650    default:
2651        /* reserved values: zero */
2652        *eax = 0;
2653        *ebx = 0;
2654        *ecx = 0;
2655        *edx = 0;
2656        break;
2657    }
2658}
2659
2660/* CPUClass::reset() */
2661static void x86_cpu_reset(CPUState *s)
2662{
2663    X86CPU *cpu = X86_CPU(s);
2664    X86CPUClass *xcc = X86_CPU_GET_CLASS(cpu);
2665    CPUX86State *env = &cpu->env;
2666    target_ulong cr4;
2667    uint64_t xcr0;
2668    int i;
2669
2670    xcc->parent_reset(s);
2671
2672    memset(env, 0, offsetof(CPUX86State, cpuid_level));
2673
2674    tlb_flush(s, 1);
2675
2676    env->old_exception = -1;
2677
2678    /* init to reset state */
2679
2680    env->hflags2 |= HF2_GIF_MASK;
2681
2682    cpu_x86_update_cr0(env, 0x60000010);
2683    env->a20_mask = ~0x0;
2684    env->smbase = 0x30000;
2685
2686    env->idt.limit = 0xffff;
2687    env->gdt.limit = 0xffff;
2688    env->ldt.limit = 0xffff;
2689    env->ldt.flags = DESC_P_MASK | (2 << DESC_TYPE_SHIFT);
2690    env->tr.limit = 0xffff;
2691    env->tr.flags = DESC_P_MASK | (11 << DESC_TYPE_SHIFT);
2692
2693    cpu_x86_load_seg_cache(env, R_CS, 0xf000, 0xffff0000, 0xffff,
2694                           DESC_P_MASK | DESC_S_MASK | DESC_CS_MASK |
2695                           DESC_R_MASK | DESC_A_MASK);
2696    cpu_x86_load_seg_cache(env, R_DS, 0, 0, 0xffff,
2697                           DESC_P_MASK | DESC_S_MASK | DESC_W_MASK |
2698                           DESC_A_MASK);
2699    cpu_x86_load_seg_cache(env, R_ES, 0, 0, 0xffff,
2700                           DESC_P_MASK | DESC_S_MASK | DESC_W_MASK |
2701                           DESC_A_MASK);
2702    cpu_x86_load_seg_cache(env, R_SS, 0, 0, 0xffff,
2703                           DESC_P_MASK | DESC_S_MASK | DESC_W_MASK |
2704                           DESC_A_MASK);
2705    cpu_x86_load_seg_cache(env, R_FS, 0, 0, 0xffff,
2706                           DESC_P_MASK | DESC_S_MASK | DESC_W_MASK |
2707                           DESC_A_MASK);
2708    cpu_x86_load_seg_cache(env, R_GS, 0, 0, 0xffff,
2709                           DESC_P_MASK | DESC_S_MASK | DESC_W_MASK |
2710                           DESC_A_MASK);
2711
2712    env->eip = 0xfff0;
2713    env->regs[R_EDX] = env->cpuid_version;
2714
2715    env->eflags = 0x2;
2716
2717    /* FPU init */
2718    for (i = 0; i < 8; i++) {
2719        env->fptags[i] = 1;
2720    }
2721    cpu_set_fpuc(env, 0x37f);
2722
2723    env->mxcsr = 0x1f80;
2724    /* All units are in INIT state.  */
2725    env->xstate_bv = 0;
2726
2727    env->pat = 0x0007040600070406ULL;
2728    env->msr_ia32_misc_enable = MSR_IA32_MISC_ENABLE_DEFAULT;
2729
2730    memset(env->dr, 0, sizeof(env->dr));
2731    env->dr[6] = DR6_FIXED_1;
2732    env->dr[7] = DR7_FIXED_1;
2733    cpu_breakpoint_remove_all(s, BP_CPU);
2734    cpu_watchpoint_remove_all(s, BP_CPU);
2735
2736    cr4 = 0;
2737    xcr0 = XSTATE_FP_MASK;
2738
2739#ifdef CONFIG_USER_ONLY
2740    /* Enable all the features for user-mode.  */
2741    if (env->features[FEAT_1_EDX] & CPUID_SSE) {
2742        xcr0 |= XSTATE_SSE_MASK;
2743    }
2744    for (i = 2; i < ARRAY_SIZE(x86_ext_save_areas); i++) {
2745        const ExtSaveArea *esa = &x86_ext_save_areas[i];
2746        if ((env->features[esa->feature] & esa->bits) == esa->bits) {
2747            xcr0 |= 1ull << i;
2748        }
2749    }
2750
2751    if (env->features[FEAT_1_ECX] & CPUID_EXT_XSAVE) {
2752        cr4 |= CR4_OSFXSR_MASK | CR4_OSXSAVE_MASK;
2753    }
2754    if (env->features[FEAT_7_0_EBX] & CPUID_7_0_EBX_FSGSBASE) {
2755        cr4 |= CR4_FSGSBASE_MASK;
2756    }
2757#endif
2758
2759    env->xcr0 = xcr0;
2760    cpu_x86_update_cr4(env, cr4);
2761
2762    /*
2763     * SDM 11.11.5 requires:
2764     *  - IA32_MTRR_DEF_TYPE MSR.E = 0
2765     *  - IA32_MTRR_PHYSMASKn.V = 0
2766     * All other bits are undefined.  For simplification, zero it all.
2767     */
2768    env->mtrr_deftype = 0;
2769    memset(env->mtrr_var, 0, sizeof(env->mtrr_var));
2770    memset(env->mtrr_fixed, 0, sizeof(env->mtrr_fixed));
2771
2772#if !defined(CONFIG_USER_ONLY)
2773    /* We hard-wire the BSP to the first CPU. */
2774    apic_designate_bsp(cpu->apic_state, s->cpu_index == 0);
2775
2776    s->halted = !cpu_is_bsp(cpu);
2777
2778    if (kvm_enabled()) {
2779        kvm_arch_reset_vcpu(cpu);
2780    }
2781#endif
2782}
2783
2784#ifndef CONFIG_USER_ONLY
2785bool cpu_is_bsp(X86CPU *cpu)
2786{
2787    return cpu_get_apic_base(cpu->apic_state) & MSR_IA32_APICBASE_BSP;
2788}
2789
2790/* TODO: remove me, when reset over QOM tree is implemented */
2791static void x86_cpu_machine_reset_cb(void *opaque)
2792{
2793    X86CPU *cpu = opaque;
2794    cpu_reset(CPU(cpu));
2795}
2796#endif
2797
2798static void mce_init(X86CPU *cpu)
2799{
2800    CPUX86State *cenv = &cpu->env;
2801    unsigned int bank;
2802
2803    if (((cenv->cpuid_version >> 8) & 0xf) >= 6
2804        && (cenv->features[FEAT_1_EDX] & (CPUID_MCE | CPUID_MCA)) ==
2805            (CPUID_MCE | CPUID_MCA)) {
2806        cenv->mcg_cap = MCE_CAP_DEF | MCE_BANKS_DEF |
2807                        (cpu->enable_lmce ? MCG_LMCE_P : 0);
2808        cenv->mcg_ctl = ~(uint64_t)0;
2809        for (bank = 0; bank < MCE_BANKS_DEF; bank++) {
2810            cenv->mce_banks[bank * 4] = ~(uint64_t)0;
2811        }
2812    }
2813}
2814
2815#ifndef CONFIG_USER_ONLY
2816static void x86_cpu_apic_create(X86CPU *cpu, Error **errp)
2817{
2818    APICCommonState *apic;
2819    const char *apic_type = "apic";
2820
2821    if (kvm_apic_in_kernel()) {
2822        apic_type = "kvm-apic";
2823    } else if (xen_enabled()) {
2824        apic_type = "xen-apic";
2825    }
2826
2827    cpu->apic_state = DEVICE(object_new(apic_type));
2828
2829    object_property_add_child(OBJECT(cpu), "lapic",
2830                              OBJECT(cpu->apic_state), &error_abort);
2831    object_unref(OBJECT(cpu->apic_state));
2832
2833    qdev_prop_set_uint8(cpu->apic_state, "id", cpu->apic_id);
2834    /* TODO: convert to link<> */
2835    apic = APIC_COMMON(cpu->apic_state);
2836    apic->cpu = cpu;
2837    apic->apicbase = APIC_DEFAULT_ADDRESS | MSR_IA32_APICBASE_ENABLE;
2838}
2839
2840static void x86_cpu_apic_realize(X86CPU *cpu, Error **errp)
2841{
2842    APICCommonState *apic;
2843    static bool apic_mmio_map_once;
2844
2845    if (cpu->apic_state == NULL) {
2846        return;
2847    }
2848    object_property_set_bool(OBJECT(cpu->apic_state), true, "realized",
2849                             errp);
2850
2851    /* Map APIC MMIO area */
2852    apic = APIC_COMMON(cpu->apic_state);
2853    if (!apic_mmio_map_once) {
2854        memory_region_add_subregion_overlap(get_system_memory(),
2855                                            apic->apicbase &
2856                                            MSR_IA32_APICBASE_BASE,
2857                                            &apic->io_memory,
2858                                            0x1000);
2859        apic_mmio_map_once = true;
2860     }
2861}
2862
2863static void x86_cpu_machine_done(Notifier *n, void *unused)
2864{
2865    X86CPU *cpu = container_of(n, X86CPU, machine_done);
2866    MemoryRegion *smram =
2867        (MemoryRegion *) object_resolve_path("/machine/smram", NULL);
2868
2869    if (smram) {
2870        cpu->smram = g_new(MemoryRegion, 1);
2871        memory_region_init_alias(cpu->smram, OBJECT(cpu), "smram",
2872                                 smram, 0, 1ull << 32);
2873        memory_region_set_enabled(cpu->smram, false);
2874        memory_region_add_subregion_overlap(cpu->cpu_as_root, 0, cpu->smram, 1);
2875    }
2876}
2877#else
2878static void x86_cpu_apic_realize(X86CPU *cpu, Error **errp)
2879{
2880}
2881#endif
2882
2883/* Note: Only safe for use on x86(-64) hosts */
2884static uint32_t x86_host_phys_bits(void)
2885{
2886    uint32_t eax;
2887    uint32_t host_phys_bits;
2888
2889    host_cpuid(0x80000000, 0, &eax, NULL, NULL, NULL);
2890    if (eax >= 0x80000008) {
2891        host_cpuid(0x80000008, 0, &eax, NULL, NULL, NULL);
2892        /* Note: According to AMD doc 25481 rev 2.34 they have a field
2893         * at 23:16 that can specify a maximum physical address bits for
2894         * the guest that can override this value; but I've not seen
2895         * anything with that set.
2896         */
2897        host_phys_bits = eax & 0xff;
2898    } else {
2899        /* It's an odd 64 bit machine that doesn't have the leaf for
2900         * physical address bits; fall back to 36 that's most older
2901         * Intel.
2902         */
2903        host_phys_bits = 36;
2904    }
2905
2906    return host_phys_bits;
2907}
2908
2909#define IS_INTEL_CPU(env) ((env)->cpuid_vendor1 == CPUID_VENDOR_INTEL_1 && \
2910                           (env)->cpuid_vendor2 == CPUID_VENDOR_INTEL_2 && \
2911                           (env)->cpuid_vendor3 == CPUID_VENDOR_INTEL_3)
2912#define IS_AMD_CPU(env) ((env)->cpuid_vendor1 == CPUID_VENDOR_AMD_1 && \
2913                         (env)->cpuid_vendor2 == CPUID_VENDOR_AMD_2 && \
2914                         (env)->cpuid_vendor3 == CPUID_VENDOR_AMD_3)
2915static void x86_cpu_realizefn(DeviceState *dev, Error **errp)
2916{
2917    CPUState *cs = CPU(dev);
2918    X86CPU *cpu = X86_CPU(dev);
2919    X86CPUClass *xcc = X86_CPU_GET_CLASS(dev);
2920    CPUX86State *env = &cpu->env;
2921    Error *local_err = NULL;
2922    static bool ht_warned;
2923    FeatureWord w;
2924
2925    if (xcc->kvm_required && !kvm_enabled()) {
2926        char *name = x86_cpu_class_get_model_name(xcc);
2927        error_setg(&local_err, "CPU model '%s' requires KVM", name);
2928        g_free(name);
2929        goto out;
2930    }
2931
2932    if (cpu->apic_id == UNASSIGNED_APIC_ID) {
2933        error_setg(errp, "apic-id property was not initialized properly");
2934        return;
2935    }
2936
2937    /*TODO: cpu->host_features incorrectly overwrites features
2938     * set using "feat=on|off". Once we fix this, we can convert
2939     * plus_features & minus_features to global properties
2940     * inside x86_cpu_parse_featurestr() too.
2941     */
2942    if (cpu->host_features) {
2943        for (w = 0; w < FEATURE_WORDS; w++) {
2944            env->features[w] =
2945                x86_cpu_get_supported_feature_word(w, cpu->migratable);
2946        }
2947    }
2948
2949    for (w = 0; w < FEATURE_WORDS; w++) {
2950        cpu->env.features[w] |= plus_features[w];
2951        cpu->env.features[w] &= ~minus_features[w];
2952    }
2953
2954    if (env->features[FEAT_7_0_EBX] && env->cpuid_level < 7) {
2955        env->cpuid_level = 7;
2956    }
2957
2958    if (x86_cpu_filter_features(cpu) && cpu->enforce_cpuid) {
2959        error_setg(&local_err,
2960                   kvm_enabled() ?
2961                       "Host doesn't support requested features" :
2962                       "TCG doesn't support requested features");
2963        goto out;
2964    }
2965
2966    /* On AMD CPUs, some CPUID[8000_0001].EDX bits must match the bits on
2967     * CPUID[1].EDX.
2968     */
2969    if (IS_AMD_CPU(env)) {
2970        env->features[FEAT_8000_0001_EDX] &= ~CPUID_EXT2_AMD_ALIASES;
2971        env->features[FEAT_8000_0001_EDX] |= (env->features[FEAT_1_EDX]
2972           & CPUID_EXT2_AMD_ALIASES);
2973    }
2974
2975    /* For 64bit systems think about the number of physical bits to present.
2976     * ideally this should be the same as the host; anything other than matching
2977     * the host can cause incorrect guest behaviour.
2978     * QEMU used to pick the magic value of 40 bits that corresponds to
2979     * consumer AMD devices but nothing else.
2980     */
2981    if (env->features[FEAT_8000_0001_EDX] & CPUID_EXT2_LM) {
2982        if (kvm_enabled()) {
2983            uint32_t host_phys_bits = x86_host_phys_bits();
2984            static bool warned;
2985
2986            if (cpu->host_phys_bits) {
2987                /* The user asked for us to use the host physical bits */
2988                cpu->phys_bits = host_phys_bits;
2989            }
2990
2991            /* Print a warning if the user set it to a value that's not the
2992             * host value.
2993             */
2994            if (cpu->phys_bits != host_phys_bits && cpu->phys_bits != 0 &&
2995                !warned) {
2996                error_report("Warning: Host physical bits (%u)"
2997                                 " does not match phys-bits property (%u)",
2998                                 host_phys_bits, cpu->phys_bits);
2999                warned = true;
3000            }
3001
3002            if (cpu->phys_bits &&
3003                (cpu->phys_bits > TARGET_PHYS_ADDR_SPACE_BITS ||
3004                cpu->phys_bits < 32)) {
3005                error_setg(errp, "phys-bits should be between 32 and %u "
3006                                 " (but is %u)",
3007                                 TARGET_PHYS_ADDR_SPACE_BITS, cpu->phys_bits);
3008                return;
3009            }
3010        } else {
3011            if (cpu->phys_bits && cpu->phys_bits != TCG_PHYS_ADDR_BITS) {
3012                error_setg(errp, "TCG only supports phys-bits=%u",
3013                                  TCG_PHYS_ADDR_BITS);
3014                return;
3015            }
3016        }
3017        /* 0 means it was not explicitly set by the user (or by machine
3018         * compat_props or by the host code above). In this case, the default
3019         * is the value used by TCG (40).
3020         */
3021        if (cpu->phys_bits == 0) {
3022            cpu->phys_bits = TCG_PHYS_ADDR_BITS;
3023        }
3024    } else {
3025        /* For 32 bit systems don't use the user set value, but keep
3026         * phys_bits consistent with what we tell the guest.
3027         */
3028        if (cpu->phys_bits != 0) {
3029            error_setg(errp, "phys-bits is not user-configurable in 32 bit");
3030            return;
3031        }
3032
3033        if (env->features[FEAT_1_EDX] & CPUID_PSE36) {
3034            cpu->phys_bits = 36;
3035        } else {
3036            cpu->phys_bits = 32;
3037        }
3038    }
3039    cpu_exec_init(cs, &error_abort);
3040
3041    if (tcg_enabled()) {
3042        tcg_x86_init();
3043    }
3044
3045#ifndef CONFIG_USER_ONLY
3046    qemu_register_reset(x86_cpu_machine_reset_cb, cpu);
3047
3048    if (cpu->env.features[FEAT_1_EDX] & CPUID_APIC || smp_cpus > 1) {
3049        x86_cpu_apic_create(cpu, &local_err);
3050        if (local_err != NULL) {
3051            goto out;
3052        }
3053    }
3054#endif
3055
3056    mce_init(cpu);
3057
3058#ifndef CONFIG_USER_ONLY
3059    if (tcg_enabled()) {
3060        AddressSpace *newas = g_new(AddressSpace, 1);
3061
3062        cpu->cpu_as_mem = g_new(MemoryRegion, 1);
3063        cpu->cpu_as_root = g_new(MemoryRegion, 1);
3064
3065        /* Outer container... */
3066        memory_region_init(cpu->cpu_as_root, OBJECT(cpu), "memory", ~0ull);
3067        memory_region_set_enabled(cpu->cpu_as_root, true);
3068
3069        /* ... with two regions inside: normal system memory with low
3070         * priority, and...
3071         */
3072        memory_region_init_alias(cpu->cpu_as_mem, OBJECT(cpu), "memory",
3073                                 get_system_memory(), 0, ~0ull);
3074        memory_region_add_subregion_overlap(cpu->cpu_as_root, 0, cpu->cpu_as_mem, 0);
3075        memory_region_set_enabled(cpu->cpu_as_mem, true);
3076        address_space_init(newas, cpu->cpu_as_root, "CPU");
3077        cs->num_ases = 1;
3078        cpu_address_space_init(cs, newas, 0);
3079
3080        /* ... SMRAM with higher priority, linked from /machine/smram.  */
3081        cpu->machine_done.notify = x86_cpu_machine_done;
3082        qemu_add_machine_init_done_notifier(&cpu->machine_done);
3083    }
3084#endif
3085
3086    qemu_init_vcpu(cs);
3087
3088    /* Only Intel CPUs support hyperthreading. Even though QEMU fixes this
3089     * issue by adjusting CPUID_0000_0001_EBX and CPUID_8000_0008_ECX
3090     * based on inputs (sockets,cores,threads), it is still better to gives
3091     * users a warning.
3092     *
3093     * NOTE: the following code has to follow qemu_init_vcpu(). Otherwise
3094     * cs->nr_threads hasn't be populated yet and the checking is incorrect.
3095     */
3096    if (!IS_INTEL_CPU(env) && cs->nr_threads > 1 && !ht_warned) {
3097        error_report("AMD CPU doesn't support hyperthreading. Please configure"
3098                     " -smp options properly.");
3099        ht_warned = true;
3100    }
3101
3102    x86_cpu_apic_realize(cpu, &local_err);
3103    if (local_err != NULL) {
3104        goto out;
3105    }
3106    cpu_reset(cs);
3107
3108    xcc->parent_realize(dev, &local_err);
3109
3110out:
3111    if (local_err != NULL) {
3112        error_propagate(errp, local_err);
3113        return;
3114    }
3115}
3116
3117static void x86_cpu_unrealizefn(DeviceState *dev, Error **errp)
3118{
3119    X86CPU *cpu = X86_CPU(dev);
3120
3121#ifndef CONFIG_USER_ONLY
3122    cpu_remove_sync(CPU(dev));
3123    qemu_unregister_reset(x86_cpu_machine_reset_cb, dev);
3124#endif
3125
3126    if (cpu->apic_state) {
3127        object_unparent(OBJECT(cpu->apic_state));
3128        cpu->apic_state = NULL;
3129    }
3130}
3131
3132typedef struct BitProperty {
3133    uint32_t *ptr;
3134    uint32_t mask;
3135} BitProperty;
3136
3137static void x86_cpu_get_bit_prop(Object *obj, Visitor *v, const char *name,
3138                                 void *opaque, Error **errp)
3139{
3140    BitProperty *fp = opaque;
3141    bool value = (*fp->ptr & fp->mask) == fp->mask;
3142    visit_type_bool(v, name, &value, errp);
3143}
3144
3145static void x86_cpu_set_bit_prop(Object *obj, Visitor *v, const char *name,
3146                                 void *opaque, Error **errp)
3147{
3148    DeviceState *dev = DEVICE(obj);
3149    BitProperty *fp = opaque;
3150    Error *local_err = NULL;
3151    bool value;
3152
3153    if (dev->realized) {
3154        qdev_prop_set_after_realize(dev, name, errp);
3155        return;
3156    }
3157
3158    visit_type_bool(v, name, &value, &local_err);
3159    if (local_err) {
3160        error_propagate(errp, local_err);
3161        return;
3162    }
3163
3164    if (value) {
3165        *fp->ptr |= fp->mask;
3166    } else {
3167        *fp->ptr &= ~fp->mask;
3168    }
3169}
3170
3171static void x86_cpu_release_bit_prop(Object *obj, const char *name,
3172                                     void *opaque)
3173{
3174    BitProperty *prop = opaque;
3175    g_free(prop);
3176}
3177
3178/* Register a boolean property to get/set a single bit in a uint32_t field.
3179 *
3180 * The same property name can be registered multiple times to make it affect
3181 * multiple bits in the same FeatureWord. In that case, the getter will return
3182 * true only if all bits are set.
3183 */
3184static void x86_cpu_register_bit_prop(X86CPU *cpu,
3185                                      const char *prop_name,
3186                                      uint32_t *field,
3187                                      int bitnr)
3188{
3189    BitProperty *fp;
3190    ObjectProperty *op;
3191    uint32_t mask = (1UL << bitnr);
3192
3193    op = object_property_find(OBJECT(cpu), prop_name, NULL);
3194    if (op) {
3195        fp = op->opaque;
3196        assert(fp->ptr == field);
3197        fp->mask |= mask;
3198    } else {
3199        fp = g_new0(BitProperty, 1);
3200        fp->ptr = field;
3201        fp->mask = mask;
3202        object_property_add(OBJECT(cpu), prop_name, "bool",
3203                            x86_cpu_get_bit_prop,
3204                            x86_cpu_set_bit_prop,
3205                            x86_cpu_release_bit_prop, fp, &error_abort);
3206    }
3207}
3208
3209static void x86_cpu_register_feature_bit_props(X86CPU *cpu,
3210                                               FeatureWord w,
3211                                               int bitnr)
3212{
3213    Object *obj = OBJECT(cpu);
3214    int i;
3215    char **names;
3216    FeatureWordInfo *fi = &feature_word_info[w];
3217
3218    if (!fi->feat_names) {
3219        return;
3220    }
3221    if (!fi->feat_names[bitnr]) {
3222        return;
3223    }
3224
3225    names = g_strsplit(fi->feat_names[bitnr], "|", 0);
3226
3227    feat2prop(names[0]);
3228    x86_cpu_register_bit_prop(cpu, names[0], &cpu->env.features[w], bitnr);
3229
3230    for (i = 1; names[i]; i++) {
3231        feat2prop(names[i]);
3232        object_property_add_alias(obj, names[i], obj, names[0],
3233                                  &error_abort);
3234    }
3235
3236    g_strfreev(names);
3237}
3238
3239static void x86_cpu_initfn(Object *obj)
3240{
3241    CPUState *cs = CPU(obj);
3242    X86CPU *cpu = X86_CPU(obj);
3243    X86CPUClass *xcc = X86_CPU_GET_CLASS(obj);
3244    CPUX86State *env = &cpu->env;
3245    FeatureWord w;
3246
3247    cs->env_ptr = env;
3248
3249    object_property_add(obj, "family", "int",
3250                        x86_cpuid_version_get_family,
3251                        x86_cpuid_version_set_family, NULL, NULL, NULL);
3252    object_property_add(obj, "model", "int",
3253                        x86_cpuid_version_get_model,
3254                        x86_cpuid_version_set_model, NULL, NULL, NULL);
3255    object_property_add(obj, "stepping", "int",
3256                        x86_cpuid_version_get_stepping,
3257                        x86_cpuid_version_set_stepping, NULL, NULL, NULL);
3258    object_property_add_str(obj, "vendor",
3259                            x86_cpuid_get_vendor,
3260                            x86_cpuid_set_vendor, NULL);
3261    object_property_add_str(obj, "model-id",
3262                            x86_cpuid_get_model_id,
3263                            x86_cpuid_set_model_id, NULL);
3264    object_property_add(obj, "tsc-frequency", "int",
3265                        x86_cpuid_get_tsc_freq,
3266                        x86_cpuid_set_tsc_freq, NULL, NULL, NULL);
3267    object_property_add(obj, "feature-words", "X86CPUFeatureWordInfo",
3268                        x86_cpu_get_feature_words,
3269                        NULL, NULL, (void *)env->features, NULL);
3270    object_property_add(obj, "filtered-features", "X86CPUFeatureWordInfo",
3271                        x86_cpu_get_feature_words,
3272                        NULL, NULL, (void *)cpu->filtered_features, NULL);
3273
3274    cpu->hyperv_spinlock_attempts = HYPERV_SPINLOCK_NEVER_RETRY;
3275
3276    for (w = 0; w < FEATURE_WORDS; w++) {
3277        int bitnr;
3278
3279        for (bitnr = 0; bitnr < 32; bitnr++) {
3280            x86_cpu_register_feature_bit_props(cpu, w, bitnr);
3281        }
3282    }
3283
3284    x86_cpu_load_def(cpu, xcc->cpu_def, &error_abort);
3285}
3286
3287static int64_t x86_cpu_get_arch_id(CPUState *cs)
3288{
3289    X86CPU *cpu = X86_CPU(cs);
3290
3291    return cpu->apic_id;
3292}
3293
3294static bool x86_cpu_get_paging_enabled(const CPUState *cs)
3295{
3296    X86CPU *cpu = X86_CPU(cs);
3297
3298    return cpu->env.cr[0] & CR0_PG_MASK;
3299}
3300
3301static void x86_cpu_set_pc(CPUState *cs, vaddr value)
3302{
3303    X86CPU *cpu = X86_CPU(cs);
3304
3305    cpu->env.eip = value;
3306}
3307
3308static void x86_cpu_synchronize_from_tb(CPUState *cs, TranslationBlock *tb)
3309{
3310    X86CPU *cpu = X86_CPU(cs);
3311
3312    cpu->env.eip = tb->pc - tb->cs_base;
3313}
3314
3315static bool x86_cpu_has_work(CPUState *cs)
3316{
3317    X86CPU *cpu = X86_CPU(cs);
3318    CPUX86State *env = &cpu->env;
3319
3320    return ((cs->interrupt_request & (CPU_INTERRUPT_HARD |
3321                                      CPU_INTERRUPT_POLL)) &&
3322            (env->eflags & IF_MASK)) ||
3323           (cs->interrupt_request & (CPU_INTERRUPT_NMI |
3324                                     CPU_INTERRUPT_INIT |
3325                                     CPU_INTERRUPT_SIPI |
3326                                     CPU_INTERRUPT_MCE)) ||
3327           ((cs->interrupt_request & CPU_INTERRUPT_SMI) &&
3328            !(env->hflags & HF_SMM_MASK));
3329}
3330
3331static Property x86_cpu_properties[] = {
3332#ifdef CONFIG_USER_ONLY
3333    /* apic_id = 0 by default for *-user, see commit 9886e834 */
3334    DEFINE_PROP_UINT32("apic-id", X86CPU, apic_id, 0),
3335    DEFINE_PROP_INT32("thread-id", X86CPU, thread_id, 0),
3336    DEFINE_PROP_INT32("core-id", X86CPU, core_id, 0),
3337    DEFINE_PROP_INT32("socket-id", X86CPU, socket_id, 0),
3338#else
3339    DEFINE_PROP_UINT32("apic-id", X86CPU, apic_id, UNASSIGNED_APIC_ID),
3340    DEFINE_PROP_INT32("thread-id", X86CPU, thread_id, -1),
3341    DEFINE_PROP_INT32("core-id", X86CPU, core_id, -1),
3342    DEFINE_PROP_INT32("socket-id", X86CPU, socket_id, -1),
3343#endif
3344    DEFINE_PROP_BOOL("pmu", X86CPU, enable_pmu, false),
3345    { .name  = "hv-spinlocks", .info  = &qdev_prop_spinlocks },
3346    DEFINE_PROP_BOOL("hv-relaxed", X86CPU, hyperv_relaxed_timing, false),
3347    DEFINE_PROP_BOOL("hv-vapic", X86CPU, hyperv_vapic, false),
3348    DEFINE_PROP_BOOL("hv-time", X86CPU, hyperv_time, false),
3349    DEFINE_PROP_BOOL("hv-crash", X86CPU, hyperv_crash, false),
3350    DEFINE_PROP_BOOL("hv-reset", X86CPU, hyperv_reset, false),
3351    DEFINE_PROP_BOOL("hv-vpindex", X86CPU, hyperv_vpindex, false),
3352    DEFINE_PROP_BOOL("hv-runtime", X86CPU, hyperv_runtime, false),
3353    DEFINE_PROP_BOOL("hv-synic", X86CPU, hyperv_synic, false),
3354    DEFINE_PROP_BOOL("hv-stimer", X86CPU, hyperv_stimer, false),
3355    DEFINE_PROP_BOOL("check", X86CPU, check_cpuid, true),
3356    DEFINE_PROP_BOOL("enforce", X86CPU, enforce_cpuid, false),
3357    DEFINE_PROP_BOOL("kvm", X86CPU, expose_kvm, true),
3358    DEFINE_PROP_UINT32("phys-bits", X86CPU, phys_bits, 0),
3359    DEFINE_PROP_BOOL("host-phys-bits", X86CPU, host_phys_bits, false),
3360    DEFINE_PROP_BOOL("fill-mtrr-mask", X86CPU, fill_mtrr_mask, true),
3361    DEFINE_PROP_UINT32("level", X86CPU, env.cpuid_level, 0),
3362    DEFINE_PROP_UINT32("xlevel", X86CPU, env.cpuid_xlevel, 0),
3363    DEFINE_PROP_UINT32("xlevel2", X86CPU, env.cpuid_xlevel2, 0),
3364    DEFINE_PROP_STRING("hv-vendor-id", X86CPU, hyperv_vendor_id),
3365    DEFINE_PROP_BOOL("cpuid-0xb", X86CPU, enable_cpuid_0xb, true),
3366    DEFINE_PROP_BOOL("lmce", X86CPU, enable_lmce, false),
3367    DEFINE_PROP_END_OF_LIST()
3368};
3369
3370static void x86_cpu_common_class_init(ObjectClass *oc, void *data)
3371{
3372    X86CPUClass *xcc = X86_CPU_CLASS(oc);
3373    CPUClass *cc = CPU_CLASS(oc);
3374    DeviceClass *dc = DEVICE_CLASS(oc);
3375
3376    xcc->parent_realize = dc->realize;
3377    dc->realize = x86_cpu_realizefn;
3378    dc->unrealize = x86_cpu_unrealizefn;
3379    dc->props = x86_cpu_properties;
3380
3381    xcc->parent_reset = cc->reset;
3382    cc->reset = x86_cpu_reset;
3383    cc->reset_dump_flags = CPU_DUMP_FPU | CPU_DUMP_CCOP;
3384
3385    cc->class_by_name = x86_cpu_class_by_name;
3386    cc->parse_features = x86_cpu_parse_featurestr;
3387    cc->has_work = x86_cpu_has_work;
3388    cc->do_interrupt = x86_cpu_do_interrupt;
3389    cc->cpu_exec_interrupt = x86_cpu_exec_interrupt;
3390    cc->dump_state = x86_cpu_dump_state;
3391    cc->set_pc = x86_cpu_set_pc;
3392    cc->synchronize_from_tb = x86_cpu_synchronize_from_tb;
3393    cc->gdb_read_register = x86_cpu_gdb_read_register;
3394    cc->gdb_write_register = x86_cpu_gdb_write_register;
3395    cc->get_arch_id = x86_cpu_get_arch_id;
3396    cc->get_paging_enabled = x86_cpu_get_paging_enabled;
3397#ifdef CONFIG_USER_ONLY
3398    cc->handle_mmu_fault = x86_cpu_handle_mmu_fault;
3399#else
3400    cc->get_memory_mapping = x86_cpu_get_memory_mapping;
3401    cc->get_phys_page_debug = x86_cpu_get_phys_page_debug;
3402    cc->write_elf64_note = x86_cpu_write_elf64_note;
3403    cc->write_elf64_qemunote = x86_cpu_write_elf64_qemunote;
3404    cc->write_elf32_note = x86_cpu_write_elf32_note;
3405    cc->write_elf32_qemunote = x86_cpu_write_elf32_qemunote;
3406    cc->vmsd = &vmstate_x86_cpu;
3407#endif
3408    cc->gdb_num_core_regs = CPU_NB_REGS * 2 + 25;
3409#ifndef CONFIG_USER_ONLY
3410    cc->debug_excp_handler = breakpoint_handler;
3411#endif
3412    cc->cpu_exec_enter = x86_cpu_exec_enter;
3413    cc->cpu_exec_exit = x86_cpu_exec_exit;
3414
3415    dc->cannot_instantiate_with_device_add_yet = false;
3416    /*
3417     * Reason: x86_cpu_initfn() calls cpu_exec_init(), which saves the
3418     * object in cpus -> dangling pointer after final object_unref().
3419     */
3420    dc->cannot_destroy_with_object_finalize_yet = true;
3421}
3422
3423static const TypeInfo x86_cpu_type_info = {
3424    .name = TYPE_X86_CPU,
3425    .parent = TYPE_CPU,
3426    .instance_size = sizeof(X86CPU),
3427    .instance_init = x86_cpu_initfn,
3428    .abstract = true,
3429    .class_size = sizeof(X86CPUClass),
3430    .class_init = x86_cpu_common_class_init,
3431};
3432
3433static void x86_cpu_register_types(void)
3434{
3435    int i;
3436
3437    type_register_static(&x86_cpu_type_info);
3438    for (i = 0; i < ARRAY_SIZE(builtin_x86_defs); i++) {
3439        x86_register_cpudef_type(&builtin_x86_defs[i]);
3440    }
3441#ifdef CONFIG_KVM
3442    type_register_static(&host_x86_cpu_type_info);
3443#endif
3444}
3445
3446type_init(x86_cpu_register_types)
3447