From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753203AbbJMOyt (ORCPT ); Tue, 13 Oct 2015 10:54:49 -0400 Received: from mail.kernel.org ([198.145.29.136]:39732 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752699AbbJMOys (ORCPT ); Tue, 13 Oct 2015 10:54:48 -0400 Date: Tue, 13 Oct 2015 11:54:44 -0300 From: Arnaldo Carvalho de Melo To: Yannick Brosseau Cc: linux-kernel@vger.kernel.org, kernel-team@fb.com, zhu.wen-jie@hp.com, ak@linux.intel.com Subject: Re: [PATCH] perf: Correctly identify anon_hugepage when generating map Message-ID: <20151013145444.GS14409@kernel.org> References: <1444264306-3057-1-git-send-email-scientist@fb.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1444264306-3057-1-git-send-email-scientist@fb.com> X-Url: http://acmel.wordpress.com User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Em Wed, Oct 07, 2015 at 05:31:46PM -0700, Yannick Brosseau escreveu: > When parsing /proc/xxx/maps, the sscanf in perf_event__synthesize_mmap_events > truncate the map name at the space in "/anon_hugepage (deleted)". > is_anon_memory then only receive the string "/anon_hugepage" and do not detect it. > We change is_anon_memory to only compare the first part of the string > effectively ignoring if the (deleted) part is there or not. > > +++ b/tools/perf/util/map.c > @@ -26,8 +26,8 @@ const char *map_type__name[MAP__NR_TYPES] = { > static inline int is_anon_memory(const char *filename) > { > return !strcmp(filename, "//anon") || > - !strcmp(filename, "/dev/zero (deleted)") || > - !strcmp(filename, "/anon_hugepage (deleted)"); > + !strncmp(filename, "/dev/zero", sizeof("/dev/zero")) || > + !strncmp(filename, "/anon_hugepage", sizeof("/anon_hugepage")); Have you tested this? [acme@zoo ~]$ cat strncmp_sizeof.c #include #include int main(void) { #define pattern "/anon_hugepage" size_t sz = sizeof(pattern); return printf("sizeof=%zd\nstrncmp(sz )=%d\nstrncmp(sz - 1)=%d\n", sz, strncmp("/anon_hugepage (deleted)", pattern, sz), strncmp("/anon_hugepage (deleted)", pattern, sz - 1)); } [acme@zoo ~]$ make strncmp_sizeof cc strncmp_sizeof.c -o strncmp_sizeof [acme@zoo ~]$ ./strncmp_sizeof sizeof=15 strncmp(sz )=32 strncmp(sz - 1)=0 [acme@zoo ~]$ Hint, you're not considering the '\0'. - Arnaldo