On Sat, 22 Oct 2016, Fenghua Yu wrote:
> @@ -323,8 +325,11 @@ static int intel_rdt_online_cpu(unsigned int cpu)
>       struct rdt_resource *r;
>  
>       mutex_lock(&rdtgroup_mutex);
> +     per_cpu(cpu_closid, cpu) = 0;
>       for_each_capable_rdt_resource(r)
>               domain_add_cpu(cpu, r);
> +     /* The cpu is set in default rdtgroup after online. */
> +     cpumask_set_cpu(cpu, &rdtgroup_default.cpu_mask);
>       state->closid = 0;
>       wrmsr(MSR_IA32_PQR_ASSOC, state->rmid, 0);
>       mutex_unlock(&rdtgroup_mutex);
> @@ -334,11 +339,16 @@ static int intel_rdt_online_cpu(unsigned int cpu)
>  
>  static int intel_rdt_offline_cpu(unsigned int cpu)
>  {
> +     struct rdtgroup *rdtgrp;
>       struct rdt_resource *r;
>  
>       mutex_lock(&rdtgroup_mutex);
>       for_each_capable_rdt_resource(r)
>               domain_remove_cpu(cpu, r);
> +     list_for_each_entry(rdtgrp, &rdt_all_groups, rdtgroup_list) {
> +             if (cpumask_test_and_clear_cpu(cpu, &rdtgrp->cpu_mask))
> +                     break;
> +     }

I think we should set cpu_closid to 0 here and cleanup the per cpu state /
MSR as well.

Thanks,

        tglx



Reply via email to