@@ -65,12 +65,41 @@ static inline void __activate_traps_fpsimd32(struct kvm_vcpu *vcpu)
6565 }
6666}
6767
68+ #define reg_to_fgt_masks (reg ) \
69+ ({ \
70+ struct fgt_masks *m; \
71+ switch(reg) { \
72+ case HFGRTR_EL2: \
73+ m = &hfgrtr_masks; \
74+ break; \
75+ case HFGWTR_EL2: \
76+ m = &hfgwtr_masks; \
77+ break; \
78+ case HFGITR_EL2: \
79+ m = &hfgitr_masks; \
80+ break; \
81+ case HDFGRTR_EL2: \
82+ m = &hdfgrtr_masks; \
83+ break; \
84+ case HDFGWTR_EL2: \
85+ m = &hdfgwtr_masks; \
86+ break; \
87+ case HAFGRTR_EL2: \
88+ m = &hafgrtr_masks; \
89+ break; \
90+ default: \
91+ BUILD_BUG_ON(1); \
92+ } \
93+ \
94+ m; \
95+ })
96+
6897#define compute_clr_set (vcpu , reg , clr , set ) \
6998 do { \
70- u64 hfg; \
71- hfg = __vcpu_sys_reg(vcpu, reg) & ~__ ## reg ## _RES0; \
72- set |= hfg & __ ## reg ## _MASK; \
73- clr |= ~hfg & __ ## reg ## _nMASK; \
99+ u64 hfg = __vcpu_sys_reg(vcpu, reg); \
100+ struct fgt_masks *m = reg_to_fgt_masks( reg); \
101+ set |= hfg & m->mask; \
102+ clr |= ~hfg & m->nmask; \
74103 } while(0)
75104
76105#define reg_to_fgt_group_id (reg ) \
@@ -101,12 +130,14 @@ static inline void __activate_traps_fpsimd32(struct kvm_vcpu *vcpu)
101130#define compute_undef_clr_set (vcpu , kvm , reg , clr , set ) \
102131 do { \
103132 u64 hfg = kvm->arch.fgu[reg_to_fgt_group_id(reg)]; \
104- set |= hfg & __ ## reg ## _MASK; \
105- clr |= hfg & __ ## reg ## _nMASK; \
133+ struct fgt_masks *m = reg_to_fgt_masks(reg); \
134+ set |= hfg & m->mask; \
135+ clr |= hfg & m->nmask; \
106136 } while(0)
107137
108138#define update_fgt_traps_cs (hctxt , vcpu , kvm , reg , clr , set ) \
109139 do { \
140+ struct fgt_masks *m = reg_to_fgt_masks(reg); \
110141 u64 c = clr, s = set; \
111142 u64 val; \
112143 \
@@ -116,7 +147,7 @@ static inline void __activate_traps_fpsimd32(struct kvm_vcpu *vcpu)
116147 \
117148 compute_undef_clr_set(vcpu, kvm, reg, c, s); \
118149 \
119- val = __ ## reg ## _nMASK; \
150+ val = m->nmask; \
120151 val |= s; \
121152 val &= ~c; \
122153 write_sysreg_s(val, SYS_ ## reg); \
0 commit comments