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 <lttng/ust-ringbuffer-context.h>
24 #include "common/getcpu.h"
26 #include "context-internal.h"
29 size_t cpu_id_get_size(void *priv
__attribute__((unused
)),
30 struct lttng_ust_probe_ctx
*probe_ctx
__attribute__((unused
)),
35 size
+= lttng_ust_ring_buffer_align(offset
, lttng_ust_rb_alignof(int));
41 void cpu_id_record(void *priv
__attribute__((unused
)),
42 struct lttng_ust_probe_ctx
*probe_ctx
__attribute__((unused
)),
43 struct lttng_ust_ring_buffer_ctx
*ctx
,
44 struct lttng_ust_channel_buffer
*chan
)
48 cpu
= lttng_ust_get_cpu();
49 chan
->ops
->event_write(ctx
, &cpu
, sizeof(cpu
), lttng_ust_rb_alignof(cpu
));
53 void cpu_id_get_value(void *priv
__attribute__((unused
)),
54 struct lttng_ust_probe_ctx
*probe_ctx
__attribute__((unused
)),
55 struct lttng_ust_ctx_value
*value
)
57 value
->u
.s64
= lttng_ust_get_cpu();
60 static const struct lttng_ust_ctx_field
*ctx_field
= lttng_ust_static_ctx_field(
61 lttng_ust_static_event_field("cpu_id",
62 lttng_ust_static_type_integer(sizeof(int) * CHAR_BIT
,
63 lttng_ust_rb_alignof(int) * CHAR_BIT
,
64 lttng_ust_is_signed_type(int),
65 LTTNG_UST_BYTE_ORDER
, 10),
72 int lttng_add_cpu_id_to_ctx(struct lttng_ust_ctx
**ctx
)
76 if (lttng_find_context(*ctx
, ctx_field
->event_field
->name
)) {
78 goto error_find_context
;
80 ret
= lttng_ust_context_append(ctx
, ctx_field
);