perf: Optimize perf_output_*() by avoiding local_xchg()
Since the x86 XCHG ins implies LOCK, avoid the use by using a sequence count instead. Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> LKML-Reference: <new-submission> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
Родитель
fa5881514e
Коммит
6d1acfd5c6
|
@ -804,6 +804,7 @@ struct perf_output_handle {
|
|||
struct perf_mmap_data *data;
|
||||
unsigned long head;
|
||||
unsigned long offset;
|
||||
unsigned long wakeup;
|
||||
int nmi;
|
||||
int sample;
|
||||
};
|
||||
|
|
|
@ -2917,6 +2917,7 @@ static void perf_output_get_handle(struct perf_output_handle *handle)
|
|||
|
||||
preempt_disable();
|
||||
local_inc(&data->nest);
|
||||
handle->wakeup = local_read(&data->wakeup);
|
||||
}
|
||||
|
||||
static void perf_output_put_handle(struct perf_output_handle *handle)
|
||||
|
@ -2950,7 +2951,7 @@ again:
|
|||
goto again;
|
||||
}
|
||||
|
||||
if (local_xchg(&data->wakeup, 0))
|
||||
if (handle->wakeup != local_read(&data->wakeup))
|
||||
perf_output_wakeup(handle);
|
||||
|
||||
preempt_enable();
|
||||
|
|
Загрузка…
Ссылка в новой задаче