All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jiri Olsa <jolsa@redhat.com>
To: Alexey Budankov <alexey.budankov@linux.intel.com>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>,
	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 v9 02/15] tools/libperf: add properties to struct pollfd *entries objects
Date: Mon, 6 Jul 2020 14:24:13 +0200	[thread overview]
Message-ID: <20200706122413.GB3401866@krava> (raw)
In-Reply-To: <09bbbc85-7ef9-ff9f-9865-fce6a1a4e903@linux.intel.com>

On Fri, Jul 03, 2020 at 10:41:45AM +0300, Alexey Budankov wrote:
> 
> Store boolean properties per struct pollfd *entries object in a
> bitmap of int size. Implement fdarray_prop__nonfilterable property
> to skip object from counting by fdarray_filter().

ok, I think can do it like this, few comments below

thanks,
jirka

> 
> Signed-off-by: Alexey Budankov <alexey.budankov@linux.intel.com>
> ---
>  tools/lib/api/fd/array.c                 | 17 +++++++++--------
>  tools/lib/api/fd/array.h                 | 18 +++++++++++++-----
>  tools/lib/perf/evlist.c                  | 10 +++++-----
>  tools/lib/perf/include/internal/evlist.h |  2 +-
>  tools/perf/tests/fdarray.c               |  2 +-
>  tools/perf/util/evlist.c                 |  2 +-
>  6 files changed, 30 insertions(+), 21 deletions(-)
> 
> diff --git a/tools/lib/api/fd/array.c b/tools/lib/api/fd/array.c
> index 89f9a2193c2d..a4223f8cb1ce 100644
> --- a/tools/lib/api/fd/array.c
> +++ b/tools/lib/api/fd/array.c
> @@ -12,31 +12,31 @@
>  void fdarray__init(struct fdarray *fda, int nr_autogrow)
>  {
>  	fda->entries	 = NULL;
> -	fda->priv	 = NULL;
> +	fda->prop	 = NULL;
>  	fda->nr		 = fda->nr_alloc = 0;
>  	fda->nr_autogrow = nr_autogrow;
>  }
>  
>  int fdarray__grow(struct fdarray *fda, int nr)
>  {
> -	void *priv;
> +	void *prop;
>  	int nr_alloc = fda->nr_alloc + nr;
> -	size_t psize = sizeof(fda->priv[0]) * nr_alloc;
> +	size_t psize = sizeof(fda->prop[0]) * nr_alloc;
>  	size_t size  = sizeof(struct pollfd) * nr_alloc;
>  	struct pollfd *entries = realloc(fda->entries, size);
>  
>  	if (entries == NULL)
>  		return -ENOMEM;
>  
> -	priv = realloc(fda->priv, psize);
> -	if (priv == NULL) {
> +	prop = realloc(fda->prop, psize);
> +	if (prop == NULL) {
>  		free(entries);
>  		return -ENOMEM;
>  	}
>  
>  	fda->nr_alloc = nr_alloc;
>  	fda->entries  = entries;
> -	fda->priv     = priv;
> +	fda->prop     = prop;
>  	return 0;
>  }
>  
> @@ -59,7 +59,7 @@ struct fdarray *fdarray__new(int nr_alloc, int nr_autogrow)
>  void fdarray__exit(struct fdarray *fda)
>  {
>  	free(fda->entries);
> -	free(fda->priv);
> +	free(fda->prop);
>  	fdarray__init(fda, 0);
>  }
>  
> @@ -69,7 +69,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_props props)
>  {
>  	int pos = fda->nr;
>  
> @@ -79,6 +79,7 @@ int fdarray__add(struct fdarray *fda, int fd, short revents)
>  
>  	fda->entries[fda->nr].fd     = fd;
>  	fda->entries[fda->nr].events = revents;
> +	fda->prop[fda->nr].bits = props;
>  	fda->nr++;
>  	return pos;
>  }
> diff --git a/tools/lib/api/fd/array.h b/tools/lib/api/fd/array.h
> index b39557d1a88f..19b6a34aeea5 100644
> --- a/tools/lib/api/fd/array.h
> +++ b/tools/lib/api/fd/array.h
> @@ -21,10 +21,18 @@ struct fdarray {
>  	int	       nr_alloc;
>  	int	       nr_autogrow;
>  	struct pollfd *entries;
> -	union {
> -		int    idx;
> -		void   *ptr;
> -	} *priv;
> +	struct {
> +		union {
> +			int    idx;
> +			void   *ptr;
> +		} priv;
> +		int bits;
> +	} *prop;
> +};

