Loading include/linux/perf_event.h +1 −0 Original line number Diff line number Diff line Loading @@ -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; }; Loading kernel/perf_event.c +2 −1 Original line number Diff line number Diff line Loading @@ -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) Loading Loading @@ -2950,7 +2951,7 @@ static void perf_output_put_handle(struct perf_output_handle *handle) goto again; } if (local_xchg(&data->wakeup, 0)) if (handle->wakeup != local_read(&data->wakeup)) perf_output_wakeup(handle); preempt_enable(); Loading Loading
include/linux/perf_event.h +1 −0 Original line number Diff line number Diff line Loading @@ -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; }; Loading
kernel/perf_event.c +2 −1 Original line number Diff line number Diff line Loading @@ -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) Loading Loading @@ -2950,7 +2951,7 @@ static void perf_output_put_handle(struct perf_output_handle *handle) goto again; } if (local_xchg(&data->wakeup, 0)) if (handle->wakeup != local_read(&data->wakeup)) perf_output_wakeup(handle); preempt_enable(); Loading