Re: [patch 1/3] performance counters: core code

Paul Mackerras
2008-12-05T10:55:36Z

Thomas Gleixner writes:

> +static void
> +perf_install_in_context(struct perf_counter_context *ctx,
> + struct perf_counter *counter,
> + int cpu)
> +{
> + struct task_struct *task = ctx->task;
> +

[...]

> + if (task) {
> + task_oncpu_function_call(task, __perf_install_in_context,
> + counter);
> + } else {
> + smp_call_function_single(cpu, __perf_install_in_context,
> + counter, 1);
> + }

What happens if we send an IPI to the cpu where the task is running,
but by the time the IPI arrives, the task has been migrated to another
cpu and is now running there? Do you chase after it and send another
IPI to its new cpu, or is there some reason why it can't migrate?
If it's the former, where is that code? I haven't seen it so far (at
least, task_oncpu_function_call doesn't seem to do it).

Paul.