On Mon, Oct 12, 2015 at 09:02:42AM +0000, Kaixu Xia wrote:
> --- a/include/linux/perf_event.h
> +++ b/include/linux/perf_event.h
> @@ -483,6 +483,8 @@ struct perf_event {
>       perf_overflow_handler_t         overflow_handler;
>       void                            *overflow_handler_context;
>  
> +     atomic_t                        *sample_disable;
> +
>  #ifdef CONFIG_EVENT_TRACING
>       struct trace_event_call         *tp_event;
>       struct event_filter             *filter;

> diff --git a/kernel/events/core.c b/kernel/events/core.c
> index b11756f..f6ef45c 100644
> --- a/kernel/events/core.c
> +++ b/kernel/events/core.c
> @@ -6337,6 +6337,9 @@ static int __perf_event_overflow(struct perf_event 
> *event,
>               irq_work_queue(&event->pending);
>       }
>  
> +     if ((event->sample_disable) && atomic_read(event->sample_disable))
> +             return ret;
> +
>       if (event->overflow_handler)
>               event->overflow_handler(event, data, regs);
>       else

Try and guarantee sample_disable lives in the same cacheline as
overflow_handler.

I think we should at the very least replace the kzalloc() currently used
with a cacheline aligned alloc, and check the structure layout to verify
these two do in fact share a cacheline.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to