why not keeping the 'priv' as a struct, like:

	struct {
		union {
			int    idx;
			void   *ptr;
		};
		unsigned int flags;
	} *priv;

I think we would have much less changes, also please rename bits
to flags and use some unsigned type for that

> +
> +enum fdarray_props {
> +	fdarray_prop__default	    = 0x00000000,
> +	fdarray_prop__nonfilterable = 0x00000001
>  };

s/fdarray_props/fdarray_flag/

>  
>  void fdarray__init(struct fdarray *fda, int nr_autogrow);
> @@ -33,7 +41,7 @@ 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_props props);
>  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..25e76e458afb 100644

SNIP


  reply	other threads:[~2020-07-06 12:24 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-03  7:38 [PATCH v9 00/15] perf: support enable and disable commands in stat and record modes Alexey Budankov
2020-07-03  7:41 ` [PATCH v9 01/15] tools/libperf: avoid fds moving by fdarray__filter() Alexey Budankov
2020-07-03  7:41 ` [PATCH v9 02/15] tools/libperf: add properties to struct pollfd *entries objects Alexey Budankov
2020-07-06 12:24   ` Jiri Olsa [this message]
2020-07-06 13:05     ` Alexey Budankov
2020-07-03  7:42 ` [PATCH v9 03/15] tools/libperf: don't count nonfilterable fds by fdarray__filter() Alexey Budankov
2020-07-03  7:43 ` [PATCH v9 04/15] perf evlist: introduce control file descriptors Alexey Budankov
2020-07-03  7:43 ` [PATCH v9 05/15] perf evlist: implement control command handling functions Alexey Budankov
2020-07-03  7:44 ` [PATCH v9 06/15] perf stat: factor out body of event handling loop for system wide Alexey Budankov
2020-07-03  7:45 ` [PATCH v9 07/15] perf stat: move target check to loop control statement Alexey Budankov
2020-07-03  7:45 ` [PATCH v9 08/15] perf stat: factor out body of event handling loop for fork case Alexey Budankov
2020-07-03  7:46 ` [PATCH v9 09/15] perf stat: factor out event handling loop into dispatch_events() Alexey Budankov
2020-07-06 12:27   ` Jiri Olsa
2020-07-06 13:07     ` Alexey Budankov
2020-07-03  7:46 ` [PATCH v9 10/15] perf stat: extend -D,--delay option with -1 value Alexey Budankov
2020-07-03  7:47 ` [PATCH v9 11/15] perf stat: implement control commands handling Alexey Budankov
2020-07-06 12:34   ` Jiri Olsa
2020-07-06 14:47     ` Alexey Budankov
2020-07-06 19:34       ` Jiri Olsa
2020-07-07 13:07         ` Alexey Budankov
2020-07-07 13:14           ` Jiri Olsa
2020-07-07 13:24             ` Alexey Budankov
2020-07-07 14:23               ` Jiri Olsa
2020-07-07 14:55                 ` Alexey Budankov
2020-07-07 16:05                   ` Jiri Olsa
2020-07-07 16:43                     ` Alexey Budankov
2020-07-07 17:19                   ` Alexey Budankov
2020-07-06 12:37   ` Jiri Olsa
2020-07-06 13:10     ` Alexey Budankov
2020-07-03  7:47 ` [PATCH v9 12/15] perf stat: introduce --control fd:ctl-fd[,ack-fd] options Alexey Budankov
2020-07-03  7:48 ` [PATCH v9 13/15] perf record: extend -D,--delay option with -1 value Alexey Budankov
2020-07-03  7:49 ` [PATCH v9 14/15] perf record: implement control commands handling Alexey Budankov
2020-07-03  7:49 ` [PATCH v9 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=20200706122413.GB3401866@krava \
    --to=jolsa@redhat.com \
    --cc=acme@kernel.org \
    --cc=ak@linux.intel.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=alexey.budankov@linux.intel.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.