Re: perf-core build fails on powerpc

2018-03-14 Thread John Garry

On 14/03/2018 07:10, John Garry wrote:

On 13/03/2018 21:18, Sukadev Bhattiprolu wrote:

John Garry [john.ga...@huawei.com] wrote:

On 13/03/2018 20:10, Sukadev Bhattiprolu wrote:


Hi John,

I have an xfs file system which seems to have d_type == DT_UNKNOWN
for all
entries in 'tools/perf/pmu-events/arch/power8'! readdir(3) says
->d_type
may not be supported by all file systems.

Not relying on ->d_type seems to fix it:



Hi Sukadev,

Thanks for debugging this. Jiri Olsa (cc'ed) warned me on this, so I
did add
the check for d_type == DT_UNKNOWN.

But, if all files have d_type == DT_UNKNOWN, you're code would from
visual
observation look to be same as mine (apart from check for '.' or '..'
filename, which I would say is already covered by stat() and
S_ISDIR()). Or
is d_type value just unreliable?


In the current code and with DT_UNKNOWN, is_leaf_dir() returns false when
it sees the "." or ".." entries right? In the new code, we skip those and
return false only if we find some other directory.



OK, that's the real issue, being the "." and ".." entries.

@Arnaldo, I'll try to send a fix for this today. I just need to make an
xfs to test. Sorry for the hassle.



Hi Sukadev,

Even with the xfs I have created I still don't see DT_UNKNOWN. So can 
you kindly test this change for me:


diff --git a/tools/perf/pmu-events/jevents.c 
b/tools/perf/pmu-events/jevents.c

index 1c018445e757..9f712dafa0b2 100644
--- a/tools/perf/pmu-events/jevents.c
+++ b/tools/perf/pmu-events/jevents.c
@@ -873,7 +873,10 @@ static int is_leaf_dir(const char *fpath)
return 0;

while ((dir = readdir(d)) != NULL) {
-   if (dir->d_type == DT_DIR && dir->d_name[0] != '.') {
+   if (!strcmp(dir->d_name, ".") || !strcmp(dir->d_name, ".."))
+continue;
+
+   if (dir->d_type == DT_DIR) {
res = 0;
break;
} else if (dir->d_type == DT_UNKNOWN) {


It's quite similar to your change, except keeping the check for DT_DIR.

Much appreciated,
John


John


Thanks,

Sukadev










Re: perf-core build fails on powerpc

2018-03-14 Thread John Garry

On 13/03/2018 21:18, Sukadev Bhattiprolu wrote:

John Garry [john.ga...@huawei.com] wrote:

On 13/03/2018 20:10, Sukadev Bhattiprolu wrote:


Hi John,

I have an xfs file system which seems to have d_type == DT_UNKNOWN for all
entries in 'tools/perf/pmu-events/arch/power8'! readdir(3) says ->d_type
may not be supported by all file systems.

Not relying on ->d_type seems to fix it:



Hi Sukadev,

Thanks for debugging this. Jiri Olsa (cc'ed) warned me on this, so I did add
the check for d_type == DT_UNKNOWN.

But, if all files have d_type == DT_UNKNOWN, you're code would from visual
observation look to be same as mine (apart from check for '.' or '..'
filename, which I would say is already covered by stat() and S_ISDIR()). Or
is d_type value just unreliable?


In the current code and with DT_UNKNOWN, is_leaf_dir() returns false when
it sees the "." or ".." entries right? In the new code, we skip those and
return false only if we find some other directory.



OK, that's the real issue, being the "." and ".." entries.

@Arnaldo, I'll try to send a fix for this today. I just need to make an 
xfs to test. Sorry for the hassle.


John


Thanks,

Sukadev








Re: perf-core build fails on powerpc

2018-03-13 Thread Arnaldo Carvalho de Melo
Em Tue, Mar 13, 2018 at 12:17:42PM -0700, Sukadev Bhattiprolu escreveu:
> 
> 
> Building perf on Powerpc seems broken when using Arnaldo's perf/core branch
> with HEAD as:
> 
> 1b442ed ("perf test: Fix exit code for record+probe_libc_inet_pton.sh")
> 
> It maybe related to this commit:

Humpf, this should've been caught by one of the powerpc crossbuild
containers I have in place... will check why the jevents.c code is not
being stressed...

- Arnaldo
 
>   commit d596299
>   Author: John Garry 
>   Date:   Thu Mar 8 18:58:29 2018 +0800
> 
>   perf vendor events: Add support for pmu events vendor subdirectory
> 
> Reverting this hunk from tools/perf/pmu-events/jevents.c, seems to fix the
> problem for me.
> 
> @@ -957,8 +963,12 @@ static int process_one_file(const char *fpath, const 
> struct
>  
>  
> /* model directory, reset topic */
> +#if 0
> if ((level == 1 && is_dir && is_leaf_dir(fpath)) ||
> (level == 2 && is_dir)) {
> +#else
> +   if (level == 1 && is_dir) {
> +#endif
> 
> 
> The problem is that the tools/perf/pmu-events/pmu-events.c file generated by
> the jevents program is missing the "prefix" lines like:
> 
>   struct pmu_event pme_power8[] = {
> and 
>   struct pmu_event pme_power9[] = {
> 
> 
> i.e the pmu-events.c begins like:
> ---
> 
> #include "../../pmu-events/pmu-events.h"
> {
> .name = "pm_data_from_dl2l3_mod",
> .event = "event=0x4c048",
> .desc = "The processor's data cache was reloaded with Modified (M) 
> data from another chip's L2 or L3 on a different Node or Group (Distant), as 
> this chip due to a demand load",
> .topic = "cache",
> .long_desc = "The processor's data cache was reloaded with Modified 
> (M) data from another chip's L2 or L3 on a different Node or Group (Distant), 
> as this chip due to either only demand loads or demand loads plus prefetches 
> if MMCR1[16] is 1",
> },
> 
> ---
> 
> Below is the debug and info messages at the time of failure:
> 
> ---
> 
>   HOSTCC   /home/suka/linux-acme.git/tools/perf/perf-obj/pmu-events/jevents.o
>   HOSTLD   
> /home/suka/linux-acme.git/tools/perf/perf-obj/pmu-events/jevents-in.o
>   LINK /home/suka/linux-acme.git/tools/perf/perf-obj/pmu-events/jevents
>   GEN  
> /home/suka/linux-acme.git/tools/perf/perf-obj/pmu-events/pmu-events.c
> d 0  50 powerpc  pmu-events/arch/powerpc
> d 14096 power8   pmu-events/arch/powerpc/power8
> f 2   10275 cache.json   pmu-events/arch/powerpc/power8/cache.json
> f 2 302 floating-point.json  
> pmu-events/arch/powerpc/power8/floating-point.json
> f 2   29283 marked.json  pmu-events/arch/powerpc/power8/marked.json
> f 2   12028 memory.json  pmu-events/arch/powerpc/power8/memory.json
> f 2  159271 other.json   pmu-events/arch/powerpc/power8/other.json
> f 2   10777 pipeline.jsonpmu-events/arch/powerpc/power8/pipeline.json
> f 23781 pmc.json pmu-events/arch/powerpc/power8/pmc.json
> f 26664 translation.json 
> pmu-events/arch/powerpc/power8/translation.json
> f 2   25104 frontend.jsonpmu-events/arch/powerpc/power8/frontend.json
> d 14096 power9   pmu-events/arch/powerpc/power9
> f 21096 floating-point.json  
> pmu-events/arch/powerpc/power9/floating-point.json
> f 25503 cache.json   pmu-events/arch/powerpc/power9/cache.json
> f 2   14885 frontend.jsonpmu-events/arch/powerpc/power9/frontend.json
> f 2   27807 marked.json  pmu-events/arch/powerpc/power9/marked.json
> f 24820 memory.json  pmu-events/arch/powerpc/power9/memory.json
> f 2   85387 other.json   pmu-events/arch/powerpc/power9/other.json
> f 2   23839 pipeline.jsonpmu-events/arch/powerpc/power9/pipeline.json
> f 25138 pmc.json pmu-events/arch/powerpc/power9/pmc.json
> f 29897 translation.json 
> pmu-events/arch/powerpc/power9/translation.json
> f 1 440 mapfile.csv  pmu-events/arch/powerpc/mapfile.csv
> jevents: Processing mapfile pmu-events/arch/powerpc/mapfile.csv
>   CC   
> /home/suka/linux-acme.git/tools/perf/perf-obj/pmu-events/pmu-events.o
> /home/suka/linux-acme.git/tools/perf/perf-obj/pmu-events/pmu-events.c:2:1: 
> error: expected identifier or ‘(’ before ‘{’ token
>  {
>  ^
> /home/suka/linux-acme.git/tools/perf/perf-obj/pmu-events/pmu-events.c:8:2: 
> error: expected identifier or ‘(’ before ‘,’ token
>  },
>   ^
> /home/suka/linux-acme.git/tools/perf/perf-obj/pmu-events/pmu-events.c:15:2: 
> error: expected identifier or ‘(’ before ‘,’ token
>  },
>   ^
> /home/suka/linux-acme.git/tools/perf/perf-obj/pmu-events/pmu-events.c:22:2: 
> error: expected identifier or ‘(’ before ‘,’ token
>  },
> 
> 


Re: perf-core build fails on powerpc

2018-03-13 Thread Sukadev Bhattiprolu
John Garry [john.ga...@huawei.com] wrote:
> On 13/03/2018 20:10, Sukadev Bhattiprolu wrote:
> 
> > Hi John,
> > 
> > I have an xfs file system which seems to have d_type == DT_UNKNOWN for all
> > entries in 'tools/perf/pmu-events/arch/power8'! readdir(3) says ->d_type
> > may not be supported by all file systems.
> > 
> > Not relying on ->d_type seems to fix it:
> > 
> 
> Hi Sukadev,
> 
> Thanks for debugging this. Jiri Olsa (cc'ed) warned me on this, so I did add
> the check for d_type == DT_UNKNOWN.
> 
> But, if all files have d_type == DT_UNKNOWN, you're code would from visual
> observation look to be same as mine (apart from check for '.' or '..'
> filename, which I would say is already covered by stat() and S_ISDIR()). Or
> is d_type value just unreliable?

In the current code and with DT_UNKNOWN, is_leaf_dir() returns false when
it sees the "." or ".." entries right? In the new code, we skip those and
return false only if we find some other directory. 

Thanks,

Sukadev



Re: perf-core build fails on powerpc

2018-03-13 Thread John Garry

On 13/03/2018 20:10, Sukadev Bhattiprolu wrote:

+


John Garry [john.ga...@huawei.com] wrote:

On 13/03/2018 19:17, Sukadev Bhattiprolu wrote:



Building perf on Powerpc seems broken when using Arnaldo's perf/core branch
with HEAD as:

1b442ed ("perf test: Fix exit code for record+probe_libc_inet_pton.sh")

It maybe related to this commit:

commit d596299
Author: John Garry 
Date:   Thu Mar 8 18:58:29 2018 +0800

perf vendor events: Add support for pmu events vendor subdirectory

Reverting this hunk from tools/perf/pmu-events/jevents.c, seems to fix the
problem for me.



Hi John,

I have an xfs file system which seems to have d_type == DT_UNKNOWN for all
entries in 'tools/perf/pmu-events/arch/power8'! readdir(3) says ->d_type
may not be supported by all file systems.

Not relying on ->d_type seems to fix it:



Hi Sukadev,

Thanks for debugging this. Jiri Olsa (cc'ed) warned me on this, so I did 
add the check for d_type == DT_UNKNOWN.


But, if all files have d_type == DT_UNKNOWN, you're code would from 
visual observation look to be same as mine (apart from check for '.' or 
'..' filename, which I would say is already covered by stat() and 
S_ISDIR()). Or is d_type value just unreliable?


Much appreciated,
John


@@ -873,26 +879,26 @@ static int is_leaf_dir(const char *fpath)
return 0;

while ((dir = readdir(d)) != NULL) {
-   if (dir->d_type == DT_DIR && dir->d_name[0] != '.') {
-   res = 0;
-   break;
-   } else if (dir->d_type == DT_UNKNOWN) {
-   char path[PATH_MAX];
-   struct stat st;
+   char path[PATH_MAX];
+   struct stat st;

-   sprintf(path, "%s/%s", fpath, dir->d_name);
-   if (stat(path, &st))
-   break;
+   if (strcmp(dir->d_name, ".") == 0 ||
+   strcmp(dir->d_name, "..") == 0)
+   continue;

-   if (S_ISDIR(st.st_mode)) {
-   res = 0;
-   break;
-   }
+   sprintf(path, "%s/%s", fpath, dir->d_name);
+   if (stat(path, &st))
+   break;
+
+   if (S_ISDIR(st.st_mode)) {
+   res = 0;
+   break;








Re: perf-core build fails on powerpc

2018-03-13 Thread Sukadev Bhattiprolu
John Garry [john.ga...@huawei.com] wrote:
> On 13/03/2018 19:17, Sukadev Bhattiprolu wrote:
> > 
> > 
> > Building perf on Powerpc seems broken when using Arnaldo's perf/core branch
> > with HEAD as:
> > 
> > 1b442ed ("perf test: Fix exit code for record+probe_libc_inet_pton.sh")
> > 
> > It maybe related to this commit:
> > 
> > commit d596299
> > Author: John Garry 
> > Date:   Thu Mar 8 18:58:29 2018 +0800
> > 
> > perf vendor events: Add support for pmu events vendor subdirectory
> > 
> > Reverting this hunk from tools/perf/pmu-events/jevents.c, seems to fix the
> > problem for me.
> > 

Hi John,

I have an xfs file system which seems to have d_type == DT_UNKNOWN for all
entries in 'tools/perf/pmu-events/arch/power8'! readdir(3) says ->d_type
may not be supported by all file systems.

Not relying on ->d_type seems to fix it:

@@ -873,26 +879,26 @@ static int is_leaf_dir(const char *fpath)
return 0;
 
while ((dir = readdir(d)) != NULL) {
-   if (dir->d_type == DT_DIR && dir->d_name[0] != '.') {
-   res = 0;
-   break;
-   } else if (dir->d_type == DT_UNKNOWN) {
-   char path[PATH_MAX];
-   struct stat st;
+   char path[PATH_MAX];
+   struct stat st;
 
-   sprintf(path, "%s/%s", fpath, dir->d_name);
-   if (stat(path, &st))
-   break;
+   if (strcmp(dir->d_name, ".") == 0 ||
+   strcmp(dir->d_name, "..") == 0)
+   continue;
 
-   if (S_ISDIR(st.st_mode)) {
-   res = 0;
-   break;
-   }
+   sprintf(path, "%s/%s", fpath, dir->d_name);
+   if (stat(path, &st))
+   break;
+
+   if (S_ISDIR(st.st_mode)) {
+   res = 0;
+   break;



Re: perf-core build fails on powerpc

2018-03-13 Thread John Garry

On 13/03/2018 19:17, Sukadev Bhattiprolu wrote:



Building perf on Powerpc seems broken when using Arnaldo's perf/core branch
with HEAD as:

1b442ed ("perf test: Fix exit code for record+probe_libc_inet_pton.sh")

It maybe related to this commit:

commit d596299
Author: John Garry 
Date:   Thu Mar 8 18:58:29 2018 +0800

perf vendor events: Add support for pmu events vendor subdirectory

Reverting this hunk from tools/perf/pmu-events/jevents.c, seems to fix the
problem for me.

@@ -957,8 +963,12 @@ static int process_one_file(const char *fpath, const struct


/* model directory, reset topic */
+#if 0
if ((level == 1 && is_dir && is_leaf_dir(fpath)) ||
(level == 2 && is_dir)) {
+#else
+   if (level == 1 && is_dir) {
+#endif


The problem is that the tools/perf/pmu-events/pmu-events.c file generated by
the jevents program is missing the "prefix" lines like:

struct pmu_event pme_power8[] = {
and
struct pmu_event pme_power9[] = {


i.e the pmu-events.c begins like:
---

#include "../../pmu-events/pmu-events.h"
{
.name = "pm_data_from_dl2l3_mod",
.event = "event=0x4c048",
.desc = "The processor's data cache was reloaded with Modified (M) data from 
another chip's L2 or L3 on a different Node or Group (Distant), as this chip due to a 
demand load",
.topic = "cache",
.long_desc = "The processor's data cache was reloaded with Modified (M) data 
from another chip's L2 or L3 on a different Node or Group (Distant), as this chip due to 
either only demand loads or demand loads plus prefetches if MMCR1[16] is 1",
},

---



I will check this, thanks and sorry for the hassle.

John


Below is the debug and info messages at the time of failure:

---

  HOSTCC   /home/suka/linux-acme.git/tools/perf/perf-obj/pmu-events/jevents.o
  HOSTLD   /home/suka/linux-acme.git/tools/perf/perf-obj/pmu-events/jevents-in.o
  LINK /home/suka/linux-acme.git/tools/perf/perf-obj/pmu-events/jevents
  GEN  /home/suka/linux-acme.git/tools/perf/perf-obj/pmu-events/pmu-events.c
d 0  50 powerpc  pmu-events/arch/powerpc
d 14096 power8   pmu-events/arch/powerpc/power8
f 2   10275 cache.json   pmu-events/arch/powerpc/power8/cache.json
f 2 302 floating-point.json  
pmu-events/arch/powerpc/power8/floating-point.json
f 2   29283 marked.json  pmu-events/arch/powerpc/power8/marked.json
f 2   12028 memory.json  pmu-events/arch/powerpc/power8/memory.json
f 2  159271 other.json   pmu-events/arch/powerpc/power8/other.json
f 2   10777 pipeline.jsonpmu-events/arch/powerpc/power8/pipeline.json
f 23781 pmc.json pmu-events/arch/powerpc/power8/pmc.json
f 26664 translation.json pmu-events/arch/powerpc/power8/translation.json
f 2   25104 frontend.jsonpmu-events/arch/powerpc/power8/frontend.json
d 14096 power9   pmu-events/arch/powerpc/power9
f 21096 floating-point.json  
pmu-events/arch/powerpc/power9/floating-point.json
f 25503 cache.json   pmu-events/arch/powerpc/power9/cache.json
f 2   14885 frontend.jsonpmu-events/arch/powerpc/power9/frontend.json
f 2   27807 marked.json  pmu-events/arch/powerpc/power9/marked.json
f 24820 memory.json  pmu-events/arch/powerpc/power9/memory.json
f 2   85387 other.json   pmu-events/arch/powerpc/power9/other.json
f 2   23839 pipeline.jsonpmu-events/arch/powerpc/power9/pipeline.json
f 25138 pmc.json pmu-events/arch/powerpc/power9/pmc.json
f 29897 translation.json pmu-events/arch/powerpc/power9/translation.json
f 1 440 mapfile.csv  pmu-events/arch/powerpc/mapfile.csv
jevents: Processing mapfile pmu-events/arch/powerpc/mapfile.csv
  CC   /home/suka/linux-acme.git/tools/perf/perf-obj/pmu-events/pmu-events.o
/home/suka/linux-acme.git/tools/perf/perf-obj/pmu-events/pmu-events.c:2:1: 
error: expected identifier or ‘(’ before ‘{’ token
 {
 ^
/home/suka/linux-acme.git/tools/perf/perf-obj/pmu-events/pmu-events.c:8:2: 
error: expected identifier or ‘(’ before ‘,’ token
 },
  ^
/home/suka/linux-acme.git/tools/perf/perf-obj/pmu-events/pmu-events.c:15:2: 
error: expected identifier or ‘(’ before ‘,’ token
 },
  ^
/home/suka/linux-acme.git/tools/perf/perf-obj/pmu-events/pmu-events.c:22:2: 
error: expected identifier or ‘(’ before ‘,’ token
 },




.






perf-core build fails on powerpc

2018-03-13 Thread Sukadev Bhattiprolu


Building perf on Powerpc seems broken when using Arnaldo's perf/core branch
with HEAD as:

1b442ed ("perf test: Fix exit code for record+probe_libc_inet_pton.sh")

It maybe related to this commit:

commit d596299
Author: John Garry 
Date:   Thu Mar 8 18:58:29 2018 +0800

perf vendor events: Add support for pmu events vendor subdirectory

Reverting this hunk from tools/perf/pmu-events/jevents.c, seems to fix the
problem for me.

@@ -957,8 +963,12 @@ static int process_one_file(const char *fpath, const struct
 
 
/* model directory, reset topic */
+#if 0
if ((level == 1 && is_dir && is_leaf_dir(fpath)) ||
(level == 2 && is_dir)) {
+#else
+   if (level == 1 && is_dir) {
+#endif


The problem is that the tools/perf/pmu-events/pmu-events.c file generated by
the jevents program is missing the "prefix" lines like:

struct pmu_event pme_power8[] = {
and 
struct pmu_event pme_power9[] = {


i.e the pmu-events.c begins like:
---

#include "../../pmu-events/pmu-events.h"
{
.name = "pm_data_from_dl2l3_mod",
.event = "event=0x4c048",
.desc = "The processor's data cache was reloaded with Modified (M) data 
from another chip's L2 or L3 on a different Node or Group (Distant), as this 
chip due to a demand load",
.topic = "cache",
.long_desc = "The processor's data cache was reloaded with Modified (M) 
data from another chip's L2 or L3 on a different Node or Group (Distant), as 
this chip due to either only demand loads or demand loads plus prefetches if 
MMCR1[16] is 1",
},

---

Below is the debug and info messages at the time of failure:

---

  HOSTCC   /home/suka/linux-acme.git/tools/perf/perf-obj/pmu-events/jevents.o
  HOSTLD   /home/suka/linux-acme.git/tools/perf/perf-obj/pmu-events/jevents-in.o
  LINK /home/suka/linux-acme.git/tools/perf/perf-obj/pmu-events/jevents
  GEN  /home/suka/linux-acme.git/tools/perf/perf-obj/pmu-events/pmu-events.c
d 0  50 powerpc  pmu-events/arch/powerpc
d 14096 power8   pmu-events/arch/powerpc/power8
f 2   10275 cache.json   pmu-events/arch/powerpc/power8/cache.json
f 2 302 floating-point.json  
pmu-events/arch/powerpc/power8/floating-point.json
f 2   29283 marked.json  pmu-events/arch/powerpc/power8/marked.json
f 2   12028 memory.json  pmu-events/arch/powerpc/power8/memory.json
f 2  159271 other.json   pmu-events/arch/powerpc/power8/other.json
f 2   10777 pipeline.jsonpmu-events/arch/powerpc/power8/pipeline.json
f 23781 pmc.json pmu-events/arch/powerpc/power8/pmc.json
f 26664 translation.json pmu-events/arch/powerpc/power8/translation.json
f 2   25104 frontend.jsonpmu-events/arch/powerpc/power8/frontend.json
d 14096 power9   pmu-events/arch/powerpc/power9
f 21096 floating-point.json  
pmu-events/arch/powerpc/power9/floating-point.json
f 25503 cache.json   pmu-events/arch/powerpc/power9/cache.json
f 2   14885 frontend.jsonpmu-events/arch/powerpc/power9/frontend.json
f 2   27807 marked.json  pmu-events/arch/powerpc/power9/marked.json
f 24820 memory.json  pmu-events/arch/powerpc/power9/memory.json
f 2   85387 other.json   pmu-events/arch/powerpc/power9/other.json
f 2   23839 pipeline.jsonpmu-events/arch/powerpc/power9/pipeline.json
f 25138 pmc.json pmu-events/arch/powerpc/power9/pmc.json
f 29897 translation.json pmu-events/arch/powerpc/power9/translation.json
f 1 440 mapfile.csv  pmu-events/arch/powerpc/mapfile.csv
jevents: Processing mapfile pmu-events/arch/powerpc/mapfile.csv
  CC   /home/suka/linux-acme.git/tools/perf/perf-obj/pmu-events/pmu-events.o
/home/suka/linux-acme.git/tools/perf/perf-obj/pmu-events/pmu-events.c:2:1: 
error: expected identifier or ‘(’ before ‘{’ token
 {
 ^
/home/suka/linux-acme.git/tools/perf/perf-obj/pmu-events/pmu-events.c:8:2: 
error: expected identifier or ‘(’ before ‘,’ token
 },
  ^
/home/suka/linux-acme.git/tools/perf/perf-obj/pmu-events/pmu-events.c:15:2: 
error: expected identifier or ‘(’ before ‘,’ token
 },
  ^
/home/suka/linux-acme.git/tools/perf/perf-obj/pmu-events/pmu-events.c:22:2: 
error: expected identifier or ‘(’ before ‘,’ token
 },