File tree Expand file tree Collapse file tree 3 files changed +21
-6
lines changed Expand file tree Collapse file tree 3 files changed +21
-6
lines changed Original file line number Diff line number Diff line change 315
315
GENMASK(19, 18) | \
316
316
GENMASK(15, 0))
317
317
318
- /* Polarity masks for HCRX_EL2 */
319
- #define __HCRX_EL2_RES0 HCRX_EL2_RES0
320
- #define __HCRX_EL2_MASK (BIT(6))
321
- #define __HCRX_EL2_nMASK ~(__HCRX_EL2_RES0 | __HCRX_EL2_MASK)
318
+ /*
319
+ * Polarity masks for HCRX_EL2, limited to the bits that we know about
320
+ * at this point in time. It doesn't mean that we actually *handle*
321
+ * them, but that at least those that are not advertised to a guest
322
+ * will be RES0 for that guest.
323
+ */
324
+ #define __HCRX_EL2_MASK (BIT_ULL(6))
325
+ #define __HCRX_EL2_nMASK (GENMASK_ULL(24, 14) | \
326
+ GENMASK_ULL(11, 7) | \
327
+ GENMASK_ULL(5, 0))
328
+ #define __HCRX_EL2_RES0 ~(__HCRX_EL2_nMASK | __HCRX_EL2_MASK)
329
+ #define __HCRX_EL2_RES1 ~(__HCRX_EL2_nMASK | \
330
+ __HCRX_EL2_MASK | \
331
+ __HCRX_EL2_RES0)
322
332
323
333
/* Hyp Prefetch Fault Address Register (HPFAR/HDFAR) */
324
334
#define HPFAR_MASK (~UL(0xf))
Original file line number Diff line number Diff line change @@ -2157,6 +2157,7 @@ int __init populate_nv_trap_config(void)
2157
2157
BUILD_BUG_ON (__NR_CGT_GROUP_IDS__ > BIT (TC_CGT_BITS ));
2158
2158
BUILD_BUG_ON (__NR_FGT_GROUP_IDS__ > BIT (TC_FGT_BITS ));
2159
2159
BUILD_BUG_ON (__NR_FG_FILTER_IDS__ > BIT (TC_FGF_BITS ));
2160
+ BUILD_BUG_ON (__HCRX_EL2_MASK & __HCRX_EL2_nMASK );
2160
2161
2161
2162
for (int i = 0 ; i < ARRAY_SIZE (encoding_to_cgt ); i ++ ) {
2162
2163
const struct encoding_to_trap_config * cgt = & encoding_to_cgt [i ];
@@ -2182,6 +2183,10 @@ int __init populate_nv_trap_config(void)
2182
2183
}
2183
2184
}
2184
2185
2186
+ if (__HCRX_EL2_RES0 != HCRX_EL2_RES0 )
2187
+ kvm_info ("Sanitised HCR_EL2_RES0 = %016llx, expecting %016llx\n" ,
2188
+ __HCRX_EL2_RES0 , HCRX_EL2_RES0 );
2189
+
2185
2190
kvm_info ("nv: %ld coarse grained trap handlers\n" ,
2186
2191
ARRAY_SIZE (encoding_to_cgt ));
2187
2192
Original file line number Diff line number Diff line change @@ -1058,8 +1058,8 @@ int kvm_init_nv_sysregs(struct kvm_vcpu *vcpu)
1058
1058
set_sysreg_masks (kvm , HCR_EL2 , res0 , res1 );
1059
1059
1060
1060
/* HCRX_EL2 */
1061
- res0 = HCRX_EL2_RES0 ;
1062
- res1 = HCRX_EL2_RES1 ;
1061
+ res0 = __HCRX_EL2_RES0 ;
1062
+ res1 = __HCRX_EL2_RES1 ;
1063
1063
if (!kvm_has_feat (kvm , ID_AA64ISAR3_EL1 , PACM , TRIVIAL_IMP ))
1064
1064
res0 |= HCRX_EL2_PACMEn ;
1065
1065
if (!kvm_has_feat (kvm , ID_AA64PFR2_EL1 , FPMR , IMP ))
You can’t perform that action at this time.
0 commit comments