> If I understand correctly that would always look for a valid "cpu" > even when none is needed. Not quite what I proposed but should > work. Just some wasted cycles in a non critical path. Reinette, Sorry for misunderstanding. You are right. Assignment to msr_param.dom can also be deferred to the same point. Like this: list_for_each_entry(d, &r->domains, list) { hw_dom = resctrl_to_arch_dom(d); msr_param.res = NULL; for (t = 0; t < CDP_NUM_TYPES; t++) { cfg = &hw_dom->d_resctrl.staged_config[t]; if (!cfg->have_new_ctrl) continue; idx = get_config_index(closid, t); if (cfg->new_ctrl == hw_dom->ctrl_val[idx]) continue; hw_dom->ctrl_val[idx] = cfg->new_ctrl; if (!msr_param.res) { msr_param.low = idx; msr_param.high = msr_param.low + 1; msr_param.res = r; msr_param.dom = d; cpu = cpumask_any(&d->cpu_mask); } else { msr_param.low = min(msr_param.low, idx); msr_param.high = max(msr_param.high, idx + 1); } } if (msr_param.res) smp_call_function_single(cpu, rdt_ctrl_update, &msr_param, 1); } -Tony