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
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20160113105056.GR6357@twins.programming.kicks-ass.net>
Date:	Wed, 13 Jan 2016 11:50:56 +0100
From:	Peter Zijlstra <peterz@...radead.org>
To:	mingo@...nel.org, alexander.shishkin@...ux.intel.com,
	eranian@...gle.com
Cc:	linux-kernel@...r.kernel.org, vince@...ter.net, dvyukov@...gle.com,
	andi@...stfloor.org, jolsa@...hat.com
Subject: Re: [RFC][PATCH 12/12] perf: Collapse and fix event_function_call()
 users

On Mon, Jan 11, 2016 at 05:25:10PM +0100, Peter Zijlstra wrote:
> --- a/kernel/events/core.c
> +++ b/kernel/events/core.c
> @@ -2202,44 +2219,28 @@ static void __perf_event_mark_enabled(st
>  /*
>   * Cross CPU call to enable a performance event
>   */
> +static void __perf_event_enable(struct perf_event *event,
> +				struct perf_cpu_context *cpuctx,
> +				struct perf_event_context *ctx,
> +				void *info)
>  {
>  	struct perf_event *leader = event->group_leader;
> -	struct perf_event_context *task_ctx = cpuctx->task_ctx;

deleted too much ^^

>  
>  	if (event->state >= PERF_EVENT_STATE_INACTIVE)
> +		return;
>  
> +	update_context_time(ctx);
>  	__perf_event_mark_enabled(event);
>  
> +	if (!ctx->is_active)
> +		return;
> +
>  	if (!event_filter_match(event)) {
> +		if (is_cgroup_event(event)) {
> +			perf_cgroup_set_timestamp(current, ctx); // XXX ?
>  			perf_cgroup_defer_enabled(event);
> +		}
> +		return;
>  	}
>  
>  	/*
> @@ -2247,19 +2248,9 @@ static int __perf_event_enable(void *inf
>  	 * then don't put it on unless the group is on.
>  	 */
>  	if (leader != event && leader->state != PERF_EVENT_STATE_ACTIVE)
> +		return;
>  
> +	ctx_resched(cpuctx, ctx);
>  }


--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -2225,6 +2243,7 @@ static void __perf_event_enable(struct p
 				void *info)
 {
 	struct perf_event *leader = event->group_leader;
+	struct perf_event_context *task_ctx;
 
 	if (event->state >= PERF_EVENT_STATE_INACTIVE)
 		return;
@@ -2250,7 +2269,11 @@ static void __perf_event_enable(struct p
 	if (leader != event && leader->state != PERF_EVENT_STATE_ACTIVE)
 		return;
 
-	ctx_resched(cpuctx, ctx);
+	task_ctx = cpuctx->task_ctx;
+	if (ctx->task)
+		WARN_ON_ONCE(task_ctx != ctx);
+
+	ctx_resched(cpuctx, task_ctx);
 }
 
 /*

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