|
@@ -1693,22 +1693,14 @@ int ring_buffer_resize(struct ring_buffer *buffer, unsigned long size,
|
|
|
if (!cpu_buffer->nr_pages_to_update)
|
|
|
continue;
|
|
|
|
|
|
- /* The update must run on the CPU that is being updated. */
|
|
|
- preempt_disable();
|
|
|
- if (cpu == smp_processor_id() || !cpu_online(cpu)) {
|
|
|
+ /* Can't run something on an offline CPU. */
|
|
|
+ if (!cpu_online(cpu)) {
|
|
|
rb_update_pages(cpu_buffer);
|
|
|
cpu_buffer->nr_pages_to_update = 0;
|
|
|
} else {
|
|
|
- /*
|
|
|
- * Can not disable preemption for schedule_work_on()
|
|
|
- * on PREEMPT_RT.
|
|
|
- */
|
|
|
- preempt_enable();
|
|
|
schedule_work_on(cpu,
|
|
|
&cpu_buffer->update_pages_work);
|
|
|
- preempt_disable();
|
|
|
}
|
|
|
- preempt_enable();
|
|
|
}
|
|
|
|
|
|
/* wait for all the updates to complete */
|
|
@@ -1746,22 +1738,14 @@ int ring_buffer_resize(struct ring_buffer *buffer, unsigned long size,
|
|
|
|
|
|
get_online_cpus();
|
|
|
|
|
|
- preempt_disable();
|
|
|
- /* The update must run on the CPU that is being updated. */
|
|
|
- if (cpu_id == smp_processor_id() || !cpu_online(cpu_id))
|
|
|
+ /* Can't run something on an offline CPU. */
|
|
|
+ if (!cpu_online(cpu_id))
|
|
|
rb_update_pages(cpu_buffer);
|
|
|
else {
|
|
|
- /*
|
|
|
- * Can not disable preemption for schedule_work_on()
|
|
|
- * on PREEMPT_RT.
|
|
|
- */
|
|
|
- preempt_enable();
|
|
|
schedule_work_on(cpu_id,
|
|
|
&cpu_buffer->update_pages_work);
|
|
|
wait_for_completion(&cpu_buffer->update_done);
|
|
|
- preempt_disable();
|
|
|
}
|
|
|
- preempt_enable();
|
|
|
|
|
|
cpu_buffer->nr_pages_to_update = 0;
|
|
|
put_online_cpus();
|