"Fossies" - the Fresh Open Source Software Archive

Member "lttng-modules-2.11.0-rc5/lttng-context-vtid.c" (11 Jun 2019, 2231 Bytes) of package /linux/misc/lttng-modules-2.11.0-rc5.tar.bz2:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "lttng-context-vtid.c" see the Fossies "Dox" file reference documentation.

    1 /* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1)
    2  *
    3  * lttng-context-vtid.c
    4  *
    5  * LTTng vTID context.
    6  *
    7  * Copyright (C) 2009-2012 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    8  */
    9 
   10 #include <linux/module.h>
   11 #include <linux/slab.h>
   12 #include <linux/sched.h>
   13 #include <lttng-events.h>
   14 #include <wrapper/ringbuffer/frontend_types.h>
   15 #include <wrapper/vmalloc.h>
   16 #include <lttng-tracer.h>
   17 
   18 static
   19 size_t vtid_get_size(size_t offset)
   20 {
   21     size_t size = 0;
   22 
   23     size += lib_ring_buffer_align(offset, lttng_alignof(pid_t));
   24     size += sizeof(pid_t);
   25     return size;
   26 }
   27 
   28 static
   29 void vtid_record(struct lttng_ctx_field *field,
   30          struct lib_ring_buffer_ctx *ctx,
   31          struct lttng_channel *chan)
   32 {
   33     pid_t vtid;
   34 
   35     /*
   36      * nsproxy can be NULL when scheduled out of exit.
   37      */
   38     if (!current->nsproxy)
   39         vtid = 0;
   40     else
   41         vtid = task_pid_vnr(current);
   42     lib_ring_buffer_align_ctx(ctx, lttng_alignof(vtid));
   43     chan->ops->event_write(ctx, &vtid, sizeof(vtid));
   44 }
   45 
   46 static
   47 void vtid_get_value(struct lttng_ctx_field *field,
   48         struct lttng_probe_ctx *lttng_probe_ctx,
   49         union lttng_ctx_value *value)
   50 {
   51     pid_t vtid;
   52 
   53     /*
   54      * nsproxy can be NULL when scheduled out of exit.
   55      */
   56     if (!current->nsproxy)
   57         vtid = 0;
   58     else
   59         vtid = task_pid_vnr(current);
   60     value->s64 = vtid;
   61 }
   62 
   63 int lttng_add_vtid_to_ctx(struct lttng_ctx **ctx)
   64 {
   65     struct lttng_ctx_field *field;
   66 
   67     field = lttng_append_context(ctx);
   68     if (!field)
   69         return -ENOMEM;
   70     if (lttng_find_context(*ctx, "vtid")) {
   71         lttng_remove_context_field(ctx, field);
   72         return -EEXIST;
   73     }
   74     field->event_field.name = "vtid";
   75     field->event_field.type.atype = atype_integer;
   76     field->event_field.type.u.basic.integer.size = sizeof(pid_t) * CHAR_BIT;
   77     field->event_field.type.u.basic.integer.alignment = lttng_alignof(pid_t) * CHAR_BIT;
   78     field->event_field.type.u.basic.integer.signedness = lttng_is_signed_type(pid_t);
   79     field->event_field.type.u.basic.integer.reverse_byte_order = 0;
   80     field->event_field.type.u.basic.integer.base = 10;
   81     field->event_field.type.u.basic.integer.encoding = lttng_encode_none;
   82     field->get_size = vtid_get_size;
   83     field->record = vtid_record;
   84     field->get_value = vtid_get_value;
   85     lttng_context_update(*ctx);
   86     wrapper_vmalloc_sync_all();
   87     return 0;
   88 }
   89 EXPORT_SYMBOL_GPL(lttng_add_vtid_to_ctx);