Re: [PATCH 1/4] perf ui progress: Make sure we always define step value

2017-09-09 Thread Milian Wolff
On Freitag, 8. September 2017 15:26:42 CEST Arnaldo Carvalho de Melo wrote:
> Em Fri, Sep 08, 2017 at 03:16:37PM +0200, Milian Wolff escreveu:
> > On Freitag, 8. September 2017 14:05:07 CEST Jiri Olsa wrote:
> > > +++ b/tools/perf/ui/progress.c
> > > @@ -25,7 +25,7 @@ void ui_progress__update(struct ui_progress *p, u64
> > > adv)
> > > 
> > >  void ui_progress__init(struct ui_progress *p, u64 total, const char
> > >  *title)
> > > 
> > > {
> > > 
> > >   p->curr = 0;
> > > 
> > > - p->next = p->step = total / 16;
> > > + p->next = p->step = total / 16 ?: 1;
> > > 
> > >   p->total = total;
> > >   p->title = title;
> > 
> > This is a GNU extension, does this compile with clang?
> 
> Huh?
> 
> [acme@jouet linux]$ find tools/ -name "*.[ch]"| xargs grep ?: | wc -l
> 64
> [acme@jouet linux]$ find . -name "*.[ch]"| xargs grep ?: | wc -l
> 725
> [acme@jouet linux]$
> 
> And yes, tools/perf/ is built with clang regularly, I use containers to
> test build the tools/{perf,lib} codebase with gcc and clang on almost
> all distros, things like:

OK, thanks for the clarification. I was wondering because I didn't know about 
this syntax. Googling I found this: https://en.wikipedia.org/wiki/%3F:#C

Quote:

> A GNU extension to C allows omitting the second operand, and using 
implicitly the first operand as the second also:
>
> a = x ? : y;

Cheers

-- 
Milian Wolff | milian.wo...@kdab.com | Senior Software Engineer
KDAB (Deutschland) GmbH KG, a KDAB Group company
Tel: +49-30-521325470
KDAB - The Qt Experts




Re: [PATCH 1/4] perf ui progress: Make sure we always define step value

2017-09-09 Thread Milian Wolff
On Freitag, 8. September 2017 15:26:42 CEST Arnaldo Carvalho de Melo wrote:
> Em Fri, Sep 08, 2017 at 03:16:37PM +0200, Milian Wolff escreveu:
> > On Freitag, 8. September 2017 14:05:07 CEST Jiri Olsa wrote:
> > > +++ b/tools/perf/ui/progress.c
> > > @@ -25,7 +25,7 @@ void ui_progress__update(struct ui_progress *p, u64
> > > adv)
> > > 
> > >  void ui_progress__init(struct ui_progress *p, u64 total, const char
> > >  *title)
> > > 
> > > {
> > > 
> > >   p->curr = 0;
> > > 
> > > - p->next = p->step = total / 16;
> > > + p->next = p->step = total / 16 ?: 1;
> > > 
> > >   p->total = total;
> > >   p->title = title;
> > 
> > This is a GNU extension, does this compile with clang?
> 
> Huh?
> 
> [acme@jouet linux]$ find tools/ -name "*.[ch]"| xargs grep ?: | wc -l
> 64
> [acme@jouet linux]$ find . -name "*.[ch]"| xargs grep ?: | wc -l
> 725
> [acme@jouet linux]$
> 
> And yes, tools/perf/ is built with clang regularly, I use containers to
> test build the tools/{perf,lib} codebase with gcc and clang on almost
> all distros, things like:

OK, thanks for the clarification. I was wondering because I didn't know about 
this syntax. Googling I found this: https://en.wikipedia.org/wiki/%3F:#C

Quote:

> A GNU extension to C allows omitting the second operand, and using 
implicitly the first operand as the second also:
>
> a = x ? : y;

Cheers

-- 
Milian Wolff | milian.wo...@kdab.com | Senior Software Engineer
KDAB (Deutschland) GmbH KG, a KDAB Group company
Tel: +49-30-521325470
KDAB - The Qt Experts




Re: [PATCH 1/4] perf ui progress: Make sure we always define step value

2017-09-08 Thread Arnaldo Carvalho de Melo
Em Fri, Sep 08, 2017 at 03:16:37PM +0200, Milian Wolff escreveu:
> On Freitag, 8. September 2017 14:05:07 CEST Jiri Olsa wrote:
> > +++ b/tools/perf/ui/progress.c
> > @@ -25,7 +25,7 @@ void ui_progress__update(struct ui_progress *p, u64 adv)
> >  void ui_progress__init(struct ui_progress *p, u64 total, const char *title)
> > {
> > p->curr = 0;
> > -   p->next = p->step = total / 16;
> > +   p->next = p->step = total / 16 ?: 1;
> > p->total = total;
> > p->title = title;
> 
> This is a GNU extension, does this compile with clang?

Huh?

[acme@jouet linux]$ find tools/ -name "*.[ch]"| xargs grep ?: | wc -l
64
[acme@jouet linux]$ find . -name "*.[ch]"| xargs grep ?: | wc -l
725
[acme@jouet linux]$

And yes, tools/perf/ is built with clang regularly, I use containers to
test build the tools/{perf,lib} codebase with gcc and clang on almost
all distros, things like:

[acme@jouet linux]$ cat ~/git/linux-perf-tools-build/fedora/26/Dockerfile 
# docker.io/acmel/linux-perf-tools-build-fedora:26
FROM docker.io/fedora:26
MAINTAINER Arnaldo Carvalho de Melo 
# The second dnf line is to be able to build a kernel, do a make 
header_install, etc,
# So that we can build samples/bpf/ and the kernel
RUN dnf -y install make gcc flex bison elfutils-libelf-devel \
   bc findutils clang llvm openssl git \
   elfutils-devel libunwind-devel audit-libs-devel \
   openssl-devel slang-devel gtk2-devel perl-ExtUtils-Embed \
   python-devel binutils-devel xz-devel numactl-devel 
systemtap-sdt-devel \
   redhat-rpm-config && \
dnf -y clean all && \
rm -rf /usr/share/doc /usr/share/gtk-doc /usr/share/locale /usr/share/man 
&& \
mkdir -m 777 -p /tmp/build/perf /tmp/build/objtool /tmp/build/linux && \
groupadd -r perfbuilder && \
useradd -m -r -g perfbuilder perfbuilder && \
chown -R perfbuilder.perfbuilder /tmp/build
USER perfbuilder
ENTRYPOINT make -C /git/linux/tools/perf O=/tmp/build/perf && \
   rm -rf /tmp/build/perf/{.[^.]*,*} && \
   make -C /git/linux/tools/perf O=/tmp/build/perf CC=clang && \
   rm -rf /tmp/build/perf/{.[^.]*,*} && \
   make NO_LIBELF=1 -C /git/linux/tools/perf O=/tmp/build/perf && \
   rm -rf /tmp/build/perf/{.[^.]*,*} && \
   make NO_LIBELF=1 -C /git/linux/tools/perf O=/tmp/build/perf CC=clang 
&& \
   make -C /git/linux/tools/objtool O=/tmp/build/objtool && \
   make -C /git/linux O=/tmp/build/linux defconfig && \
   make -C /git/linux O=/tmp/build/linux headers_install && \
   make -C /git/linux O=/tmp/build/linux samples/bpf/
[acme@jouet linux]$

- Arnaldo


Re: [PATCH 1/4] perf ui progress: Make sure we always define step value

2017-09-08 Thread Arnaldo Carvalho de Melo
Em Fri, Sep 08, 2017 at 03:16:37PM +0200, Milian Wolff escreveu:
> On Freitag, 8. September 2017 14:05:07 CEST Jiri Olsa wrote:
> > +++ b/tools/perf/ui/progress.c
> > @@ -25,7 +25,7 @@ void ui_progress__update(struct ui_progress *p, u64 adv)
> >  void ui_progress__init(struct ui_progress *p, u64 total, const char *title)
> > {
> > p->curr = 0;
> > -   p->next = p->step = total / 16;
> > +   p->next = p->step = total / 16 ?: 1;
> > p->total = total;
> > p->title = title;
> 
> This is a GNU extension, does this compile with clang?

Huh?

[acme@jouet linux]$ find tools/ -name "*.[ch]"| xargs grep ?: | wc -l
64
[acme@jouet linux]$ find . -name "*.[ch]"| xargs grep ?: | wc -l
725
[acme@jouet linux]$

And yes, tools/perf/ is built with clang regularly, I use containers to
test build the tools/{perf,lib} codebase with gcc and clang on almost
all distros, things like:

[acme@jouet linux]$ cat ~/git/linux-perf-tools-build/fedora/26/Dockerfile 
# docker.io/acmel/linux-perf-tools-build-fedora:26
FROM docker.io/fedora:26
MAINTAINER Arnaldo Carvalho de Melo 
# The second dnf line is to be able to build a kernel, do a make 
header_install, etc,
# So that we can build samples/bpf/ and the kernel
RUN dnf -y install make gcc flex bison elfutils-libelf-devel \
   bc findutils clang llvm openssl git \
   elfutils-devel libunwind-devel audit-libs-devel \
   openssl-devel slang-devel gtk2-devel perl-ExtUtils-Embed \
   python-devel binutils-devel xz-devel numactl-devel 
systemtap-sdt-devel \
   redhat-rpm-config && \
dnf -y clean all && \
rm -rf /usr/share/doc /usr/share/gtk-doc /usr/share/locale /usr/share/man 
&& \
mkdir -m 777 -p /tmp/build/perf /tmp/build/objtool /tmp/build/linux && \
groupadd -r perfbuilder && \
useradd -m -r -g perfbuilder perfbuilder && \
chown -R perfbuilder.perfbuilder /tmp/build
USER perfbuilder
ENTRYPOINT make -C /git/linux/tools/perf O=/tmp/build/perf && \
   rm -rf /tmp/build/perf/{.[^.]*,*} && \
   make -C /git/linux/tools/perf O=/tmp/build/perf CC=clang && \
   rm -rf /tmp/build/perf/{.[^.]*,*} && \
   make NO_LIBELF=1 -C /git/linux/tools/perf O=/tmp/build/perf && \
   rm -rf /tmp/build/perf/{.[^.]*,*} && \
   make NO_LIBELF=1 -C /git/linux/tools/perf O=/tmp/build/perf CC=clang 
&& \
   make -C /git/linux/tools/objtool O=/tmp/build/objtool && \
   make -C /git/linux O=/tmp/build/linux defconfig && \
   make -C /git/linux O=/tmp/build/linux headers_install && \
   make -C /git/linux O=/tmp/build/linux samples/bpf/
[acme@jouet linux]$

- Arnaldo


Re: [PATCH 1/4] perf ui progress: Make sure we always define step value

2017-09-08 Thread Milian Wolff
On Freitag, 8. September 2017 14:05:07 CEST Jiri Olsa wrote:
> Unlikely, but we could have ui_progress__init being called
> with total < 16, which would set the next and step variables
> to 0. That would force unnecessary ui_progress__ops->update
> calls because 'next' would never raise.
> 
> Forcing the next and step values to be always > 0.
> 
> Link: http://lkml.kernel.org/n/tip-0zcvhmsmbhkfgoi7c670r...@git.kernel.org
> Signed-off-by: Jiri Olsa 
> ---
>  tools/perf/ui/progress.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/tools/perf/ui/progress.c b/tools/perf/ui/progress.c
> index a0f24c7115c5..a9c15804b1f6 100644
> --- a/tools/perf/ui/progress.c
> +++ b/tools/perf/ui/progress.c
> @@ -25,7 +25,7 @@ void ui_progress__update(struct ui_progress *p, u64 adv)
>  void ui_progress__init(struct ui_progress *p, u64 total, const char *title)
> {
>   p->curr = 0;
> - p->next = p->step = total / 16;
> + p->next = p->step = total / 16 ?: 1;
>   p->total = total;
>   p->title = title;

This is a GNU extension, does this compile with clang?

Cheers

-- 
Milian Wolff | milian.wo...@kdab.com | Senior Software Engineer
KDAB (Deutschland) GmbH KG, a KDAB Group company
Tel: +49-30-521325470
KDAB - The Qt Experts




Re: [PATCH 1/4] perf ui progress: Make sure we always define step value

2017-09-08 Thread Milian Wolff
On Freitag, 8. September 2017 14:05:07 CEST Jiri Olsa wrote:
> Unlikely, but we could have ui_progress__init being called
> with total < 16, which would set the next and step variables
> to 0. That would force unnecessary ui_progress__ops->update
> calls because 'next' would never raise.
> 
> Forcing the next and step values to be always > 0.
> 
> Link: http://lkml.kernel.org/n/tip-0zcvhmsmbhkfgoi7c670r...@git.kernel.org
> Signed-off-by: Jiri Olsa 
> ---
>  tools/perf/ui/progress.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/tools/perf/ui/progress.c b/tools/perf/ui/progress.c
> index a0f24c7115c5..a9c15804b1f6 100644
> --- a/tools/perf/ui/progress.c
> +++ b/tools/perf/ui/progress.c
> @@ -25,7 +25,7 @@ void ui_progress__update(struct ui_progress *p, u64 adv)
>  void ui_progress__init(struct ui_progress *p, u64 total, const char *title)
> {
>   p->curr = 0;
> - p->next = p->step = total / 16;
> + p->next = p->step = total / 16 ?: 1;
>   p->total = total;
>   p->title = title;

This is a GNU extension, does this compile with clang?

Cheers

-- 
Milian Wolff | milian.wo...@kdab.com | Senior Software Engineer
KDAB (Deutschland) GmbH KG, a KDAB Group company
Tel: +49-30-521325470
KDAB - The Qt Experts




[PATCH 1/4] perf ui progress: Make sure we always define step value

2017-09-08 Thread Jiri Olsa
Unlikely, but we could have ui_progress__init being called
with total < 16, which would set the next and step variables
to 0. That would force unnecessary ui_progress__ops->update
calls because 'next' would never raise.

Forcing the next and step values to be always > 0.

Link: http://lkml.kernel.org/n/tip-0zcvhmsmbhkfgoi7c670r...@git.kernel.org
Signed-off-by: Jiri Olsa 
---
 tools/perf/ui/progress.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/perf/ui/progress.c b/tools/perf/ui/progress.c
index a0f24c7115c5..a9c15804b1f6 100644
--- a/tools/perf/ui/progress.c
+++ b/tools/perf/ui/progress.c
@@ -25,7 +25,7 @@ void ui_progress__update(struct ui_progress *p, u64 adv)
 void ui_progress__init(struct ui_progress *p, u64 total, const char *title)
 {
p->curr = 0;
-   p->next = p->step = total / 16;
+   p->next = p->step = total / 16 ?: 1;
p->total = total;
p->title = title;
 
-- 
2.9.5



[PATCH 1/4] perf ui progress: Make sure we always define step value

2017-09-08 Thread Jiri Olsa
Unlikely, but we could have ui_progress__init being called
with total < 16, which would set the next and step variables
to 0. That would force unnecessary ui_progress__ops->update
calls because 'next' would never raise.

Forcing the next and step values to be always > 0.

Link: http://lkml.kernel.org/n/tip-0zcvhmsmbhkfgoi7c670r...@git.kernel.org
Signed-off-by: Jiri Olsa 
---
 tools/perf/ui/progress.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/perf/ui/progress.c b/tools/perf/ui/progress.c
index a0f24c7115c5..a9c15804b1f6 100644
--- a/tools/perf/ui/progress.c
+++ b/tools/perf/ui/progress.c
@@ -25,7 +25,7 @@ void ui_progress__update(struct ui_progress *p, u64 adv)
 void ui_progress__init(struct ui_progress *p, u64 total, const char *title)
 {
p->curr = 0;
-   p->next = p->step = total / 16;
+   p->next = p->step = total / 16 ?: 1;
p->total = total;
p->title = title;
 
-- 
2.9.5