.. | .. |
---|
114 | 114 | XFEATURE_Hi16_ZMM, |
---|
115 | 115 | XFEATURE_PT_UNIMPLEMENTED_SO_FAR, |
---|
116 | 116 | XFEATURE_PKRU, |
---|
| 117 | + XFEATURE_PASID, |
---|
| 118 | + XFEATURE_RSRVD_COMP_11, |
---|
| 119 | + XFEATURE_RSRVD_COMP_12, |
---|
| 120 | + XFEATURE_RSRVD_COMP_13, |
---|
| 121 | + XFEATURE_RSRVD_COMP_14, |
---|
| 122 | + XFEATURE_LBR, |
---|
117 | 123 | |
---|
118 | 124 | XFEATURE_MAX, |
---|
119 | 125 | }; |
---|
.. | .. |
---|
128 | 134 | #define XFEATURE_MASK_Hi16_ZMM (1 << XFEATURE_Hi16_ZMM) |
---|
129 | 135 | #define XFEATURE_MASK_PT (1 << XFEATURE_PT_UNIMPLEMENTED_SO_FAR) |
---|
130 | 136 | #define XFEATURE_MASK_PKRU (1 << XFEATURE_PKRU) |
---|
| 137 | +#define XFEATURE_MASK_PASID (1 << XFEATURE_PASID) |
---|
| 138 | +#define XFEATURE_MASK_LBR (1 << XFEATURE_LBR) |
---|
131 | 139 | |
---|
132 | 140 | #define XFEATURE_MASK_FPSSE (XFEATURE_MASK_FP | XFEATURE_MASK_SSE) |
---|
133 | 141 | #define XFEATURE_MASK_AVX512 (XFEATURE_MASK_OPMASK \ |
---|
.. | .. |
---|
229 | 237 | u32 pad; |
---|
230 | 238 | } __packed; |
---|
231 | 239 | |
---|
| 240 | +/* |
---|
| 241 | + * State component 15: Architectural LBR configuration state. |
---|
| 242 | + * The size of Arch LBR state depends on the number of LBRs (lbr_depth). |
---|
| 243 | + */ |
---|
| 244 | + |
---|
| 245 | +struct lbr_entry { |
---|
| 246 | + u64 from; |
---|
| 247 | + u64 to; |
---|
| 248 | + u64 info; |
---|
| 249 | +}; |
---|
| 250 | + |
---|
| 251 | +struct arch_lbr_state { |
---|
| 252 | + u64 lbr_ctl; |
---|
| 253 | + u64 lbr_depth; |
---|
| 254 | + u64 ler_from; |
---|
| 255 | + u64 ler_to; |
---|
| 256 | + u64 ler_info; |
---|
| 257 | + struct lbr_entry entries[]; |
---|
| 258 | +} __packed; |
---|
| 259 | + |
---|
| 260 | +/* |
---|
| 261 | + * State component 10 is supervisor state used for context-switching the |
---|
| 262 | + * PASID state. |
---|
| 263 | + */ |
---|
| 264 | +struct ia32_pasid_state { |
---|
| 265 | + u64 pasid; |
---|
| 266 | +} __packed; |
---|
| 267 | + |
---|
232 | 268 | struct xstate_header { |
---|
233 | 269 | u64 xfeatures; |
---|
234 | 270 | u64 xcomp_bv; |
---|
.. | .. |
---|
294 | 330 | unsigned int last_cpu; |
---|
295 | 331 | |
---|
296 | 332 | /* |
---|
297 | | - * @initialized: |
---|
| 333 | + * @avx512_timestamp: |
---|
298 | 334 | * |
---|
299 | | - * This flag indicates whether this context is initialized: if the task |
---|
300 | | - * is not running then we can restore from this context, if the task |
---|
301 | | - * is running then we should save into this context. |
---|
| 335 | + * Records the timestamp of AVX512 use during last context switch. |
---|
302 | 336 | */ |
---|
303 | | - unsigned char initialized; |
---|
| 337 | + unsigned long avx512_timestamp; |
---|
304 | 338 | |
---|
305 | 339 | /* |
---|
306 | 340 | * @state: |
---|