From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752519AbdHKXaR (ORCPT ); Fri, 11 Aug 2017 19:30:17 -0400 Received: from mga11.intel.com ([192.55.52.93]:31997 "EHLO mga11.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753250AbdHKX0k (ORCPT ); Fri, 11 Aug 2017 19:26:40 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.41,360,1498546800"; d="scan'208";a="136557581" From: Andi Kleen To: acme@kernel.org Cc: jolsa@kernel.org, linux-kernel@vger.kernel.org, Andi Kleen Subject: [PATCH v2 03/19] perf, tools, stat: Fix saved values rbtree lookup Date: Fri, 11 Aug 2017 16:26:18 -0700 Message-Id: <20170811232634.30465-3-andi@firstfloor.org> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170811232634.30465-1-andi@firstfloor.org> References: <20170811232634.30465-1-andi@firstfloor.org> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Andi Kleen The stat shadow saved values rbtree is indexed by a pointer. Fix the comparison function: - We cannot return a pointer delta as an int because that loses bits on 64bit. - Doing pointer arithmetic on the struct pointer only works if the objects are spaced by the multiple of the object size, which is not guaranteed for individual malloc'ed object Replace it with a proper comparison. This fixes various problems with values not being found. Acked-by: Jiri Olsa Signed-off-by: Andi Kleen --- tools/perf/util/stat-shadow.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tools/perf/util/stat-shadow.c b/tools/perf/util/stat-shadow.c index 719d6cb86952..a04cf56d3517 100644 --- a/tools/perf/util/stat-shadow.c +++ b/tools/perf/util/stat-shadow.c @@ -70,7 +70,11 @@ static int saved_value_cmp(struct rb_node *rb_node, const void *entry) return a->ctx - b->ctx; if (a->cpu != b->cpu) return a->cpu - b->cpu; - return a->evsel - b->evsel; + if (a->evsel == b->evsel) + return 0; + if ((char *)a->evsel < (char *)b->evsel) + return -1; + return +1; } static struct rb_node *saved_value_new(struct rblist *rblist __maybe_unused, -- 2.9.4