From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758625Ab0FJDt3 (ORCPT ); Wed, 9 Jun 2010 23:49:29 -0400 Received: from mail-ww0-f46.google.com ([74.125.82.46]:35474 "EHLO mail-ww0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756214Ab0FJDtX (ORCPT ); Wed, 9 Jun 2010 23:49:23 -0400 DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=from:to:cc:subject:date:message-id:x-mailer:x-mailer-version :in-reply-to:references; b=amJgJXpKRTRhfU9RHVb10bCz4lpQKJKkFTpNrhVs9PES5AIDTYw/RUoYlDStkqEI7r fhpQxCR6D80pN2yKteWve4sstEz9bdIiDiA9J9E1vGa0Y2rpTOot/8Dqs7A4ovDSkA69 sLToKsYqWr2nj6SlsxDaHKWoGAoPAEI5bYWcM= From: Frederic Weisbecker To: Ingo Molnar Cc: LKML , Frederic Weisbecker , Ingo Molnar , Peter Zijlstra , Arnaldo Carvalho de Melo , Paul Mackerras , Stephane Eranian , Cyrill Gorcunov , Zhang Yanmin , Steven Rostedt Subject: [PATCH 1/5] perf: Provide a proper stop action for software events Date: Thu, 10 Jun 2010 05:49:16 +0200 Message-Id: <1276141760-11590-2-git-send-regression-fweisbec@gmail.com> X-Mailer: git-send-regression X-Mailer-version: 0.1, "The maintainer couldn't reproduce after one week full time debugging" special version. In-Reply-To: <1276141760-11590-1-git-send-regression-fweisbec@gmail.com> References: <1276141760-11590-1-git-send-regression-fweisbec@gmail.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In order to introduce new context exclusions, software events will have to eventually stop when needed. We'll want perf_event_stop() to act on every events. To achieve this, remove the stub stop/start pmu callbacks of software and tracepoint events. This may even optimize the case of hardware and software events running at the same time: now we only stop/start all hardware events if we reset a hardware event period, not anymore with software events. Signed-off-by: Frederic Weisbecker Cc: Ingo Molnar Cc: Peter Zijlstra Cc: Arnaldo Carvalho de Melo Cc: Paul Mackerras Cc: Stephane Eranian Cc: Cyrill Gorcunov Cc: Zhang Yanmin Cc: Steven Rostedt --- kernel/perf_event.c | 29 ++++++++++++++++------------- 1 files changed, 16 insertions(+), 13 deletions(-) diff --git a/kernel/perf_event.c b/kernel/perf_event.c index c772a3d..5c004f7 100644 --- a/kernel/perf_event.c +++ b/kernel/perf_event.c @@ -1541,11 +1541,23 @@ static void perf_adjust_period(struct perf_event *event, u64 nsec, u64 count) hwc->sample_period = sample_period; if (local64_read(&hwc->period_left) > 8*sample_period) { - perf_disable(); - perf_event_stop(event); + bool software_event = is_software_event(event); + + /* + * Only hardware events need their irq period to be + * reprogrammed + */ + if (!software_event) { + perf_disable(); + perf_event_stop(event); + } + local64_set(&hwc->period_left, 0); - perf_event_start(event); - perf_enable(); + + if (!software_event) { + perf_event_start(event); + perf_enable(); + } } } @@ -4286,16 +4298,9 @@ static void perf_swevent_void(struct perf_event *event) { } -static int perf_swevent_int(struct perf_event *event) -{ - return 0; -} - static const struct pmu perf_ops_generic = { .enable = perf_swevent_enable, .disable = perf_swevent_disable, - .start = perf_swevent_int, - .stop = perf_swevent_void, .read = perf_swevent_read, .unthrottle = perf_swevent_void, /* hwc->interrupts already reset */ }; @@ -4578,8 +4583,6 @@ static int swevent_hlist_get(struct perf_event *event) static const struct pmu perf_ops_tracepoint = { .enable = perf_trace_enable, .disable = perf_trace_disable, - .start = perf_swevent_int, - .stop = perf_swevent_void, .read = perf_swevent_read, .unthrottle = perf_swevent_void, }; -- 1.6.2.3