Re: [PATCH 02/22 -v7] Add basic support for gcc profiler instrumentation

Peter Zijlstra
2008-01-30T08:48:19Z

On Tue, 2008-01-29 at 22:15 -0500, Steven Rostedt wrote:

> +int register_mcount_function(struct mcount_ops *ops)
> +{
> + unsigned long flags;
> +
> + spin_lock_irqsave(&mcount_func_lock, flags);
> + ops->next = mcount_list;
> + /* must have next seen before we update the list pointer */
> + smp_wmb();

That comment does not explain which race it closes; this is esp
important as there is no paired barrier to give hints.

> + mcount_list = ops;
> + /*
> + * For one func, simply call it directly.
> + * For more than one func, call the chain.
> + */
> + if (ops->next == &mcount_list_end)
> + mcount_trace_function = ops->func;
> + else
> + mcount_trace_function = mcount_list_func;
> + spin_unlock_irqrestore(&mcount_func_lock, flags);
> +
> + return 0;
> +}