@@ -53,7 +53,8 @@ static bool bw_validate(char *buf, unsigned long *data, struct rdt_resource *r)
53
53
return false;
54
54
}
55
55
56
- if (bw < r -> membw .min_bw || bw > r -> default_ctrl ) {
56
+ if ((bw < r -> membw .min_bw || bw > r -> default_ctrl ) &&
57
+ !is_mba_sc (r )) {
57
58
rdt_last_cmd_printf ("MB value %ld out of range [%d,%d]\n" , bw ,
58
59
r -> membw .min_bw , r -> default_ctrl );
59
60
return false;
@@ -179,6 +180,8 @@ static int update_domains(struct rdt_resource *r, int closid)
179
180
struct msr_param msr_param ;
180
181
cpumask_var_t cpu_mask ;
181
182
struct rdt_domain * d ;
183
+ bool mba_sc ;
184
+ u32 * dc ;
182
185
int cpu ;
183
186
184
187
if (!zalloc_cpumask_var (& cpu_mask , GFP_KERNEL ))
@@ -188,13 +191,20 @@ static int update_domains(struct rdt_resource *r, int closid)
188
191
msr_param .high = msr_param .low + 1 ;
189
192
msr_param .res = r ;
190
193
194
+ mba_sc = is_mba_sc (r );
191
195
list_for_each_entry (d , & r -> domains , list ) {
192
- if (d -> have_new_ctrl && d -> new_ctrl != d -> ctrl_val [closid ]) {
196
+ dc = !mba_sc ? d -> ctrl_val : d -> mbps_val ;
197
+ if (d -> have_new_ctrl && d -> new_ctrl != dc [closid ]) {
193
198
cpumask_set_cpu (cpumask_any (& d -> cpu_mask ), cpu_mask );
194
- d -> ctrl_val [closid ] = d -> new_ctrl ;
199
+ dc [closid ] = d -> new_ctrl ;
195
200
}
196
201
}
197
- if (cpumask_empty (cpu_mask ))
202
+
203
+ /*
204
+ * Avoid writing the control msr with control values when
205
+ * MBA software controller is enabled
206
+ */
207
+ if (cpumask_empty (cpu_mask ) || mba_sc )
198
208
goto done ;
199
209
cpu = get_cpu ();
200
210
/* Update CBM on this cpu if it's in cpu_mask. */
@@ -282,13 +292,17 @@ static void show_doms(struct seq_file *s, struct rdt_resource *r, int closid)
282
292
{
283
293
struct rdt_domain * dom ;
284
294
bool sep = false;
295
+ u32 ctrl_val ;
285
296
286
297
seq_printf (s , "%*s:" , max_name_width , r -> name );
287
298
list_for_each_entry (dom , & r -> domains , list ) {
288
299
if (sep )
289
300
seq_puts (s , ";" );
301
+
302
+ ctrl_val = (!is_mba_sc (r ) ? dom -> ctrl_val [closid ] :
303
+ dom -> mbps_val [closid ]);
290
304
seq_printf (s , r -> format_str , dom -> id , max_data_width ,
291
- dom -> ctrl_val [ closid ] );
305
+ ctrl_val );
292
306
sep = true;
293
307
}
294
308
seq_puts (s , "\n" );
0 commit comments