@@ -23,39 +23,34 @@ static int set_gic_ctlr(struct kvm_vcpu *vcpu, const struct sys_reg_desc *r,
23
23
* Disallow restoring VM state if not supported by this
24
24
* hardware.
25
25
*/
26
- host_pri_bits = ((val & ICC_CTLR_EL1_PRI_BITS_MASK ) >>
27
- ICC_CTLR_EL1_PRI_BITS_SHIFT ) + 1 ;
26
+ host_pri_bits = FIELD_GET (ICC_CTLR_EL1_PRI_BITS_MASK , val ) + 1 ;
28
27
if (host_pri_bits > vgic_v3_cpu -> num_pri_bits )
29
28
return - EINVAL ;
30
29
31
30
vgic_v3_cpu -> num_pri_bits = host_pri_bits ;
32
31
33
- host_id_bits = (val & ICC_CTLR_EL1_ID_BITS_MASK ) >>
34
- ICC_CTLR_EL1_ID_BITS_SHIFT ;
32
+ host_id_bits = FIELD_GET (ICC_CTLR_EL1_ID_BITS_MASK , val );
35
33
if (host_id_bits > vgic_v3_cpu -> num_id_bits )
36
34
return - EINVAL ;
37
35
38
36
vgic_v3_cpu -> num_id_bits = host_id_bits ;
39
37
40
- host_seis = ((kvm_vgic_global_state .ich_vtr_el2 &
41
- ICH_VTR_SEIS_MASK ) >> ICH_VTR_SEIS_SHIFT );
42
- seis = (val & ICC_CTLR_EL1_SEIS_MASK ) >>
43
- ICC_CTLR_EL1_SEIS_SHIFT ;
38
+ host_seis = FIELD_GET (ICH_VTR_SEIS_MASK , kvm_vgic_global_state .ich_vtr_el2 );
39
+ seis = FIELD_GET (ICC_CTLR_EL1_SEIS_MASK , val );
44
40
if (host_seis != seis )
45
41
return - EINVAL ;
46
42
47
- host_a3v = ((kvm_vgic_global_state .ich_vtr_el2 &
48
- ICH_VTR_A3V_MASK ) >> ICH_VTR_A3V_SHIFT );
49
- a3v = (val & ICC_CTLR_EL1_A3V_MASK ) >> ICC_CTLR_EL1_A3V_SHIFT ;
43
+ host_a3v = FIELD_GET (ICH_VTR_A3V_MASK , kvm_vgic_global_state .ich_vtr_el2 );
44
+ a3v = FIELD_GET (ICC_CTLR_EL1_A3V_MASK , val );
50
45
if (host_a3v != a3v )
51
46
return - EINVAL ;
52
47
53
48
/*
54
49
* Here set VMCR.CTLR in ICC_CTLR_EL1 layout.
55
50
* The vgic_set_vmcr() will convert to ICH_VMCR layout.
56
51
*/
57
- vmcr .cbpr = ( val & ICC_CTLR_EL1_CBPR_MASK ) >> ICC_CTLR_EL1_CBPR_SHIFT ;
58
- vmcr .eoim = ( val & ICC_CTLR_EL1_EOImode_MASK ) >> ICC_CTLR_EL1_EOImode_SHIFT ;
52
+ vmcr .cbpr = FIELD_GET ( ICC_CTLR_EL1_CBPR_MASK , val ) ;
53
+ vmcr .eoim = FIELD_GET ( ICC_CTLR_EL1_EOImode_MASK , val ) ;
59
54
vgic_set_vmcr (vcpu , & vmcr );
60
55
61
56
return 0 ;
@@ -70,20 +65,19 @@ static int get_gic_ctlr(struct kvm_vcpu *vcpu, const struct sys_reg_desc *r,
70
65
71
66
vgic_get_vmcr (vcpu , & vmcr );
72
67
val = 0 ;
73
- val |= (vgic_v3_cpu -> num_pri_bits - 1 ) << ICC_CTLR_EL1_PRI_BITS_SHIFT ;
74
- val |= vgic_v3_cpu -> num_id_bits << ICC_CTLR_EL1_ID_BITS_SHIFT ;
75
- val |= ((kvm_vgic_global_state .ich_vtr_el2 &
76
- ICH_VTR_SEIS_MASK ) >> ICH_VTR_SEIS_SHIFT ) <<
77
- ICC_CTLR_EL1_SEIS_SHIFT ;
78
- val |= ((kvm_vgic_global_state .ich_vtr_el2 &
79
- ICH_VTR_A3V_MASK ) >> ICH_VTR_A3V_SHIFT ) <<
80
- ICC_CTLR_EL1_A3V_SHIFT ;
68
+ val |= FIELD_PREP (ICC_CTLR_EL1_PRI_BITS_MASK , vgic_v3_cpu -> num_pri_bits - 1 );
69
+ val |= FIELD_PREP (ICC_CTLR_EL1_ID_BITS_MASK , vgic_v3_cpu -> num_id_bits );
70
+ val |= FIELD_PREP (ICC_CTLR_EL1_SEIS_MASK ,
71
+ FIELD_GET (ICH_VTR_SEIS_MASK ,
72
+ kvm_vgic_global_state .ich_vtr_el2 ));
73
+ val |= FIELD_PREP (ICC_CTLR_EL1_A3V_MASK ,
74
+ FIELD_GET (ICH_VTR_A3V_MASK , kvm_vgic_global_state .ich_vtr_el2 ));
81
75
/*
82
76
* The VMCR.CTLR value is in ICC_CTLR_EL1 layout.
83
77
* Extract it directly using ICC_CTLR_EL1 reg definitions.
84
78
*/
85
- val |= ( vmcr .cbpr << ICC_CTLR_EL1_CBPR_SHIFT ) & ICC_CTLR_EL1_CBPR_MASK ;
86
- val |= ( vmcr .eoim << ICC_CTLR_EL1_EOImode_SHIFT ) & ICC_CTLR_EL1_EOImode_MASK ;
79
+ val |= FIELD_PREP ( ICC_CTLR_EL1_CBPR_MASK , vmcr .cbpr ) ;
80
+ val |= FIELD_PREP ( ICC_CTLR_EL1_EOImode_MASK , vmcr .eoim ) ;
87
81
88
82
* valp = val ;
89
83
@@ -96,7 +90,7 @@ static int set_gic_pmr(struct kvm_vcpu *vcpu, const struct sys_reg_desc *r,
96
90
struct vgic_vmcr vmcr ;
97
91
98
92
vgic_get_vmcr (vcpu , & vmcr );
99
- vmcr .pmr = ( val & ICC_PMR_EL1_MASK ) >> ICC_PMR_EL1_SHIFT ;
93
+ vmcr .pmr = FIELD_GET ( ICC_PMR_EL1_MASK , val ) ;
100
94
vgic_set_vmcr (vcpu , & vmcr );
101
95
102
96
return 0 ;
@@ -108,7 +102,7 @@ static int get_gic_pmr(struct kvm_vcpu *vcpu, const struct sys_reg_desc *r,
108
102
struct vgic_vmcr vmcr ;
109
103
110
104
vgic_get_vmcr (vcpu , & vmcr );
111
- * val = ( vmcr .pmr << ICC_PMR_EL1_SHIFT ) & ICC_PMR_EL1_MASK ;
105
+ * val = FIELD_PREP ( ICC_PMR_EL1_MASK , vmcr .pmr ) ;
112
106
113
107
return 0 ;
114
108
}
@@ -119,7 +113,7 @@ static int set_gic_bpr0(struct kvm_vcpu *vcpu, const struct sys_reg_desc *r,
119
113
struct vgic_vmcr vmcr ;
120
114
121
115
vgic_get_vmcr (vcpu , & vmcr );
122
- vmcr .bpr = ( val & ICC_BPR0_EL1_MASK ) >> ICC_BPR0_EL1_SHIFT ;
116
+ vmcr .bpr = FIELD_GET ( ICC_BPR0_EL1_MASK , val ) ;
123
117
vgic_set_vmcr (vcpu , & vmcr );
124
118
125
119
return 0 ;
@@ -131,7 +125,7 @@ static int get_gic_bpr0(struct kvm_vcpu *vcpu, const struct sys_reg_desc *r,
131
125
struct vgic_vmcr vmcr ;
132
126
133
127
vgic_get_vmcr (vcpu , & vmcr );
134
- * val = ( vmcr .bpr << ICC_BPR0_EL1_SHIFT ) & ICC_BPR0_EL1_MASK ;
128
+ * val = FIELD_PREP ( ICC_BPR0_EL1_MASK , vmcr .bpr ) ;
135
129
136
130
return 0 ;
137
131
}
@@ -143,7 +137,7 @@ static int set_gic_bpr1(struct kvm_vcpu *vcpu, const struct sys_reg_desc *r,
143
137
144
138
vgic_get_vmcr (vcpu , & vmcr );
145
139
if (!vmcr .cbpr ) {
146
- vmcr .abpr = ( val & ICC_BPR1_EL1_MASK ) >> ICC_BPR1_EL1_SHIFT ;
140
+ vmcr .abpr = FIELD_GET ( ICC_BPR1_EL1_MASK , val ) ;
147
141
vgic_set_vmcr (vcpu , & vmcr );
148
142
}
149
143
@@ -157,7 +151,7 @@ static int get_gic_bpr1(struct kvm_vcpu *vcpu, const struct sys_reg_desc *r,
157
151
158
152
vgic_get_vmcr (vcpu , & vmcr );
159
153
if (!vmcr .cbpr )
160
- * val = ( vmcr .abpr << ICC_BPR1_EL1_SHIFT ) & ICC_BPR1_EL1_MASK ;
154
+ * val = FIELD_PREP ( ICC_BPR1_EL1_MASK , vmcr .abpr ) ;
161
155
else
162
156
* val = min ((vmcr .bpr + 1 ), 7U );
163
157
@@ -171,7 +165,7 @@ static int set_gic_grpen0(struct kvm_vcpu *vcpu, const struct sys_reg_desc *r,
171
165
struct vgic_vmcr vmcr ;
172
166
173
167
vgic_get_vmcr (vcpu , & vmcr );
174
- vmcr .grpen0 = ( val & ICC_IGRPEN0_EL1_MASK ) >> ICC_IGRPEN0_EL1_SHIFT ;
168
+ vmcr .grpen0 = FIELD_GET ( ICC_IGRPEN0_EL1_MASK , val ) ;
175
169
vgic_set_vmcr (vcpu , & vmcr );
176
170
177
171
return 0 ;
@@ -183,7 +177,7 @@ static int get_gic_grpen0(struct kvm_vcpu *vcpu, const struct sys_reg_desc *r,
183
177
struct vgic_vmcr vmcr ;
184
178
185
179
vgic_get_vmcr (vcpu , & vmcr );
186
- * val = ( vmcr .grpen0 << ICC_IGRPEN0_EL1_SHIFT ) & ICC_IGRPEN0_EL1_MASK ;
180
+ * val = FIELD_PREP ( ICC_IGRPEN0_EL1_MASK , vmcr .grpen0 ) ;
187
181
188
182
return 0 ;
189
183
}
@@ -194,7 +188,7 @@ static int set_gic_grpen1(struct kvm_vcpu *vcpu, const struct sys_reg_desc *r,
194
188
struct vgic_vmcr vmcr ;
195
189
196
190
vgic_get_vmcr (vcpu , & vmcr );
197
- vmcr .grpen1 = ( val & ICC_IGRPEN1_EL1_MASK ) >> ICC_IGRPEN1_EL1_SHIFT ;
191
+ vmcr .grpen1 = FIELD_GET ( ICC_IGRPEN1_EL1_MASK , val ) ;
198
192
vgic_set_vmcr (vcpu , & vmcr );
199
193
200
194
return 0 ;
@@ -206,7 +200,7 @@ static int get_gic_grpen1(struct kvm_vcpu *vcpu, const struct sys_reg_desc *r,
206
200
struct vgic_vmcr vmcr ;
207
201
208
202
vgic_get_vmcr (vcpu , & vmcr );
209
- * val = ( vmcr .grpen1 << ICC_IGRPEN1_EL1_SHIFT ) & ICC_IGRPEN1_EL1_MASK ;
203
+ * val = FIELD_GET ( ICC_IGRPEN1_EL1_MASK , vmcr .grpen1 ) ;
210
204
211
205
return 0 ;
212
206
}
0 commit comments