* Francis Giraldeau ([email protected]) wrote: > Memcpy source can be either user-space or kernel-space. To avoid code > duplication, this patch makes the operation a parameter to the macros. > Available macros are thus: > > * tp_memcpy: kernel-space array copy > * tp_memcpy_from_user: user-space array copy > * tp_memcpy_dyn: kernel-space sequence copy > * tp_memcpy_dyn_from_user: user-space sequence copy > > Those are TP_fast_assign macros that can be used with __dynamic_array > macros in TP_STRUCT__entry in a TRACE_EVENT.
Merged, thanks ! Mathieu > > Signed-off-by: Francis Giraldeau <[email protected]> > --- > probes/lttng-events.h | 37 +++++++++++++++++++++++-------------- > 1 file changed, 23 insertions(+), 14 deletions(-) > > diff --git a/probes/lttng-events.h b/probes/lttng-events.h > index 05e17b9..492423a 100644 > --- a/probes/lttng-events.h > +++ b/probes/lttng-events.h > @@ -523,17 +523,27 @@ __assign_##dest: > \ > } \ > goto __end_field_##dest; > > -#undef tp_memcpy > -#define tp_memcpy(dest, src, len) \ > +/* fixed length array memcpy */ > +#undef tp_memcpy_gen > +#define tp_memcpy_gen(write_ops, dest, src, len) \ > __assign_##dest: \ > if (0) \ > (void) __typemap.dest; \ > lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(__typemap.dest)); > \ > - __chan->ops->event_write(&__ctx, src, len); \ > + __chan->ops->write_ops(&__ctx, src, len); \ > goto __end_field_##dest; > > -#undef tp_memcpy_dyn > -#define tp_memcpy_dyn(dest, src) \ > +#undef tp_memcpy > +#define tp_memcpy(dest, src, len) \ > + tp_memcpy_gen(event_write, dest, src, len) > + > +#undef tp_memcpy_from_user > +#define tp_memcpy_from_user(dest, src, len) \ > + tp_memcpy_gen(event_write_from_user, dest, src, len) > + > +/* variable length sequence memcpy */ > +#undef tp_memcpy_dyn_gen > +#define tp_memcpy_dyn_gen(write_ops, dest, src) > \ > __assign_##dest##_1: \ > { \ > u32 __tmpl = __dynamic_len[__dynamic_len_idx]; \ > @@ -543,18 +553,17 @@ __assign_##dest##_1: > \ > goto __end_field_##dest##_1; \ > __assign_##dest##_2: \ > lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(__typemap.dest)); > \ > - __chan->ops->event_write(&__ctx, src, \ > + __chan->ops->write_ops(&__ctx, src, \ > sizeof(__typemap.dest) * __get_dynamic_array_len(dest));\ > goto __end_field_##dest##_2; > > -#undef tp_memcpy_from_user > -#define tp_memcpy_from_user(dest, src, len) \ > - __assign_##dest: \ > - if (0) \ > - (void) __typemap.dest; \ > - lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(__typemap.dest)); > \ > - __chan->ops->event_write_from_user(&__ctx, src, len); \ > - goto __end_field_##dest; > +#undef tp_memcpy_dyn > +#define tp_memcpy_dyn(dest, src) \ > + tp_memcpy_dyn_gen(event_write, dest, src) > + > +#undef tp_memcpy_dyn_from_user > +#define tp_memcpy_dyn_from_user(dest, src) \ > + tp_memcpy_dyn_gen(event_write_from_user, dest, src) > > /* > * The string length including the final \0. > -- > 1.7.9.5 > > > _______________________________________________ > lttng-dev mailing list > [email protected] > http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev -- Mathieu Desnoyers Operating System Efficiency R&D Consultant EfficiOS Inc. http://www.efficios.com _______________________________________________ lttng-dev mailing list [email protected] http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
