2 * SPDX-License-Identifier: LGPL-2.1-only
4 * Copyright (C) 2009-2015 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
6 * LTTng UST CPU id context.
8 * Note: threads can be migrated at any point while executing the
9 * tracepoint probe. This means the CPU id field (and filter) is only
10 * statistical. For instance, even though a user might select a
11 * cpu_id==1 filter, there may be few events recorded into the channel
12 * appearing from other CPUs, due to migration.
17 #include <sys/types.h>
20 #include <lttng/ust-events.h>
21 #include <lttng/ust-tracer.h>
22 #include "lib/lttng-ust/getcpu.h"
23 #include <lttng/ust-ringbuffer-context.h>
25 #include "context-internal.h"
28 size_t cpu_id_get_size(void *priv
__attribute__((unused
)),
33 size
+= lttng_ust_ring_buffer_align(offset
, lttng_ust_rb_alignof(int));
39 void cpu_id_record(void *priv
__attribute__((unused
)),
40 struct lttng_ust_ring_buffer_ctx
*ctx
,
41 struct lttng_ust_channel_buffer
*chan
)
45 cpu
= lttng_ust_get_cpu();
46 chan
->ops
->event_write(ctx
, &cpu
, sizeof(cpu
), lttng_ust_rb_alignof(cpu
));
50 void cpu_id_get_value(void *priv
__attribute__((unused
)),
51 struct lttng_ust_ctx_value
*value
)
53 value
->u
.s64
= lttng_ust_get_cpu();
56 static const struct lttng_ust_ctx_field
*ctx_field
= lttng_ust_static_ctx_field(
57 lttng_ust_static_event_field("cpu_id",
58 lttng_ust_static_type_integer(sizeof(int) * CHAR_BIT
,
59 lttng_ust_rb_alignof(int) * CHAR_BIT
,
60 lttng_ust_is_signed_type(int),
68 int lttng_add_cpu_id_to_ctx(struct lttng_ust_ctx
**ctx
)
72 if (lttng_find_context(*ctx
, ctx_field
->event_field
->name
)) {
74 goto error_find_context
;
76 ret
= lttng_ust_context_append(ctx
, ctx_field
);