Message ID | 1413428909-80017-1-git-send-email-wangnan0@huawei.com |
---|---|
State | Superseded |
Headers | show |
On Thu, 16 Oct 2014 11:08:29 +0800, Wang Nan wrote: > When 'perf record' write headers, it calls write_xxx in > tools/perf/util/header.c, and check return value. It rolls back all > working only when return value is negative. > > This patch ensures write_cpudesc() and write_total_mem() return negative number > when error. Without this patch, headers reported by 'perf report' header is > error in some platform. Following output is caputured on ARM, which doesn't > contain "Processor" field in /proc/cpuinfo. See "cpudesc", "total memory" and > "cmdline" field. > > bash-4.2# perf record ls > ... > [ perf record: Woken up 1 times to write data ] > [ perf record: Captured and wrote 0.001 MB perf.data (~36 samples) ] > bash-4.2# perf report --stdio --header > Error: > The perf.data file has no samples! > # ======== > # captured on: Fri Sep 12 10:09:10 2014 > # hostname : arma15el > # os release : 3.17.0+ > # perf version : 3.10.53 > # arch : armv7l > # nrcpus online : 4 > # nrcpus avail : 1 > # cpudesc : (null) > # total memory : 0 kB > # cmdline : > # event : name = cycles, type = 0, config = 0x0, config1 = 0x0, config2 = 0x0, excl_usr = 0, excl_kern = 0, excl_host = 0, excl_guest = 1, precise_ip = 0 > # pmu mappings: not available > # ======== > # > > Signed-off-by: Wang Nan <wangnan0@huawei.com> I guess the total_memory, cmdline and pmu mappings are somehow affected by the broken cpudesc. Do they have their own problem on ARM? Anyway I think it's good to check the result properly, so Acked-by: Namhyung Kim <namhyung@kernel.org> Thanks, Namhyung > --- > tools/perf/util/header.c | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c > index ce0de00..39b80ac 100644 > --- a/tools/perf/util/header.c > +++ b/tools/perf/util/header.c > @@ -605,8 +605,10 @@ static int write_cpudesc(int fd, struct perf_header *h __maybe_unused, > break; > } > > - if (ret) > + if (ret) { > + ret = -1; > goto done; > + } > > s = buf; > > @@ -950,7 +952,8 @@ static int write_total_mem(int fd, struct perf_header *h __maybe_unused, > n = sscanf(buf, "%*s %"PRIu64, &mem); > if (n == 1) > ret = do_write(fd, &mem, sizeof(mem)); > - } > + } else > + ret = -1; > free(buf); > fclose(fp); > return ret; -- 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/
On 2014/10/22 15:00, Namhyung Kim wrote: > On Thu, 16 Oct 2014 11:08:29 +0800, Wang Nan wrote: >> When 'perf record' write headers, it calls write_xxx in >> tools/perf/util/header.c, and check return value. It rolls back all >> working only when return value is negative. >> >> This patch ensures write_cpudesc() and write_total_mem() return negative number >> when error. Without this patch, headers reported by 'perf report' header is >> error in some platform. Following output is caputured on ARM, which doesn't >> contain "Processor" field in /proc/cpuinfo. See "cpudesc", "total memory" and >> "cmdline" field. >> >> bash-4.2# perf record ls >> ... >> [ perf record: Woken up 1 times to write data ] >> [ perf record: Captured and wrote 0.001 MB perf.data (~36 samples) ] >> bash-4.2# perf report --stdio --header >> Error: >> The perf.data file has no samples! >> # ======== >> # captured on: Fri Sep 12 10:09:10 2014 >> # hostname : arma15el >> # os release : 3.17.0+ >> # perf version : 3.10.53 >> # arch : armv7l >> # nrcpus online : 4 >> # nrcpus avail : 1 >> # cpudesc : (null) >> # total memory : 0 kB >> # cmdline : >> # event : name = cycles, type = 0, config = 0x0, config1 = 0x0, config2 = 0x0, excl_usr = 0, excl_kern = 0, excl_host = 0, excl_guest = 1, precise_ip = 0 >> # pmu mappings: not available >> # ======== >> # >> >> Signed-off-by: Wang Nan <wangnan0@huawei.com> > > I guess the total_memory, cmdline and pmu mappings are somehow affected > by the broken cpudesc. Do they have their own problem on ARM? > The buggy output is caused by cpudesc's problem. I didn't trigger their own problem on ARM because 'total memory' and cmdline are always success. I find the error in write_total_mem() by checking code by hand. Thanks. > Anyway I think it's good to check the result properly, so > > Acked-by: Namhyung Kim <namhyung@kernel.org> > > Thanks, > Namhyung > > >> --- >> tools/perf/util/header.c | 7 +++++-- >> 1 file changed, 5 insertions(+), 2 deletions(-) >> >> diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c >> index ce0de00..39b80ac 100644 >> --- a/tools/perf/util/header.c >> +++ b/tools/perf/util/header.c >> @@ -605,8 +605,10 @@ static int write_cpudesc(int fd, struct perf_header *h __maybe_unused, >> break; >> } >> >> - if (ret) >> + if (ret) { >> + ret = -1; >> goto done; >> + } >> >> s = buf; >> >> @@ -950,7 +952,8 @@ static int write_total_mem(int fd, struct perf_header *h __maybe_unused, >> n = sscanf(buf, "%*s %"PRIu64, &mem); >> if (n == 1) >> ret = do_write(fd, &mem, sizeof(mem)); >> - } >> + } else >> + ret = -1; >> free(buf); >> fclose(fp); >> return ret; -- 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/
Hi Ingo, Could you please collect this patch which fixes a perf problem? Thanks. On 2014/10/22 15:00, Namhyung Kim wrote: > On Thu, 16 Oct 2014 11:08:29 +0800, Wang Nan wrote: >> When 'perf record' write headers, it calls write_xxx in >> tools/perf/util/header.c, and check return value. It rolls back all >> working only when return value is negative. >> >> This patch ensures write_cpudesc() and write_total_mem() return negative number >> when error. Without this patch, headers reported by 'perf report' header is >> error in some platform. Following output is caputured on ARM, which doesn't >> contain "Processor" field in /proc/cpuinfo. See "cpudesc", "total memory" and >> "cmdline" field. >> >> bash-4.2# perf record ls >> ... >> [ perf record: Woken up 1 times to write data ] >> [ perf record: Captured and wrote 0.001 MB perf.data (~36 samples) ] >> bash-4.2# perf report --stdio --header >> Error: >> The perf.data file has no samples! >> # ======== >> # captured on: Fri Sep 12 10:09:10 2014 >> # hostname : arma15el >> # os release : 3.17.0+ >> # perf version : 3.10.53 >> # arch : armv7l >> # nrcpus online : 4 >> # nrcpus avail : 1 >> # cpudesc : (null) >> # total memory : 0 kB >> # cmdline : >> # event : name = cycles, type = 0, config = 0x0, config1 = 0x0, config2 = 0x0, excl_usr = 0, excl_kern = 0, excl_host = 0, excl_guest = 1, precise_ip = 0 >> # pmu mappings: not available >> # ======== >> # >> >> Signed-off-by: Wang Nan <wangnan0@huawei.com> > > I guess the total_memory, cmdline and pmu mappings are somehow affected > by the broken cpudesc. Do they have their own problem on ARM? > > Anyway I think it's good to check the result properly, so > > Acked-by: Namhyung Kim <namhyung@kernel.org> > > Thanks, > Namhyung > > >> --- >> tools/perf/util/header.c | 7 +++++-- >> 1 file changed, 5 insertions(+), 2 deletions(-) >> >> diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c >> index ce0de00..39b80ac 100644 >> --- a/tools/perf/util/header.c >> +++ b/tools/perf/util/header.c >> @@ -605,8 +605,10 @@ static int write_cpudesc(int fd, struct perf_header *h __maybe_unused, >> break; >> } >> >> - if (ret) >> + if (ret) { >> + ret = -1; >> goto done; >> + } >> >> s = buf; >> >> @@ -950,7 +952,8 @@ static int write_total_mem(int fd, struct perf_header *h __maybe_unused, >> n = sscanf(buf, "%*s %"PRIu64, &mem); >> if (n == 1) >> ret = do_write(fd, &mem, sizeof(mem)); >> - } >> + } else >> + ret = -1; >> free(buf); >> fclose(fp); >> return ret; -- 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/
Em Wed, Oct 22, 2014 at 04:00:12PM +0900, Namhyung Kim escreveu: > On Thu, 16 Oct 2014 11:08:29 +0800, Wang Nan wrote: > > When 'perf record' write headers, it calls write_xxx in > > tools/perf/util/header.c, and check return value. It rolls back all > > working only when return value is negative. > > > > This patch ensures write_cpudesc() and write_total_mem() return negative number > > when error. Without this patch, headers reported by 'perf report' header is > > error in some platform. Following output is caputured on ARM, which doesn't > > contain "Processor" field in /proc/cpuinfo. See "cpudesc", "total memory" and > > "cmdline" field. > > > > bash-4.2# perf record ls > > ... > > [ perf record: Woken up 1 times to write data ] > > [ perf record: Captured and wrote 0.001 MB perf.data (~36 samples) ] > > bash-4.2# perf report --stdio --header > > Error: > > The perf.data file has no samples! > > # ======== > > # captured on: Fri Sep 12 10:09:10 2014 > > # hostname : arma15el > > # os release : 3.17.0+ > > # perf version : 3.10.53 > > # arch : armv7l > > # nrcpus online : 4 > > # nrcpus avail : 1 > > # cpudesc : (null) > > # total memory : 0 kB > > # cmdline : > > # event : name = cycles, type = 0, config = 0x0, config1 = 0x0, config2 = 0x0, excl_usr = 0, excl_kern = 0, excl_host = 0, excl_guest = 1, precise_ip = 0 > > # pmu mappings: not available > > # ======== > > # > > > > Signed-off-by: Wang Nan <wangnan0@huawei.com> > > I guess the total_memory, cmdline and pmu mappings are somehow affected > by the broken cpudesc. Do they have their own problem on ARM? > > Anyway I think it's good to check the result properly, so > > Acked-by: Namhyung Kim <namhyung@kernel.org> Thanks, applied - Arnaldo -- 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/
diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c index ce0de00..39b80ac 100644 --- a/tools/perf/util/header.c +++ b/tools/perf/util/header.c @@ -605,8 +605,10 @@ static int write_cpudesc(int fd, struct perf_header *h __maybe_unused, break; } - if (ret) + if (ret) { + ret = -1; goto done; + } s = buf; @@ -950,7 +952,8 @@ static int write_total_mem(int fd, struct perf_header *h __maybe_unused, n = sscanf(buf, "%*s %"PRIu64, &mem); if (n == 1) ret = do_write(fd, &mem, sizeof(mem)); - } + } else + ret = -1; free(buf); fclose(fp); return ret;
When 'perf record' write headers, it calls write_xxx in tools/perf/util/header.c, and check return value. It rolls back all working only when return value is negative. This patch ensures write_cpudesc() and write_total_mem() return negative number when error. Without this patch, headers reported by 'perf report' header is error in some platform. Following output is caputured on ARM, which doesn't contain "Processor" field in /proc/cpuinfo. See "cpudesc", "total memory" and "cmdline" field. bash-4.2# perf record ls ... [ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 0.001 MB perf.data (~36 samples) ] bash-4.2# perf report --stdio --header Error: The perf.data file has no samples! # ======== # captured on: Fri Sep 12 10:09:10 2014 # hostname : arma15el # os release : 3.17.0+ # perf version : 3.10.53 # arch : armv7l # nrcpus online : 4 # nrcpus avail : 1 # cpudesc : (null) # total memory : 0 kB # cmdline : # event : name = cycles, type = 0, config = 0x0, config1 = 0x0, config2 = 0x0, excl_usr = 0, excl_kern = 0, excl_host = 0, excl_guest = 1, precise_ip = 0 # pmu mappings: not available # ======== # Signed-off-by: Wang Nan <wangnan0@huawei.com> --- tools/perf/util/header.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)