All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Alexey Budankov <alexey.budankov@linux.intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>, Namhyung Kim <namhyung@kernel.org>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@redhat.com>, Andi Kleen <ak@linux.intel.com>,
	linux-kernel <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v12 02/15] tools/libperf: add flags to fdarray fds objects
Date: Tue, 21 Jul 2020 09:53:10 -0300	[thread overview]
Message-ID: <20200721125310.GG77866@kernel.org> (raw)
In-Reply-To: <6b7d43ff-0801-d5dd-4e90-fcd86b17c1c8@linux.intel.com>

Em Fri, Jul 17, 2020 at 09:59:45AM +0300, Alexey Budankov escreveu:
> 
> Store flags per struct pollfd *entries object in a bitmap of int size.
> Implement fdarray_flag__nonfilterable flag to skip object from counting
> by fdarray__filter(). Fixed fdarray test issue reported by kernel test
> robot.

Thanks, applied.

- Arnaldo
 
> Signed-off-by: Alexey Budankov <alexey.budankov@linux.intel.com>
> Acked-by: Jiri Olsa <jolsa@redhat.com>
> Acked-by: Namhyung Kim <namhyung@kernel.org>
> Reported-by: kernel test robot <rong.a.chen@intel.com>
> ---
>  tools/lib/api/fd/array.c                 |  9 +++++++--
>  tools/lib/api/fd/array.h                 | 16 ++++++++++++----
>  tools/lib/perf/evlist.c                  |  6 +++---
>  tools/lib/perf/include/internal/evlist.h |  2 +-
>  tools/perf/tests/fdarray.c               |  2 +-
>  tools/perf/util/evlist.c                 |  2 +-
>  6 files changed, 25 insertions(+), 12 deletions(-)
> 
> diff --git a/tools/lib/api/fd/array.c b/tools/lib/api/fd/array.c
> index 89f9a2193c2d..01b3b89f9797 100644
> --- a/tools/lib/api/fd/array.c
> +++ b/tools/lib/api/fd/array.c
> @@ -8,6 +8,7 @@
>  #include <poll.h>
>  #include <stdlib.h>
>  #include <unistd.h>
> +#include <string.h>
>  
>  void fdarray__init(struct fdarray *fda, int nr_autogrow)
>  {
> @@ -19,7 +20,7 @@ void fdarray__init(struct fdarray *fda, int nr_autogrow)
>  
>  int fdarray__grow(struct fdarray *fda, int nr)
>  {
> -	void *priv;
> +	struct priv *priv;
>  	int nr_alloc = fda->nr_alloc + nr;
>  	size_t psize = sizeof(fda->priv[0]) * nr_alloc;
>  	size_t size  = sizeof(struct pollfd) * nr_alloc;
> @@ -34,6 +35,9 @@ int fdarray__grow(struct fdarray *fda, int nr)
>  		return -ENOMEM;
>  	}
>  
> +	memset(&entries[fda->nr_alloc], 0, sizeof(struct pollfd) * nr);
> +	memset(&priv[fda->nr_alloc], 0, sizeof(fda->priv[0]) * nr);
> +
>  	fda->nr_alloc = nr_alloc;
>  	fda->entries  = entries;
>  	fda->priv     = priv;
> @@ -69,7 +73,7 @@ void fdarray__delete(struct fdarray *fda)
>  	free(fda);
>  }
>  
> -int fdarray__add(struct fdarray *fda, int fd, short revents)
> +int fdarray__add(struct fdarray *fda, int fd, short revents, enum fdarray_flags flags)
>  {
>  	int pos = fda->nr;
>  
> @@ -79,6 +83,7 @@ int fdarray__add(struct fdarray *fda, int fd, short revents)
>  
>  	fda->entries[fda->nr].fd     = fd;
>  	fda->entries[fda->nr].events = revents;
> +	fda->priv[fda->nr].flags = flags;
>  	fda->nr++;
>  	return pos;
>  }
> diff --git a/tools/lib/api/fd/array.h b/tools/lib/api/fd/array.h
> index b39557d1a88f..7fcf21a33c0c 100644
> --- a/tools/lib/api/fd/array.h
> +++ b/tools/lib/api/fd/array.h
> @@ -21,19 +21,27 @@ struct fdarray {
>  	int	       nr_alloc;
>  	int	       nr_autogrow;
>  	struct pollfd *entries;
> -	union {
> -		int    idx;
> -		void   *ptr;
> +	struct priv {
> +		union {
> +			int    idx;
> +			void   *ptr;
> +		};
> +		unsigned int flags;
>  	} *priv;
>  };
>  
> +enum fdarray_flags {
> +	fdarray_flag__default	    = 0x00000000,
> +	fdarray_flag__nonfilterable = 0x00000001
> +};
> +
>  void fdarray__init(struct fdarray *fda, int nr_autogrow);
>  void fdarray__exit(struct fdarray *fda);
>  
>  struct fdarray *fdarray__new(int nr_alloc, int nr_autogrow);
>  void fdarray__delete(struct fdarray *fda);
>  
> -int fdarray__add(struct fdarray *fda, int fd, short revents);
> +int fdarray__add(struct fdarray *fda, int fd, short revents, enum fdarray_flags flags);
>  int fdarray__poll(struct fdarray *fda, int timeout);
>  int fdarray__filter(struct fdarray *fda, short revents,
>  		    void (*entry_destructor)(struct fdarray *fda, int fd, void *arg),
> diff --git a/tools/lib/perf/evlist.c b/tools/lib/perf/evlist.c
> index 6a875a0f01bb..2208444ecb44 100644
> --- a/tools/lib/perf/evlist.c
> +++ b/tools/lib/perf/evlist.c
> @@ -305,9 +305,9 @@ int perf_evlist__alloc_pollfd(struct perf_evlist *evlist)
>  }
>  
>  int perf_evlist__add_pollfd(struct perf_evlist *evlist, int fd,
> -			    void *ptr, short revent)
> +			    void *ptr, short revent, enum fdarray_flags flags)
>  {
> -	int pos = fdarray__add(&evlist->pollfd, fd, revent | POLLERR | POLLHUP);
> +	int pos = fdarray__add(&evlist->pollfd, fd, revent | POLLERR | POLLHUP, flags);
>  
>  	if (pos >= 0) {
>  		evlist->pollfd.priv[pos].ptr = ptr;
> @@ -488,7 +488,7 @@ mmap_per_evsel(struct perf_evlist *evlist, struct perf_evlist_mmap_ops *ops,
>  		revent = !overwrite ? POLLIN : 0;
>  
>  		if (!evsel->system_wide &&
> -		    perf_evlist__add_pollfd(evlist, fd, map, revent) < 0) {
> +		    perf_evlist__add_pollfd(evlist, fd, map, revent, fdarray_flag__default) < 0) {
>  			perf_mmap__put(map);
>  			return -1;
>  		}
> diff --git a/tools/lib/perf/include/internal/evlist.h b/tools/lib/perf/include/internal/evlist.h
> index 74dc8c3f0b66..2d0fa02b036f 100644
> --- a/tools/lib/perf/include/internal/evlist.h
> +++ b/tools/lib/perf/include/internal/evlist.h
> @@ -45,7 +45,7 @@ struct perf_evlist_mmap_ops {
>  
>  int perf_evlist__alloc_pollfd(struct perf_evlist *evlist);
>  int perf_evlist__add_pollfd(struct perf_evlist *evlist, int fd,
> -			    void *ptr, short revent);
> +			    void *ptr, short revent, enum fdarray_flags flags);
>  
>  int perf_evlist__mmap_ops(struct perf_evlist *evlist,
>  			  struct perf_evlist_mmap_ops *ops,
> diff --git a/tools/perf/tests/fdarray.c b/tools/perf/tests/fdarray.c
> index d0c8a05aab2f..d9eca8e86a6b 100644
> --- a/tools/perf/tests/fdarray.c
> +++ b/tools/perf/tests/fdarray.c
> @@ -112,7 +112,7 @@ int test__fdarray__add(struct test *test __maybe_unused, int subtest __maybe_unu
>  	}
>  
>  #define FDA_ADD(_idx, _fd, _revents, _nr)				   \
> -	if (fdarray__add(fda, _fd, _revents) < 0) {			   \
> +	if (fdarray__add(fda, _fd, _revents, fdarray_flag__default) < 0) { \
>  		pr_debug("\n%d: fdarray__add(fda, %d, %d) failed!",	   \
>  			 __LINE__,_fd, _revents);			   \
>  		goto out_delete;					   \
> diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
> index 1b884695b4d3..bcbe0cb8482e 100644
> --- a/tools/perf/util/evlist.c
> +++ b/tools/perf/util/evlist.c
> @@ -497,7 +497,7 @@ int perf_evlist__enable_event_idx(struct evlist *evlist,
>  
>  int evlist__add_pollfd(struct evlist *evlist, int fd)
>  {
> -	return perf_evlist__add_pollfd(&evlist->core, fd, NULL, POLLIN);
> +	return perf_evlist__add_pollfd(&evlist->core, fd, NULL, POLLIN, fdarray_flag__default);
>  }
>  
>  int evlist__filter_pollfd(struct evlist *evlist, short revents_and_mask)
> -- 
> 2.24.1
> 
> 

-- 

- Arnaldo

  reply	other threads:[~2020-07-21 12:53 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-17  6:45 [PATCH v12 00/15] perf: support enable and disable commands in stat and record modes Alexey Budankov
2020-07-17  6:59 ` [PATCH v12 01/15] tools/libperf: avoid internal moving of fdarray fds Alexey Budankov
2020-07-21 12:40   ` Arnaldo Carvalho de Melo
2020-07-17  6:59 ` [PATCH v12 02/15] tools/libperf: add flags to fdarray fds objects Alexey Budankov
2020-07-21 12:53   ` Arnaldo Carvalho de Melo [this message]
2020-07-17  7:00 ` [PATCH v12 03/15] tools/libperf: avoid counting of nonfilterable fdarray fds Alexey Budankov
2020-07-21 19:59   ` Arnaldo Carvalho de Melo
2020-07-17  7:00 ` [PATCH v12 04/15] perf evlist: introduce control file descriptors Alexey Budankov
2020-07-17  7:01 ` [PATCH v12 05/15] perf evlist: implement control command handling functions Alexey Budankov
2020-07-22 12:27   ` Arnaldo Carvalho de Melo
2020-07-22 12:34     ` Arnaldo Carvalho de Melo
2020-07-22 12:45       ` Alexey Budankov
2020-07-22 12:41   ` Arnaldo Carvalho de Melo
2020-07-17  7:02 ` [PATCH v12 06/15] perf stat: factor out body of event handling loop for system wide Alexey Budankov
2020-07-17  7:02 ` [PATCH v12 07/15] perf stat: move target check to loop control statement Alexey Budankov
2020-07-17  7:03 ` [PATCH v12 08/15] perf stat: factor out body of event handling loop for fork case Alexey Budankov
2020-07-17  7:04 ` [PATCH v12 09/15] perf stat: factor out event handling loop into dispatch_events() Alexey Budankov
2020-07-17  7:04 ` [PATCH v12 10/15] perf stat: extend -D,--delay option with -1 value Alexey Budankov
2020-07-17  7:05 ` [PATCH v12 11/15] perf stat: implement control commands handling Alexey Budankov
2020-07-22 12:56   ` Arnaldo Carvalho de Melo
2020-07-22 13:18     ` Alexey Budankov
2020-07-17  7:05 ` [PATCH v12 12/15] perf stat: introduce --control fd:ctl-fd[,ack-fd] options Alexey Budankov
2020-07-17  7:07 ` [PATCH v12 13/15] perf record: extend -D,--delay option with -1 value Alexey Budankov
2020-07-17  7:07 ` [PATCH v12 14/15] perf record: implement control commands handling Alexey Budankov
2020-07-17  7:08 ` [PATCH v12 15/15] perf record: introduce --control fd:ctl-fd[,ack-fd] options Alexey Budankov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200721125310.GG77866@kernel.org \
    --to=acme@kernel.org \
    --cc=ak@linux.intel.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=alexey.budankov@linux.intel.com \
    --cc=jolsa@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=namhyung@kernel.org \
    --cc=peterz@infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.