Fix: access migrate_disable field directly
authorJonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Wed, 19 Sep 2018 21:48:49 +0000 (17:48 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Wed, 26 Sep 2018 16:34:19 +0000 (12:34 -0400)
For stable real time kernel > 4.9, the __migrate_disabled utility symbol
is not always exported. This can result in linking problem at build time
and runtime, preventing the loading of the tracer.

The problem was reported to the RT community. [1] [2]

A solution is to access the field directly instead of using the
utility wrapper.

It is important to note that the field is now available for other
configurations than CONFIG_PREEMPT_RT_FULL. For now, we choose to
expose the migratable context only for configurations where
CONFIG_PREEMPT_RT_FULL is set.

Based on the configuration dependency of the kernels, selecting
CONFIG_PREEMPT_RT_FULL ensures the presence of the migrate_disable
field.

Initial bug report [3].

[1] https://marc.info/?l=linux-rt-users&m=153730414126984&w=2
[2] https://marc.info/?l=linux-rt-users&m=153729444223779&w=2
[3] https://lists.lttng.org/pipermail/lttng-dev/2018-September/028216.html

Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
lttng-context-migratable.c

index bb44c653b4eaeec3164e7913ac4c75b1c4bb82ad..e3d8ede5decb9fdeb53c9153e23f1be821559436 100644 (file)
@@ -31,7 +31,7 @@ void migratable_record(struct lttng_ctx_field *field,
                struct lib_ring_buffer_ctx *ctx,
                struct lttng_channel *chan)
 {
-       uint8_t migratable = !__migrate_disabled(current);
+       uint8_t migratable = !current->migrate_disable;
 
        lib_ring_buffer_align_ctx(ctx, lttng_alignof(migratable));
        chan->ops->event_write(ctx, &migratable, sizeof(migratable));
@@ -42,7 +42,7 @@ void migratable_get_value(struct lttng_ctx_field *field,
                struct lttng_probe_ctx *lttng_probe_ctx,
                union lttng_ctx_value *value)
 {
-       value->s64 = !__migrate_disabled(current);
+       value->s64 = !current->migrate_disable;
 }
 
 int lttng_add_migratable_to_ctx(struct lttng_ctx **ctx)
This page took 0.027129 seconds and 4 git commands to generate.