Print this page
10208 Add x86 features for L1TF

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/intel/sys/x86_archext.h
          +++ new/usr/src/uts/intel/sys/x86_archext.h
↓ open down ↓ 19 lines elided ↑ open up ↑
  20   20   */
  21   21  /*
  22   22   * Copyright (c) 1995, 2010, Oracle and/or its affiliates. All rights reserved.
  23   23   * Copyright (c) 2011 by Delphix. All rights reserved.
  24   24   */
  25   25  /*
  26   26   * Copyright (c) 2010, Intel Corporation.
  27   27   * All rights reserved.
  28   28   */
  29   29  /*
  30      - * Copyright 2018 Joyent, Inc.
       30 + * Copyright (c) 2019, Joyent, Inc.
  31   31   * Copyright 2012 Jens Elkner <jel+illumos@cs.uni-magdeburg.de>
  32   32   * Copyright 2012 Hans Rosenfeld <rosenfeld@grumpf.hope-2000.org>
  33   33   * Copyright 2014 Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
  34   34   * Copyright 2018 Nexenta Systems, Inc.
  35   35   */
  36   36  
  37   37  #ifndef _SYS_X86_ARCHEXT_H
  38   38  #define _SYS_X86_ARCHEXT_H
  39   39  
  40   40  #if !defined(_ASM)
