* 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

Reply via email to