lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Fri, 20 Jan 2017 12:30:38 -0800 From: David Carrillo-Cisneros <davidcc@...gle.com> To: Peter Zijlstra <peterz@...radead.org> Cc: linux-kernel <linux-kernel@...r.kernel.org>, "x86@...nel.org" <x86@...nel.org>, Ingo Molnar <mingo@...hat.com>, Thomas Gleixner <tglx@...utronix.de>, Andi Kleen <ak@...ux.intel.com>, Kan Liang <kan.liang@...el.com>, Borislav Petkov <bp@...e.de>, Srinivas Pandruvada <srinivas.pandruvada@...ux.intel.com>, Dave Hansen <dave.hansen@...ux.intel.com>, Vikas Shivappa <vikas.shivappa@...ux.intel.com>, Mark Rutland <mark.rutland@....com>, Arnaldo Carvalho de Melo <acme@...nel.org>, Vince Weaver <vince@...ter.net>, Paul Turner <pjt@...gle.com>, Stephane Eranian <eranian@...gle.com> Subject: Re: [PATCH v2 2/2] perf/core: Remove perf_cpu_context::unique_pmu On Fri, Jan 20, 2017 at 1:20 AM, Peter Zijlstra <peterz@...radead.org> wrote: > On Wed, Jan 18, 2017 at 11:24:54AM -0800, David Carrillo-Cisneros wrote: >> cpuctx->unique_pmu was originally introduced as a way to identify cpuctxs >> with shared pmus in order to avoid visiting the same cpuctx more than once >> in a for_each_pmu loop. >> >> cpuctx->unique_pmu == cpuctx->pmu in non-software task contexts since they >> have only one pmu per cpuctx. Since perf_pmu_sched_task is only called in >> hw contexts, this patch replaces cpuctx->unique_pmu by cpuctx->pmu in it. >> >> The change above, together with the previous patch in this series, removed >> the remaining uses of cpuctx->unique_pmu, so we remove it altogether. >> >> Signed-off-by: David Carrillo-Cisneros <davidcc@...gle.com> >> Acked-by: Mark Rutland <mark.rutland@....com> > > >> @@ -8572,37 +8572,10 @@ static struct perf_cpu_context __percpu *find_pmu_context(int ctxn) >> return NULL; >> } >> >> -static void update_pmu_context(struct pmu *pmu, struct pmu *old_pmu) >> -{ >> - int cpu; >> - >> - for_each_possible_cpu(cpu) { >> - struct perf_cpu_context *cpuctx; >> - >> - cpuctx = per_cpu_ptr(pmu->pmu_cpu_context, cpu); >> - >> - if (cpuctx->unique_pmu == old_pmu) >> - cpuctx->unique_pmu = pmu; >> - } >> -} >> - >> static void free_pmu_context(struct pmu *pmu) >> { >> - struct pmu *i; >> - >> mutex_lock(&pmus_lock); >> - /* >> - * Like a real lame refcount. >> - */ >> - list_for_each_entry(i, &pmus, entry) { >> - if (i->pmu_cpu_context == pmu->pmu_cpu_context) { >> - update_pmu_context(i, pmu); >> - goto out; >> - } >> - } >> - >> free_percpu(pmu->pmu_cpu_context); >> -out: >> mutex_unlock(&pmus_lock); >> } > > This very much relies on us never calling perf_pmu_unregister() on the > software PMUs afaict. A condition not mention in the Changelog. > What's a good way to solve this? Update the Changelog or add code to update ctx->pmu? This issue would go away cleanly if we were to remove the context sharing across pmu's. Would you support work in that direction? Thanks, David
Powered by blists - more mailing lists