@@ -22,13 +22,12 @@ struct reg_bits_to_feat_map {
2222
2323#define NEVER_FGU BIT(0) /* Can trap, but never UNDEF */
2424#define CALL_FUNC BIT(1) /* Needs to evaluate tons of crap */
25- #define FIXED_VALUE BIT(2) /* RAZ/WI or RAO/WI in KVM */
25+ #define FORCE_RESx BIT(2) /* Unconditional RESx */
2626#define MASKS_POINTER BIT(3) /* Pointer to fgt_masks struct instead of bits */
2727#define AS_RES1 BIT(4) /* RES1 when not supported */
2828#define REQUIRES_E2H1 BIT(5) /* Add HCR_EL2.E2H RES1 as a pre-condition */
2929#define RES1_WHEN_E2H0 BIT(6) /* RES1 when E2H=0 and not supported */
3030#define RES1_WHEN_E2H1 BIT(7) /* RES1 when E2H=1 and not supported */
31- #define FORCE_RESx BIT(8) /* Unconditional RESx */
3231
3332 unsigned long flags ;
3433
@@ -41,7 +40,6 @@ struct reg_bits_to_feat_map {
4140 s8 lo_lim ;
4241 };
4342 bool (* match )(struct kvm * );
44- bool (* fval )(struct kvm * , struct resx * );
4543 };
4644};
4745
@@ -74,13 +72,6 @@ struct reg_feat_map_desc {
7472 .lo_lim = id ##_## fld ##_## lim \
7573 }
7674
77- #define __NEEDS_FEAT_2 (m , f , w , fun , dummy ) \
78- { \
79- .w = (m), \
80- .flags = (f) | CALL_FUNC, \
81- .fval = (fun), \
82- }
83-
8475#define __NEEDS_FEAT_1 (m , f , w , fun ) \
8576 { \
8677 .w = (m), \
@@ -100,9 +91,6 @@ struct reg_feat_map_desc {
10091#define NEEDS_FEAT_FLAG (m , f , ...) \
10192 __NEEDS_FEAT_FLAG(m, f, bits, __VA_ARGS__)
10293
103- #define NEEDS_FEAT_FIXED (m , ...) \
104- __NEEDS_FEAT_FLAG(m, FIXED_VALUE, bits, __VA_ARGS__, 0)
105-
10694#define NEEDS_FEAT_MASKS (p , ...) \
10795 __NEEDS_FEAT_FLAG(p, MASKS_POINTER, masks, __VA_ARGS__)
10896
@@ -1303,19 +1291,12 @@ static struct resx compute_resx_bits(struct kvm *kvm,
13031291 if (map [i ].flags & exclude )
13041292 continue ;
13051293
1306- switch (map [i ].flags & (FORCE_RESx | CALL_FUNC | FIXED_VALUE )) {
1307- case CALL_FUNC | FIXED_VALUE :
1308- map [i ].fval (kvm , & resx );
1309- continue ;
1310- case CALL_FUNC :
1311- match = map [i ].match (kvm );
1312- break ;
1313- case FORCE_RESx :
1294+ if (map [i ].flags & FORCE_RESx )
13141295 match = false;
1315- break ;
1316- default :
1296+ else if (map [i ].flags & CALL_FUNC )
1297+ match = map [i ].match (kvm );
1298+ else
13171299 match = idreg_feat_match (kvm , & map [i ]);
1318- }
13191300
13201301 if (map [i ].flags & REQUIRES_E2H1 )
13211302 match &= !e2h0 ;
0 commit comments