Hi Maddy, Hemant, Anju, On Thu, Mar 16, 2017 at 01:05:02PM +0530, Madhavan Srinivasan wrote:
[..snip..] > + > +static void core_imc_change_cpu_context(int old_cpu, int new_cpu) > +{ > + if (!core_imc_pmu) > + return; > + perf_pmu_migrate_context(&core_imc_pmu->pmu, old_cpu, new_cpu); > +} > + > + > +static int ppc_core_imc_cpu_online(unsigned int cpu) > +{ > + int ret; > + > + /* If a cpu for this core is already set, then, don't do anything */ > + ret = cpumask_any_and(&core_imc_cpumask, > + cpu_sibling_mask(cpu)); > + if (ret < nr_cpu_ids) > + return 0; > + > + /* Else, set the cpu in the mask, and change the context */ > + cpumask_set_cpu(cpu, &core_imc_cpumask); > + core_imc_change_cpu_context(-1, cpu); So, in the core case, we are ok as long as any cpu in the core is present in the imc_cpumask. It need not have to be the smallest online cpu in the core. Can the same logic be applied to the earlier nest case ? We can have a single function for cpu_offline and cpu_online which implements these checks and sets the cpu bit if required. ppc_entity_imc_cpu_offline(unsigned int cpu, cpumask_t entity_imc_mask, entity_imc_change_cpu_context_fn) { . . . } static ppc_nest_imc_cpu_offline(unsigned int cpu) { return ppc_entity_imc_cpu_offline(cpu, nest_imc_mask, nest_imc_change_cpu_context); } And similar ones for core imc and thread imc. Does this sound reasonable ? > + return 0; > +} > + > +static int ppc_core_imc_cpu_offline(unsigned int cpu) > +{ > + int target; > + unsigned int ncpu; > + > + /* > + * clear this cpu out of the mask, if not present in the mask, > + * don't bother doing anything. > + */ > + if (!cpumask_test_and_clear_cpu(cpu, &core_imc_cpumask)) > + return 0; > + > + /* Find any online cpu in that core except the current "cpu" */ > + ncpu = cpumask_any_but(cpu_sibling_mask(cpu), cpu); > + > + if (ncpu < nr_cpu_ids) { > + target = ncpu; > + cpumask_set_cpu(target, &core_imc_cpumask); > + } else > + target = -1; > + > + /* migrate the context */ > + core_imc_change_cpu_context(cpu, target); > + > + return 0; > +} > + -- Thanks and Regards gautham.