From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932803AbcJZPZA (ORCPT ); Wed, 26 Oct 2016 11:25:00 -0400 Received: from mx1.redhat.com ([209.132.183.28]:44072 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932115AbcJZPY7 (ORCPT ); Wed, 26 Oct 2016 11:24:59 -0400 Date: Wed, 26 Oct 2016 17:24:55 +0200 From: Jiri Olsa To: Peter Zijlstra Cc: "Huang, Ying" , kernel test robot , Michael Neuling , Alexander Shishkin , lkp@01.org, lkml , Jan Stancek , Paul Mackerras , Jiri Olsa , Ingo Molnar Subject: Re: [PATCHv3] perf powerpc: Don't call perf_event_disable from atomic context Message-ID: <20161026152454.GA1186@krava> References: <20161006123301.GA13093@krava> <20161025064013.GB2726@yexl-desktop> <20161025090651.GC3175@twins.programming.kicks-ass.net> <87mvhroo8c.fsf@yhuang-dev.intel.com> <20161026094824.GA21397@krava> <20161026151249.GC3117@twins.programming.kicks-ass.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20161026151249.GC3117@twins.programming.kicks-ass.net> User-Agent: Mutt/1.7.1 (2016-10-04) X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Wed, 26 Oct 2016 15:24:58 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Oct 26, 2016 at 05:12:49PM +0200, Peter Zijlstra wrote: > On Wed, Oct 26, 2016 at 11:48:24AM +0200, Jiri Olsa wrote: > > > diff --git a/kernel/events/core.c b/kernel/events/core.c > > index c6e47e97b33f..04477983945e 100644 > > --- a/kernel/events/core.c > > +++ b/kernel/events/core.c > > @@ -1960,6 +1960,13 @@ void perf_event_disable(struct perf_event *event) > > } > > EXPORT_SYMBOL_GPL(perf_event_disable); > > > > +void perf_event_disable_inatomic(struct perf_event *event, int kill) > > +{ > > + event->pending_kill = kill; > > + event->pending_disable = 1; > > + irq_work_queue(&event->pending); > > +} > > + > > static void perf_set_shadow_time(struct perf_event *event, > > struct perf_event_context *ctx, > > u64 tstamp) > > @@ -7074,9 +7081,7 @@ static int __perf_event_overflow(struct perf_event *event, > > event->pending_kill = POLL_IN; > > if (events && atomic_dec_and_test(&event->event_limit)) { > > ret = 1; > > - event->pending_kill = POLL_HUP; > > - event->pending_disable = 1; > > - irq_work_queue(&event->pending); > > + perf_event_disable_inatomic(event, POLL_HUP); > > } > > So the pending_kill stuff is independent of the disable here. No need to > combine the two. I've change the patch as per the below. > > That is, pending_kill is part of pending_wakeup, not of pending_disable. > Here we simply use both, its just that on disable we need a different > kind of wakeup (HANGUP instead of IN). > > See how after ->overflow_handler() we send a wakeup if there's a > registered signal. ok, seems good thanks, jirka