Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753223AbbKZRMh (ORCPT ); Thu, 26 Nov 2015 12:12:37 -0500 Received: from mail.kernel.org ([198.145.29.136]:44999 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751474AbbKZRMf (ORCPT ); Thu, 26 Nov 2015 12:12:35 -0500 Date: Thu, 26 Nov 2015 14:12:30 -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 (v2) Message-ID: <20151126171230.GF28162@kernel.org> References: <1448538152-2898-1-git-send-email-scientist@fb.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1448538152-2898-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 Content-Length: 2885 Lines: 91 Em Thu, Nov 26, 2015 at 03:42:32AM -0800, 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. Thanks, applied, tested with: [acme@zoo c]$ cat scanf_proc_smaps.c #include #include #include typedef unsigned int u32; typedef unsigned long long u64; struct mmap2_event { u32 pid, tid; u64 start; u64 len; u64 pgoff; u32 maj; u32 min; u64 ino; u64 ino_generation; u32 prot; u32 flags; char filename[PATH_MAX]; }; union perf_event { struct mmap2_event mmap2; }; static inline int is_anon_memory(const char *filename) { return !strcmp(filename, "//anon") || !strncmp(filename, "/dev/zero", sizeof("/dev/zero") - 1) || !strncmp(filename, "/anon_hugepage", sizeof("/anon_hugepage") - 1); } int main(void) { union perf_event event; unsigned int ino; char prot[5]; char bf[] = "7f939395e000-7f939395f000 rw-s 00000000 00:05 98715 /dev/zero (deleted)"; int n = sscanf(bf, "%"PRIx64"-%"PRIx64" %s %"PRIx64" %x:%x %u %s\n", &event.mmap2.start, &event.mmap2.len, prot, &event.mmap2.pgoff, &event.mmap2.maj, &event.mmap2.min, &ino, event.mmap2.filename); printf("event.filename=\"%s\"\n", event.mmap2.filename); if (is_anon_memory(event.mmap2.filename)) printf("This is anonymous memory\n"); return 0; } [acme@zoo c]$ ./scanf_proc_smaps event.filename="/dev/zero" This is anonymous memory [acme@zoo c]$ > Signed-off-by: Yannick Brosseau > --- > tools/perf/util/map.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/tools/perf/util/map.c b/tools/perf/util/map.c > index afc6b56..97e11a7 100644 > --- a/tools/perf/util/map.c > +++ 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")-1) || > + !strncmp(filename, "/anon_hugepage", sizeof("/anon_hugepage")-1); > } > > static inline int is_no_dso_memory(const char *filename) > -- > 2.6.2 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/