[PATCH 3.2 071/107] perf header: Fixup reading of HEADER_NRCPUS feature

2015-10-08 Thread Ben Hutchings
3.2.72-rc1 review patch.  If anyone has any objections, please let me know.

--

From: Arnaldo Carvalho de Melo 

commit caa470475d9b59eeff093ae650800d34612c4379 upstream.

The original patch introducing this header wrote the number of CPUs available
and online in one order and then swapped those values when reading, fix it.

Before:

  # perf record usleep 1
  # perf report --header-only | grep 'nrcpus \(online\|avail\)'
  # nrcpus online : 4
  # nrcpus avail : 4
  # echo 0 > /sys/devices/system/cpu/cpu2/online
  # perf record usleep 1
  # perf report --header-only | grep 'nrcpus \(online\|avail\)'
  # nrcpus online : 4
  # nrcpus avail : 3
  # echo 0 > /sys/devices/system/cpu/cpu1/online
  # perf record usleep 1
  # perf report --header-only | grep 'nrcpus \(online\|avail\)'
  # nrcpus online : 4
  # nrcpus avail : 2

After the fix, bringing back the CPUs online:

  # perf report --header-only | grep 'nrcpus \(online\|avail\)'
  # nrcpus online : 2
  # nrcpus avail : 4
  # echo 1 > /sys/devices/system/cpu/cpu2/online
  # perf record usleep 1
  # perf report --header-only | grep 'nrcpus \(online\|avail\)'
  # nrcpus online : 3
  # nrcpus avail : 4
  # echo 1 > /sys/devices/system/cpu/cpu1/online
  # perf record usleep 1
  # perf report --header-only | grep 'nrcpus \(online\|avail\)'
  # nrcpus online : 4
  # nrcpus avail : 4

Acked-by: Namhyung Kim 
Cc: Adrian Hunter 
Cc: Borislav Petkov 
Cc: David Ahern 
Cc: Frederic Weisbecker 
Cc: Jiri Olsa 
Cc: Kan Liang 
Cc: Stephane Eranian 
Cc: Wang Nan 
Fixes: fbe96f29ce4b ("perf tools: Make perf.data more self-descriptive (v8)")
Link: http://lkml.kernel.org/r/20150911153323.gp23...@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo 
[bwh: Backported to 3.2: print_nrcpus() reads and prints these fields
 immediately, so read both of them into an array before printing them in
 reverse order.]
Signed-off-by: Ben Hutchings 
---
 tools/perf/util/header.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- a/tools/perf/util/header.c
+++ b/tools/perf/util/header.c
@@ -796,25 +796,19 @@ static void print_cpudesc(struct perf_he
 static void print_nrcpus(struct perf_header *ph, int fd, FILE *fp)
 {
ssize_t ret;
-   u32 nr;
+   u32 nr[2];
 
ret = read(fd, , sizeof(nr));
if (ret != (ssize_t)sizeof(nr))
-   nr = -1; /* interpreted as error */
+   nr[0] = nr[1] = -1; /* interpreted as error */
 
-   if (ph->needs_swap)
-   nr = bswap_32(nr);
+   if (ph->needs_swap) {
+   nr[0] = bswap_32(nr[0]);
+   nr[1] = bswap_32(nr[1]);
+   }
 
-   fprintf(fp, "# nrcpus online : %u\n", nr);
-
-   ret = read(fd, , sizeof(nr));
-   if (ret != (ssize_t)sizeof(nr))
-   nr = -1; /* interpreted as error */
-
-   if (ph->needs_swap)
-   nr = bswap_32(nr);
-
-   fprintf(fp, "# nrcpus avail : %u\n", nr);
+   fprintf(fp, "# nrcpus online : %u\n", nr[1]);
+   fprintf(fp, "# nrcpus avail : %u\n", nr[0]);
 }
 
 static void print_version(struct perf_header *ph, int fd, FILE *fp)

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH 3.2 071/107] perf header: Fixup reading of HEADER_NRCPUS feature

