Message ID | 1675088985-20300-4-git-send-email-alan.maguire@oracle.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | BPF |
Headers | show |
Series | dwarves: support encoding of optimized-out parameters, removal of inconsistent static functions | expand |
Context | Check | Description |
---|---|---|
netdev/tree_selection | success | Not a local patch |
On Mon, Jan 30, 2023 at 02:29:43PM +0000, Alan Maguire wrote: > To coordinate across multiple encoders at collection time, there > will be a need to access the set of encoders. Rework the unused > btf_encoders__*() API to facilitate this. > > Signed-off-by: Alan Maguire <alan.maguire@oracle.com> > --- > btf_encoder.c | 30 ++++++++++++++++++++++-------- > btf_encoder.h | 6 ------ > 2 files changed, 22 insertions(+), 14 deletions(-) > > diff --git a/btf_encoder.c b/btf_encoder.c > index 44f1905..e20b628 100644 > --- a/btf_encoder.c > +++ b/btf_encoder.c > @@ -30,6 +30,7 @@ > > #include <errno.h> > #include <stdint.h> > +#include <pthread.h> > > struct elf_function { > const char *name; > @@ -79,21 +80,32 @@ struct btf_encoder { > } functions; > }; > > -void btf_encoders__add(struct list_head *encoders, struct btf_encoder *encoder) > -{ > - list_add_tail(&encoder->node, encoders); > -} > +static LIST_HEAD(encoders); > +static pthread_mutex_t encoders__lock = PTHREAD_MUTEX_INITIALIZER; > > -struct btf_encoder *btf_encoders__first(struct list_head *encoders) > +/* mutex only needed for add/delete, as this can happen in multiple encoding > + * threads. Traversal of the list is currently confined to thread collection. > + */ > +static void btf_encoders__add(struct btf_encoder *encoder) > { > - return list_first_entry(encoders, struct btf_encoder, node); > + pthread_mutex_lock(&encoders__lock); > + list_add_tail(&encoder->node, &encoders); > + pthread_mutex_unlock(&encoders__lock); > } > > -struct btf_encoder *btf_encoders__next(struct btf_encoder *encoder) > +#define btf_encoders__for_each_encoder(encoder) \ > + list_for_each_entry(encoder, &encoders, node) > + > +static void btf_encoders__delete(struct btf_encoder *encoder) > { > - return list_next_entry(encoder, node); > + pthread_mutex_lock(&encoders__lock); > + list_del(&encoder->node); > + pthread_mutex_unlock(&encoders__lock); > } > > +#define btf_encoders__for_each_encoder(encoder) \ > + list_for_each_entry(encoder, &encoders, node) > + there's extra btf_encoders__for_each_encoder define hum I'm scratching my head how this compile, probably because it's identical jirka > #define PERCPU_SECTION ".data..percpu" > > /* > @@ -1505,6 +1517,7 @@ struct btf_encoder *btf_encoder__new(struct cu *cu, const char *detached_filenam > > if (encoder->verbose) > printf("File %s:\n", cu->filename); > + btf_encoders__add(encoder); > } > out: > return encoder; > @@ -1519,6 +1532,7 @@ void btf_encoder__delete(struct btf_encoder *encoder) > if (encoder == NULL) > return; > > + btf_encoders__delete(encoder); > __gobuffer__delete(&encoder->percpu_secinfo); > zfree(&encoder->filename); > btf__free(encoder->btf); > diff --git a/btf_encoder.h b/btf_encoder.h > index a65120c..34516bb 100644 > --- a/btf_encoder.h > +++ b/btf_encoder.h > @@ -23,12 +23,6 @@ int btf_encoder__encode(struct btf_encoder *encoder); > > int btf_encoder__encode_cu(struct btf_encoder *encoder, struct cu *cu, struct conf_load *conf_load); > > -void btf_encoders__add(struct list_head *encoders, struct btf_encoder *encoder); > - > -struct btf_encoder *btf_encoders__first(struct list_head *encoders); > - > -struct btf_encoder *btf_encoders__next(struct btf_encoder *encoder); > - > struct btf *btf_encoder__btf(struct btf_encoder *encoder); > > int btf_encoder__add_encoder(struct btf_encoder *encoder, struct btf_encoder *other); > -- > 1.8.3.1 >
Em Mon, Jan 30, 2023 at 11:04:20PM +0100, Jiri Olsa escreveu: > On Mon, Jan 30, 2023 at 02:29:43PM +0000, Alan Maguire wrote: > > To coordinate across multiple encoders at collection time, there > > will be a need to access the set of encoders. Rework the unused > > btf_encoders__*() API to facilitate this. > > > > Signed-off-by: Alan Maguire <alan.maguire@oracle.com> > > --- > > btf_encoder.c | 30 ++++++++++++++++++++++-------- > > btf_encoder.h | 6 ------ > > 2 files changed, 22 insertions(+), 14 deletions(-) > > > > diff --git a/btf_encoder.c b/btf_encoder.c > > index 44f1905..e20b628 100644 > > --- a/btf_encoder.c > > +++ b/btf_encoder.c > > @@ -30,6 +30,7 @@ > > > > #include <errno.h> > > #include <stdint.h> > > +#include <pthread.h> > > > > struct elf_function { > > const char *name; > > @@ -79,21 +80,32 @@ struct btf_encoder { > > } functions; > > }; > > > > -void btf_encoders__add(struct list_head *encoders, struct btf_encoder *encoder) > > -{ > > - list_add_tail(&encoder->node, encoders); > > -} > > +static LIST_HEAD(encoders); > > +static pthread_mutex_t encoders__lock = PTHREAD_MUTEX_INITIALIZER; > > > > -struct btf_encoder *btf_encoders__first(struct list_head *encoders) > > +/* mutex only needed for add/delete, as this can happen in multiple encoding > > + * threads. Traversal of the list is currently confined to thread collection. > > + */ > > +static void btf_encoders__add(struct btf_encoder *encoder) > > { > > - return list_first_entry(encoders, struct btf_encoder, node); > > + pthread_mutex_lock(&encoders__lock); > > + list_add_tail(&encoder->node, &encoders); > > + pthread_mutex_unlock(&encoders__lock); > > } > > > > -struct btf_encoder *btf_encoders__next(struct btf_encoder *encoder) > > +#define btf_encoders__for_each_encoder(encoder) \ > > + list_for_each_entry(encoder, &encoders, node) > > + > > +static void btf_encoders__delete(struct btf_encoder *encoder) > > { > > - return list_next_entry(encoder, node); > > + pthread_mutex_lock(&encoders__lock); > > + list_del(&encoder->node); > > + pthread_mutex_unlock(&encoders__lock); > > } > > > > +#define btf_encoders__for_each_encoder(encoder) \ > > + list_for_each_entry(encoder, &encoders, node) > > + > > there's extra btf_encoders__for_each_encoder define > > hum I'm scratching my head how this compile, probably because it's identical I removed it, thanks! - Arnaldo > jirka > > > > #define PERCPU_SECTION ".data..percpu" > > > > /* > > @@ -1505,6 +1517,7 @@ struct btf_encoder *btf_encoder__new(struct cu *cu, const char *detached_filenam > > > > if (encoder->verbose) > > printf("File %s:\n", cu->filename); > > + btf_encoders__add(encoder); > > } > > out: > > return encoder; > > @@ -1519,6 +1532,7 @@ void btf_encoder__delete(struct btf_encoder *encoder) > > if (encoder == NULL) > > return; > > > > + btf_encoders__delete(encoder); > > __gobuffer__delete(&encoder->percpu_secinfo); > > zfree(&encoder->filename); > > btf__free(encoder->btf); > > diff --git a/btf_encoder.h b/btf_encoder.h > > index a65120c..34516bb 100644 > > --- a/btf_encoder.h > > +++ b/btf_encoder.h > > @@ -23,12 +23,6 @@ int btf_encoder__encode(struct btf_encoder *encoder); > > > > int btf_encoder__encode_cu(struct btf_encoder *encoder, struct cu *cu, struct conf_load *conf_load); > > > > -void btf_encoders__add(struct list_head *encoders, struct btf_encoder *encoder); > > - > > -struct btf_encoder *btf_encoders__first(struct list_head *encoders); > > - > > -struct btf_encoder *btf_encoders__next(struct btf_encoder *encoder); > > - > > struct btf *btf_encoder__btf(struct btf_encoder *encoder); > > > > int btf_encoder__add_encoder(struct btf_encoder *encoder, struct btf_encoder *other); > > -- > > 1.8.3.1 > >
diff --git a/btf_encoder.c b/btf_encoder.c index 44f1905..e20b628 100644 --- a/btf_encoder.c +++ b/btf_encoder.c @@ -30,6 +30,7 @@ #include <errno.h> #include <stdint.h> +#include <pthread.h> struct elf_function { const char *name; @@ -79,21 +80,32 @@ struct btf_encoder { } functions; }; -void btf_encoders__add(struct list_head *encoders, struct btf_encoder *encoder) -{ - list_add_tail(&encoder->node, encoders); -} +static LIST_HEAD(encoders); +static pthread_mutex_t encoders__lock = PTHREAD_MUTEX_INITIALIZER; -struct btf_encoder *btf_encoders__first(struct list_head *encoders) +/* mutex only needed for add/delete, as this can happen in multiple encoding + * threads. Traversal of the list is currently confined to thread collection. + */ +static void btf_encoders__add(struct btf_encoder *encoder) { - return list_first_entry(encoders, struct btf_encoder, node); + pthread_mutex_lock(&encoders__lock); + list_add_tail(&encoder->node, &encoders); + pthread_mutex_unlock(&encoders__lock); } -struct btf_encoder *btf_encoders__next(struct btf_encoder *encoder) +#define btf_encoders__for_each_encoder(encoder) \ + list_for_each_entry(encoder, &encoders, node) + +static void btf_encoders__delete(struct btf_encoder *encoder) { - return list_next_entry(encoder, node); + pthread_mutex_lock(&encoders__lock); + list_del(&encoder->node); + pthread_mutex_unlock(&encoders__lock); } +#define btf_encoders__for_each_encoder(encoder) \ + list_for_each_entry(encoder, &encoders, node) + #define PERCPU_SECTION ".data..percpu" /* @@ -1505,6 +1517,7 @@ struct btf_encoder *btf_encoder__new(struct cu *cu, const char *detached_filenam if (encoder->verbose) printf("File %s:\n", cu->filename); + btf_encoders__add(encoder); } out: return encoder; @@ -1519,6 +1532,7 @@ void btf_encoder__delete(struct btf_encoder *encoder) if (encoder == NULL) return; + btf_encoders__delete(encoder); __gobuffer__delete(&encoder->percpu_secinfo); zfree(&encoder->filename); btf__free(encoder->btf); diff --git a/btf_encoder.h b/btf_encoder.h index a65120c..34516bb 100644 --- a/btf_encoder.h +++ b/btf_encoder.h @@ -23,12 +23,6 @@ int btf_encoder__encode(struct btf_encoder *encoder); int btf_encoder__encode_cu(struct btf_encoder *encoder, struct cu *cu, struct conf_load *conf_load); -void btf_encoders__add(struct list_head *encoders, struct btf_encoder *encoder); - -struct btf_encoder *btf_encoders__first(struct list_head *encoders); - -struct btf_encoder *btf_encoders__next(struct btf_encoder *encoder); - struct btf *btf_encoder__btf(struct btf_encoder *encoder); int btf_encoder__add_encoder(struct btf_encoder *encoder, struct btf_encoder *other);
To coordinate across multiple encoders at collection time, there will be a need to access the set of encoders. Rework the unused btf_encoders__*() API to facilitate this. Signed-off-by: Alan Maguire <alan.maguire@oracle.com> --- btf_encoder.c | 30 ++++++++++++++++++++++-------- btf_encoder.h | 6 ------ 2 files changed, 22 insertions(+), 14 deletions(-)