From: Mathieu Desnoyers Date: Fri, 20 May 2016 01:32:06 +0000 (-0400) Subject: Fix: ring buffer: honor switch parameter type in remote switch X-Git-Tag: v2.6.6~1 X-Git-Url: http://git.liburcu.org/?p=lttng-modules.git;a=commitdiff_plain;h=9a9c9b6e05e8477c3edcf41a7f2697d1e588ce4d Fix: ring buffer: honor switch parameter type in remote switch Signed-off-by: Mathieu Desnoyers --- diff --git a/lib/ringbuffer/ring_buffer_frontend.c b/lib/ringbuffer/ring_buffer_frontend.c index 6eec3232..b25ce7df 100644 --- a/lib/ringbuffer/ring_buffer_frontend.c +++ b/lib/ringbuffer/ring_buffer_frontend.c @@ -1602,11 +1602,17 @@ void lib_ring_buffer_switch_slow(struct lib_ring_buffer *buf, enum switch_mode m } EXPORT_SYMBOL_GPL(lib_ring_buffer_switch_slow); +struct switch_param { + struct lib_ring_buffer *buf; + enum switch_mode mode; +}; + static void remote_switch(void *info) { - struct lib_ring_buffer *buf = info; + struct switch_param *param = info; + struct lib_ring_buffer *buf = param->buf; - lib_ring_buffer_switch_slow(buf, SWITCH_ACTIVE); + lib_ring_buffer_switch_slow(buf, param->mode); } static void _lib_ring_buffer_switch_remote(struct lib_ring_buffer *buf, @@ -1615,6 +1621,7 @@ static void _lib_ring_buffer_switch_remote(struct lib_ring_buffer *buf, struct channel *chan = buf->backend.chan; const struct lib_ring_buffer_config *config = &chan->backend.config; int ret; + struct switch_param param; /* * With global synchronization we don't need to use the IPI scheme. @@ -1635,8 +1642,10 @@ static void _lib_ring_buffer_switch_remote(struct lib_ring_buffer *buf, * switch. */ get_online_cpus(); + param.buf = buf; + param.mode = mode; ret = smp_call_function_single(buf->backend.cpu, - remote_switch, buf, 1); + remote_switch, ¶m, 1); if (ret) { /* Remote CPU is offline, do it ourself. */ lib_ring_buffer_switch_slow(buf, mode);