Fix: ring buffer: honor switch parameter type in remote switch
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Fri, 20 May 2016 01:32:06 +0000 (21:32 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Fri, 20 May 2016 01:32:06 +0000 (21:32 -0400)
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
lib/ringbuffer/ring_buffer_frontend.c

index 9cd62ced16ae19deedd8eea935c507e09cd5616a..379bf95e67799c6bfee928c63e2636478a984b3f 100644 (file)
@@ -1606,11 +1606,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,
@@ -1619,6 +1625,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.
@@ -1639,8 +1646,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, &param, 1);
        if (ret) {
                /* Remote CPU is offline, do it ourself. */
                lib_ring_buffer_switch_slow(buf, mode);
This page took 0.026617 seconds and 4 git commands to generate.