From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751468AbdGRMDE (ORCPT ); Tue, 18 Jul 2017 08:03:04 -0400 Received: from mga06.intel.com ([134.134.136.31]:13209 "EHLO mga06.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751336AbdGRMDD (ORCPT ); Tue, 18 Jul 2017 08:03:03 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.40,377,1496127600"; d="scan'208";a="1196759225" From: Alexander Shishkin To: Alexey Budankov , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo Cc: Andi Kleen , Kan Liang , Dmitri Prokhorov , Valery Cherepennikov , Mark Rutland , David Carrillo-Cisneros , Stephane Eranian , linux-kernel Subject: Re: [PATCH v5 1/4]: perf/core: use rb trees for pinned/flexible groups In-Reply-To: References: User-Agent: Notmuch/0.23.7 (http://notmuchmail.org) Emacs/24.5.1 (x86_64-pc-linux-gnu) Date: Tue, 18 Jul 2017 15:02:59 +0300 Message-ID: <877ez6vtos.fsf@ashishki-desk.ger.corp.intel.com> MIME-Version: 1.0 Content-Type: text/plain Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Alexey Budankov writes: > +static void > +perf_event_groups_rotate(struct perf_event_groups *groups, int cpu) > +{ > + struct rb_node *node; > + struct perf_event *node_event; > + > + WARN_ON_ONCE(!groups); This seems redundant. > + > + list_rotate_left(&groups->list); > + > + /* will replace rotation above in patch v5 3/4 > + > + node = groups->tree.rb_node; > + > + while (node) { > + node_event = container_of(node, > + struct perf_event, group_node); > + > + if (cpu < node_event->cpu) { > + node = node->rb_left; > + } else if (cpu > node_event->cpu) { > + node = node->rb_right; > + } else { > + list_rotate_left(&node_event->group_list); > + break; > + } > + } > + > + */ Please don't do this, it doesn't add clarity. > +static int > +perf_event_groups_iterate(struct perf_event_groups *groups, > + perf_event_groups_iterate_f callback, void *data) > +{ > + int ret = 0; > + struct perf_event *event; > + > + WARN_ON_ONCE(!groups); > + > + list_for_each_entry(event, &groups->list, group_list_entry) { > + ret = callback(event, data); > + if (ret) > + break; > + } > + > + /* will replace itration above in patch v5 4/4 > + > + for (node = rb_first(groups); node; node = rb_next(node)) { > + node_event = container_of(node, struct perf_event, group_node); > + list_for_each_entry(event, &node_event->group_list, > + group_list_entry) { > + WARN_ON_ONCE(!(event->cpu == node_event->cpu)); > + ret = callback(event, data); > + if (ret) { > + return ret; > + } > + } > + } > + > + */ Ditto. Regards, -- Alex