Print this page
15254 %ymm registers not restored after signal handler
15367 x86 getfpregs() summons corrupting %xmm ghosts
15333 want x86 /proc xregs support (libc_db, libproc, mdb, etc.)
15336 want libc functions for extended ucontext_t
15334 want ps_lwphandle-specific reg routines
15328 FPU_CW_INIT mistreats reserved bit
15335 i86pc fpu_subr.c isn't really platform-specific
15332 setcontext(2) isn't actually noreturn
15331 need <sys/stdalign.h>
Change-Id: I7060aa86042dfb989f77fc3323c065ea2eafa9ad
Conflicts:
    usr/src/uts/common/fs/proc/prcontrol.c
    usr/src/uts/intel/os/archdep.c
    usr/src/uts/intel/sys/ucontext.h
    usr/src/uts/intel/syscall/getcontext.c

@@ -1435,25 +1435,39 @@
 #define INTC_MODEL_DENVERTON            0x5f
 #define INTC_MODEL_GEMINI_LAKE          0x7a
 
 /*
  * xgetbv/xsetbv support
- * See section 13.3 in vol. 1 of the Intel devlopers manual.
+ * See section 13.3 in vol. 1 of the Intel Developer's manual.
  */
 
 #define XFEATURE_ENABLED_MASK   0x0
 /*
  * XFEATURE_ENABLED_MASK values (eax)
  * See setup_xfem().
  */
-#define XFEATURE_LEGACY_FP      0x1
-#define XFEATURE_SSE            0x2
-#define XFEATURE_AVX            0x4
-#define XFEATURE_MPX            0x18    /* 2 bits, both 0 or 1 */
-#define XFEATURE_AVX512         0xe0    /* 3 bits, all 0 or 1 */
+#define XFEATURE_LEGACY_FP      (1 << 0)
+#define XFEATURE_SSE            (1 << 1)
+#define XFEATURE_AVX            (1 << 2)
+/*
+ * MPX is meant to be all or nothing, therefore for most of the kernel use the
+ * following definition.
+ */
+#define XFEATURE_MPX_BNDREGS    (1 << 3)
+#define XFEATURE_MPX_BNDCSR     (1 << 4)
+#define XFEATURE_MPX            (XFEATURE_MPX_BNDREGS | XFEATURE_MPX_BNDCSR)
+/*
+ * AVX512 is meant to be all or nothing, therefore for most of the kernel use
+ * the following definition.
+ */
+#define XFEATURE_AVX512_OPMASK  (1 << 5)
+#define XFEATURE_AVX512_ZMM     (1 << 6)
+#define XFEATURE_AVX512_HI_ZMM  (1 << 7)
+#define XFEATURE_AVX512         (XFEATURE_AVX512_OPMASK | \
+        XFEATURE_AVX512_ZMM | XFEATURE_AVX512_HI_ZMM)
         /* bit 8 unused */
-#define XFEATURE_PKRU           0x200
+#define XFEATURE_PKRU           (1 << 9)
 #define XFEATURE_FP_ALL \
         (XFEATURE_LEGACY_FP | XFEATURE_SSE | XFEATURE_AVX | XFEATURE_MPX | \
         XFEATURE_AVX512 | XFEATURE_PKRU)
 
 /*

@@ -1574,12 +1588,13 @@
 extern uint32_t cpuid_get_apicid(struct cpu *);
 extern uint_t cpuid_get_procnodeid(struct cpu *cpu);
 extern uint_t cpuid_get_procnodes_per_pkg(struct cpu *cpu);
 extern uint_t cpuid_get_compunitid(struct cpu *cpu);
 extern uint_t cpuid_get_cores_per_compunit(struct cpu *cpu);
-extern size_t cpuid_get_xsave_size();
-extern boolean_t cpuid_need_fp_excp_handling();
+extern size_t cpuid_get_xsave_size(void);
+extern void cpuid_get_xsave_info(uint64_t, size_t *, size_t *);
+extern boolean_t cpuid_need_fp_excp_handling(void);
 extern int cpuid_is_cmt(struct cpu *);
 extern int cpuid_syscall32_insn(struct cpu *);
 extern int getl2cacheinfo(struct cpu *, int *, int *, int *);
 
 extern x86_chiprev_t cpuid_getchiprev(struct cpu *);