2015-10-08 Thread Ben Hutchings
3.2.72-rc1 review patch.  If anyone has any objections, please let me know.

--

From: Arnaldo Carvalho de Melo 

commit caa470475d9b59eeff093ae650800d34612c4379 upstream.

The original patch introducing this header wrote the number of CPUs available
and online in one order and then swapped those values when reading, fix it.

Before:

  # perf record usleep 1
  # perf report --header-only | grep 'nrcpus \(online\|avail\)'
  # nrcpus online : 4
  # nrcpus avail : 4
  # echo 0 > /sys/devices/system/cpu/cpu2/online
  # perf record usleep 1
  # perf report --header-only | grep 'nrcpus \(online\|avail\)'
  # nrcpus online : 4
  # nrcpus avail : 3
  # echo 0 > /sys/devices/system/cpu/cpu1/online
  # perf record usleep 1
  # perf report --header-only | grep 'nrcpus \(online\|avail\)'
  # nrcpus online : 4
  # nrcpus avail : 2

After the fix, bringing back the CPUs online:

  # perf report --header-only | grep 'nrcpus \(online\|avail\)'
  # nrcpus online : 2
  # nrcpus avail : 4
  # echo 1 > /sys/devices/system/cpu/cpu2/online
  # perf record usleep 1
  # perf report --header-only | grep 'nrcpus \(online\|avail\)'
  # nrcpus online : 3
  # nrcpus avail : 4
  # echo 1 > /sys/devices/system/cpu/cpu1/online
  # perf record usleep 1
  # perf report --header-only | grep 'nrcpus \(online\|avail\)'
  # nrcpus online : 4
  # nrcpus avail : 4

Acked-by: Namhyung Kim 
Cc: Adrian Hunter 
Cc: Borislav Petkov 
Cc: David Ahern 
Cc: Frederic Weisbecker 
Cc: Jiri Olsa 
Cc: Kan Liang 
Cc: Stephane Eranian 
Cc: Wang Nan 
Fixes: fbe96f29ce4b ("perf tools: Make perf.data more self-descriptive (v8)")
Link: http://lkml.kernel.org/r/20150911153323.gp23...@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo 
[bwh: Backported to 3.2: print_nrcpus() reads and prints these fields
 immediately, so read both of them into an array before printing them in
 reverse order.]
Signed-off-by: Ben Hutchings 
---
 tools/perf/util/header.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- a/tools/perf/util/header.c
+++ b/tools/perf/util/header.c
@@ -796,25 +796,19 @@ static void print_cpudesc(struct perf_he
 static void print_nrcpus(struct perf_header *ph, int fd, FILE *fp)
 {
ssize_t ret;
-   u32 nr;
+   u32 nr[2];
 
ret = read(fd, , sizeof(nr));
if (ret != (ssize_t)sizeof(nr))
-   nr = -1; /* interpreted as error */
+   nr[0] = nr[1] = -1; /* interpreted as error */
 
-   if (ph->needs_swap)
-   nr = bswap_32(nr);
+   if (ph->needs_swap) {
+   nr[0] = bswap_32(nr[0]);
+   nr[1] = bswap_32(nr[1]);
+   }
 
-   fprintf(fp, "# nrcpus online : %u\n", nr);
-
-   ret = read(fd, , sizeof(nr));
-   if (ret != (ssize_t)sizeof(nr))
-   nr = -1; /* interpreted as error */
-
-   if (ph->needs_swap)
-   nr = bswap_32(nr);
-
-   fprintf(fp, "# nrcpus avail : %u\n", nr);
+   fprintf(fp, "# nrcpus online : %u\n", nr[1]);
+   fprintf(fp, "# nrcpus avail : %u\n", nr[0]);
 }
 
 static void print_version(struct perf_header *ph, int fd, FILE *fp)

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/