From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755172AbZKHUNc (ORCPT ); Sun, 8 Nov 2009 15:13:32 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1755124AbZKHUN1 (ORCPT ); Sun, 8 Nov 2009 15:13:27 -0500 Received: from fg-out-1718.google.com ([72.14.220.155]:45522 "EHLO fg-out-1718.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754163AbZKHUNU (ORCPT ); Sun, 8 Nov 2009 15:13:20 -0500 DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references; b=ZxFy8IeCunAgJ+X00Ldz+tkoze44+uuzQ7FKLJTd4qLTc+wwngasLiWdHJv5ckUk8u /ysDy6fRiJWQqAzZ59hQQvNnXQcFaEUC4oyp7bcWMX6QNY8P/BMb6CKxoawQaUSbzwfK kXaGm2fAEr8R2BnvDt65tl+n5Lxdz6QQvPdjM= From: Frederic Weisbecker To: Ingo Molnar Cc: LKML , Frederic Weisbecker , Peter Zijlstra , Arnaldo Carvalho de Melo , Mike Galbraith , Paul Mackerras , Thomas Gleixner Subject: [RFC PATCH 2/4] perf/core: Optimize a bit rotate_ctx() Date: Sun, 8 Nov 2009 21:13:24 +0100 Message-Id: <1257711206-12243-3-git-send-email-fweisbec@gmail.com> X-Mailer: git-send-email 1.6.2.3 In-Reply-To: <1257711206-12243-1-git-send-email-fweisbec@gmail.com> References: <1257711206-12243-1-git-send-email-fweisbec@gmail.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Don't use list_for_each_entry() just to swap the first and last entry in the list. Instead, use a direct list->next derefencing. This saves up a useless prefetch. Signed-off-by: Frederic Weisbecker Cc: Peter Zijlstra Cc: Arnaldo Carvalho de Melo Cc: Mike Galbraith Cc: Paul Mackerras Cc: Thomas Gleixner --- kernel/perf_event.c | 16 +++++++++------- 1 files changed, 9 insertions(+), 7 deletions(-) diff --git a/kernel/perf_event.c b/kernel/perf_event.c index b3a31c8..0432c1c 100644 --- a/kernel/perf_event.c +++ b/kernel/perf_event.c @@ -1432,7 +1432,7 @@ static void perf_ctx_adjust_freq(struct perf_event_context *ctx) */ static void rotate_ctx(struct perf_event_context *ctx) { - struct perf_event *event; + struct list_head *list; if (!ctx->nr_events) return; @@ -1442,15 +1442,17 @@ static void rotate_ctx(struct perf_event_context *ctx) * Rotate the first entry last (works just fine for group events too): */ perf_disable(); - list_for_each_entry(event, &ctx->pinned_grp_list, group_entry) { - list_move_tail(&event->group_entry, &ctx->pinned_grp_list); - break; + + if (!list_empty(&ctx->pinned_grp_list)) { + list = ctx->pinned_grp_list.next; + list_move_tail(list, &ctx->pinned_grp_list); } - list_for_each_entry(event, &ctx->volatile_grp_list, group_entry) { - list_move_tail(&event->group_entry, &ctx->volatile_grp_list); - break; + if (!list_empty(&ctx->volatile_grp_list)) { + list = ctx->volatile_grp_list.next; + list_move_tail(list, &ctx->volatile_grp_list); } + perf_enable(); spin_unlock(&ctx->lock); -- 1.6.2.3