↓ open down ↓ 206 lines elided ↑ open up ↑
 247  247  #define CPUID_INTC_ECX_7_0_OSPKE        0x00000010      /* OSPKE */
 248  248  #define CPUID_INTC_ECX_7_0_AVX512VPOPCDQ 0x00004000     /* AVX512 VPOPCNTDQ */
 249  249  
 250  250  #define CPUID_INTC_ECX_7_0_ALL_AVX512 \
 251  251          (CPUID_INTC_ECX_7_0_AVX512VBMI | CPUID_INTC_ECX_7_0_AVX512VPOPCDQ)
 252  252  
 253  253  #define CPUID_INTC_EDX_7_0_AVX5124NNIW  0x00000004      /* AVX512 4NNIW */
 254  254  #define CPUID_INTC_EDX_7_0_AVX5124FMAPS 0x00000008      /* AVX512 4FMAPS */
 255  255  #define CPUID_INTC_EDX_7_0_SPEC_CTRL    0x04000000      /* Spec, IBPB, IBRS */
 256  256  #define CPUID_INTC_EDX_7_0_STIBP        0x08000000      /* STIBP */
      257 +#define CPUID_INTC_EDX_7_0_FLUSH_CMD    0x10000000      /* IA32_FLUSH_CMD */
 257  258  #define CPUID_INTC_EDX_7_0_ARCH_CAPS    0x20000000      /* IA32_ARCH_CAPS */
 258  259  #define CPUID_INTC_EDX_7_0_SSBD         0x80000000      /* SSBD */
 259  260  
 260  261  #define CPUID_INTC_EDX_7_0_ALL_AVX512 \
 261  262          (CPUID_INTC_EDX_7_0_AVX5124NNIW | CPUID_INTC_EDX_7_0_AVX5124FMAPS)
 262  263  
 263  264  /*
 264  265   * Intel also uses cpuid leaf 0xd to report additional instructions and features
 265  266   * when the sub-leaf in %ecx == 1. We label these using the same convention as
 266  267   * with leaf 7.
↓ open down ↓ 76 lines elided ↑ open up ↑
 343  344  #define MSR_PRP4_LBSTK_TO_10    0x6ca
 344  345  #define MSR_PRP4_LBSTK_TO_11    0x6cb
 345  346  #define MSR_PRP4_LBSTK_TO_12    0x6cc
 346  347  #define MSR_PRP4_LBSTK_TO_13    0x6cd
 347  348  #define MSR_PRP4_LBSTK_TO_14    0x6ce
 348  349  #define MSR_PRP4_LBSTK_TO_15    0x6cf
 349  350  
 350  351  /*
 351  352   * Intel IA32_ARCH_CAPABILITIES MSR.
 352  353   */
 353      -#define MSR_IA32_ARCH_CAPABILITIES      0x10a
 354      -#define IA32_ARCH_CAP_RDCL_NO           0x0001
 355      -#define IA32_ARCH_CAP_IBRS_ALL          0x0002
 356      -#define IA32_ARCH_CAP_RSBA              0x0004
 357      -#define IA32_ARCH_CAP_SSB_NO            0x0010
      354 +#define MSR_IA32_ARCH_CAPABILITIES              0x10a
      355 +#define IA32_ARCH_CAP_RDCL_NO                   0x0001
      356 +#define IA32_ARCH_CAP_IBRS_ALL                  0x0002
      357 +#define IA32_ARCH_CAP_RSBA                      0x0004
      358 +#define IA32_ARCH_CAP_SKIP_L1DFL_VMENTRY        0x0008
      359 +#define IA32_ARCH_CAP_SSB_NO                    0x0010
 358  360  
 359  361  /*
 360  362   * Intel Speculation related MSRs
 361  363   */
 362  364  #define MSR_IA32_SPEC_CTRL      0x48
 363  365  #define IA32_SPEC_CTRL_IBRS     0x01
 364  366  #define IA32_SPEC_CTRL_STIBP    0x02
 365  367  #define IA32_SPEC_CTRL_SSBD     0x04
 366  368  
 367  369  #define MSR_IA32_PRED_CMD       0x49
 368  370  #define IA32_PRED_CMD_IBPB      0x01
 369  371  
      372 +#define MSR_IA32_FLUSH_CMD      0x10b
      373 +#define IA32_FLUSH_CMD_L1D      0x01
      374 +
 370  375  #define MCI_CTL_VALUE           0xffffffff
 371  376  
 372  377  #define MTRR_TYPE_UC            0
 373  378  #define MTRR_TYPE_WC            1
 374  379  #define MTRR_TYPE_WT            4
 375  380  #define MTRR_TYPE_WP            5
 376  381  #define MTRR_TYPE_WB            6
 377  382  #define MTRR_TYPE_UC_           7
 378  383  
 379  384  /*
↓ open down ↓ 92 lines elided ↑ open up ↑
 472  477  #define X86FSET_IBRS            71
 473  478  #define X86FSET_IBPB            72
 474  479  #define X86FSET_STIBP           73
 475  480  #define X86FSET_SSBD            74
 476  481  #define X86FSET_SSBD_VIRT       75
 477  482  #define X86FSET_RDCL_NO         76
 478  483  #define X86FSET_IBRS_ALL        77
 479  484  #define X86FSET_RSBA            78
 480  485  #define X86FSET_SSB_NO          79
 481  486  #define X86FSET_STIBP_ALL       80
      487 +#define X86FSET_FLUSH_CMD       81
      488 +#define X86FSET_L1D_VM_NO       82
 482  489  
 483  490  /*
 484  491   * Intel Deep C-State invariant TSC in leaf 0x80000007.
 485  492   */
 486  493  #define CPUID_TSC_CSTATE_INVARIANCE     (0x100)
 487  494  
 488  495  /*
 489  496   * Intel Deep C-state always-running local APIC timer
 490  497   */
 491  498  #define CPUID_CSTATE_ARAT       (0x4)
↓ open down ↓ 249 lines elided ↑ open up ↑
 741  748   * ABI to hold meaningful values. Adding additional bits here can have serious
 742  749   * performance implications and cause performance degradations when using the
 743  750   * FPU vector (xmm) registers.
 744  751   */
 745  752  #define XFEATURE_FP_INITIAL     (XFEATURE_LEGACY_FP | XFEATURE_SSE)
 746  753  
 747  754  #if !defined(_ASM)
 748  755  
 749  756  #if defined(_KERNEL) || defined(_KMEMUSER)
 750  757  
 751      -#define NUM_X86_FEATURES        81
      758 +#define NUM_X86_FEATURES        83
 752  759  extern uchar_t x86_featureset[];
 753  760  
 754  761  extern void free_x86_featureset(void *featureset);
 755  762  extern boolean_t is_x86_feature(void *featureset, uint_t feature);
 756  763  extern void add_x86_feature(void *featureset, uint_t feature);
 757  764  extern void remove_x86_feature(void *featureset, uint_t feature);
 758  765  extern boolean_t compare_x86_featureset(void *setA, void *setB);
 759  766  extern void print_x86_featureset(void *featureset);
 760  767  
 761  768  
↓ open down ↓ 222 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX