From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751418AbdBXVQP (ORCPT ); Fri, 24 Feb 2017 16:16:15 -0500 Received: from mail.kernel.org ([198.145.29.136]:56720 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751287AbdBXVQN (ORCPT ); Fri, 24 Feb 2017 16:16:13 -0500 Date: Fri, 24 Feb 2017 18:08:53 -0300 From: Arnaldo Carvalho de Melo To: Namhyung Kim Cc: Ingo Molnar , Peter Zijlstra , Jiri Olsa , LKML , kernel-team@lge.com, Steven Rostedt , Frederic Weisbecker Subject: Re: [PATCH 2/4] perf tools: Introduce cpu_map__snprint_mask() Message-ID: <20170224210853.GB15145@kernel.org> References: <20170224011251.14946-1-namhyung@kernel.org> <20170224011251.14946-2-namhyung@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20170224011251.14946-2-namhyung@kernel.org> X-Url: http://acmel.wordpress.com User-Agent: Mutt/1.7.1 (2016-10-04) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Em Fri, Feb 24, 2017 at 10:12:49AM +0900, Namhyung Kim escreveu: > The cpu_map__snprint_mask() is to generate string representation of > cpumask bitmap. For cpu 0 to 11, it'll return "fff". > > Cc: Steven Rostedt > Cc: Frederic Weisbecker > Signed-off-by: Namhyung Kim > --- > tools/perf/util/cpumap.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ > tools/perf/util/cpumap.h | 1 + > 2 files changed, 47 insertions(+) > > diff --git a/tools/perf/util/cpumap.c b/tools/perf/util/cpumap.c > index 8c7504939113..08540ab2a891 100644 > --- a/tools/perf/util/cpumap.c > +++ b/tools/perf/util/cpumap.c > @@ -673,3 +673,49 @@ size_t cpu_map__snprint(struct cpu_map *map, char *buf, size_t size) > pr_debug("cpumask list: %s\n", buf); > return ret; > } > + > +static char hex_char(char val) Why do you use 'char' above and... > +{ > + if (0 <= val && val <= 9) > + return val + '0'; > + if (10 <= val && val < 16) > + return val - 10 + 'a'; > + return '?'; > +} > +size_t cpu_map__snprint_mask(struct cpu_map *map, char *buf, size_t size) > + for (cpu = last_cpu / 4 * 4; cpu >= 0; cpu -= 4) { > + unsigned char bits = bitmap[cpu / 8]; 'unsigned char' here? Some compilers don't like it, for instance: 19 fedora:24-x-ARC-uClibc: FAIL CC /tmp/build/perf/util/cpumap.o util/cpumap.c: In function 'hex_char': util/cpumap.c:679:2: error: comparison is always true due to limited range of data type [-Werror=type-limits] if (0 <= val && val <= 9) ^ cc1: all warnings being treated as errors And: 10 debian:experimental-x-arm64: FAIL CC /tmp/build/perf/util/cpumap.o util/cpumap.c: In function 'hex_char': util/cpumap.c:679:8: error: comparison is always true due to limited range of data type [-Werror=type-limits] if (0 <= val && val <= 9) ^~ Are you ok with the patch below? diff --git a/tools/perf/util/cpumap.c b/tools/perf/util/cpumap.c index 6ab8699f0233..405f56ad5c24 100644 --- a/tools/perf/util/cpumap.c +++ b/tools/perf/util/cpumap.c @@ -687,7 +687,7 @@ size_t cpu_map__snprint_mask(struct cpu_map *map, char *buf, size_t size) { int i, cpu; char *ptr = buf; - unsigned char *bitmap; + char *bitmap; int last_cpu = cpu_map__cpu(map, map->nr - 1); bitmap = zalloc((last_cpu + 7) / 8); @@ -702,7 +702,7 @@ size_t cpu_map__snprint_mask(struct cpu_map *map, char *buf, size_t size) } for (cpu = last_cpu / 4 * 4; cpu >= 0; cpu -= 4) { - unsigned char bits = bitmap[cpu / 8]; + char bits = bitmap[cpu / 8]; if (cpu % 8) bits >>= 4; > + if (cpu % 8) > + bits >>= 4; > + else > + bits &= 0xf; > + > + *ptr++ = hex_char(bits); > + if ((cpu % 32) == 0 && cpu > 0) > + *ptr++ = ','; > + } > + *ptr = '\0'; > + free(bitmap); > + > + buf[size - 1] = '\0'; > + return ptr - buf; > +} > diff --git a/tools/perf/util/cpumap.h b/tools/perf/util/cpumap.h > index 1a0549af8f5c..4d231c6eac0c 100644 > --- a/tools/perf/util/cpumap.h > +++ b/tools/perf/util/cpumap.h > @@ -20,6 +20,7 @@ struct cpu_map *cpu_map__dummy_new(void); > struct cpu_map *cpu_map__new_data(struct cpu_map_data *data); > struct cpu_map *cpu_map__read(FILE *file); > size_t cpu_map__snprint(struct cpu_map *map, char *buf, size_t size); > +size_t cpu_map__snprint_mask(struct cpu_map *map, char *buf, size_t size); > size_t cpu_map__fprintf(struct cpu_map *map, FILE *fp); > int cpu_map__get_socket_id(int cpu); > int cpu_map__get_socket(struct cpu_map *map, int idx, void *data); > -- > 2.11.1