{
        /* use static because iter can be a bit big for the stack */
        static struct trace_iterator iter;
+       static struct ring_buffer_iter *buffer_iter[CONFIG_NR_CPUS];
        unsigned int old_userobj;
        int cnt = 0, cpu;
 
        trace_init_global_iter(&iter);
+       iter.buffer_iter = buffer_iter;
 
        for_each_tracing_cpu(cpu) {
                atomic_inc(&per_cpu_ptr(iter.trace_buffer->data, cpu)->disabled);
                atomic_dec(&per_cpu_ptr(iter.trace_buffer->data, cpu)->disabled);
        }
 
-       for_each_tracing_cpu(cpu)
-               if (iter.buffer_iter[cpu])
+       for_each_tracing_cpu(cpu) {
+               if (iter.buffer_iter[cpu]) {
                        ring_buffer_read_finish(iter.buffer_iter[cpu]);
+                       iter.buffer_iter[cpu] = NULL;
+               }
+       }
 }
 
 /*